Conduct your coding agents · Linux · macOS

Run coding agents side by side. Ship their best work.

arranger runs Claude Code, Codex, Gemini and pi on your laptop and your SSH boxes, each on its own git worktree, in a fast native chat or their own terminal. Whoever is blocked on you comes to the top. When they're done, you see what they checked, send notes back, and merge their work.

curl -fsSL https://arranger.dev/install.sh | sh
native Rust, no webview, 15MB for both binaries
♩ = 120 · 2 need you
needs yourunningdoneidle
Current arranger workspace with six tasks across three machines, task pipeline, bookmarks and usage statusCurrent arranger workspace with six tasks across three machines, task pipeline, bookmarks and usage status
YOUR WORKSPACE

Every task. Every machine. One workspace.

Keep parallel work in view, with each task on its own branch and worktree. Follow the conversation, inspect tool calls and edits, or open a terminal. Search the sidebar to jump to the task you want.

  • Approve, deny or answer in place. Permission requests and questions surface at the top with what the agent wants to do. Use ⌘J and ⌘K to move between agents.
  • Chat or terminal, per task. Claude Code and Codex start in chat with streaming replies, tool diffs, plans and slash commands. Pick terminal mode for the agent’s own interface. Mention repository files with @ in a new task.
  • Every machine in one list. Local and remote tasks share one sidebar. Open See all to browse ended and merged tasks, grouped by machine.
  • Revive or clone a take. An ended agent resumes its last session in the same worktree; ⌘D forks a task, chat and edits included, to try another approach or model.
  • Keyboard first, or no window at all. Vim keys are one toggle away, and every action works from the shell: arranger ls, approve 3, commit 3.
CI

No window required. Put agents in your pipeline.

Everything the window does is a command. Start an agent from a nightly job or a failing build, wait for it, check its work with your own tests, and keep the result ready for review in the morning.

  • Scriptable from start to commit. arranger new prints the task id; ls shows its state; commit <id> commits the task’s changes.
  • Exit codes you can gate on. arranger run <id> cargo test runs in the task's worktree and exits with the command's status. Use the result to decide whether to continue.
  • Nobody to click Allow. When a task reaches needs-you, the script decides: approve, or deny with a reason the agent reads and works around.
  • A record of what happened. arranger chat <id> prints the conversation and events the timeline, ready to attach as build artifacts.
ci · nightly #418running
CI jobarranger daemon
AGENTNEWAGENTCHECKSCOMMIT
REVIEW

Know what was checked before you merge.

A green diff isn't proof. Review puts the change beside the latest result of every test, build and lint command the agent ran in that worktree, so you see what failed, what it fixed, and what it never ran.

  • A summary of the whole chat. Not just the agent's last message: what it was asked, what it changed and why.
  • Notes go back to the agent. Comment on a line and send it. The agent picks up where it was, in the same worktree.
  • Run your own checks. arranger run 3 cargo test runs in the task's checkout, uncommitted edits included, and keeps the exit status, so a script can gate the merge.
  • Revert by hunk. Keep the good part of a change without starting over.
#3 fix the flaky testinto main
SUMMARY
The retry test raced the backoff timer. Claude made the clock injectable, added a deterministic backoff test, and left a clippy warning it didn't get to.
FILES
Msrc/queue/retry.rs+42 −9
Atests/retry_backoff.rs+68
CHECKS
✓cargo test -p queuepassed
✗cargo clippy -- -D warningsfailed
●cargo test --workspacerunning
cargo test --workspace0:41

      
retry.rs:118 · clippy still fails on the unused import here. Fix it and rerun clippy before I merge.
Send to claudeMerge
YOUR MACHINES

Add your machines. Run agents wherever you need them.

Connect a dev server or GPU box over SSH and choose it when you start a task. Agents run on that machine, using its repository, tools and compute, while you follow their work from the same workspace.

Add a machine from Settings → Add machine or arranger machine add. Arranger uses your existing SSH keys and ~/.ssh/config. Local and remote tasks appear side by side, ready to chat, review and merge.

Your machinesone workspace
CHOOSE WHERE YOUR AGENT RUNS
●This Maclocal
●gpu-boxSSH
●dev-serverSSH
Pick a machine for each task. Run an agent on your dev server and another on your laptop. Their conversations, changes and status stay together in Arranger.
MEMORY

Twenty agents. 49 MB.

Native Rust from daemon to window: no webview, no Electron, no browser engine idling in the background. The agents use the memory; arranger barely does.

49MBdaemon memory with 20 agents running
20/20agents alive, each on its own worktree
15MBboth binaries together, daemon and window
measured on macOS · release build$ just bench-mem
# starts the daemon, spawns 20 agents through it
daemon RSS: 49312 KB (20/20 fake agents running)

$ ls -lh target/release/arranger*
9.3M  arranger       # CLI and daemon
5.5M  arranger-gui   # the window
THE SMALL THINGS

Built for a long day of conducting.

The parts you only notice when they're missing.

Pick the player and the part

⌘N, then Tab for the agent, Ctrl+Tab for the model, Alt+Tab for reasoning effort. Choose the machine and the base branch in the same box.

@ any file

Type @ in a prompt to find files in that machine's repository. Ignored files stay out of the list.

A soft ding

When an agent finishes or needs you, you hear it, even with the window buried. One toggle turns it off.

See all, act on many

Every task on a machine grouped by state: Approve, Answer, Review, Open or Revive from one row. V selects many to delete at once.

Vim keys, documented

j k through agents, h l through tabs, y / n to approve. ? shows every binding.

Eight colour schemes

Gruvbox, Ink, Moss, Ember, and their light partners Gruvbox Light, Snow, Paper and Linen.