One page for everything to do with the AI agent workforce. It replaced the AI Agents tab that used to sit inside the Systemisation page (moved 24 Aug 2026, Kevin's ruling). On 25 Aug 2026 the three scrolling zones became three tabs, and the CEO Brief moved here from its own shell tab.
The Approvals and Check these tabs carry a count badge, so you can see there is something waiting without opening the tab. Building an agent's SOP from a video stays on the Systemisation page. This page is where agents are managed and judged.
Today's brief from the morning robot: what the board flagged, what to ignore today, what was handed off, and the "safe to act today" money figure. Read straight from the CEO Briefs table, newest first. Two things worth knowing:
The queue shows ONLY loop-raised work: tasks at Status Approval that carry a Sent For Approval By agent link. Legacy records parked at Approval status never appear. Cards are ordered tier 1 first, then priority, then longest waiting. Each card leads with the one-line ask (the agent's own "Carrying this out will involve" line), then the agent's full work, the brief it was given, and the age it has been waiting. Tier 1 items carry a red banner: read those fully before deciding. Where the task came from an email, the card links straight to the original thread.
Above the cards: All, one chip per agent with its count, and a Tier 1 toggle for the work touching your private legal and financial matter. The two combine, so they can narrow to nothing (an agent with no tier-1 work) – when that happens the page says so and offers Clear filters rather than looking like an empty queue.
This page is the third face of ONE mechanism. It writes the same fields as the Tasks drawer and the Slack loop, so the three surfaces can never disagree.
| Action | What it means | What is written to the task |
|---|---|---|
| Approve | Release the work. The agent carries it out, then completes the task itself. | Approval Outcome = Approved as-is · Approved At = now · Approved By = Kevin · Status = Today · Due Date = today · Completion Date cleared · task handed back to the agent (Team Member + Sent For Approval By = the agent, Assignee cleared) |
| Approve with minor edits | Release the work, but with the change you describe applied first. Your comment is an EDIT INSTRUCTION: the agent makes only that change, then carries out the edited version. Still counts as accurate work. Until 26 Aug 2026 this carried out the ORIGINAL text and ignored your comment; it now refuses to complete until the edit has been applied. For anything bigger than a small edit, use Request changes. | Same as Approve, with Approval Outcome = Approved with minor edits · Approval Feedback = your edit. The agent then rewrites Agent Output via agent-dispatch.py revise, which archives the text you approved into Notes so what went out can be compared with what you read. |
| Request changes | Back to the agent to redo. A comment is required; your words are the instruction. | Approval Outcome = Changes requested · Approval Feedback = your comment · Approved At/By stamped · Status = Today, due today, handed back to the agent |
| Reject and close | Kill the work entirely. A reason is required and a confirm dialog stands in the way. Counts against the agent's accuracy. | Approval Outcome = Rejected · Approval Feedback = your reason · Status = Completed · Completion Date = now · agent links set as above |
| Not yet — bring it back in… (3 days / a week / 2 weeks / a month, or a date you pick) | The one that is not a verdict. Use it when the work is fine but you cannot act on it yet — a confirmation statement waiting on an authentication code in the post, a renewal that is not due, a reply that depends on someone else. The task leaves your queue, the sidebar badge, your Slack DM and the CEO brief, and comes back on that date with the agent’s work exactly as it is now. Nothing is approved, nothing is sent, and it does not count against the agent. Everything parked is listed at the top of the Approvals tab with its return date, and “Bring back now” undoes it in one click. Added 28 Aug 2026 at Kevin’s request. | Deferred Until = the date, plus your note appended to Feedback History. Nothing else — no Approval Outcome, no status change, no hand-back. There is no job that brings it back: all four surfaces filter on the date themselves, so the morning it passes the task is simply there again. The Slack worker replies in the existing thread with the return date, clears the message timestamp, and posts a fresh card on the day. |
| Remember this reason (tickbox) | The one control that makes anything permanent. Tick it with ANY of the four verdicts (it does not apply to a knock-back, which decides nothing and teaches nothing) and your reason becomes a standing rule in that agent's own instruction file, applied to every future task. Leave it unticked and nothing is learned: Request changes still fixes that one task, but the agent will not remember why. The reject confirm dialog offers it again so it cannot be missed. In Slack the equivalent is reacting :brain: instead of :x:. | Remember This = ticked. Within 30 minutes agent-dispatch.py lessons appends a dated line to ~/.claude/agents/<agent>.md under "Lessons from Kevin", mirrors it to the register Learning Log, and stamps Lesson Written At. The dispatch run FAILS if a ticked lesson is still unwritten 90 minutes later. |
Every decision also leaves an Airtable comment on the task, and the optional "Kind of work" picker sets the Task Type used to score the agent per job type.
Six lanes, each reporting absence. A lane that cannot be read shows a fault line, never a clean slate. When all six run clean the tab says: "Nothing needs you – all agents moving."
| Lane | What it flags | Why |
|---|---|---|
| Approvals | Loop-raised work waiting more than 24 hours for a decision | An agent is blocked on you; the queue is the bottleneck |
| Stuck tasks | Tasks at Today/Overdue owned by an AI agent, past their due date | Work that should have been done and has not moved |
| Inbound | Open inbound reply tasks older than 24 hours | The 24-hour reply promise is at risk |
| Daily logs | Built or Live agents that wrote nothing to the AI Agent Daily Log today | Silence means the agent did not run, or its log write broke |
| Guardrails | Any automatic guardrail tightening in the last 7 days | The system pulled a leash in on falling accuracy; you should know |
| Duplicates | Two or more open tasks with the same owner and the same subject | Your standing rule is one subject = one open task. A chaser should update the existing task, not raise a sibling |
The sync bar at the top of the page runs ten checks; the sidebar dot in the shell mirrors the worst of them.
| Check | If it fails |
|---|---|
| Approvals queue read | Airtable auth or a broken formula. Hit Refresh; if it persists, the Status or Sent For Approval By field name changed. |
| Legacy Approval records excluded | A task with no raising agent leaked into the queue. The filter broke; do not decide legacy records here. |
| Agents register read | The AI Agents or Team Members read failed, or the Is AI Agent / Active fields were renamed. |
| Daily log read | The AI Agent Daily Log table could not be read; the daily-log lane is blind. |
| Accuracy stats control | Zero approval history matched. On a platform with weeks of decisions, zero means a field rename, not a quiet week. |
| Inbound Comms Response metric fresh | That agent's register row lost its Metric Score. Its runtime stopped publishing; check the triage job. |
| Check zones computed | One or more lanes could not run. Treat those lanes as unknown, never as clear. |
| CEO Briefs table reachable | The CEO Briefs table could not be read, so the Dashboard brief is blind rather than empty. |
| Latest brief is complete | The newest brief is still a 07:30 stub. The 9am robot did not finish it: the money figure and the reasoning are missing. |
| Morning robot ran within the last week | No FINISHED brief in the last six days. The 9am robot has stopped; a run of 07:30 stubs cannot mask this. |
js/ceo-brief.js was deleted.