Feature · Work

Approvals

Approve or deny actions that need your permission.

Last changed

Generated from commit be57775 ·

How it works

What waits here

A worker's action waits for a person when the autonomy mode, the Always ask list or a policy says so. Examples are a pull request, a merge, a deploy, a Slack message, a spend above your limit and a hire.

Decide

Open Approvals. Each card says what the worker wants to do, why, and who can decide. Select Approve or Deny, with an optional comment. A critical action asks you to confirm again.

You can also decide from the CEO conversation and, when it is connected, with one tap on WhatsApp.

Decide on Slack or Teams

A person who may decide can also get the request as a direct message on Slack or Teams. Reply approve or deny in its thread. You can add a reason after the word. The same checks apply as on the web. A reply from anyone else changes nothing.

The worker whose action waits sends the message through its own Slack or Teams connection. Agent checks each message before it goes: the approval must be open, and the person must be one who may decide it. The Always ask item Speak as the operator and the autonomy mode do not hold this message. A policy that denies or asks for Slack or Teams messages still stops it, and so does the kill switch.

A person with no Slack or Teams account that matches their email gets no message. The request also stays on the web, on WhatsApp and in the assistant. The setting approvals.chatDelivery turns these messages off.

Who can decide

Owners and admins can always decide. An approval can name a role; by default it is approver. Members and viewers cannot decide.

Statuses

Pending, Approved, Denied and "Past its expiry". An approval that is not decided in time expires.

When the kill switch is engaged

Engaging the kill switch withdraws approvals that are not yet acted on. They must be given again after the release.

From the help article Approvals, checked against the product on .

What you can do

The operations this feature's screens call. Each one is POST /api/<name>, and the badge says who may call it.

  • listApprovals

    Viewer

    Lists approvals.

    Types: ListApprovalsRequest returns ListResponse<ApprovalDto>

  • listPolicies

    Viewer

    Lists policies.

    Types: ListPoliciesRequest returns ListResponse<PolicyDto>

  • decideApproval

    ApproverNo API tokens

    Decides the approval.

    Types: DecideApprovalRequest returns ApprovalDto

  • explainAction

    Viewer

    Explains the action.

    Types: ExplainActionRequest returns ExplainActionResponse

  • explainDecision

    Viewer

    Explains the decision.

    Types: ExplainDecisionRequest returns ExplainDecisionResponse

  • listEvents

    Viewer

    Lists events.

    Types: ListEventsRequest returns PageResponse<AuditEvent>

  • getContextManifest

    Viewer

    Gets the context manifest.

    Types: GetContextManifestRequest returns GetContextManifestResponse

Screens

Generated from code at commit be57775 ·

Turn the numbers into shipped work.

Agent runs these choices for you: a persistent AI worker with memory and rules, on your Claude and Codex subscriptions.