Your own actions
Govern an action your organisation defines, not only the built-in ones.
The built-in tools cover a few actions, such as a supplier's bank account. Your
organisation can register its own, such as invoice.approve, and your agent proposes
them through one general tool.
Register the action
Someone with permission to manage capabilities registers it in the console. A registration says:
| Part | What it is |
|---|---|
| Name | A dotted lowercase name, such as invoice.approve |
| Fields | The parameters, as a simple JSON Schema with types, limits and lists |
| Materiality | Which fields matter, so a change after approval is caught |
| Sensitivity | Which fields are secret |
A few names are reserved for built-in actions; registration tells you if yours is
one. Patterns must be simple and start with ^, a field with a pattern needs a
maximum length, and an action can have at most 20 fields with a pattern, so one
request can't tie up the service.
A field marked secret is swapped for a token before anything is stored. Only the token is kept and shown, so approvers and records never see the value. On an action connected to a system, the value is sealed so that only the bridge can open it, just before the call. See Connect a system.
Propose it
Send propose_action through any way in, with the action's own fields in
parameters:
{
"request_id": "inv-approve-2291",
"agent": { "agent_id": "<your agent id>", "session_id": "<your session>" },
"tool": {
"name": "propose_action",
"arguments": {
"action_type": "invoice.approve",
"resource_type": "invoice",
"resource_id": "INV-2291",
"parameters": { "amount": "1200.00" },
"reason": "Matches the purchase order"
}
},
"context": {
"instruction": "Approve invoice INV-2291.",
"timestamp": "2026-11-02T10:00:00Z"
}
}
An action nobody registered is refused before anything is stored, and so is a parameter its registration doesn't list.
What happens next
- The request is held for a person by default, unless your own policy says otherwise.
- It's observed: recorded with its decision, but never run, until your action is connected to a system. See Connect a system.
- Read the result as for any action. See Wait for a result.
Not yet
- Running your action against a real system: connecting is still in test.