Skip to main content
orchestra enable gives every agent on your machine Orchestra’s tools: recall before re-deriving past work, remember when a decision is made, and your issues. You type nothing else. The server is the orchestra binary you installed, started by the agent as orchestra mcp. It talks to the agent over stdio, so there is no URL to configure and no separate sign-in: it uses the same backend and sign-in as the rest of the CLI.

What enable does

For each client installed on this machine, enable registers the server once, for you, in every project, and prints one line saying what it did:
A client that is not installed is skipped and says so. Running enable again changes nothing. When an older Orchestra install registered the server at a different path, enable points it at this one. When a client runs Orchestra from a build in a checkout of Orchestra’s source (node .../packages/mcp/dist/bin.js, or node .../apps/cli/dist/index.js mcp), enable names each one and asks before pointing it at this install; the answer is yes when you press Enter, pass --yes, or run enable with no terminal. When something else is registered under the name orchestra (a hosted server URL, a wrapper of your own), enable leaves it alone and tells you. The desktop app’s Orchestra Local setup does the same registration.

The tools an agent gets

Every tool definition sits in the agent’s context on every turn, whether or not it is used, so the server offers a small set by default: These are the tools agents actually called: in 998 Orchestra tool calls across 128 recorded Claude Code sessions, these nine were each used in at least ten sessions and made 94% of the calls. In Orchestra Local, the server offers every tool Local answers on your laptop, with no setting: recall, remember, list_memories, forget, share_memory, the team tools message_teammate and ask_team, the setup tools, get_me, list_people, the issue tools list_issues, get_issue, save_issue and add_issue_comment, list_sessions, and the tools that answer why code is the way it is: sessions_for_commit, get_session, list_session_messages and fork_session. On Local, list_sessions lists your sessions and, on every plan, the sessions teammates published to the repo’s git, newest first, each with the name of the person who started it. get_session and list_session_messages read a teammate’s published session read only, on every plan. fork_session makes it a new private session of yours, on the Team plan (forking your own is free). Local also offers dispatch_session and post_session_message, so one agent session can run others on your laptop (see One session runs others). Local’s issues live on your laptop, and on the Team plan they reach your teammates through the repo’s own git remote, never through Orchestra’s servers (see Issues). An issue from Linear is not on Local: the tools say so and point to the hosted workspace.

Why was this written?

On Orchestra Local, an agent can go from a commit, a line of code or a pull request to the session that wrote it, and read it. sessions_for_commit takes exactly one of commit (a SHA or any revision), file with line (git blame names the commit that last wrote it), or pr (its commits). It reads the Orchestra-Session trailer that Orchestra’s git hook adds to each commit made in a saved session, and answers with each session, whose it is, and atEventId: the message the commit’s turn ended on. Your sessions come from your laptop; a teammate’s from what they published to the repo’s git. list_session_messages then reads it, and fork_session with atEventId continues it from that moment as a new private session of yours. A commit made without the git hook says so (run orchestra enable to add it), and a teammate’s session that was never published says whose it is, so you know who to ask. The same answer is orchestra why in a terminal.

One session runs others

On Orchestra Local, an agent in Claude Code or Codex can start other agent sessions on your laptop and hear back from them, with nobody carrying messages in between. dispatch_session starts a session from a prompt, in the harness you name (claude-code, codex and the others your laptop has). It runs in its own git worktree under ~/.orchestra/worktrees, on a new branch made from the remote’s default branch as it is now, so it never edits the folder you or the dispatching agent are working in. The answer comes back at once with the session’s id, its folder and its branch. No terminal window opens: the session runs in the background, and you can watch it with orchestra tui or in the desktop app. Orchestra Local starts sessions on this machine only. A session is named by its id or by any unique start of it, six characters or more: the eight characters every screen shows are enough. get_session, list_session_messages and post_session_message all take that short id. post_session_message reaches any session you can see: one of your own, or a teammate’s live session on their laptop over the relay, where their own rule decides whether your agent may message it. A private session of someone else’s is never listed, read or written to, and its short id reads exactly like one that does not exist. list_sessions and get_session say, for each session, its harness, repository and branch, whether it is live, idle or ended, what it did last, needsYou when its agent asked a question and is waiting, and dispatchedBy: the session that started it. A dispatched session knows who dispatched it, because its prompt says so. It is told to report with message_session when it starts, opens a pull request, is blocked or is done. Orchestra also reports by itself, so nothing depends on the agent remembering: when the worker starts, when it opens a pull request, when it asks a question and waits, and when it stops, with its last words. The pull request and question reports come from Claude Code workers today. Each report arrives in the dispatching session at its next tool call, or wakes it if it is idle, and names the worker’s session. This works when the dispatching session is a plain Claude Code session in a terminal with Orchestra enabled.

Turn on more tools

The rest come in groups. Turn a group on with the mcp.tools setting: In ~/.orchestra/settings.json, for every project:
Or in a repository’s .orchestra/settings.json for that project only, or in the environment: ORCHESTRA_MCP_TOOLS=docs,sessions. "all" turns on every group. The server reads the setting when an agent session starts it, so a change reaches the next session.

Check it

orchestra doctor says, for each installed client, whether the server is registered and the command that fixes it when it is not. A client whose orchestra server runs something other than this install (an older install, a build from a checkout, or someone else’s server) gets a warning that names the client, what it runs, and the fix: orchestra enable for one of Orchestra’s own. In the folder you run doctor in, it also warns about a Claude Code server registered for that folder alone (local scope, or the folder’s .mcp.json), which Claude Code uses there before the one for every project. It then starts the server the way a client would and reports the tools it answers with and which groups are on:
In Claude Code, claude mcp list shows orchestra: ... - ✔ Connected.

Leave a client out

To skip registration, set ORCHESTRA_MCP_CLIENTS=off when you run enable, or name only the clients you want: ORCHESTRA_MCP_CLIENTS=claude-code,codex. To remove the server from a client, use the client’s own command, for example claude mcp remove --scope user orchestra or codex mcp remove orchestra.