agent‑manager

Go · tmux · MIT

Run every AI coding agent from one terminal.

Four agents running, and you are tabbing through terminals to find the one sitting on a permission prompt. agent-manager puts all of them in one list with a live status, so the stuck one announces itself.

$ brew install yoanwai/tap/agent-manager
agent manager
The agent-manager sessions view: five agent sessions grouped under backend, frontend and infra, each with a colour-coded live status, a preview of the selected agent's pane on the right, and machine gauges at the bottom left.
Five sessions across three projects. One is blocked on a permission prompt, and you can see that without opening anything.
01

Six states, and they come from the agent

Claude Code fires hook events as it works, and agent-manager installs hooks that report each one to a per-session status file. That is a first-hand signal, not an inference. Pane rules refine it and cover every other CLI, matching only the text after the newest turn marker so a finished turn quoting a spinner cannot fake a live one.

workingMid-turn. Editing, running tests, thinking.
waitingBlocked on you. A permission prompt or a question.
finishedTurn complete, nothing pending.
erroredThe agent reported a failure.
idleAlive at a prompt with nothing to do.
deadSession ended. The row and its history stay.

02

Answer an agent without attaching to it

The point of a list is that you act from it, so the sidebar stays your home base.

  • spacePrompt in place. On a session row, enter drops your text into that agent's pane as a user message. The bar clears and stays open for the next answer.
  • spaceSpawn from a group. On a group row, the same bar starts a new agent there with the prompt already embedded, in the group's default directory.
  • tabPick the tool. Cycle claude, opencode, codex, grok, or anything you configured, without leaving the bar.
  • ctrl+vPaste a screenshot. A clipboard image becomes an inline chip and is swapped for its file path on send, in the order you pasted.
  • ↑↓Retarget mid-sentence. The bar follows the cursor, so you can move to a different agent while it stays open.
space · quick prompt
Animated demo: moving down the session list, opening the quick prompt bar with space, typing a follow-up and sending it into the selected agent's pane.

03

Review the whole file, then send the notes back

The part no other agent multiplexer does. ctrl+r opens the session's repo full screen: changed files on the left, the entire file on the right, syntax highlighted with changed lines tinted, so an edit reads in context instead of as a hunk. The diff refreshes while the agent keeps working.

ctrl+r · review
Animated demo of the review screen: scrolling a changed Go file side by side with the original, then jumping to the next changed file.

c then C Line comments

Write a note on any line. C flattens every comment into a single review prompt and delivers it into that agent's pane, so it starts on your notes while you watch the diff update.

s Four scopes

Cycle uncommitted, versus the merge target, the last commit, or staged. Useful right before committing.

u Split or unified

Toggle the layout in place, keeping the cursor on the same source line.

r b B Pickers

Choose the repo when a directory holds several, the branch from the repo's worktrees, and the target branch the diff compares against.

n N Jump changes

Move between changes, or between files with J and K. space marks a file reviewed.

Worktrees ranked

Linked worktrees are discovered automatically and ordered dirty-first, then by most recent commit, so review opens on the one you are working in.


04

Sessions outlive the manager, and come back

Every agent is a real tmux session with its own directory, command and environment. Quit the TUI and they keep running. Close the laptop lid and they are still there.

x X Kill without losing the row

Ends the tmux session to get the RAM back. The row stays in the tree, marked dead, with its name, group and conversation id intact.

v V Revive the conversation

Relaunches under the old id and resumes that exact conversation through the tool's own resume command: claude --resume, codex resume, opencode --session, grok --resume. V revives every dead session at once.

g A tree, not a list

Groups are paths like backend/api/auth, nested as deep as you want, and sessions live at any node. A folded group still shows its per-status counts, so it tells you whether anything under it needs you.

K J Order that sticks

Reorder sessions among their siblings or whole groups among theirs. The order persists across restarts, along with everything else, in a SQLite file next to the config.

a u Archive a subtree

Archive a session, or a group and everything under it, then bring it back later. Restoring un-archives the ancestors it needs.

ctrl+q Get back out

Inside a managed session, ctrl+q detaches to the manager and ctrl+r flags a review on the way out. Both bindings are scoped to managed sessions, so they pass straight through everywhere else.


05

The agent drives the manager

Some things only the agent knows: what the session is really about, which repo it moved into, what branch the work will merge into. Rather than scrape that out of the pane, the manager ships an MCP server in the same binary and registers it into every session it spawns, so those become native tools.

  • renameThe agent names its own session once it knows what the work is, replacing the placeholder.
  • review_repoIt declares the repo or worktree it moved into, so review opens on the right one.
  • review_baseIt declares the branch the work merges into, so the diff compares against the right target.
  • review_modeIt sets the diff scope, for example switching to staged just before it commits.

Registration is per tool and automatic: claude gets a generated --mcp-config, codex gets -c mcp_servers… overrides, opencode gets an OPENCODE_CONFIG merge file, and grok gets a one-time grok mcp add --scope user. Any other CLI opts in with mcp = "<style>". No prompt injection, no per-project setup.

Session identity travels in the environment. One stdio server serves whichever session called it, so there is nothing per-session to launch or clean up.

06

Any CLI, nine palettes, no config required

Claude Code, OpenCode, Codex and Grok Build get live status out of the box. Anything else runs as a session immediately, and earns the same status the moment you describe it in TOML.

  • tomlTeach it a new tool. A [tools.<name>] block with a command and a few status rules gives any agent CLI live status, revive behaviour and prompt handling.
  • sNine themes. classic, solarized dark, catppuccin mocha, tokyo night, gruvbox dark, nord, dracula, rosé pine and monochrome. Stepping the picker applies the palette live and repaints the terminal's own background so there is no seam.
  • /Search the tree. Filter rows as you type.
  • |Resize the split. Nudge the divider with the arrows or drag it, and the ratio persists.
  • Update badge. It checks releases once a day and shows ↑ vX.Y.Z available in the header.
s · settings
The settings screen with the theme picker and a strip of palette swatches beside the theme name.

07

The whole keymap

Everything is one key from the list. ? shows this in the app.

The list

↑↓ / j kMove the cursor
K / JReorder the session or group
Attach the session, or fold the group
FFold or unfold every group
nNew session
gNew group
rRename, or cycle the session's tool
mMove to another group
/Search
|Resize the split
sSettings
?Keys overlay
qQuit, leaving every agent running

Sessions

spaceQuick prompt, or spawn on a group
ctrl+rReview this session's diff
x / XKill this one, or all of them
v / VRevive this one, or all dead ones
a / uArchive, restore
tToggle the archived view
dDelete the record
ctrl+qInside a session: back to the manager

Review

↑↓ / j kScroll the file
ctrl+d / ctrl+uHalf a page
g / GTop, bottom
J / KNext, previous file
n / NNext, previous change
uSide by side or unified
sCycle the diff scope
r / b / BRepo, branch, merge target
spaceMark the file reviewed
c / dWrite, drop a line comment
CSend every comment to the agent
esc / qClose the review

Quick prompt

Send, or spawn in the group
↑↓Retarget while the bar stays open
tabCycle the spawn tool
ctrl+vPaste a clipboard image as a chip
backspaceAt text start, remove the nearest chip
escClose the bar

Not here yet: worktree creation, cost tracking, mouse-driven navigation, and agents that can talk to each other. macOS and Linux; Windows runs it under WSL2. If one of those is what you came for, the comparison says plainly which of the other projects does it.