Playground

Bring your own policy.
Try your agent's calls.

This is the real provio engine, compiled to WebAssembly and running in this tab: the same parser, the same four verdicts, the same ledger records and hashes as the provio binary. Nothing you type leaves your browser.

loading the engine…

1 provio.yaml

First match wins · unmatched calls get default · policy reference

2 Agent call

Scanner trust and sample tool result
Ctrl + Enter runs from anywhere

Pick a call and press Run. provio normalises it the way that agent's integration does, evaluates it against the policy on the left, and records the decision.

3 Ledger

Every decision is appended to a hash chain: the same LedgerRecord v1 format and SHA-256 hashing as .provio/ledger.jsonl. Edit a record and provio verify names the index where the chain broke.

$ provio verify — run a few calls first

    4 Policy replay

    Before you ship a policy change, run it over recorded sessions: provio replay <session> --candidate <file>. Which calls that went through would the new policy have stopped?

    Now run it for real

    Same engine, your agent, your repo

    Both packages ship the provio binary. Drop your policy next to your code as provio.yaml and every tool call goes through it, with the ledger in .provio/ledger.jsonl.

    Python
    pip install provio-sdk

    LangGraph, OpenAI Agents SDK and Claude Agent SDK adapters.

    TypeScript
    npm install provio-sdk

    Claude Agent SDK and any Node agent with a tool hook.

    Claude Code
    provio integrate claude-code

    Writes the hooks into .claude/settings.json; a provio ask becomes Claude Code's own prompt.

    Watch it
    provio ui

    Local console: live decisions, approvals, the ledger and provio verify.

    The ledger you built above downloads as a real ledger.jsonl: provio verify --ledger ledger.jsonl checks it with the same result.