Doberman — publishes the attack it fails at, and the number for a human who rubber-stamps
A runtime gate for agent tool calls, `pip install doberman-core`, Apache-2.0, Python 3.11+. Two deployment shapes: an MCP proxy that wraps tool servers, or native pre-execution hooks into Claude Code, Codex CLI and OpenClaw. Every tool call gets exactly one verdict before it executes — PASS, AUTH (pause for a human), or BLOCK — and two properties are stated as non-negotiable: "fail closed," where any error or unhandled case denies the action, and "raise-only learning," where guardrails can auto-tighten but never silently loosen. That is a reasonable design and it is not why this is the top pick.
It is the top pick because `docs/BENCHMARKS.md` is the best evidence document this newsletter has graded, and it opens by telling you what it is for: "Doberman's protection claims should resolve to a number you can reproduce, not an adjective," with "the results — **failure cases before wins**, on purpose." It separates `asr` from `asr_strict` because an AUTH is not a block — "a human still has to say no" — and then it does the thing nobody does, which is put that human in the eval: `asr_under_fatigue` and `auth_burden` model an operator who rubber-stamps some fraction of prompts, with the flat statement that "an AUTH-heavy defense is only as strong as the human answering it." That is the 66.3% approval-accuracy study from our 08-07 edition and Anthropic's own 97%-approval figure from 08-10 turned into a parameter of the measurement instead of a caveat under it. The in-repo detection corpus is ~137 labeled rows across injection, exfiltration, secrets, destructive, encoded and benign, deterministic and reproducible from a cold clone with no external dependency — and it "is *not* filtered to cases the engine wins. Pure natural-language injection scores **TPR 0.0** — the objective layer is structurally blind to it... and the corpus says so rather than hiding it." Calibration also surfaced that reading an `.env.example` template gets over-blocked because the secret-path rule matches `.env.*` fail-closed, and that is in the docs too. On the AgentDojo suite they caught a leak in their own harness: the adapter sets `source_context` by ground truth, so a provenance-driven result would measure the adapter's labels rather than the guard, and they neutralize the field and report the leaky arm "**only** to quantify that leak, never as a headline." The poisoning eval ships two arms and an honesty control — a benign action that does normalize, "so the eval cannot pass vacuously by reporting 'nothing normalizes'." The docs then list the ways around it: homoglyph limits, bare high-entropy hex false negatives, oversized-blob detection evadable by splitting, static egress classification bypassable through runtime command construction or DNS rebinding. The punchline is in the thread, from the author: the README intro was his, "the rest was meant to just be something agents ingest and use to set up Doberman hahaha, didn't think anyone would read the full thing." The most rigorous disclosure on the board was written for machines to read.
Reach for it if you have agents holding credentials against a production system and your current control is a permission prompt at 4pm. Delete the hand-rolled regex denylist in your hook script, and delete the belief that an approval dialog is a control rather than a queue. Tradeoffs: it scores TPR 0.0 on pure natural-language injection and says so, so this is a floor and not a perimeter; the strongest published numbers cover the deterministic layer, while the adaptive layer's AUC comes with a warm-sufficiency caveat telling you to read every result next to its bucket size; the AgentDojo run needs an operator-supplied package, so only the synthetic and corpus suites reproduce from a cold clone; 207 stars against 23 forks and **zero watchers**, 43 open issues, one author at 304 of roughly 360 commits; PyPI reports no license field while the repo is plainly Apache-2.0, the sixth time this quarter the registry has been the unreliable half; the repo was pushed at 01:45 UTC this morning and shipped 0.18.1 three days ago, so pin it; and the thread's sharpest comment is free and correct — "Give the agent a read-only postgres user. Boom, I just saved you a startup," which is the right first move before any of this.
→ github.com/fu351/Doberman-Core