Delegate branch-sized tasks to other agents
Orchestra gives one coding agent two skills for assigning work to others. Each player works in its own tmux session, in a Git worktree or an existing directory, with Claude Code, Codex, Gemini, Copilot or OpenCode. It runs on this machine, and reaches your other machines through n10 Desktop or Beam.
- feature/search · claude
- fix/flaky-restore · codex
- feature/palette · claude
- chore/deps · gemini
- feature/export · codex
Four reports a player can send
Players work independently and send four kinds of reports. Each report appears in the orchestrator's conversation so it can respond.
PROGRESSA milestone
The player reports progress such as passing tests, completing a section or opening a draft PR. The orchestrator can track the work without reading the player’s screen.
QUESTIONA decision
If the task allows two reasonable approaches, the player asks which to use. The orchestrator answers or passes the question to you.
BLOCKEDA blocker
The player stops for missing credentials, failing dependencies or tests it cannot fix. It reports the problem instead of guessing.
DONEFinished, with caveats
The player reports its results and what it did or did not verify. The orchestrator checks the commits, tests and PR.
How the orchestrator talks to you
The orchestrator keeps track of what you have acknowledged, asks for at most one decision per message with a suggested default, and restates the state that decision needs, so you don't have to reread the thread. The design draws on research on attention and working memory. Small benchmarks in notaharness/plugins #8 and #9 haven't shown a clear improvement.
After a silence, you answer only “yes ellipsis”
Earlier draft (9da6d10)
“I've told the truncate player to add a single…that counts towardn”
“OK to merge fix/parse-duration into main? It's verified: a 1-line fix plus tests, and all 4 pass.”Later draft (242d759)
“truncate("hello world", 5) returns "hell…"”“should slugs be ASCII-only ("cafe-uber") or keep Unicode letters ("café-über")?”
Replies to the same message at the same point in the benchmark in plugins#9, one scripted run of each in a toy repository, quoted as written. Both are drafts from before the guidance shipped: the earlier one already contains plugins#8, and the guidance changed again after the later one. The earlier draft already gave useful context here. Neither benchmark showed a clear overall improvement. In plugins#8 the new guidance still asked several decisions at checkpoints and repeated a pending question; plugins#9 called its results mixed.
- Cowan (2001), working-memory capacity
- Iqbal & Bailey (2008), interruptions at breakpoints
- Altmann & Trafton (2007), resuming an interrupted task
- Alderson et al. (2013), working memory in adults with ADHD
- Amershi et al. (2019), Microsoft’s guidelines for human-AI interaction
The Orchestra README explains the approach and its sources.
Each player is a tmux session
Orchestra stores player state as user options on its tmux session. There are no state files or daemons, the tags end with the session, and anything connected to the tmux server can read them.
n10 reads the same tags, and Beam carries commands and reports between machines. The tools work together without depending on each other's internals.
n10 reads the same tags and lists worktree players beside its own worktrees. n10 Desktop delivers a remote player’s reports into the orchestrator’s pane or Claude session; for a Codex orchestrator, run Orchestra’s relay.sh.
Every orchestrator script except relay.sh takes --machine with the name of a machine in your Beam fleet. That machine needs Orchestra installed at the same path under $HOME, the repository, and the player’s agent CLI. The Git and tmux commands run there, and reports come back through the fleet or wait on disk while your laptop is closed.
- @orchestra-spawner
- = orchestra
- @orchestra-repo
- = /code/shop
- @orchestra-worktree-path
- = /code/shop/.claude/worktrees/feature-search
- @orchestra-branch
- = feature/search
- @orchestra-session-type
- = worktree
- @orchestra-agent
- = claude
- @orchestra-orchestrator
- = tmux:planning
- @orchestra-last-report
- = DONE 2026-09-21T14:02:07Z inbox
or n10 — whichever program created the session
the main checkout
the worktree’s directory, the session’s identity; required
the branch when the player started
worktree or dir for players; n10’s terminal tabs are shell or agent
what is actually running in the pane
where reports go; beam:<peer>/… when that is another machine
kind, time and outcome of the last report
Install Orchestra
Claude Code
/plugin marketplace add notaharness/plugins/plugin install orchestra@notaharnessRun /orchestra:orchestrator with a task. Without socat or nc, run Claude Code inside tmux.
Codex and other agents
npx skills@latest add notaharness/plugins --global --skill orchestrator playerStart a new session and invoke $orchestrator. Install both skills in the same scope.
Requires tmux 3.x, Git, python3 and the authenticated CLI of each agent you run as a player. Delivering reports into a Claude Code orchestrator's inbox needs OpenBSD nc or socat. Beam is only needed for players on other machines.