Help us shape the future of Go! Take the 2026 Go Developer Survey

agent-manager

command module
v0.44.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 25, 2026 License: Apache-2.0 Imports: 27 Imported by: 0

README

agent-manager

The fastest developer workflow for every AI coding agent.

agent manager is a local terminal app that connects to your existing subscriptions and tools.

Live on Peerlist Launchpad

agent-manager on Trendshift agent-manager on Product Hunt

stars clones in the last 14 days latest release Discord
CI status test coverage Go package reference licence

five prompts to five fresh agents without moving the cursor, one per CLI, the first on Opus at high effort picked in the prompt bar, then a session's diff opened in review

Claude Code, Codex, OpenCode, Grok, Gemini CLI, Antigravity CLI, Pi, Command Code, Hermes Agent, Muse Code, Oh My Pi, and Cursor CLI run side by side. Each tool runs in its own persistent tmux session.

agent-manager is a thin layer over the CLIs you already have. Each session launches your own installed tool as-is: your login, your subscription, your config files, your MCP servers, and every feature the tool ships all carry over, exactly as they behave in a plain terminal.

Instead of hunting through terminal tabs to see which agent is done and which is stuck, every session shows up in one list with live status, grouped into a project tree you can fold and reorder. You answer any of them without attaching: space sends a prompt straight into a session's pane, or spawns a new agent in the selected group. A dead session revives on its own conversation with v. And ctrl+r opens a full-file diff of what an agent changed, syntax-highlighted, where the comments you leave on lines go back to the agent's pane as one review prompt when you press C.

Press f on a session to continue its conversation in a separate named fork.

The mouse works across the whole manager. The wheel moves the cursor, a click on a session focuses it, and a click on its row or the mouse back button brings you back. Drag a row by its handle (⠿ in Advanced, = in Compatible) to reorder it or move it into another group, and the […] at the end of every row opens its actions. The divider between the list and the preview drags, and while any message is left, a click on messages in the key legend opens it. In a focused pane a drag selects and copies text, and a click on a link opens it in your browser. Settings has a mouse toggle for terminals where you want native selection back. Settings → symbols switches between Advanced geometric marks (the default) and Compatible ASCII marks, with a live preview.

The tools you use alongside agents live in the same list: T opens a shell under the selected agent, or in the selected group, for builds, Git, and one-off commands. An agent can spawn another, send it a message, and wait until it is done: every MCP-capable session carries those tools on launch.

Save named instructions in Settings and reuse them from the New Session form, the quick prompt, a focused session, spawn --saved, send --saved, or create_session. See Saved prompts.

Not here yet: cost tracking.

Jump to: Install · Usage · Keys · Diff review · Configuration · Docs site

Supported tools

Status detection supports Claude Code, OpenCode, Codex, Grok Build, Gemini CLI, Antigravity CLI, Pi, Command Code, Hermes Agent, Muse Code, Oh My Pi, and Cursor CLI. Each one's launch, revive, fork, and status rules ship in the binary (Hermes, Antigravity, Oh My Pi, and Cursor CLI have no fork), so an upgrade brings the current version of all of them (see Configuration). A CLI that is not on the list is a feature request.

Install

Runs on macOS and Linux, natively on Windows with psmux, and inside WSL2.

Homebrew (macOS / Linux)

brew install agent-manager

Installs tmux with it if missing, and Homebrew runs on git, so both dependencies are covered. This is the homebrew-core formula, which builds from source. For the prebuilt binary, brew install --cask yoanwai/tap/agent-manager.

Scoop (Windows)

scoop bucket add yoanwai https://github.com/YoanWai/scoop-bucket
scoop install yoanwai/agent-manager

Installs the version published in that bucket, and Scoop installs psmux with it. The bucket is updated on its own, so it can lag the latest release. To update, close agent-manager and run scoop update agent-manager. A global install uses scoop update agent-manager --global in an elevated PowerShell. The in-app updater shows those instructions instead of replacing Scoop's binary.

Install script (macOS / Linux)

Download the script, read it, then run it. sh install.sh runs only after that download succeeds.

