v3.1.0-rc.1

Juggling multiple AI accounts, solved

Orrery pools your Claude Code, Codex, and Gemini CLI accounts and switches between them with one command — no logging out, no re-auth, and your conversation picks up right where you left off.

Get Started View on GitHub
Native Install (macOS, Linux, WSL) — recommended
$ curl -fsSL https://offskylab.github.io/Orrery/install.sh | bash
Or via Homebrew (macOS)
$ brew install OffskyLab/orrery/orrery
Windows — via WSL
Claude Code on Windows runs inside WSL. Open PowerShell as Administrator and enable WSL first if you haven't already, then install Orrery inside the WSL shell using the native install command above.
PS> wsl --install
Activate shell integration
$ source ~/.orrery/activate.sh
Migrating from APT on Linux (v2.3.x or earlier)

If you installed Orrery via APT (apt install orrery), running orrery update may show already the newest version (2.3.x). The APT repo is no longer maintained, and the old update path didn't run apt update first. Run the native installer once to transition:

$ curl -fsSL https://offskylab.github.io/Orrery/install.sh | bash

This removes the APT-managed binary, installs the new orrery-bin, and switches future orrery update calls to the native install flow. Optionally clean up the stale APT source:

$ sudo rm /etc/apt/sources.list.d/orrery.list
$ sudo apt update

Built for switching AI accounts

🗂️

Account pool

All your logins in one place. Add a Claude, Codex, or Gemini account once — Orrery keeps the credential in a shared pool, ready to switch to any time.

One-command switch

orrery use --claude work swaps the active account for a tool. No logout, no password, no browser auth flow — just an instant switch.

💬

Sessions follow you

Switch accounts mid-task and claude --resume still works. Conversation history is shared across switches by default.

👻

Switch mid-conversation

Launch via orrery run claude and use /orrery:phantom inside Claude to swap account or sandbox without losing the conversation.

📦

Sandboxes for isolation

Need a fully separate config per client or project? An optional sandbox isolates memory, sessions, and env vars on top of accounts.

🐚

Per-shell, no daemon

Switching only affects the current shell. Other terminal windows stay on their own account, unaffected — and there's no background process.

🚀

Zero runtime overhead

Built in Swift — native binary, instant startup. Shell integration is a tiny eval'd function. Supports bash and zsh.

The account pool

Add each AI tool account once. Orrery keeps the credentials in a shared pool — switching is instant, with no logout and no re-auth.

$ orrery add --claude
# log in once — the account joins the pool

$ orrery list
claude accounts:
  - work     you@company.com, team
  - personal you@gmail.com, pro

$ orrery use --claude personal
# active Claude account → personal, instantly

orrery use switching between Claude accounts

The Model

Start with accounts — that's all most people need. Reach for a sandbox only when a context needs fully isolated config.

👤

Account

Your identity for a tool — the credential Orrery logs in with. Accounts live in a shared pool: add once, switch any time with orrery use. This is the layer you'll touch every day.

📦

Sandbox ADVANCED

An optional isolation layer: separate memory, sessions, and env vars. Most users never need one — reach for a sandbox when a client or project needs its own config space. Enter with orrery enter, leave with orrery exit.

💬

Session

Represents continuity: conversation history and project context. Shared across account switches by default — claude --resume just works.

Traditional tooling isolates dependencies (virtualenv) or runtime versions (nvm). Orrery extends that idea to AI accounts — and, when you need it, full config isolation.

How it works

1

Install shell integration

Run orrery setup once. It generates ~/.orrery/activate.sh and adds it to your rc file. Then source ~/.orrery/activate.sh to activate in the current shell.

activate.sh also checks for new Orrery releases in the background (once per day) and shows a notice at your next shell open.

2

Add your accounts

Run orrery add --claude (or --codex / --gemini) and log in once. The account joins a shared pool — repeat for every account you use.

3

Switch with one command

orrery use --claude personal makes that account active for Claude. No logout, no re-auth — and your conversation history stays intact across switches.

4

Resume where you left off

After switching accounts, claude --resume picks up your last session. Identity changes, continuity doesn't — the best of both worlds.

5

Optional: create a sandbox

When a client or project needs fully isolated config, run orrery sandbox create client-a, then orrery enter client-a / orrery exit to move in and out. Skip this entirely if you only switch accounts.

orrery sandbox create wizard orrery enter sandbox

Phantom mode — switch mid-conversation

Launch Claude with orrery run claude and a supervisor stays alongside it. From inside that Claude, the /orrery:phantom slash command swaps the active account or sandbox without restarting the conversation — Claude exits, the supervisor relaunches it with the new context and --resume, and you continue where you left off.

# inside a Claude session started with `orrery run claude`
> /orrery:phantom personal
  # → switch the claude account to 'personal'

> /orrery:phantom codex work
  # → switch the codex account

> /orrery:phantom sandbox client-a
  # → enter sandbox 'client-a'

/orrery:phantom mid-session switch

