{"id":51245066,"url":"https://github.com/lcsmas/orchestra","last_synced_at":"2026-06-29T04:00:26.287Z","repository":{"id":358731855,"uuid":"1219183115","full_name":"lcsmas/orchestra","owner":"lcsmas","description":"Run parallel Claude Code and Codex agents in isolated git worktrees","archived":false,"fork":false,"pushed_at":"2026-06-23T21:25:30.000Z","size":746,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-23T22:27:26.374Z","etag":null,"topics":["ai-agents","claude-code","codex","developer-tools","electron","git-worktree"],"latest_commit_sha":null,"homepage":"https://github.com/lcsmas/orchestra","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lcsmas.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-23T16:02:38.000Z","updated_at":"2026-06-23T21:25:35.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/lcsmas/orchestra","commit_stats":null,"previous_names":["lcsmas/orchestra"],"tags_count":49,"template":false,"template_full_name":null,"purl":"pkg:github/lcsmas/orchestra","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lcsmas%2Forchestra","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lcsmas%2Forchestra/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lcsmas%2Forchestra/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lcsmas%2Forchestra/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lcsmas","download_url":"https://codeload.github.com/lcsmas/orchestra/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lcsmas%2Forchestra/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34912252,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-29T02:00:05.398Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-agents","claude-code","codex","developer-tools","electron","git-worktree"],"created_at":"2026-06-29T04:00:19.030Z","updated_at":"2026-06-29T04:00:26.259Z","avatar_url":"https://github.com/lcsmas.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Orchestra\n\n\u003e **A Conductor-like app for Linux: run parallel Claude Code agents in isolated git worktrees — and let agents spawn agents.**\n\nIf you've seen [Conductor](https://conductor.build) on macOS, Orchestra is that idea for Linux (it runs on macOS and Windows too, built from source). Each agent gets its own branch in its own git worktree, and you watch them all from one dashboard: live terminal, cumulative diff, one-click PR.\n\n[![License: Apache 2.0](https://img.shields.io/badge/license-Apache_2.0-blue.svg)](LICENSE)\n![Platform](https://img.shields.io/badge/platform-linux%20%7C%20macOS%20%7C%20windows-lightgrey)\n![Electron](https://img.shields.io/badge/electron-33-47848F?logo=electron\u0026logoColor=white)\n\n![Orchestra dashboard with three parallel workspaces in the sidebar and a live agent terminal](docs/screenshot.png)\n\n## What makes Orchestra different\n\n**Agents can spawn other agents.** Every Orchestra agent is told, at session start, that it can delegate independent work to a brand-new worktree with its own autonomous agent — one `curl` to Orchestra's local socket and the new workspace appears in the dashboard, branch cut from base, agent already working. Spawned agents get the same capability, so a worktree agent can spawn worktree agents that spawn worktree agents. Ask one agent to parallelize a refactor and watch the sidebar fill up.\n\nEverything else you'd expect is there:\n\n- **Isolated worktrees** — each workspace is a real `git worktree` (own directory, own `HEAD`, shared `.git`); agents never clobber each other\n- **Live terminals** — real TTY per agent, full color, resize, scrollback\n- **Diff-first review** — side-by-side Monaco diff per workspace, refreshing while the agent works\n- **One-click PR** — commit → push → `gh pr create` from the dashboard\n- **Hook-based status** — running/waiting flips off Claude Code's own hooks, no polling or terminal scraping\n- **Self-naming branches** — the agent renames its branch once it understands the task\n- **Per-repo setup scripts** and **one-step archive** (worktree + branch removed together)\n\n## Install\n\n### Linux (AppImage)\n\nDownload the latest `Orchestra.AppImage` from the [releases page](https://github.com/lcsmas/orchestra/releases), then:\n\n```bash\nchmod +x Orchestra.AppImage\n./Orchestra.AppImage\n```\n\n\u003e **Note:** Requires FUSE. Without it, run with `--appimage-extract-and-run`.\n\nARM64/Asahi: no pre-built AppImage yet — [build from source](#build-from-source) for a native build.\n\n### macOS / Windows\n\nNo pre-built binaries yet — [build from source](#build-from-source). Contributions to the release pipeline welcome.\n\n## Build from source\n\nRequires Node 20+, plus the [`claude`](https://docs.anthropic.com/claude-code) CLI and [`gh`](https://cli.github.com/) on `PATH`. On Linux you'll also need build tools for the `node-pty` native module (`build-essential` on Debian/Ubuntu, `gcc-c++ make` on Fedora).\n\n```bash\ngit clone https://github.com/lcsmas/orchestra.git\ncd orchestra\nnpm install\nnpx electron-rebuild   # rebuild node-pty for Electron's node ABI\nnpm run dev            # vite + electron, hot reload\n```\n\n`npm run build` produces a distributable in `release/`.\n\n## How it works\n\n- **Worktrees** — each workspace lives at `~/.orchestra/worktrees/\u003crepo\u003e-\u003cbranch\u003e-\u003cuid\u003e/`, created with `git worktree add` off the configured base branch. Archiving removes the worktree and deletes the branch.\n- **Agents** — spawned via `node-pty` in the worktree, wired to an xterm.js terminal in the UI.\n- **Hooks** — Orchestra installs Claude Code hooks into each worktree's `.claude/settings.local.json`. They talk to a Unix-socket HTTP server in the main process: activity status, agent-driven branch rename, and the `/spawn` endpoint that lets any agent create a new workspace + agent. All hooks are env-guarded, so running `claude` outside Orchestra is a silent no-op.\n- **PRs** — `commit → push -u origin \u003cbranch\u003e → gh pr create --base \u003cbaseBranch\u003e`.\n\n## CLI\n\nOrchestra ships an `orchestra` command that talks to a running app over its local socket. The CLI is bundled inside the app itself — the same binary doubles as the CLI when invoked as `\u003capp\u003e cli …` — so there's no separate install:\n\n- **Linux (AppImage):** on first GUI launch the app writes a shim to `~/.local/bin/orchestra` (on most distros already on `PATH`) that re-invokes the AppImage in CLI mode. After launching the app once, just run `orchestra …`.\n- **Windows:** the app writes `orchestra.cmd` to `%LOCALAPPDATA%\\Orchestra\\bin`; add that dir to `PATH` (the installer can do this) and run `orchestra …`.\n- **Any platform / dev:** you can always invoke it directly — `\u003cApp\u003e cli peers`, or in dev `node dist-electron/cli.js peers`.\n\n```bash\norchestra peers                                       # list the other agent workspaces (id, branch, repo, status)\norchestra read \u003cid\u003e [--lines N]                       # print a workspace's transcript (default 80 lines)\norchestra message \u003cid\u003e \u003ctext...\u003e                      # send a prompt to a workspace\norchestra spawn --task \u003ctext\u003e [--repo \u003cpath\u003e] [--base \u003cbranch\u003e]   # spawn a new worktree + agent\norchestra rename \u003cid\u003e \u003cbranch\u003e                         # rename a workspace's branch\norchestra promote \u003cid\u003e                                 # promote a scratch session into an orchestrator\norchestra attach \u003cid\u003e \u003cparentId\u003e                       # nest an existing workspace under an orchestrator\norchestra detach \u003cid\u003e                                  # pop a workspace back out to its own section\norchestra add-repo \u003cpath\u003e                              # register a repo (path is resolved to absolute)\norchestra delete \u003cid\u003e --yes                            # delete a workspace (removes its worktree + branch)\norchestra --help                                      # usage for all commands\n```\n\nEvery response is JSON of shape `{ ok: true, ... }` or `{ ok: false, error }`. On `ok: false` or a non-2xx status the CLI prints the error to stderr and exits 1; on success it exits 0.\n\n**Socket discovery** — the CLI finds the app's socket in this order:\n\n1. the `ORCHESTRA_SOCK` environment variable, if set;\n2. else the contents of the well-known pointer file `~/.orchestra/sock` (its body is the absolute socket path);\n3. else it prints `Orchestra does not appear to be running (no socket found)` and exits 1.\n\n## Storage\n\n- Config + workspace list: `\u003cuserData\u003e/orchestra/store.json`\n- Worktrees: `~/.orchestra/worktrees/`\n- Per-workspace setup logs: `\u003cworktreePath\u003e/.orchestra/setup.log`\n\n## Contributing\n\nIssues and PRs welcome. For non-trivial changes, please open an issue first to discuss the approach.\n\n## License\n\nApache License 2.0 — see [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flcsmas%2Forchestra","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flcsmas%2Forchestra","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flcsmas%2Forchestra/lists"}