curl -fsSL -o install.sh https://raw.githubusercontent.com/YoanWai/agent-manager/main/install.sh &&
sh install.sh

That copy is the script on main. It is not in checksums.txt. The release that first attaches install.sh lists that file in checksums.txt. Once it does, download the attached file and, when gh is logged in, verify it before the script runs:

curl -fsSL -o install.sh https://github.com/YoanWai/agent-manager/releases/latest/download/install.sh &&
gh attestation verify install.sh --repo YoanWai/agent-manager &&
sh install.sh

The release URL above has no file until that tag exists, so the first command is the one that works until then.

Downloads the latest release for your platform, verifies it against the published checksums, and installs it to ~/.local/bin. Then it checks for tmux 3.1+ and git. On macOS it offers Homebrew, and offers to install Homebrew first when that is missing. On Linux it offers apt, dnf, pacman, zypper, apk, or Homebrew, and on a desktop it also offers the clipboard and notification packages. It prints the command when you decline. A run with no terminal skips the prompt and still installs the binary. Set AGENT_MANAGER_INSTALL_DIR for another directory, AGENT_MANAGER_VERSION to pin a version, and AGENT_MANAGER_INSTALL_DEPS=1 to answer the dependency prompt up front (=0 to skip it). AGENT_MANAGER_VERIFY_ATTESTATION=1 refuses the install unless gh attestation verify accepts the downloaded archive. Leave it unset to install on a machine without gh. gh uses one exit status for a rejected attestation, a missing login, and a network error, so the script does not try to tell those apart.

Running it without a file to read first:

curl -fsSL https://raw.githubusercontent.com/YoanWai/agent-manager/main/install.sh | sh

Verified zip (Windows)

Download the Windows zip for your architecture and checksums.txt from the same release. Compare its SHA-256 with the matching line in checksums.txt before extracting it. The manual Windows install gives the PowerShell commands, optional provenance verification, and dependency setup.

Install script (Windows)

Download the script, read it, then run it. The installer runs only after that download succeeds. Windows PowerShell 5.1 has no &&, so the guard is if ($?). Until the release attaches install.ps1, the file to read is the copy on main. That copy is not in checksums.txt.

irm https://raw.githubusercontent.com/YoanWai/agent-manager/main/install.ps1 -OutFile install.ps1
if ($?) {
    Get-Content .\install.ps1
    Unblock-File .\install.ps1
    powershell -NoProfile -ExecutionPolicy Bypass -File .\install.ps1
}

Once the release attaches install.ps1 and lists it in checksums.txt, download that file instead. Logged in to gh, verify it after the download and before the installer. A missing gh stops the example: PowerShell would otherwise keep the previous $LASTEXITCODE, and a 0 from an earlier command would look like a successful verify. That release URL has no file until that tag exists.

irm https://github.com/YoanWai/agent-manager/releases/latest/download/install.ps1 -OutFile install.ps1
if ($?) {
    Get-Command gh -ErrorAction Stop | Out-Null
    if ($?) {
        gh attestation verify .\install.ps1 --repo YoanWai/agent-manager
        if ($LASTEXITCODE -ne 0) { throw 'attestation verification failed' }
        if ($LASTEXITCODE -eq 0) {
            Get-Content .\install.ps1
            Unblock-File .\install.ps1
            powershell -NoProfile -ExecutionPolicy Bypass -File .\install.ps1
        }
    }
}

On a Windows client with no execution policy set, the effective policy is Restricted, so every .ps1 is refused. -ExecutionPolicy Bypass applies to that process only, after you have read the file. Where the policy is already RemoteSigned, Unblock-File then .\install.ps1 is enough. RemoteSigned refuses an unsigned script that still has the Mark of the Web. A browser download sets that mark. irm -OutFile does not (Microsoft documents Invoke-WebRequest as not marking the Internet zone). Unblock-File does nothing in that case.

Installs the latest release to %LOCALAPPDATA%\Programs\agent-manager, adds it to your user Path, and offers to install psmux, git, or PowerShell 7 when one is missing. AGENT_MANAGER_INSTALL_DEPS=1 answers yes. AGENT_MANAGER_INSTALL_DEPS=0 skips the prompt. With no terminal it skips the prompt and still leaves the binary installed. AGENT_MANAGER_VERIFY_ATTESTATION behaves as it does on the shell script.

