Arrange a team of AI coding agents and ship work that passes your checks.
Arranger is a local web app for running a team of coding agents (Claude Code, Codex, Gemini CLI, pi, opencode, Cursor, Amp, or any command). You drag agents into a tree the way you'd staff a real team: managers split the work, workers do it, reviewers check it. You give the top agent one goal and a definition of done, a set of shell checks like go test ./.... Nothing counts as done until those checks pass.
It's a single Go binary with the UI built in and one SQLite file for state. There's no cloud account, and your code never leaves your machine.
One agent with one huge prompt drifts, forgets, and claims success. A team with small, checked goals doesn't:
- Checks decide "done", not the agent. Arranger runs your checks itself after every attempt and sends failures back with the exact output, up to three tries.
- Parallel and isolated. Every agent works in its own git worktree and branch, so agents on the same level run at the same time without touching each other's files. Your branches are never changed until you merge.
- Review before anything merges. Managers read each report's diff and accept it or send it back with feedback.
- You stay in control. Approve or edit a manager's plan before its team runs, live logs and status for every agent, a diff per agent, remove or promote single changes, revert any checkpoint, token limits per agent, and one-click merge into the branch you pick.
macOS and Linux (amd64 and arm64):
curl -fsSL https://arranger.dev/install.sh | shThis downloads the latest release, verifies its checksum, and puts arranger in ~/.local/bin (no sudo; it tells you if that folder isn't on your PATH yet). Set INSTALL_DIR to install somewhere else, or ARRANGER_VERSION=v0.3.0 to pin a version.
From source (Go 1.26+):
git clone https://github.com/arranger-dev/arranger && cd arranger && go build -o arranger ./cmd/arrangerYou also need git, and at least one agent CLI on your PATH (for example claude, codex or gemini), logged in the way you normally use it.
-
Start it.
arranger
Then open http://127.0.0.1:7889.
-
Point it at a repo. Click Settings in the header and enter the path to a git repository. Leave the base branch blank to use the current branch. The repo needs at least one commit.
-
Arrange the team. Press Teams & Tools in the sidebar to drop in a ready team (Feature team, Bug fix, Docs) and check which agent tools are installed, or drag agent types from the left onto the canvas. Drop one agent onto another to put it under that agent. Click a box to pick its tool (runtime), model, color and instructions in the Settings tab. Click Save.
-
Add goals. Select the top agent and press + Add goal in its Goal tab. Each goal has:
- Goal: the outcome, e.g. "Add rate limiting to /login".
- Acceptance criteria: what reviewers should hold the work to.
- Checks: one shell command per line. All of them must exit 0, e.g.
go test ./....
-
Run. Press Run and confirm the goals it will work through. They run one after another, each on the code the one before it left: a manager plans one subgoal (with its own checks) for each report, runs them in parallel, reviews and merges their work into its own branch, then runs its own checks. If a goal fails, it stops there or goes on with the next, as you choose. Links on the canvas animate while agents hand work down and report back, and the Logs tab shows each goal's run.
Want to check the plan first? Tick Let me approve the plan before the team runs under the manager's goals. The manager then stops after planning and shows you each report's goal and checks: edit them, skip or add reports, send the plan back with feedback, or approve it to start the team.
-
Iterate. Not quite right? Select the agent and write what should change in Request changes. Ask the top manager and it passes each part to the agents it concerns and re-runs only them; everyone keeps their work, and the changes are reviewed, merged and checked like any run. (To redo a finished goal from scratch, use Add again on it and press Run.)
Blocked because one report failed? Fix what it needed, then press Continue on the manager: the reports that finished keep their work, only the others run again, and then everything is reviewed, merged and checked together, with no new plan.
-
Review and merge. Open the Diff tab to see every change, remove or promote single hunks, or revert a checkpoint. When you're happy, press Merge… to merge the agent's branch into
main(or any branch, created if needed) as a merge commit, a squash, or a fast-forward.
Stats (click the token count in the header) shows tokens, time and first-try success, per agent and per runtime.
arranger [flags]
-addr string listen address (default "127.0.0.1:7889")
-data string data directory (default "~/.arranger")
-parallel int max agent processes running at once (default 4)
-log string log level: debug, info, warn or error (default "info")
-log-json log JSON lines instead of readable text
-version print the version and exit
The server logs runs, agent processes (exit code, time, tokens, cost) and every API change to stderr. Use -log debug to also see each check and every request.
- State:
~/.arranger/arranger.db(SQLite, WAL) holds projects, agents, goals, runs, and the event log. - Workspaces: each agent gets a worktree under
~/.arranger/worktrees/<agent>on brancharranger/<agent>, branched from its manager's branch or the project base. Every run first merges in new commits from that branch, so agents always work on the latest code (the Diff tab also has a Sync button). Every attempt is committed as a checkpoint. - Agents: each run starts the agent CLI headlessly (for example
claude -p --output-format stream-json) and parses its streamed output into messages, tool calls, file edits and token usage. - Live UI: the page gets updates over Server-Sent Events.
make # build ./arranger, stamped with version, commit and build date
make dev # run from source with debug logs and a throwaway data dir, on port 7778
make check # formatting, vet and tests
make dist # release archives for macOS and Linux in dist/The canvas page shows the running version, commit and build date at the bottom of the left sidebar, and arranger -version prints them.
The code is organized as cmd/arranger (entry point), internal/server (HTTP and SSE), internal/orch (running goals, managers, checks), internal/agents (agent CLI drivers), internal/git (worktrees, diffs, merges), internal/store (SQLite), and web (the embedded UI).
Push a tag like v0.3.0 to build release binaries for macOS and Linux (with make dist) and publish them on GitHub.
The landing page lives in its own repository, arranger-web.
The embedded fonts (IBM Plex Sans, IBM Plex Serif, Lilex) are licensed under the SIL Open Font License 1.1.
