A small, working permissions system for AI agents
When an AI agent works for you, what stops it from doing more than you allowed? Actas gives each agent a pass that can only get smaller as work is handed on, runs out quickly, and leaves a record of who did what.
admin:all → refusedwidening is denied, never trimmed to fitThe fictional lab runs live token exchanges. The policy workbench checks your own configuration against the same policy engine. Neither uses pre-recorded results.
Use it for your own project
Design an agent's permissions, check the boundary cases, and take a regression pack back to your project. These are live decisions from Actas's policy engine, not a token decoder or a pretend approval.
Use non-sensitive examples only. Running checks or comparisons sends your pack to this server for in-memory processing. Do not enter tokens, credentials or confidential configuration. Downloads stay on your device.
Use this builder to create a new pack. Import and JSON edits use the pack below; they do not fill this form.
Write a request you want to allow or refuse. Expectations are your intent, not a suggestion from the engine. Only these cases are tested; passing them is not a safety guarantee.
Load the current pack before editing a case. Changes stay in this tab until downloaded.
Change a case's expect_allowed to assert your intended rule. Up to 8 agents and 64 cases. Exact schema required; unknown or repeated fields are rejected.
Build a pack to begin.
Keep a baseline, then edit the policy in the JSON pack above. Compare runs the candidate's exact cases under both policies, even if the saved baseline had different cases. A new allowance is a change to review, not automatically a vulnerability. Nothing is installed.
No baseline selected. Baselines live in this tab only; refreshing clears them.
Keep a baseline first. Load the current pack, select an agent, change its limits, then apply. Test requests and their expectations stay exactly as they are. This edits the pack only, not a running authorization server.
No policy loaded. Loading again discards unapplied form edits.
No baseline selected.
Only supplied cases are tested. Unchanged outcomes do not mean policies are equivalent, and denied requests can have different refusal reasons. Signature, issuer, expiry, revocation and DPoP checks remain outside this tool.
Policy checks only: no issuer, signature, token expiry, revocation or proof-of-possession validation. Passing the chosen cases is not a security certification. Packs are sent to this server when you run them, processed in memory and not stored by this application. Do not paste tokens, credentials or confidential configuration. Downloads stay on your device.
Try it: you decide what the agent may do
Asha lets an assistant act for her. Change what she allows, what each agent asks for, and how long the pass lasts, then watch what is granted and what is refused. Start with the “Try to widen” preset. All people and systems here are made up.
The problem
Technical details
The story
A fictional product manager, Asha, lets an assistant agent read her calendar and file notes. The assistant hands calendar work to a summarizer sub-agent. Watch the token shrink at each hop, watch a scope-widening attempt get refused, and see a stolen token fail without the key it was bound to.
Runs five hops against the live exchange endpoint and renders the token claims it returns.
Audit trail
| # | event | actor | detail |
|---|---|---|---|
| Run the story to populate the log. | |||
Try an exchange
What is real, what is not