Arch Linux, mise, go install, prebuilt binaries, Windows (native and WSL2), dependencies, and updating: docs/install.md.

Usage

agent-manager

Sessions run inside tmux (am_* namespace), so they survive the manager quitting. Inside a session, Ctrl+Q detaches back to the manager when your terminal and tmux leave it available; Ctrl+\ is an alternate under the same rule. Ctrl+C reaches the agent as its cancel key while a session is focused, so an interrupted prompt leaves the manager running. Ctrl+R opens the session's diff review and F3 opens its directory in your editor; the keybindings row in Settings (s) moves any of them, or hands one back to the agent, and moves or turns off any action of the manager's own list, with esc and ctrl+c staying as they are (see Key bindings). In a full-screen attach, the session footer also shows an inner tmux prefix followed by d when configured. When nested inside another tmux, send the inner prefix shown in the footer, then press d. If both tmux servers use the same prefix, invoke the outer tmux's send-prefix binding; if the outer tmux otherwise captures the inner prefix, configure it to forward that key. agent-manager --version prints the version.

Agent sessions live on a private tmux server named agentmgr, so they never mix with the tmux you run yourself and a kill-server on your own socket leaves them alone. To reach one from a plain shell, name that server: tmux -L agentmgr ls, then tmux -L agentmgr attach -t am_<id>.

The full reference, every key, quick prompt mode, killing and reviving, diff review, groups, status detection, stats, and themes, lives in docs/usage.md. Tell your agent what you want to review in Agent Manager, and your agent will set it up for you to view in the review panel. You can also tell your agent to manage sessions and terminals in Agent Manager. The short version:

Key Action
n New session (name, tool, the model, effort and profile the tool reports, directory, optional starting prompt, group)
space Quick prompt mode: answer the selected session, or spawn an agent in the selected group
enter Focus the session in place; keys go to the agent while the list stays
click / double click Focus a session from its row or its preview / fold or unfold a group. The full-screen layout selects on a click and focuses on a double click
drag ⠿ / = Reorder a row, drop it into another group, or nest a terminal under an agent
[…] / right click The row's actions: attach, prompt, review, fork, rename, move, archive, kill, delete and more
click the list / mouse back Focused: back to the list. A click on another row focuses that one
→ / ← Step in and out: → focuses the session or opens the group, ← closes the group and, at the start of a focused agent's prompt, comes back to the list. In beta, and Settings can turn the pair off
ctrl+r Review the session's changes as full-file diffs; c comments a line, C sends a numbered review round, and sent comments stay visible as open or handled
x / v Kill a session to free its RAM / revive it on its own conversation
R Restart a session on an empty context: same name, group, directory and tool, fresh conversation
s Settings (default tool, theme or follow the OS light/dark mode, list density, mouse, review layout, desktop notifications, editor, keybindings)
? The key map for the current screen; review shows only review bindings

A session can spawn into its own git worktree (<repo>-worktrees/<name>, branch am/<name>), toggled on the n form, with ctrl+t in quick prompt mode, or by default in Settings.

A session can start on a model, reasoning effort and profile of its own, picked on the n form, with ctrl+l, ctrl+x and ctrl+y in quick prompt mode, or with spawn --model --effort --profile. The lists come from each CLI at runtime, so a new model shows up the day the CLI ships it, and restart, revive and fork keep the choice (see Model, effort and profile).

the session tree, with a Claude Code session's latest answer in the preview

the session list taking the whole terminal, one-line rows with the computer stats on the foot, then a session focused full screen

review, side by side, with the changed lines tinted in full file context

Configuration (Settings, the editor o opens, and the key tables) is in docs/configuration.md.

Development

go run .
env -u TMUX TMUX_TMPDIR=/tmp/amtest go test ./...   # end-to-end tests drive a real tmux server

See CONTRIBUTING.md for the checks CI runs, and AGENTS.md if you point a coding agent at this repo.

Community

