Playground

a simulated fleet · real kernel decisions · nothing is executed
CHAIN INTACT

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
VIEW

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.

AGENT SURFACE
Shipping

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
PROPOSED ACTION

Read order #8841 to answer the customer. Path: judge() in your app’s tool loop.

  1. AGENT INTENTCustom / homegrown agentRead order #8841 to answer the customer.
  2. TOOL CALLlookup_orderno capability
  3. PRAE · EXECUTION BOUNDARYPRAE local gateSDK · judge() in the tool loop
  4. POLICY EVALUATIONno rule decides itacme-support-app 1.0.0 · 0 of 3 rules matched
  5. DECISIONALLOWwithin policy
  6. 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.

WHY · POLICY MATCHED

Allowed: no rule in acme-support-app refuses or holds this call.

Guardian
—
Controls
—
No rule matched. 3 considered.
EVIDENCE · THE RECORD
{
  "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.