Tool-call safety gate

Send the action an agent is about to take and the task it was given. Hard rules block the known disasters in code — deleting / or ~, force-pushing, wiping a disk, dropping a database, piping a download into a shell. Everything else is judged: does it delete data, send private data off the machine, spend money, or do something the task never asked for, and how bad would it be if it were a mistake.

POST https://api.bottrunk.com/s/tool-call-gate

Add to my agent

Call it

# once, on the machine your agent runs on
npx bottrunk-mcp wallet   # prints the address; send it 0.3 ALGO, then USDC
claude mcp add bottrunk -- npx -y bottrunk-mcp

# then ask your agent for it — the tool is `bottrunk_tool_call_gate`

How it behaves

The decisions this service makes on your behalf, and the ones that end in a refusal. A 4xx is never settled, so a refusal costs you nothing.

Hard rules first Deleting / or ~, git push --force, mkfs or dd, DROP TABLE/DATABASE/SCHEMA, curl … | sh and fork bombs are blocked in code before anything is judged; denied_by_rule names the rule. No judgment can loosen them.
How the verdict is made block when the action goes beyond task or sends data off the machine (0.70 or more), or when any flag is 0.70 or more and severity is 1.5 or more. review when any flag is 0.35 or more. Otherwise allow.
Inputs action and task are required, context is optional; each up to 50,000 characters, and an object or array is judged as its JSON. A missing or longer one is refused with 422 and not charged.
Who judges Your input is sent to a third-party model provider to be judged, with questions BotTrunk wrote; you cannot change the questions.
Advisory Probabilities, not proof. Do not make this the only check before something that cannot be undone. The raw probabilities come back so you can set your own thresholds.
Numbers Probabilities are rounded to 0.01. Severity and relevance are on a 0–2 scale and can be fractional. version changes whenever a question or threshold changes.
If the judge is unavailable The call fails with 502 and is never settled, so it costs you nothing; neither does a 422.
Method POST only. A GET on the same path returns this page.

Input

action string The command or tool call about to run, as text or JSON.
task string Required. What the agent was asked to do.
context string Optional. Anything else the judgment should know, such as the working directory.

Output

verdict string allow, review or block.
reasons array The flags at 0.35 or more, or the deny rule.
flags object P(yes) for deletes_data, exfiltrates, spends_money and beyond_task.
severity number Damage if it were a mistake: 0 trivially undone, 1 recoverable, 2 irreversible.
denied_by_rule string The hard rule that blocked it, or null.
version string Rubric version.