How it works
An agent that proposes an action and also judges it safe can be wrong in both places for the same reason. Joltrin keeps the two apart. The agent emits intent. The check runs outside the agent's context window, against the steps the server has actually recorded and the runbook's rules. The check is Go code, so it gives the same answer for the same trace and rules, and the system that performs the action decides whether to wait for it.
Order matters most where an action is hard to undo: dropping a database, changing infrastructure or network topology, moving money, rotating credentials. In those cases the wrong order is the failure, and a runbook can state the right order once and check it on every call. The flow is: the agent proposes a step, Joltrin checks it against the recorded trace and the rules, a missing prerequisite comes back as a structured block, the agent runs the steps it names or stops and asks, and the integrating system lets the action through only after the check passes.
Experience the verification barrier live in your browser:
Click through the exact verify runbook gating MCP and A2A agents. Try dropping a database before taking a backup.
Launch Agents Barrier Demo โ
Test it with your own AI agent
Any agent that supports MCP can use the barrier. This downloads a binary of about 6 MB, checks its checksum, and registers it with Claude Code, Codex, and the Gemini CLI, whichever are installed. No Go needed.
curl -fsSL https://raw.githubusercontent.com/SharedCode/joltrin/master/scripts/install.sh | sh
On Windows, in PowerShell:
irm https://raw.githubusercontent.com/SharedCode/joltrin/master/scripts/install.ps1 | iex
Or in Command Prompt (cmd.exe):
powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://raw.githubusercontent.com/SharedCode/joltrin/master/scripts/install.ps1 | iex"
Then ask it: "Use the joltrin tools to run drop_prod_db on workflow db-maintenance with trace id t1." The server refuses until take_backup and validate_backup have run in that trace, whatever the agent claims. Recorded runs with real agents.
Or drive it from LangGraph
A StateGraph with an agent node, a ToolNode over the server's MCP tools, and a loop between them. The agent tries drop_prod_db, reads the block, runs the steps it names, and retries. With ANTHROPIC_API_KEY set, a Claude model makes the calls. Without it, a small scripted policy stands in so the example runs offline and in CI. The policy is not a language model.
agent -> execute_step drop_prod_db
barrier -> BLOCKED missing backup_validated, run first: ['validate_backup']
agent -> execute_step validate_backup
barrier -> BLOCKED missing backup_taken, run first: ['take_backup']
agent -> execute_step take_backup
barrier -> ALLOWED
agent -> execute_step validate_backup
barrier -> ALLOWED
agent -> execute_step drop_prod_db
barrier -> ALLOWED
That output is from a run of examples/langgraph_agent/agent.py with the scripted policy. Source and setup.