Phantom mode is the default for orrery run claude. To opt out (single-shot, no supervisor): orrery run --non-phantom claude. The slash command is installed automatically by orrery mcp setup.

The origin baseline

Your default config — where you are before entering any sandbox

origin is your normal setup: the accounts and per-tool config you'd use without Orrery at all. On first orrery setup, your existing tool configs (~/.claude/, ~/.codex/, ~/.gemini/) are moved into ~/.orrery/origin/ and the original paths become symlinks — your data is untouched, it just lives where Orrery can manage and sync it. Switching accounts with orrery use works right here at origin; you only need a sandbox when a context calls for fully isolated config.

orrery exit returns to origin from any sandbox. Orrery-specific variables like CLAUDE_CONFIG_DIR get unset, so each tool falls back to its native path — which now resolves to the managed config via the symlink. The experience feels like "exit Orrery", but you're still on Orrery-managed storage. orrery enter origin is rejected and points you at exit: origin is the absence of a sandbox, not a sandbox you enter.

Unlike regular sandboxes, origin cannot be deleted or renamed and uses the system's native config paths. It does support memory and session settings — use orrery sandbox memory isolate / share / storage to control where its project memory lives, and choose per-tool session sharing during orrery setup. Run orrery sandbox info origin to see full state.

Reverting the takeover. To take a tool fully out of Orrery (back to its pre-setup state), uninstall — it restores tools to their original locations and removes the shell integration:

$ orrery uninstall
# release everything + remove shell integration

Use Cases

💼

Work / Personal

Your company uses a Claude Team plan, and you have a personal Pro subscription. Add both to the pool, then flip between them with one command — no logout.

$ orrery use --claude work
# → company Team plan

$ orrery use --claude personal
# → personal Pro plan
💬

Resume After Switching

Mid-conversation with Claude on your work account? Switch to personal, do something, then switch back — your session is still there.

$ orrery use --claude work
$ claude
# ... working on a task ...

$ orrery use --claude personal
$ orrery use --claude work
$ claude --resume
# → picks up exactly where you left off
🏢

Multiple Clients SANDBOX

Freelancers and consultants juggling different clients — each needs its own credentials, settings, and memory. Give each client a sandbox for full isolation.

$ orrery sandbox create client-a
$ orrery sandbox create client-b
$ orrery enter client-a

AI Tool Integration

Orrery integrates with Claude Code, Codex CLI, and Gemini CLI via MCP. Delegate tasks across accounts, share memory between tools, and manage sessions — all from one place.

1

One-time setup

Run this in your project directory. Orrery registers itself as an MCP server and installs slash commands.

$ orrery mcp setup
2

Slash commands

After setup, use these directly in Claude Code:

/orrery:delegate Delegate a task to another account
/orrery:delegate Use the "work" account to review this PR for security issues
/orrery:sessions List sessions and resume by index
/orrery:sessions
then: orrery resume 1
/orrery:phantom Switch env mid-conversation — Claude relaunches with --resume
launch with: orrery run claude
then in Claude: /orrery:phantom work
3

Or just ask naturally

Claude understands your environments through MCP tools. You can say things like:

"Review this PR using my work account"
"Which account am I on?"
"Show me recent sessions and resume the last one"

Commands

Accounts — the everyday layer
orrery add --<tool>Add an account (--claude / --codex / --gemini)
orrery list [--tool]List accounts in the pool
orrery use --<tool> <name>Switch the active account for a tool
orrery showShow the active account per tool
orrery removeRemove an account from the pool
Sandbox state
orrery enter <name>Activate a sandbox in current shell
orrery exitLeave the current sandbox, return to origin
orrery which <tool>Print tool config dir path
Sandbox CRUD
orrery sandbox create <name>Create a sandbox (wizard)
orrery sandbox delete [name]Delete sandbox(es) (multi-select if no name)
orrery sandbox rename <old> <new>Rename a sandbox
orrery sandbox listList sandboxes
orrery sandbox info [name]Show sandbox details
orrery sandbox currentPrint active sandbox
Sandbox config
orrery tools add [-e <name>]Add a tool (wizard)
orrery tools remove [-e <name>]Remove a tool
orrery sandbox set-env <K> <V>Set a per-sandbox env var
orrery sandbox unset-env <K>Remove a per-sandbox env var
orrery sandbox memory storage <path>Redirect memory to external path
Sessions
orrery sessionsList all sessions for current project
orrery sessions --claudeClaude sessions only
orrery sessions --codexCodex sessions only
orrery sessions --geminiGemini sessions only
Sandbox sync (experimental)
orrery sandbox sync daemonStart the sync daemon
orrery sandbox sync statusShow daemon and peer status
orrery sandbox sync pair <host:port>Pair with a remote peer
orrery sandbox sync team createCreate a new team
orrery sandbox sync team inviteGenerate an invite code
orrery sandbox sync team joinJoin a team
orrery sandbox sync rendezvousRun a rendezvous server
Shell integration
orrery setupInstall shell integration
orrery initPrint shell function (eval)
orrery updateSelf-update (install script or Homebrew)