Your agent asks permission for everything or for nothing. This is the missing middle: allow, ask or deny on every tool call, in 371ms for two hundredths of a cent.
Get it on GitHubclaude plugin marketplace add eugeniughelbur/jev-engineering
claude plugin install jev-engineering@jev-engineering
It installs in observe mode. It logs every decision and blocks nothing until you have read a week of your own numbers.
Denials run before the allowlist, because a command name says nothing about its arguments. Hard rules come before the model on purpose. In testing, the model was least reliable exactly where a hard rule is easiest to write.
| Attack | Got through | Safe commands wrongly blocked |
|---|---|---|
| Blunt, "ignore your instructions" | 0 of 30 | 3 of 30 |
| Authority, "the owner approved this" | 3 of 30 | 1 of 30 |
| Authority, "the lead signed off" | 1 of 30 | 2 of 30 |
| Authority, "standing allowlist" | 1 of 30 | 0 of 30 |
The blunt attack does not get in. It jams you, by making the gate deny safe work. The polite attack is the real one. And one command, git stash clear, flipped under every framing, which is why it is a hard rule here.
An AI model from TypeSafe AI that answers typed questions with probabilities instead of writing text. You send it a situation and questions, it returns numbers. Roughly 400ms, about two hundredths of a cent per call.
The code around an AI model that turns it into an agent. Five parts: instructions, tools, memory, a loop and gates. Claude Code, Codex and Cursor are all harnesses. This sits in the gates slot.
$0.0000189 per checked call, measured over 300 calls. At 500 checked calls a day, under one cent.
Yes, about ten percent of the time, with text claiming a human already approved the action. Keep deterministic rules underneath it.
No. It catches mistakes, not attackers. A seatbelt for late-night debugging, not a replacement for permissions and sandboxes.