Govern an agent from a sentence
The hardest part of governing an agent is the blank policy screen: which tools, which models, which arguments? TapPass closes that gap. Describe the agent’s job in a sentence and it derives the smallest capability envelope that lets the agent do that job, and nothing else.
The command
Section titled “The command”tappass policy create \ --org-id acme \ --name support-agent \ --from-prompt "handles customer support email, reads tickets, drafts replies"TapPass reads the intent, maps it to the capabilities that job implies, and writes a policy named support-agent:
created policy pol_7f3a… name=support-agentThat’s a least-privilege policy, a support agent gets email-read and draft capabilities, not the ability to send wire transfers or read your source repos.
Preview before you persist
Section titled “Preview before you persist”Add --dry-run to see the capability envelope the sentence produces without writing anything:
tappass policy create \ --org-id acme --name support-agent \ --from-prompt "handles customer support email" \ --dry-rundraft support-agent, capabilities: email.read, email.draft, ticket.read (dry run, nothing persisted)Iterate on the wording until the envelope is exactly what you want, then drop --dry-run to save it. Use -o json to capture the full draft (every capability and rule) for review or diffing in CI.
Co-create it interactively
Section titled “Co-create it interactively”Add -i and the same command becomes a working session, TapPass proposes, you steer, and nothing persists until you say so:
$ tappass policy create --org-id acme --name support-agent -i --from-prompt "handles customer support email"I read that as 4 rule(s): [1] AllowCapabilities, capabilities=email.read, email.draft, ticket.read [2] BlockPII, threshold=0.6 [3] MaxSpend, usd=5 [4] SessionRateLimit, max_events=200Anything I missed or got wrong? (Enter = looks right; `drop N …` removes; or just tell me)> it should never email anyone outside our domainupdating with your refinement…I read that as 5 rule(s): … [5] ConstrainCapabilityArgs, recipients must end in @acme.com> drop 3dropped 1; 4 rule(s) remain> ⏎Create policy 'support-agent' with 4 rule(s) as a draft? [Y/n] ycreated policy pol_7f2… name=support-agentnext: test it, `tappass try "…" --dry-run` · `tappass policy explain` · then promote from shadowSay what’s missing in plain language and the proposal re-derives with your refinement folded in; drop rules by number; confirm, and exactly the rules you approved are what gets created, nothing re-derived behind your back.
When you already have the rules
Section titled “When you already have the rules”If you’ve authored rules by hand, or exported them from another environment, create the policy from a file instead of a prompt:
tappass policy create \ --org-id acme --name locked-down \ --from-rules rules.json --dry-runrules.json is a JSON list of rule objects ({kind, ordinal, payload, mode?}) drawn from the rule reference. Provide exactly one of --from-prompt or --from-rules.
Roll it out safely
Section titled “Roll it out safely”A freshly created policy should go out in shadow (watch) mode first, decisions are recorded but nothing blocks, so you can watch the evidence before it enforces. See Lifecycle & rollout for assigning the policy to an agent and promoting it from shadow to enforce.
Prefer to let the agent’s actual behavior write the policy rather than a description? That’s watch mode.
Next steps
Section titled “Next steps”- Explore the capability database, see the capabilities a prompt maps to
- Lifecycle & rollout, shadow first, then enforce
- Rule reference, the vocabulary behind
--from-rules