amx

Run coding agents as tmux panes.

Each agent is an ordinary program in a tmux session of its own. amx starts it, watches it from outside, and leaves no process of its own running. You get one list to look in on, answer and stop your agents from, and a script gets commands that say what happened in an exit code.

curl -fsSL https://saifulapm.github.io/amx/install.sh | sh

Prebuilt for Linux and macOS, on x86_64 and arm64. amx needs tmux 3.2 or newer. Then run amx setup claude (or pi, codex, opencode) and amx doctor.

Read the docs Source on GitHub

Three agents on one repository: a permission prompt answered from the view, a diff reviewed and replied to from its card, and amx result in a script.

How it works

Each agent is a tmux session

amx new starts the agent in a detached session named amx-<id>, prints the id and exits. There is no daemon: attaching is tmux attaching, and killing amx kills nothing.

One list for all of them

Type amx to open the view. Agents are grouped under ready for review, needs input, working and completed. space opens an agent's conversation and enter attaches to it.

Answer prompts from the list

A permission prompt or a question shows on the agent's row. Answer it on the line under the agent's card, or from any shell with amx answer <id> y, without attaching.

Exit codes for scripts

amx result waits for the turn to end and prints the answer: exit 0 answered, 1 failed, 2 asking a question, 3 timed out. amx sub starts a subagent and waits for it in one call.

A worktree per agent

In a git repository each agent works in its own worktree on amx/<id>. amx diff shows what it changed, the row shows its pull request, and amx sweep clears the ones that landed.

claude, pi, codex and opencode

amx setup <agent> wires the agent's hooks so it reports each turn and question. Any other command still gets a pane and a row, read off its screen.

From a shell

amx new prints the new agent's id and nothing else, and every other command takes that id. amx ls prints a line per agent: its state, its id, how long it has worked, and what it is doing or asking.

$ amx new "port the importer"
port-the-importer-k3f
$ amx ls
working  port-the-importer-k3f     4s  Running Bash
waiting  fix-the-login-bug-a1b    12s  Claude needs your permission to use Bash
done     tidy-the-imports-d4e      2m  the imports are sorted