Playground
SIMULATED FLEET Deterministic, in your browser. The agents and their calls are scripted; every decision is the real PRAE kernel judging the call against the fleet’s policy. Nothing is executed, and nothing here touches your own agents.
Agents remain autonomous. Execution does not.
- AGENTS
- 250
- COHORTS
- 4
- RUNNING
- 160
- HELD
- 46
- BLOCKED
- 28
- STEERED
- 16
- CALLS JUDGED
- 250
Each square is one agent, in an order that does not move. Open a cohort to inspect any of its agents.
ONE EXECUTION, INSIDE THE FLEET
Ticket Resolution Agent, in Support, is working a refund ticket. A note in the ticket will take it to Production Customer Data.
Or select any of the 250 agents in the fleet.
CONTROL → PROVE → SCALE
One execution is interesting.
Governing hundreds of executions is the product.
Live fleet steering signs one constraint for a cohort of running agents, and each agent’s own gate adopts it mid-session. Status: in development.
UNDER THE HOOD
The policy kernel, editable
The decisions above come from this evaluator. Pick an agent surface, edit the pack, and watch the strongest rule win.
SIMULATED RUNTIME SCENARIO Explore how PRAE evaluates this agent surface. Deterministic and in your browser: nothing here connects to or intercepts your own agent, application, Cursor, Claude Code, Windsurf or Copilot.
PRAE in Custom / homegrown agent today. Where it plugs in today: agents in Node or TypeScript that call the gate from their own tool loop (the SDK), and file access through PRAE’s MCP server. Other runtimes and cloud agent services are on the roadmap. PRAE does not scan repositories or discover agents.
How PRAE works with Custom / homegrown agent →The pack
The pack your application loads for its agent: rules over the app’s own tools and APIs, judged by judge() before each runs. Edit it. Unknown fields are errors here exactly as they are at load time, so a typo fails in front of you rather than loading clean and enforcing nothing.
Context and proposed action
- Surface
- Custom / homegrown agent
- Application
- acme/billing-portal · support assistant
- Agent runtime
- your framework and model, unchanged
- PRAE
- prae-gate judge() before each tool runs · no model, no proxy
- Tools
- lookup_order · issue_refund · export_customers · delete_account
Read order #8841 to answer the customer. Path: judge() in your app’s tool loop.
- AGENT INTENTCustom / homegrown agentRead order #8841 to answer the customer.
- TOOL CALLlookup_orderno capability
- PRAE · EXECUTION BOUNDARYPRAE local gateSDK · judge() in the tool loop
- POLICY EVALUATIONno rule decides itacme-support-app 1.0.0 · 0 of 3 rules matched
- DECISIONALLOWwithin policy
- EXECUTIONEXECUTESthe tool runs
PRAE decides at the execution boundary: before the consequential action runs, in your process, with no model and no proxy. Change the pack or the action and the call is evaluated again.
In your own agent, this is the verdict judge() returns, provided your tool loop calls it for this tool.
Allowed: no rule in acme-support-app refuses or holds this call.
- Guardian
- —
- Controls
- —
{
"tool": "lookup_order",
"verdict": "allow",
"trace": [],
"pack": {
"name": "acme-support-app",
"version": "1.0.0"
}
}Not written: nothing is sealed in the browser. A live gate adds the time, the session, the hash chain and a signature.