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를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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 |