gate.cat: a deterministic, fail-closed veto that stops AI coding agents before rm -rf
AI coding agents now run real shell commands. Most "guardrails" log the damage after the fact. gate.cat vetoes the execution itself — before the shell sees it. What it does It blocks irreversible shell comman
AI coding agents now run real shell commands. Most "guardrails" log the damage after the fact. gate.cat vetoes the execution itself — before the shell sees it.
What it does
It blocks irreversible shell commands (rm -rf, DROP TABLE, terraform destroy, secret exfiltration via scp/curl) before they execute. The check is deterministic string + path analysis plus an independent exec analyzer — no model call in the veto path, so a prompt injection can't talk the gate into allowing something. Fail-closed: anything it can't parse becomes a block, never a silent allow.
Three ways to use it
-
Claude Code hook (the strongest — enforcement runs in the harness, outside the model's control flow):
pip install gate.cat, then addgatecat-hookto.claude/settings.jsonwith matcherBash|Write|Edit. -
Gated shell for any CLI agent (Codex, aider — anything honoring
$SHELL): usegatecat-shell. -
Local proxy for anything speaking the OpenAI API (Ollama, vLLM, LM Studio, OpenRouter): your agent changes one
base_url.
Measured, not claimed
Every number below has a row in FACTS.md in the repo, pinned to a reproducible artifact:
- 1,085,159 unique real agent commands (5 public datasets) replayed through the full 6-stage gate: 0 real misses after adjudication.
- the reproducible bypass suite catches 178/178 danger shapes it claims — and prints its own known gap (runtime assembly) plus 1 benign false-block in 129 cases. We publish the misses instead of hiding them.
- 71 default policy walls (73 presets incl. opt-in), ~0.6% intervention rate on real commands.
Honest limit
The gate is certain only about what it blocks. An unmatched action is unchecked, not safe. It's a wall in front of known-dangerous shapes, not a proof of safety — use it with your sandbox, not instead of one.
Free forever, Apache-2.0, zero-dependency core.
- Install:
pip install gate.cat - Repo: https://github.com/BGMLAI/gate.cat
- Site: https://gate.cat
What I'd genuinely like feedback on: does publishing our own bypass map and a documented false-block build more trust than a clean number would? That was the hardest design call.
Originally published by Dev.to Security. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.