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。 以下為已儲存的摘錄。
An AI agent that investigates incidents in a running system, finds the root cause with
evidence and proposes a fix. Nothing is changed until a person approves it; after the
fix, it checks that the system has actually recovered.
It runs against a small online shop built for the purpose: four microservices with
real traffic, logs and metrics. Faults are injected for real (a deploy with a bug, a
bad config change, a database lock, a provider going slow), so every incident has a
known right answer to grade the agent against.檢視完整 README ↗An AI agent that investigates incidents in a running system, finds the root cause with evidence and proposes a fix. Nothing is changed until a person approves it; after the fix, it checks that the system has actually recovered.
It runs against a small online shop built for the purpose: four microservices with real traffic, logs and metrics. Faults are injected for real (a deploy with a bug, a bad config change, a database lock, a provider going slow), so every incident has a known right answer to grade the agent against.
Try the demo · Open in Codespaces · Run it locally
The demo replays real investigations recorded from the agent: you pick a fault, watch the agent work and take the decision yourself. To run the agent live, use Codespaces or your own machine.
Each fault in the catalogue (13 types, 23 variants) is injected, investigated and graded against the injector's record of what really happened. A diagnosis counts as right when the proposed action would actually fix the incident.
| Model | Right action | Right service | Right commit | Decoy commit blamed |
|---|---|---|---|---|
| Claude Sonnet (via Claude Code) | 23 / 23 | 23 / 23 | 23 / 23 | 0 |
make eval runs the catalogue and prints this table, per difficulty and per split
(dev variants were used while building the agent, exam variants were held back).
flowchart LR
subgraph shop [The shop]
S[shop] --> U[users] & I[inventory] & P[payments]
T[traffic] --> S
end
INJ[Injector] -- faults --> shop
shop -- metrics --> PROM[Prometheus]
shop -- logs --> LOKI[Loki]
WEB[Web console] -- start / approve --> API[Agent API]
API -- queue --> W[Agent worker]
W -- read-only tools --> PROM & LOKI & GIT[Company repo] & PG[(Postgres)] & RAG[(Docs index)]
W -- events --> API -- live stream --> WEB
W -- approved action --> INJ
| Part | Built with |
|---|---|
| The shop and the injector | Python, FastAPI, Postgres, Redis, Docker Compose |
| Observability | Prometheus, Loki, Alloy, Grafana |
| The agent | LangGraph, OpenAI or Claude, pgvector, Postgres checkpoints |
| Agent API | FastAPI, a Redis queue, Redis Streams and Server-Sent Events |
| Web console | Next.js, React, Tailwind |
| Evals | Fault catalogue with ground truth, run end to end |
make rag-eval) rather than by default.Running the full catalogue end to end surfaced issues that unit tests would not have:
config/users.env (commit 5eb28d2) instead of the bare SHA; the action was right but
could not be executed. The executor now finds the SHA in the text.Requirements: uv, Docker with the compose plugin, Node 24
and make. The synthetic data lives in a second repository, next to this one:
git clone https://github.com/antoniolorenz01/Incilot
git clone https://github.com/antoniolorenz01/incilot-data
cd Incilot
echo "OPENAI_API_KEY=sk-..." >> .env # optional: dry runs need no key
echo "OPENAI_MODEL=gpt-6-luna" >> .env
make install && (cd web && npm ci)
make up # the shop, observability and the agent (about 2 GB of RAM)
make web # the console at http://localhost:3001
With a Claude subscription instead of an OpenAI key, the agent can run on Claude Code:
set LLM_PROVIDER=claude-code in .env and keep make claude-bridge running in
another terminal.
To give someone temporary access from your machine, start the console with the demo's limits on and open a public tunnel (free, no account needed):
DEMO_LIMITS=on make web
cloudflared tunnel --url http://localhost:3001
Deploying the recorded demo (free, on Vercel) or the live one (on a server) is described in infra/deploy.md.
sim/ The shop (microservices, traffic, logs, metrics) and the fault injector
agent/ The agent: tools, document search, API and worker
evals/ Runs the catalogue, grades the agent and records demo runs
web/ The web console (Next.js)
docs/ The shop's own documentation, which the agent searches
infra/ Postgres, Prometheus, Loki/Alloy, Grafana, Caddy and the deploy guide
compose.yaml The whole environment; compose.prod.yaml adds the public setup
The synthetic data (the company's Git history, the fault catalogue with its ground truth and the runbooks) lives in incilot-data.
make check # lint and tests
make fmt # auto-format
make up / down # start or stop everything (make clean also deletes the data)
make logs # follow the logs
make smoke # inject each fault, check its symptom shows up, recover
make investigate # run the agent against whatever is happening right now
make eval # run the catalogue and grade the agent (one investigation per variant)
make rag-eval # measure the document search configurations
make record # record investigations for the demo
make web # the console at http://localhost:3001
| Service | What it does | Data |
|---|---|---|
shop | Customer entry point: catalogue and orders; orchestrates the rest | Postgres + Redis |
users | User profiles | Postgres + Redis |
inventory | Catalogue, stock and reservations (restocks every 30 s) | Postgres |
payments | Charges against a simulated provider (about 3 % declined) | Postgres |
traffic | Virtual shoppers that buy non-stop | — |
An order: shop checks the user, looks up the product, reserves stock, charges and
confirms. If the charge fails, the reservation is released. Every service logs JSON
with a request_id that travels between services and exposes metrics on /metrics.
| Tool | URL | What for |
|---|---|---|
| Shop | http://localhost:8000/docs | The shop's API |
| Injector | http://localhost:8100/docs | Inject and recover faults |
| Agent | http://localhost:8200/docs | Start, follow and approve investigations |
| Prometheus | http://localhost:9090 | Metrics |
| Loki | http://localhost:3100 | Logs ({service="shop"}) |
| Grafana | http://localhost:3000 | Explore metrics and logs |