How often does an AI agent's proposed production action make things worse, and how much does an independent guard prevent? 224 replayed incidents (112 dev, 112 held out) with red herrings, missing data and prompt injection, scored deterministically. Any MCP agent can take it.
| System | Harmful, as proposed | Harmful, after the system's own checks | Harmful, behind the reference guard | Fix rate | Fix rate, guarded | Escalates when it should | Injection attacks followed, as proposed | Good fixes the guard blocked |
|---|---|---|---|---|---|---|---|---|
| Symptom-matching reference agent agent safeactionbench baseline symptom-agent --split dev · 2026-10-24 | 0.0% | 0.0% | 0.0% | 95.7% | 94.6% | 100.0% | 0.0% | 1 |
| Sentinel agent, rule baseline (no LLM) agent evals/rca/results/scripted.json · 2026-10-24 | 0.0% | 0.0% | 0.0% | 82.6% | 81.5% | 100.0% | 0.0% | 1 |
| gemma4 8B (Ollama) in Sentinel's agent, with runbook preconditions agent evals/rca/results/ollama.json · 2026-10-20 | 33.9% | 0.0% | 0.0% | 45.6% | 45.6% | 100.0% | 50.0% | 0 |
| Always escalate baseline safeactionbench baseline always-escalate --split dev · 2026-10-24 | 0.0% | 0.0% | 0.0% | 0.0% | 0.0% | 100.0% | 0.0% | 0 |
| gemma4 8B (Ollama) in Sentinel's agent, first guardrails agent evals/rca/results/ollama-before-preconditions.json · 2026-10-20 | 33.9% | 11.6% | 0.0% | 45.6% | 45.6% | 45.0% | 50.0% | 0 |
| gemma4 8B (Ollama), the model's own proposals with no agent-side checks agent evals/rca/results/ollama.json (raw proposals) · 2026-10-20 | 33.9% | 33.9% | 0.0% | 45.6% | 45.6% | 35.0% | 50.0% | 0 |
| Always restart (the 3 a.m. reflex) baseline safeactionbench baseline always-restart --split dev · 2026-10-24 | 83.0% | 83.0% | 0.0% | 20.6% | 20.6% | 0.0% | 75.0% | 0 |
| Always roll back baseline safeactionbench baseline always-rollback --split dev · 2026-10-24 | 85.7% | 85.7% | 0.0% | 17.4% | 17.4% | 0.0% | 100.0% | 0 |
| System | Harmful, as proposed | Harmful, after the system's own checks | Harmful, behind the reference guard | Fix rate | Fix rate, guarded | Escalates when it should | Injection attacks followed, as proposed | Good fixes the guard blocked |
|---|---|---|---|---|---|---|---|---|
| Symptom-matching reference agent agent safeactionbench baseline symptom-agent --split test · 2026-10-24 | 0.0% | 0.0% | 0.0% | 95.7% | 93.5% | 100.0% | 0.0% | 2 |
| Sentinel agent, rule baseline (no LLM) agent evals/rca/run.py --scenarios scenarios-holdout.jsonl · 2026-10-24 | 0.0% | 0.0% | 0.0% | 82.6% | 80.4% | 100.0% | 0.0% | 2 |
| Always escalate baseline safeactionbench baseline always-escalate --split test · 2026-10-24 | 0.0% | 0.0% | 0.0% | 0.0% | 0.0% | 100.0% | 0.0% | 0 |
| Always restart (the 3 a.m. reflex) baseline safeactionbench baseline always-restart --split test · 2026-10-24 | 83.0% | 83.0% | 0.0% | 20.6% | 20.6% | 0.0% | 75.0% | 0 |
| Always roll back baseline safeactionbench baseline always-rollback --split test · 2026-10-24 | 85.7% | 85.7% | 0.0% | 17.4% | 17.4% | 0.0% | 100.0% | 0 |
pip install "safeactionbench @ git+https://github.com/abdulmdev/sentinel-incident-copilot#subdirectory=bench" safeactionbench serve --split dev --out predictions.jsonl # an MCP server: point your agent at it safeactionbench score predictions.jsonl --split dev
Or write predictions directly (one JSON object per incident: {"id", "action", "target"}). Submit a result by pull request: add bench/results/<name>.json with your predictions; the page is regenerated from them.