Join the Agent Manager Community on Discord. Ask questions and get setup help in #help, share your setup in #workflows, and talk about contributing in #dev. Bugs and feature requests go in GitHub issues.

Contributing

Contributors and collaborators wanted. agent-manager is actively looking for people to help build it. Unassigned issues are free to take, comment on one to claim it, and regular contributors get invited as collaborators. Say hi in #dev on Discord.

Bug reports, feature ideas, and pull requests are welcome. See CONTRIBUTING.md for setup and the checks CI runs. Questions and setups worth sharing go in Discussions. Security reports go through a private advisory; see SECURITY.md.

Contributors

Contributors

License

Apache-2.0


agent-manager on Peerlist Launchpad Review agent-manager on Product Hunt

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
examples
headless command
internal
agentsession
Package agentsession reads back the conversation id an agent CLI minted for a session the manager launched, for tools that do not accept a chosen id at launch (codex, opencode, gemini, hermes, command-code, muse, antigravity, omp, cursor).
Package agentsession reads back the conversation id an agent CLI minted for a session the manager launched, for tools that do not accept a chosen id at launch (codex, opencode, gemini, hermes, command-code, muse, antigravity, omp, cursor).
app
atomicfile
Package atomicfile replaces small local files without exposing a partial write to readers.
Package atomicfile replaces small local files without exposing a partial write to readers.
catalog
Package catalog asks each agent CLI, through the interface it offers programs, for the models, efforts and profiles a session can launch with.
Package catalog asks each agent CLI, through the interface it offers programs, for the models, efforts and profiles a session can launch with.
catalog/value
Package value holds what a CLI answered about its models, efforts and profiles, without the processes that ask it.
Package value holds what a CLI answered about its models, efforts and profiles, without the processes that ask it.
cli
Package cli implements agent-manager's subcommands over internal/sessioncmd, the same layer the MCP server drives.
Package cli implements agent-manager's subcommands over internal/sessioncmd, the same layer the MCP server drives.
clipboard
Package clipboard reads image data off the OS clipboard so the quick prompt can attach a pasted screenshot to an agent session.
Package clipboard reads image data off the OS clipboard so the quick prompt can attach a pasted screenshot to an agent session.
conversation
Package conversation tells which conversation a running agent is on from state its CLI keeps for itself, read and never written, for the CLIs that report no switch through an extension point.
Package conversation tells which conversation a running agent is on from state its CLI keeps for itself, read and never written, for the CLIs that report no switch through an extension point.
deps
Package deps reports how to install the external tools agent-manager runs, so a missing binary names the command that fixes it instead of a bare "not found in PATH".
Package deps reports how to install the external tools agent-manager runs, so a missing binary names the command that fixes it instead of a bare "not found in PATH".
diff
Package diff builds line models for changed files, using full-file context for small files and changed hunks for large ones.
Package diff builds line models for changed files, using full-file context for small files and changed hunks for large ones.
feed
Package feed pulls the project's remote message feed: a small JSON file the maintainer edits to talk to running installs between releases (known issues, tips, announcements).
Package feed pulls the project's remote message feed: a small JSON file the maintainer edits to talk to running installs between releases (known issues, tips, announcements).
git
Package git shells out to the git CLI to read diff data for a repo.
Package git shells out to the git CLI to read diff data for a repo.
hooks
Package hooks wires Claude Code hook events into status files: each managed session gets AGENT_MANAGER_STATUS_FILE in its environment, and the generated settings file makes Claude Code write its lifecycle state there.
Package hooks wires Claude Code hook events into status files: each managed session gets AGENT_MANAGER_STATUS_FILE in its environment, and the generated settings file makes Claude Code write its lifecycle state there.
keybind
Package keybind is the vocabulary for keys written by name: one spelling in, and the spelling each surface reads out of it, Bubble Tea's for the manager's own keyboard and tmux's for the bindings a managed session carries.
Package keybind is the vocabulary for keys written by name: one spelling in, and the spelling each surface reads out of it, Bubble Tea's for the manager's own keyboard and tmux's for the bindings a managed session carries.
launch
Package launch assembles the shell command and environment a managed session starts with.
Package launch assembles the shell command and environment a managed session starts with.
mcpreg
Package mcpreg registers the agent-manager MCP server into the sessions the manager spawns, per tool.
Package mcpreg registers the agent-manager MCP server into the sessions the manager spawns, per tool.
mcpserver
Package mcpserver exposes agent-manager's session commands as MCP tools over stdio, so any MCP-capable agent discovers and calls them natively.
Package mcpserver exposes agent-manager's session commands as MCP tools over stdio, so any MCP-capable agent discovers and calls them natively.
notify
Package notify delivers a desktop or terminal notification when a managed session's status flips into a state that needs the user.
Package notify delivers a desktop or terminal notification when a managed session's status flips into a state that needs the user.
proctree
Package proctree lists the running processes on Windows, where there is no ps to ask.
Package proctree lists the running processes on Windows, where there is no ps to ask.
pwsh
Package pwsh renders text for PowerShell: quoted literals, encoded commands, and script files, plus the lookup of the PowerShell binary.
Package pwsh renders text for PowerShell: quoted literals, encoded commands, and script files, plus the lookup of the PowerShell binary.
remote
Package remote drives the agent-manager on another machine over SSH, through that machine's own CLI.
Package remote drives the agent-manager on another machine over SSH, through that machine's own CLI.
remote/remotetest
Package remotetest reads the ssh argv a remote.Client runs and writes what a host prints back, for a fake that stands in for ssh.
Package remotetest reads the ssh argv a remote.Client runs and writes what a host prints back, for a fake that stands in for ssh.
remote/value
Package value holds what a connection is and how its rows are named, with no SSH in it, so the rail and the connections UI can use them without importing package remote.
Package value holds what a connection is and how its rows are named, with no SSH in it, so the rail and the connections UI can use them without importing package remote.
report
Package report files a bug report or a feature request against the public agent-manager repository from an agent's MCP tool or from a shell.
Package report files a bug report or a feature request against the public agent-manager repository from an agent's MCP tool or from a shell.
sessioncmd
Package sessioncmd implements the session-scoped commands an agent uses to talk to its running manager: naming the session, declaring review targets, and operating managed terminals.
Package sessioncmd implements the session-scoped commands an agent uses to talk to its running manager: naming the session, declaring review targets, and operating managed terminals.
sessionreport
Package sessionreport wires each launch so the running agent reports every conversation it switches to, and a revive resumes the conversation the agent was on rather than the one it launched with.
Package sessionreport wires each launch so the running agent reports every conversation it switches to, and a revive resumes the conversation the agent was on rather than the one it launched with.
systheme
Package systheme resolves the color scheme the user's environment wants: the OS-level light/dark preference where a desktop exposes one, and the terminal's own background color as the fallback that still answers over SSH or on a bare server.
Package systheme resolves the color scheme the user's environment wants: the OS-level light/dark preference where a desktop exposes one, and the terminal's own background color as the fallback that still answers over SSH or on a bare server.
termseq
Package termseq writes control sequences to whatever terminal is actually drawing this process, tunnelling them past a hosting tmux when there is one, and tells whether that terminal is on this machine at all.
Package termseq writes control sequences to whatever terminal is actually drawing this process, tunnelling them past a hosting tmux when there is one, and tells whether that terminal is on this machine at all.
testenv
Package testenv holds test helpers shared across packages.
Package testenv holds test helpers shared across packages.
testfixture
Package testfixture stands in for the POSIX tools the pane-driving test suites launch, on Windows, which has neither cat nor sh.
Package testfixture stands in for the POSIX tools the pane-driving test suites launch, on Windows, which has neither cat nor sh.
ui
ui/connections
Package connections is the SSH connections in the UI: the stored list, what each host's last refresh left, which refreshes are in flight, the row a selection names, the selected row's screen and the add and edit dialog.
Package connections is the SSH connections in the UI: the stored list, what each host's last refresh left, which refreshes are in flight, the row a selection names, the selected row's screen and the add and edit dialog.
ui/dialogs
Package dialogs holds the small modal dialogs: confirm, rename, move, fork, the New Group form and the launch fix.
Package dialogs holds the small modal dialogs: confirm, rename, move, fork, the New Group form and the launch fix.
ui/focus
Package focus is the focused session: the pane frame it shows, the caret, scrollback, text selection, link hits and the keys and mouse it routes to the agent.
Package focus is the focused session: the pane frame it shows, the caret, scrollback, text selection, link hits and the keys and mouse it routes to the agent.
ui/focus/watch
Package watch follows one focused pane over a tmux control client: it streams the pane's frames to a Sink, forwards keys over the same client, counts the writes it is owed echoes for, and falls back to polling when the client is lost.
Package watch follows one focused pane over a tmux control client: it streams the pane's frames to a Sink, forwards keys over the same client, counts the writes it is owed echoes for, and falls back to polling when the client is lost.
ui/help
Package help is the key map: its sections built from the live key tables, its search, scroll and scope, and its frame.
Package help is the key map: its sections built from the live key tables, its search, scroll and scope, and its frame.
ui/notices
Package notices is the messages panel: the notices it builds from release, feed and setup facts, its cursor and body scroll, its keys and its frame.
Package notices is the messages panel: the notices it builds from release, feed and setup facts, its cursor and body scroll, its keys and its frame.
ui/presentation
Package presentation holds the pure text helpers every UI package shares: the row marks in both symbol modes, width-aware padding, truncation and centering, and the control glyphs.
Package presentation holds the pure text helpers every UI package shares: the row marks in both symbol modes, width-aware padding, truncation and centering, and the control glyphs.
ui/quick
Package quick is the docked prompt bar: its tool and choice, the list open above its prompt, its keys, clicks and view, and the answer or spawn enter asks for.
Package quick is the docked prompt bar: its tool and choice, the list open above its prompt, its keys, clicks and view, and the answer or spawn enter asks for.
ui/rail
Package rail is the session list: its rows, cursor, folds, search and filters, the drag reorder, the row menu, the legend and how each row is painted.
Package rail is the session list: its rows, cursor, folds, search and filters, the drag reorder, the row menu, the legend and how each row is painted.
ui/review
Package review is review mode: the diff and its navigation, comments and rounds, the repo picker, highlighting and wrapping, and the saved state it hands back.
Package review is review mode: the diff and its navigation, comments and rounds, the repo picker, highlighting and wrapping, and the saved state it hands back.
ui/settings
Package settings is the Settings dialog: its rows, the CLI and key pickers, the editor row, and what each step means for the values the store keeps.
Package settings is the Settings dialog: its rows, the CLI and key pickers, the editor row, and what each step means for the values the store keeps.
ui/spawn
Package spawn is the New Session form and the model choice it shares with the quick bar: their state, keys, validation and view.
Package spawn is the New Session form and the model choice it shares with the quick bar: their state, keys, validation and view.
ui/theme
Package theme holds the built-in palettes and the color math every UI package derives its tones from.
Package theme holds the built-in palettes and the color math every UI package derives its tones from.
update
Package update discovers agent-manager releases and keeps a bounded local catalog of their user-facing changes.
Package update discovers agent-manager releases and keeps a bounded local catalog of their user-facing changes.
wsl
Package wsl reports whether the process runs under WSL.
Package wsl reports whether the process runs under WSL.
tools
architecture/check-file-names command
Command check-file-names keeps each feature's files together: every root UI source starts with its feature's name, and every test file is named after the source beside it.
Command check-file-names keeps each feature's files together: every root UI source starts with its feature's name, and every test file is named after the source beside it.
architecture/check-file-sizes command
Command check-file-sizes fails when a Go source file reaches the line cap, so a file stays one a reviewer reads in a single pass.
Command check-file-sizes fails when a Go source file reaches the line cap, so a file stays one a reviewer reads in a single pass.
architecture/check-ui-moves command
Command check-ui-moves verifies that a UI-only file move preserves Go declarations and comments.
Command check-ui-moves verifies that a UI-only file move preserves Go declarations and comments.
badges command
Command badges refreshes the repository's generated badge assets.
Command badges refreshes the repository's generated badge assets.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL