Build
Approvals, grants & routing
The decision surface: what humans can do, and how to keep approval fatigue low without giving up governance.
Decide: approve / edit / reject
Three outcomes, all audited with the deciding user and a hash of the effective args. An edit changes what executes — the SDK runs the edited args, never the originals.
Standing approvals (scope & TTL)
Instead of approving the same boring action 400 times, grant a scoped standing approval: "auto-approve this for 1 hour / this session / until I revoke it." Covered calls auto-approve with provenance standing_grant (distinct in the chain). A policy auto_reject is never overridden by a grant.
# Approve AND grant standing approval in one step (REST decisions body):
{
"action": "approve",
"grant": { "scope": "duration", "duration_seconds": 3600 }
}
# scopes: duration (1h) | session | until_revoked
# List / revoke:
GET /api/v1/standing-grants
POST /api/v1/standing-grants/:id/revokeDelegation & snooze
An approver can delegate authority over a group for a window (vacation cover). The delegate can then decide on that group — enforced inside the decision RPC, so all three paths (REST/inbox/Slack) honor it, and only if the delegator actually holds the group. Snooze excludes you from personal DMs without removing you from the group.
# Delegate YOUR authority over a group while you're away:
POST /api/v1/delegations
{ "delegate_user_id": "...", "approver_group": "finance",
"ends_at": "2026-07-01T00:00:00Z", "reason": "vacation" }
# Snooze personal pings (you stay in the group; channel still gets the card):
POST /api/v1/me/shift { "off_shift_until": "2026-06-13T08:00:00Z" }Delivery: long-poll
The agent learns of a decision via server long-poll — the SDK's wait call returns the instant a human decides. No webhooks to wire for the common case; near-zero latency.