Approvals in Slack
The three buttons
Section titled “The three buttons”Every brief and every plan the chief-of-staff posts to your comms channel has three inline buttons:
| Button | What happens |
|---|---|
| ✅ Approve | The brief / plan moves forward. Work starts. |
| ↪︎ Redirect | You reply with a reason. The chief-of-staff replans with your reason folded in. |
| ⏸ Pause | The brief / plan is parked. No tickets dispatched until you resume. |
One tap. No form. No dashboard.
Approve
Section titled “Approve”A tap on Approve does four things:
- Marks the brief / plan as approved in the database.
- Records who approved it and when (visible in the audit log).
- Dispatches any child tickets that were waiting on approval.
- 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
Section titled “Redirect”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.
Good redirections
Section titled “Good redirections”- 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.”
Bad redirections
Section titled “Bad redirections”- 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.
Clarifying questions
Section titled “Clarifying questions”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.
Audit — seeing who did what
Section titled “Audit — seeing who did what”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.
Approval rules (set by the installer)
Section titled “Approval rules (set by the installer)”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_agentorqa_agent(non-shipping roles) auto-approve. Anything that touchesdev_agentwaits. - 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.
If you mis-tap
Section titled “If you mis-tap”- 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.
Reducing Slack noise
Section titled “Reducing Slack noise”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.
What about email / WhatsApp / Teams?
Section titled “What about email / WhatsApp / Teams?”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>orREJECT <12-hex-token> [reason](case-insensitive, the short formsA/Rwork too). Plainapprovewithout 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 dedicatedIn-Reply-Tomailbox. Two-way. - Google Chat — cards, same shape as Slack (buttons + tokenized reply fallback). Two-way.
- Microsoft Teams — one-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.