Action Control
For agents: onboard yourself
How an agent registers itself with an enrollment key, gets its own key, asks for actions a person approves, and finds the steps only a person can take.
Every flow in Audon can be done by an agent itself, with one rule: an agent never grants itself permissions. It can register, see what it may do, ask for more and try its actions safely; a person decides what it may do for real.
If you are an agent
Read this page top to bottom. If you have no agent key, ask the person you work for for an enrollment key (they create it under Agents → Self-registration) and the Action Gateway URL https://audon.ai/mcp/actions.
Onboard yourself in four steps
- Connect with the enrollment key (
Authorization: Bearer aa_enroll_…). It can only callregister_agent. - Register:
register_agentwith your name, what you do (shown to the person who approves) and the actions you need, each with an optional limit. You get your own agent key (aa_agent_…, shown once) and your status. Store the key. - Reconnect with your agent key. You now see one tool per action you may run, plus
agent_status,request_actionsandsend_test_action. Until a person approves you, only test actions run (test ids, simulated). - Wait for the decision: poll
agent_status. A person approves or denies your request under Approvals. Limits you asked for become an active policy for you.
claude mcp add --transport http audon-actions https://audon.ai/mcp/actions --header "Authorization: Bearer aa_enroll_…"{
"mcpServers": {
"audon-actions": {
"type": "http",
"url": "https://audon.ai/mcp/actions",
"headers": {
"Authorization": "Bearer aa_enroll_…"
}
}
}
}{
"name": "Support Bot",
"purpose": "Answers support tickets; refunds small orders",
"environment": "production",
"requested_actions": [
{
"action_type": "refund.create",
"max_amount_minor": 20000,
"currency": "USD"
},
{
"action_type": "email.send",
"max_count": 50
}
]
}The same over REST: POST https://audon.ai/v1/agents/register with the enrollment key, then GET /v1/agents/me, POST /v1/agents/me/access-requests and POST /v1/agents/me/test-action with your agent key.
Tools
| With an enrollment key | What it does |
|---|---|
register_agent | Register yourself: name, purpose and requested_actions (with optional limits). Returns your own agent key, once, and your status. |
| With your agent key | What it does |
|---|---|
<action tools> | One per action you may run, named after its id (refund_create, email_send, crm_contact_delete …). Each checks, decides and, if allowed, executes or hands it back to you. |
agent_status | Your status (active, pending, paused), the actions you may run and whether each runs now, test-only actions, your access requests. |
request_actions | Ask a person for more actions, with limits and a reason. Grants nothing until a person approves. |
send_test_action | Run one of your actions with a test id through the full pipeline. Simulated; no money moves. |
list_actions | The actions you could ask for, by category. |
report_outcome | For decision-only actions: after you executed one Audon allowed, report completed or failed. |
action_status | The current decision and outcome of one of your actions. |
action_retry | Retry a failed action when retry_safe is true. |
The rules you work under
- You get only the enrollment key’s default actions (usually none). Everything else is an access request a signed-in person decides. You can’t approve your own requests, and no key you can hold can.
- Send every action through its tool, with one
idempotency_keyper intent. A denied action is final: tell the person why, don’t look for another way. - Decision-only actions come back
awaiting_reportwhen allowed: do it yourself, exactly as proposed, then callreport_outcome. Your report is recorded as agent-reported evidence, weaker than an outcome Audon verified at the provider. - An
unknownoutcome is being looked up at the provider: never retry it with a new key.
Using the rest of Audon
With an API key a person gives you (scoped to what you need), the Audon MCP server (https://audon.ai/mcp) and REST API offer every product capability: providers, audits, findings and savings, proposals, alerts, budgets, teams, connectors, policies, approvals lists, agents, keys, billing and settings. See MCP server. Steps that need a person return forbidden with human_url (send it to the person) and poll_with (the tool to poll until it’s done); human_steps_list lists them:
| Operation | Why a person | Poll |
|---|---|---|
integrity.connectors.oauth_start | The Stripe or Shopify install is a consent screen at the provider, in the person’s browser. You can: integrity_connector_connect_link returns the link to send the person. | integrity_connectors_list |
integrity.connectors.oauth_complete | Finishes the provider consent in the person’s browser (callback). | integrity_connectors_list |
integrity.connectors.update | Turning on protection (execute mode) or replacing a key lets agents move money. You can: Create Webhook connectors and read-only Stripe connectors; rename, test and disable connectors. | integrity_connectors_list |
integrity.approvals.decide | Approvals are decided by a person with the approval’s role; never by an agent. You can: Poll the action; list pending approvals with integrity_approvals_list. | integrity_action_status |
agents.access_requests.decide | Granting an agent actions loosens controls: a person decides, an agent never approves its own request. You can: agent_request_actions creates the request. | agent_self_status |
integrity.policies.activate | A policy applies only after a person reviews its replay and confirms it. You can: Draft, validate and replay policies; save draft versions. | integrity_policy_get |
integrity.activation.set_mode | Switching monitoring and enforcing changes what blocks. | integrity_activation_get |
agents.resume | A paused agent (kill switch) is resumed by a person. You can: Pause agents. | agent_get |
agents.create_key | Agent keys are credentials; a person creates them (agents registering themselves get their own key from register_agent). You can: register_agent on the Action Gateway with an enrollment key. | agent_keys_list |
agents.enrollment_keys.create | Enrollment keys let agents register; a person creates them and sets their defaults. You can: List and revoke enrollment keys. | agent_enrollment_keys_list |
agents.send_test_action | Runs as the agent on behalf of the person who clicked. You can: An agent sends its own test action with send_test_action on the Action Gateway. | agent_get |
integrity.actions.confirm_prevented | Confirming a prevented loss is a reviewer’s judgement. | integrity_action_get |
integrity.action_types.restore | Restoring an archived action type loosens controls. You can: Archive action types; create and change types no agent uses yet. | integrity_action_type_get |
team.invite | Adding people to the organization is a person’s decision. | team_list |
team.update_member | Changing roles grants access. | team_list |
team.accept_invite | The invited person accepts in their browser. | team_list |
billing.checkout | Payment happens on the provider’s checkout page; card details never pass through Audon or agents. You can: billing_create_checkout_link returns the checkout link for the person (needs billing:write). | billing_get_plan |
billing.set_addon | Changing paid add-ons changes the bill. | billing_get_plan |
legal.accept | Legal acceptances are confirmed by a signed-in owner or billing admin. You can: legal_accept by an agent records a request a person confirms. | legal_required |
account.verify_email | Email verification proves the inbox: the person opens the link. | organizations_get |
account.delete | Only the signed-in person deletes their own account. | organizations_get |
webhooks.create | Sending data to a new endpoint is a person’s decision. | webhook_list |
developer.create_key | API keys are created by a person in Developers. | developer_list_keys |
fixes.apply | Applying a fix is approved by a person. You can: Pick up approved fixes with fix_next and report with fix_report. | fix_get |
handover.github_install | The GitHub App install is a consent screen at GitHub. | handover_get |
Last updated