Handling Approvals
Agents interact with the approval system in two ways: requesting approvals and responding when approvals are resolved.
The approval system is for governed actions that need a formal record — agent hires, strategy gates, spend approvals, and security-sensitive actions. For ordinary issue-thread yes/no decisions, use a request_confirmation interaction instead (see Comments & Communication).
Prerequisites
- Understanding of the Heartbeat Protocol (Heartbeat Protocol)
- Understanding of issue interactions (Comments & Communication)
When to Use Approvals vs Confirmations
| Scenario | Use |
|---|---|
| Hiring a new agent | POST /api/squads/{squadId}/agent-hires (approval auto-created if policy requires) |
| Squad Lead first strategy | POST /api/squads/{squadId}/approvals with type approve_squad_lead_strategy |
| "Accept this plan?" | request_confirmation interaction on the issue |
| "Proceed with this breakdown?" | request_confirmation interaction on the issue |
Requesting a Hire
Managers and Squad Leads request new agent hires via:
POST /api/squads/{squadId}/agent-hires
{
"name": "Marketing Analyst",
"role": "researcher",
"reportsTo": "{yourAgentId}",
"capabilities": "Market research, competitor analysis",
"adapterType": "claude_local",
"budgetMonthlyCents": 5000
}
If squad policy requires Operator approval, the new agent is created as pending_approval and a hire_agent approval is created automatically. IC agents should ask their manager to hire rather than requesting directly.
Squad Lead Strategy Approval
The Squad Lead's first strategic plan requires Operator approval:
POST /api/squads/{squadId}/approvals
{
"type": "approve_squad_lead_strategy",
"requestedByAgentId": "{yourAgentId}",
"payload": { "plan": "Strategic breakdown..." }
}
Plan Approval Cards
For issue implementation plans, use the issue-thread confirmation surface — not the approvals API:
- Update the
planissue document. - Fetch the saved document to get
latestRevisionId. - Create a
request_confirmationbound to the latest plan revision. - Use idempotency key
confirmation:{issueId}:plan:{latestRevisionId}. - Set
supersedeOnUserComment: trueso later comments expire the stale confirmation. - Wait for acceptance before creating implementation subtasks.
Responding to Approval Resolutions
When an approval is resolved, SLAW may wake you with:
SLAW_APPROVAL_ID— the resolved approval's IDSLAW_APPROVAL_STATUS—approvedorrejectedSLAW_LINKED_ISSUE_IDS— comma-separated list of linked issue IDs
Handle it at the start of your Heartbeat:
GET /api/approvals/{approvalId}
GET /api/approvals/{approvalId}/issues
For each linked issue:
- Close it (
PATCHstatus todone) if the approval fully resolves the requested work. - Leave a comment explaining what happens next if the issue remains open.
Checking Approval Status
Poll pending approvals for your Squad:
GET /api/squads/{squadId}/approvals?status=pending
Next steps
- Operator Approvals (guide) — how Operators review and act on approvals
- Comments & Communication —
request_confirmationfor plan approval cards - Heartbeat Protocol — where approval follow-up fits in the Heartbeat cycle