TRY THE EXECUTION BOUNDARY
Choose an action.
See what CTRLRun stops.
Your model chooses the action. CTRLRun decides whether it may execute.
Pick one of 48 domains, then pick the moment it goes wrong: an action the agent was never allowed to take, an approval the agent edited, a retry of something that already happened, a reply that never came back. You get the decision, the check that produced it, and the line your own code would see.
No login. No API key. No setup. Nothing here executes.
Every scenario has its own link, so you can send someone straight to the one that matters.
THIS PAGE IS AN ILLUSTRATION
Then go and break the real thing.
Nothing on this page runs CTRLRun. It draws the decisions so you can see where they land in a domain you recognise. One page further, real Python and the released wheel load into your tab, and every refusal you read there is the library’s own.
An illustration of the checks, with example rules that are not industry defaults. No code runs, no request is sent.
Real Python, the released ctrlrun wheel, in your browser. Change a refund after approving it and read the exception the library raises. Run it in your browser →
WHERE TO GO NEXT
From the demo to your own code.
Apache-2.0 · Runs in your environment
How it works
Where CTRLRun sits, what it checks, and what it deliberately does not do. The plain-English version, then the architecture.
Protect your first action
pip install ctrlrun, then wrap the function that causes the effect. The quickstart adds your policy, identity and approval flow.
Concepts behind each refusal
Approval binding, effect keys, and outcomes and AMBIGUOUS: the three the demo leans on hardest.
A worked application
The medical affairs workbench puts the same kernel under a document release instead of a payment.
Not sure where the controls belong in your architecture? A focused review maps which of your agent’s actions can run automatically, which need a person, and which must stop until the outcome is known.
Get an execution-safety review →