Show HN: Run multiple Claude Desktop instances side by side on macOS A developer released claude-orchestrator, a macOS command-line and menu-bar tool that runs multiple independent Claude Desktop instances side by side, each with its own profile, account, sessions, Claude Code config and working directory. The tool launches the original signed /Applications/Claude.app with a different data directory rather than copying, patching or re-signing it, so code signature, notarization, permissions and the built-in updater keep working. Version 0.2.0 renamed the tool from claude-ctl to claude-orchestrator while keeping the data directory at ~/Library/Application Support/claude-ctl/ so existing instances keep working. Run Claude Desktop as many independent instances as you want on macOS — each with its own profile, account, sessions, Claude Code config and working directory. claude-orchestrator never copies, patches or re-signs /Applications/Claude.app . It launches the original, signed app with a different data directory, so code signature, notarization, permissions and the built-in updater all keep working. claude-orchestrator new work --workdir ~/workspace/my-project claude-orchestrator start work claude-orchestrator list Or run claude-orchestrator with no arguments and do all of it from a menu see Interactive mode interactive-mode . Renamed in v0.2.0: claude-ctl is now claude-orchestrator , because the tool manages sessions as well as instances. The data directory stays at ~/Library/Application Support/claude-ctl/ , so existing instances keep working. Keep work, school and a second work account signed in side by side: claude-orchestrator new work claude-orchestrator new school claude-orchestrator new client --workdir ~/workspace/client optional default project claude-orchestrator signin work --exclusive sign in, one instance at a time claude-orchestrator signin school --exclusive claude-orchestrator signin client --exclusive claude-orchestrator project import --from default reuse the projects you already have claude-orchestrator project add ~/workspace/api or add new ones: every instance gets them claude-orchestrator start work && claude-orchestrator start school && claude-orchestrator start client claude-orchestrator agent --install menu bar icons to start/stop/switch signin --exclusive closes the other instances while you sign in, because the browser hands the login back through a single claude:// link that only one running Claude can receive. It reopens them when you press Enter. Run the command with no arguments in a terminal: claude-orchestrator Everything day-to-day can be done from the menu. You don't need to remember commands, session ids or file paths: Claude Orchestrator ─────────────────────────────────────── ❯ Work ● running Personal ● running School ○ stopped not logged in ─────────────────────────────────────── + New profile Projects… | Screen | Options | |---|---| | Home | Every profile with running / stopped , and a warning when it is not logged in. Below them: + New profile and Projects… | | Profile logged in | Start , or Stop / Restart when it is running · Sessions… · Log in again… | | Profile not logged in | Log in only. The other options appear after you log in | | Sessions… | The profile's sessions, newest first. Type to fuzzy-filter by title, account or project folder | | A session | Its details account, project, start, last activity, messages, size, id · Copy to… · Move to… | | + New profile | Asks for a name, creates the profile and opens its menu so you can log in right away | | Projects… | The registered projects and their state in each profile · + Add project · Apply a projects.json… · Export to a projects.json… · Sync all profiles · Import from a profile… | | A project | Its folders, permission mode and per-profile state · Remove… | Keys: ↑/↓ or Ctrl-P / Ctrl-N to move, Enter to choose, Esc to go back in a search box, Esc clears the text first , q on the home screen to quit, Ctrl-U to clear a search or text field, Ctrl-C to cancel. What happens behind the screens: - Log in / Log in again… run the signin --exclusive flow. After you confirm, the other running instances are closed while you log in, so the browser's claude:// link comes back to the right window. They are reopened when you press Enter. Use Log in again… when a login has expired or the profile should use a different account. - Copy to… / Move to… ask for the target account skipped when there is only one other account , then show what will happen and wait for y . Instances that have to be closed are shut down one after the other, the session is transferred, and they are reopened even if the transfer fails. A copy closes only the target and the source keeps its session. A move closes both and keeps the original as a backup. - Anything that writes logging in, transfers, project changes asks for confirmation first, then prints the same report as the matching command and waits for Enter. - The menu refuses to close an instance it is running inside for example a terminal in Claude's Code tab , because that would end the menu halfway through. Run it from a regular terminal such as Terminal or iTerm. A project is a folder that shows up as an environment in the Code tab of every profile. Instead of adding them one by one, describe them in a file and apply it: 1. Copy the example file and edit the paths: mkdir -p ~/.config/claude-orchestrator cp examples/projects.json ~/.config/claude-orchestrator/projects.json examples/projects.json https://github.com/Yuix-Networks/claude-orchestrator/blob/main/examples/projects.json shows every option: a minimal entry, a custom name, extra folders, a per-project permission mode and shared defaults . If you already have projects, Projects… → Export to a projects.json… writes them to the file so you can start from there. 2. Open Projects… → Apply a projects.json… . The default path is already filled in. Press Enter. 3. Check the preview. The file is checked as a whole first, and every problem a missing folder, a duplicate name, a misspelled key is listed at once. Nothing changes until the file is clean. Apply ~/.config/claude-orchestrator/projects.json + website ~/workspace/website + Mobile app ~/workspace/mobile/app ~ api → API - old-project not in the file ❯ Apply changes Apply and remove the 1 not in the file Cancel + is added, ~ is changed or renamed, and - is registered but missing from the file. Apply changes keeps those. Apply and remove… deletes them, which makes the registry match the file exactly. 4. The projects are written to every profile. A profile that has not logged in yet gets them on its first start after login. The Projects… list shows where each project stands: ✓ in sync, ✗ missing fix it with Sync all profiles , … waiting for the first login. The same file works without the menu project apply --dry-run , project apply , project apply --prune . See Keeping the list in a file keeping-the-list-in-a-file for the full format and the details of how Claude Desktop stores environments. Set CLAUDE ORCHESTRATOR HOME to point any command, the menu included, at a separate data directory. You can then experiment without touching your real profiles: CLAUDE ORCHESTRATOR HOME=/tmp/co-test claude-orchestrator Claude Desktop stores everything in a single Electron profile, so a second launch either reuses the first one's session or refuses to start. Copying the app bundle works, but the copy falls behind on updates and has to be rebuilt every time. claude-orchestrator uses the mechanism Claude already ships for this: | What | How | |---|---| | Separate Electron profile cookies, sessions, settings | --user-data-dir=