claude yourself in a repo where you ran orchestra enable,
Orchestra captures the session from the transcript Claude Code writes to disk.
Claude Code writes that file continuously, line by line, while it works.
Orchestra reads it the same way: its work appears in the web app and the
terminal client about a second after Claude Code writes it.
There is nothing to set up beyond orchestra enable, run once in each
repository you want saved, not once per agent.
Every agent, in the repositories you enable
orchestra enable turns on the repository you run it in, with its worktrees.
From then on, sessions there from Claude Code, Codex, Gemini CLI, Cursor and
OpenCode are saved as they work, with no command per agent and no flag.
Sessions in any other folder on the machine are never read or sent. It prints
what it found:
- From now on, not before. Sessions written before you ran
enableare not imported.orchestra importbrings in earlier ones, from enabled repositories only. - Only the repositories you enabled. The list lives on your machine.
orchestra disablein a repository takes it off. A session counts as in a repository when it ran in the checkout, a folder inside it, or one of its worktrees (including a worktree you have since removed). - Claude Code still opts in per repo. Its sessions are followed when their
own hooks register them, which happens in repos where you ran
orchestra enable. The hooks add what the transcript alone cannot give: each turn saved the moment it ends, teammates’ messages handed to the agent between turns, and prior context at session start. - It starts at login.
enablestarts the tailer right away and registers it to start at login (a launchd agent on macOS, a systemd user unit on Linux), because only Claude Code has hooks that could bring it back. - Only into the store you enabled. The machine is enabled for the
Orchestra configuration
enableran with. A tailer serving another configuration follows Claude Code only. - Never what you kept private. Off-the-record sessions and sessions Orchestra itself launched are skipped before their transcripts are read.
orchestra disable stops following the machine’s agents, removes the login
start, and removes this repo’s hooks.
How it works
- One capture tailer per machine.
orchestra enable, your login, or the first Claude Code session you start launches it in the background. It follows the sessions in every repository you enabled. Five sessions still mean one tailer. - The hooks keep it running. The SessionStart and UserPromptSubmit hooks
that
orchestra enableinstalls check for a running tailer. If none is running, they start one and return right away; they never wait for it. - It stops when you do, unless the machine is enabled. On a machine where only Claude Code is followed, after 20 minutes with no session activity and nothing running on this machine’s session supervisor, the tailer exits, and your next session start or prompt brings it back. On an enabled machine it keeps running, since nothing else would restart it for the other agents.
- A large session costs a bounded share of one core. Each pass reads the whole transcript, so after a pass the tailer waits about nine times the CPU that pass took before reading the same session again. An ordinary session waits nothing; a session of hundreds of megabytes is saved every few seconds instead of continuously.
- It captures only what you opted in. A session is tailed only if its own
hooks registered it, which happens only in repos where you ran
orchestra enable. It is captured only into the store that repo is configured for. A repo set up for a different store keeps capturing per turn through its own Stop hook. - It is the same capture. The tailer runs the same capture as the Stop hook, including secret redaction. Both can capture the same turn; each message is stored once.
When capture is per turn
Without a running tailer, a session is still captured, but in one batch when each turn ends. This is the case:- between the tailer idling out and your next prompt;
- when
ORCHESTRA_CAPTURE_TAILER=offis set; - for sessions in a repository signed in to a different server than the one the tailer is serving.
Checking it
~/.orchestra/capture-tailer.log.
After you rebuild or update
The tailer outlives your sessions, so after a rebuild the one already running is still the old code. Every build writes a stamp of the source it was built from (apps/cli/dist/build-stamp.json), and the running tailer records the
stamp it started with. When they differ, your next prompt starts a
replacement, which asks the old tailer to finish what it is capturing and step
aside before it takes over. Nothing in flight is dropped, and a replacement
that cannot start leaves the old one capturing.
orchestra status and orchestra doctor say when the running build is not
the installed one: