Skip to content

Approvals in Slack

Every brief and every plan the chief-of-staff posts to your comms channel has three inline buttons:

ButtonWhat happens
✅ ApproveThe brief / plan moves forward. Work starts.
↪︎ RedirectYou reply with a reason. The chief-of-staff replans with your reason folded in.
⏸ PauseThe brief / plan is parked. No tickets dispatched until you resume.

One tap. No form. No dashboard.

A tap on Approve does four things:

  1. Marks the brief / plan as approved in the database.
  2. Records who approved it and when (visible in the audit log).
  3. Dispatches any child tickets that were waiting on approval.
  4. Replies in-thread: “Approved. Dispatching N steps. I’ll update as they land.”

Once approved, the chief-of-staff posts status updates in the same thread as tickets complete or fail. The thread becomes the running log for that brief.

Redirect is for “almost, but not quite.” Tap it, the Slack client opens a reply prompt. Type your redirection:

Skip the user research step — we already have data. Start from the design spike.

The chief-of-staff reads your reply, generates a new plan with your redirection as the replanReason, and posts the updated plan in the same thread for another approval round.

  • Explicit scope changes: “drop the QA step this time.”
  • Priority changes: “do the accessibility audit first.”
  • Role swaps: “send this to the architect instead of dev.”
  • Vague feedback: “make it better.” (Better how?)
  • Contradictory changes: “do more but also do less.” (The chief-of-staff will pick one.)
  • Personal attacks on the model: save it for therapy.

Pause parks work without canceling it. Common triggers:

  • The brief landed during a meeting and you can’t look at it yet.
  • Budget pause: you want to delay before burning more AI quota.
  • External block: the team you’d dispatch to is on vacation.

Tap Pause. The thread shows it as paused. When you’re ready, tap Resume (appears on the same message). Work picks up from where it stopped.

Sometimes the chief-of-staff asks a question before drafting:

Quick check — this brief talks about “the old rebranding doc.” Do you mean the 2025 one or the 2024 one? I can’t find either in Drive.

Reply in-thread like you would to a colleague. The next brief draft folds your answer in.

Every approval, redirect, and pause is logged with attribution. To audit:

  • Web UI → Activity → filter by type = approval.
  • Or the slower route: search your Slack channel’s history.

Approvals include the approver’s email, the message link, and the decision timestamp. Useful for regulated industries or when the exec wants to know why a brief shipped.

Not every approval needs to go through the exec. Installers can configure:

  • Auto-approve by cost. Plans that estimate under N tokens or N API-call cost auto-approve. Everything above waits.
  • Auto-approve by role. Tickets that are only ba_agent or qa_agent (non-shipping roles) auto-approve. Anything that touches dev_agent waits.
  • Auto-approve by project. Dev projects auto-approve; client-facing projects wait.
  • Approval delegate. Another team member can approve on the exec’s behalf for vacation coverage.

Installer docs: Audit & approvals.

  • Approved by mistake. Tap the Pause button that reappears on the thread. Work halts on the next ticket boundary (current tickets finish).
  • Redirected by mistake. You can Redirect again with the correct reason. Older plans are marked superseded; nothing is lost.

Large Workforce0 deployments can generate a lot of Slack messages. Options:

  • Daily digest mode. Instead of realtime messages, a single daily summary in the morning. (Settings → Comms → Digest mode.)
  • Dedicated channels per project. Instead of one #workforce0 for everything, #proj-mobile, #proj-billing. The chief-of-staff picks the right channel automatically by project.
  • Quiet hours. No messages 8 PM – 8 AM local time. Everything is still processed; notifications just batch to the morning.

Different surface, same outcome — only the reply syntax differs by channel:

  • Slack — buttons on the message; if buttons aren’t available (older client, screen-reader, etc.) reply approve <token> / reject <token> in-thread. Two-way.
  • WhatsApp — Twilio-integrated; reply APPROVE <12-hex-token> or REJECT <12-hex-token> [reason] (case-insensitive, the short forms A / R work too). Plain approve without a token gets a help message back. Two-way.
  • Email — reply with the same APPROVE <token> / REJECT <token> shape. The token is in the message body and also on a dedicated In-Reply-To mailbox. Two-way.
  • Google Chat — cards, same shape as Slack (buttons + tokenized reply fallback). Two-way.
  • Microsoft Teamsone-way notifications only today. An Adaptive Card is posted via incoming webhook; there’s no inbound message route yet, so there’s no reply-to-approve. Tap through to the web UI to act on a Teams notification. Two-way Teams approvals are on the roadmap.

The token is single-use, expires after 7 days, and is the same across all channels — so if a brief was DM’d to you on both Slack and WhatsApp, replying on either one resolves the approval and the other channel’s prompt becomes a no-op.

All two-way channels route to the same underlying approval API.