agent‑manager

Go · tmux · MIT

Run every AI coding agent from one terminal.

Everything is one keypress. Start an agent, answer the one that is blocked, open its diff, all without leaving the list or waiting on anything. Sessions even name themselves, so you never stop to think of one.

$ 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

Fast is the whole point

A manager you have to think about is worse than no manager. Every action here is a key on the row you are already looking at, and nothing asks you for information the machine can work out for itself.

space Prompt, in place

Type into the bar and press enter. It lands in that agent's pane as a user message. The bar clears and stays open, so answering three agents is three sentences, not three context switches. The cursor keys retarget it while it is open.

space New agent, same bar

On a group row the same keypress starts a new agent there, with your prompt already embedded and the group's directory already set. It begins work immediately. n opens the full form when you want to set everything by hand.

auto It names itself

A new session starts as claude-a1b2, and its first prompt quietly asks the agent to run agent-manager rename once it knows what the work is. The name appears in the sidebar on the next poll. You never stop to name anything, and the list still reads like a list of features.


02

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.

03

What the prompt bar can carry

It is one line at the bottom of the sidebar, and it does more than send text.

  • tabPick the tool. Cycle claude, opencode, codex, grok, or anything you configured, without leaving the bar. The footer shows the current pick.
  • ctrl+vPaste a screenshot. A clipboard image becomes an inline chip, saved to a temp file and swapped back for its path on send, in the order and the places you pasted.
  • ↑↓Retarget mid-sentence. The bar follows the cursor, so you can change which agent it is aimed at while it stays open.
  • /slashCommands pass through. A slash command reaches the agent as a slash command, and the self-naming directive follows separately instead of mangling it.
  • escOut. One key, and you are back to plain navigation.
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.

04

Review the whole file, then send the notes back

The part nothing else does without putting you in a browser. 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.


05

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.


06

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.

07

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.

08

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.