AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Your AI engineering team for every codebase.
Paste a GitHub repository. Nine specialised agents read it alongside
deterministic security tooling, argue with each other about what they find,
and return a report where every claim names a file, a line and a confidence.
No sign-up. No install. No API key.檢視完整 README ↗Your AI engineering team for every codebase.
Paste a GitHub repository. Nine specialised agents read it alongside deterministic security tooling, argue with each other about what they find, and return a report where every claim names a file, a line and a confidence.
No sign-up. No install. No API key.
GitHub URL
↓ in-memory ingestion, nothing written to disk, nothing executed
Indexing module graph · structural metrics · dependency manifests
↓
Eight agents security · reliability · architecture · testing
in parallel dependencies · performance · AI-code · maintainability
↓
Aggregation findings describing the same issue are merged, and
corroboration raises confidence instead of the count
↓
Validator looks for reasons each finding is wrong, and records
the exchange as a debate transcript
↓
Report score · root causes · ordered plan · architecture map
· SARIF
Deterministic first, AI second. Static analysis finds what is provably there; a model is good at judging whether it matters. With no AI provider configured Sentinel still runs a real analysis — the agents fall back to their static paths, and the report's "What ran" panel says exactly which analyzers produced the findings and which were unavailable.
Nothing to install — the live app is at https://ai-software-health-audit.vercel.app/.
To run it yourself:
npm install
npm run dev
Open http://localhost:3000. No database, no API key, no Redis. Paste a public repository, or run the bundled demo.
npm run audit -- . # this checkout
npm run audit -- . --sarif out.sarif # for code scanning
npm run audit -- . --fail-on critical # exit 1 on a critical finding
The CLI runs the exact same pipeline as the web product — same rules, same
validator, same score — so a green CI run and a green report mean the same
thing. .github/workflows/sentinel.yml is Sentinel auditing itself and
publishing to GitHub code scanning; copy it into your own repository.
Every finding answers five questions, and refuses to be reported without them:
| What | A concrete statement about a specific line |
| Why it matters | The consequence, not a severity label |
| Evidence | What the analyzer saw, including what argued against it |
| Impact path | Where the control breaks down, step by step |
| How to fix it | Specific to this code, with a patch where one can be generated safely |
Plus a confidence and a validation status — confirmed, likely,
potential or dismissed — and the debate that produced them.
The validator's job is not to agree. It looks for the reason each finding is wrong and downgrades it when it holds:
Findings that survive carry a higher confidence. Findings that do not are kept in the report, marked dismissed, so you can see what was ruled out and disagree.
| Analyzer | What it does |
|---|---|
| Secret scanner | Vendor-format patterns plus a Shannon-entropy pass; placeholder-aware, so AKIAIOSFODNN7EXAMPLE is not reported as a live key |
| Pattern rules | ~40 rules across injection, configuration, reliability, performance and integration quality, with multi-line matching for calls that wrap |
| Module graph | Import resolution, cycle detection (Tarjan), reachability, dead exports, layering violations |
| Structural metrics | Cyclomatic-style complexity, nesting depth, function length, cross-file duplication fingerprinting |
| Dependency advisories | Live OSV.dev lookup, with a bundled snapshot so the analysis still works offline |
| AI reasoning | Optional. Enriches findings the static pass already located, and adjudicates the validator's hardest calls |
Sentinel does not claim to detect AI-generated code — no tool can do that reliably, and pretending otherwise would undermine everything else in the report. What this agent measures is a cluster of patterns that appear when code is produced faster than it is integrated: imports that resolve to nothing, duplicated blocks, placeholder implementations, exports nobody consumes. Every string it emits says pattern, never generated.
Security 25% · Reliability 15% · Architecture 15% · Testing 10%
Dependencies 10% · Performance 10% · Maintainability 10% · AI code 5%
Each category starts at 100 and loses points per finding, weighted by severity and by how confident the validator was — a dismissed finding costs nothing. Two properties matter:
It is Sentinel's own model, not an industry standard, and the interface says so wherever the number appears. The weights are configurable.
Static analysis is only usable if you can tell it about your fixtures. Two mechanisms, both conventional:
# .sentinelignore — gitignore-style globs, optionally scoped to rules
tests/fixtures/**
src/demo/*.ts sec.secret.*
!tests/fixtures/real-config.ts
// sentinel-disable-next-line sec.sql-injection
await db.query(`SELECT * FROM ${table}`);
Suppressed findings are counted and reported, never silently dropped. A report that hides how much it was told to ignore is not an honest report.
The public instance runs on Vercel at https://ai-software-health-audit.vercel.app/.
A serverless host runs each route as its own function with its own memory, so
a scan written by POST /api/scans is invisible to the request that renders
/scan/<id> a moment later. Rather than 404, Sentinel detects this and
switches how a scan is carried:
What that mode honestly cannot do is outlive the request: no history, no share
links, and a dropped connection means running the analysis again. All three
say so in the interface rather than failing quietly. GET /api/health reports
"ephemeral": true when this is in effect. Set DATABASE_URL to turn it off.
Everything is optional; GET /api/health reports what is on.
| Variable | Unset | Set |
|---|---|---|
DATABASE_URL | In-process store, mirrored to .sentinel/ in dev | PostgreSQL (npm i pg; schema in db/migrations, model in prisma/schema.prisma) |
REDIS_URL | Scans run in the web process | Dispatched to npm run worker (npm i bullmq ioredis) |
AI_PROVIDER + AI_API_KEY + AI_MODEL | Deterministic analysis only | Model enrichment and validator adjudication |
GITHUB_TOKEN | 60 API requests/hour | 5,000/hour |
SENTINEL_SECRET | Sessions reset on restart | Sessions persist |
SENTINEL_DEMO_ONLY | Live repositories allowed | Demo only — useful for a public instance |
See .env.example for the full list, and SECURITY.md for
the threat model. Read that one before deploying this publicly.
src/
agents/ one module per agent, all behind a single interface
orchestrator/ ingests, wires the pipeline to the event stream, persists
validator/ challenges findings and records the debate
lib/
analysis/ pipeline · index · rules · graph · metrics · scoring · roadmap
security/ secrets · dependency advisories
ai/ provider abstraction (Anthropic / OpenAI / Google / compatible)
db/ Store port with in-process and PostgreSQL adapters
events/ sequenced event log behind SSE
queue/ in-process and Redis drivers
app/ routes, API, pages
components/ landing · scan · report · charts · ui
scripts/audit.ts CLI over the same pipeline
Adding an agent means implementing one interface and adding it to the registry. Adding a rule means adding an object to a table. Neither touches the orchestrator.
Progress is a sequenced, durable event log streamed over SSE. A client that
reconnects sends Last-Event-ID and replays from where it left off, so a
dropped connection loses nothing — and a client that connects mid-scan gets
the whole run, including events still buffered in memory. There is a polling
fallback for environments that buffer streams.
npm run dev # development server
npm run verify # typecheck + lint + test + build
npm test # 183 tests
npm run audit -- . # audit this repository
Tests cover URL parsing, archive safety against hostile inputs, secret detection and redaction, deduplication and confidence combination, the scoring model, suppressions, the live-stream reducer, API route handlers, SARIF export and an end-to-end scan of the bundled sample repository.
The bundled sample repository (acme-commerce) is a real, small TypeScript
codebase with deliberate defects, and the demo runs the same pipeline over
it rather than replaying canned results. Every finding, score, root cause
and architecture node in demo mode is derived, which is the only way the demo
stays consistent as the engine changes. It is labelled DEMO DATA everywhere
it appears.
Sentinel is an analysis aid, not a substitute for a security review. It will never tell you your code is safe — when nothing turns up, it says no high-confidence vulnerabilities were identified by the current analysis, because that is a different statement and the difference matters.
MIT.