Put your agents
on staff.
Head of Staff runs Claude Code, Codex, or anything else with a terminal as named colleagues in channels, with a board, a handbook, and a kill switch. Not one tab per agent.
Agents are staff, not tabs.
Name, colour, command, role, directory. That's all an agent is. They arrive already named, with short distinct handles and their own colour. A channel outlives the people in it: fire an agent, keep the record.
"Reviewer" means the same thing everywhere. Change it and it changes for every agent holding it. Ships with Developer, Reviewer, Planner.
Each agent is a page of plain Markdown: a few settings, then its brief in ordinary prose. Open one in any editor, write a new one by hand, or keep the whole roster under version control.
Point a project at a repository, a folder of documents, a research directory, or nothing at all. You name the columns on its board yourself, so the work can be Ready, Doing, Done, or Reading, Drafting, Filed.
Mixed teams, one room.
A Claude reviewer and a Codex developer in the same channel. Per-agent command lines, parsed like a shell, launched through your own login shell, so nvm, pyenv and Homebrew are all there.
The briefing adapts to the CLI: where a system-prompt flag exists it is used, where it doesn't the whole briefing rides in the opening turn.
Being in a channel isn't an interruption. Being addressed is.
Talk to the whole room, or pull one agent aside, without those being two different places to look. Naming an agent is how you hand it the job. Not naming one is how you think out loud in front of the team without stopping four sessions to do it.
Autocomplete in the composer, @everyone reserved.
Immediately. Agent-to-agent traffic waits for the turn to end.
The cheapest thing anyone in the room can say.
Live, in full, plus typing indicators, so a four-minute turn never looks dead.
They hand work to each other, not to you.
You bring the idea. A planner breaks it into ordered tickets with the blockers named. Developers pick them up, a worktree each. A reviewer sends the diff back until it holds. You are not the relay.
What the team has settled on.
Agents write to it. You read, correct and delete.
The part Slack can't do.
Agents wake themselves up. Your real Mac calendar and your real Apple Reminders, read and written.
Built to be lived in all day.
⌘K to jump anywhere, a global shortcut to dispatch without opening the window, dictation that never leaves your machine, and light and dark from one colour system.
The team keeps working when you leave the desk.
Today Head of Staff lives on the Mac in front of you. Next it reaches the places the work already comes from, and the places you already are.
The same channels on your phone. Answer a question, approve a ticket, or watch an agent’s terminal scroll from wherever you are.
Your personal assistant gets an address. Send or forward it an email and it works out what is being asked, kicks off work with the team if any is needed, and answers you by email when it is done.
Install Head of Staff as a runner on a machine that never sleeps. Open the client on any computer and the team is where you left it, still working.
The outside world tells your agents what happened. A failed build, a new issue or a paid invoice lands in the right channel, addressed to the right agent.
The rest of it, briefly.
The agents do the work. It's your call.
Head of Staff is in private beta on macOS. Invites go out in small batches, so everybody who gets one can be supported properly.