{"id":50931403,"url":"https://github.com/ianmurrays/claude-arbiter","last_synced_at":"2026-06-17T04:32:18.968Z","repository":{"id":357101014,"uuid":"1235371742","full_name":"ianmurrays/claude-arbiter","owner":"ianmurrays","description":"Orchestrate multiple Claude Code sessions from a single manager session","archived":false,"fork":false,"pushed_at":"2026-05-11T10:43:35.000Z","size":243,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-11T11:29:47.246Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ianmurrays.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"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-05-11T09:02:52.000Z","updated_at":"2026-05-11T10:43:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ianmurrays/claude-arbiter","commit_stats":null,"previous_names":["ianmurrays/claude-arbiter"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/ianmurrays/claude-arbiter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ianmurrays%2Fclaude-arbiter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ianmurrays%2Fclaude-arbiter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ianmurrays%2Fclaude-arbiter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ianmurrays%2Fclaude-arbiter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ianmurrays","download_url":"https://codeload.github.com/ianmurrays/claude-arbiter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ianmurrays%2Fclaude-arbiter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34434492,"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-17T02:00:05.408Z","response_time":127,"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":[],"created_at":"2026-06-17T04:32:17.786Z","updated_at":"2026-06-17T04:32:18.960Z","avatar_url":"https://github.com/ianmurrays.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"logo.png\" alt=\"Claude Arbiter\" width=\"400\"\u003e\n\u003c/p\u003e\n\n# Arbiter\n\nA command center for your entire development environment.\n\nArbiter turns a single Claude Code session into a pure orchestrator that manages **Claude Code workers**, **terminal processes**, and **browser surfaces** through [cmux](https://cmux.dev). It never reads files or writes code itself -- it delegates everything.\n\n## Features\n\n- **Claude Code workers** -- spawn and manage worker sessions that do the actual engineering\n- **Dumb terminals** -- start dev servers, test runners, build processes, database CLIs\n- **Browser surfaces** -- open URLs, take snapshots, interact with web pages\n- **Screen reading** -- monitor any terminal or browser via `cmux read-screen` and `cmux browser snapshot`\n- **Discovery** -- scan all running cmux surfaces on startup, adopt existing terminals\n- **Task dispatch** -- send structured tasks to workers, relay questions and permissions back\n- **Hub protocol** -- structured communication with workers over Unix domain socket, screen reading as fallback\n\n## Install\n\nIn any Claude Code session:\n\n```\n/plugin marketplace add ianmurrays/claude-arbiter\n/plugin install arbiter@claude-arbiter\n```\n\n## Usage\n\n### Shell aliases (recommended)\n\nAdd to your `~/.zshrc` or `~/.bashrc`:\n\n**If installed from the marketplace:**\n\n```bash\narbiter_sh=\"$(find ~/.claude/plugins/cache/claude-arbiter/arbiter -name arbiter.sh -path '*/shell/*' 2\u003e/dev/null | head -1)\"\n[ -n \"$arbiter_sh\" ] \u0026\u0026 source \"$arbiter_sh\"\n```\n\n**If working from a local checkout** (changes load immediately, no reinstall needed):\n\n```bash\nsource /path/to/claude-arbiter/arbiter/shell/arbiter.sh\n```\n\nThe script auto-detects which mode it's running in based on its own path.\n\nThis gives you two commands:\n\n```bash\n# Start the manager (command center)\narbiter\n\n# Start a worker manually (or let the manager spawn them)\ncd ~/projects/api-service\narbiter-worker api-service\n```\n\n### What the manager can do\n\nOnce running, tell the manager what you need:\n\n```\n\u003e \"Fix the auth bug in the API service\"\n  → spawns a Claude worker, dispatches the task, relays progress\n\n\u003e \"Start the dev server for the frontend\"\n  → opens a dumb terminal running npm run dev\n\n\u003e \"Open a browser to localhost:3000 and check the homepage\"\n  → opens a cmux browser surface, takes a snapshot\n\n\u003e \"What's running right now?\"\n  → scans all cmux surfaces, lists connected workers\n\n\u003e \"Run the test suite and tell me what fails\"\n  → opens a terminal running the tests, reads the screen, reports results\n```\n\nThe manager delegates everything -- it never touches files directly. It manages three types of surfaces:\n\n| Surface | Spawned via | Monitored via |\n|---------|-------------|---------------|\n| Claude Code workers | `spawn_session` MCP tool | Hub protocol + `cmux read-screen` |\n| Dumb terminals | `cmux new-workspace` | `cmux read-screen` / `cmux send` |\n| Browser surfaces | `cmux browser open` | `cmux browser snapshot` / `cmux browser screenshot` |\n\n### Manual start (without shell aliases)\n\n```bash\n# Manager\nARBITER_SESSION_NAME=manager ARBITER_SESSION_ROLE=manager claude \\\n  --dangerously-load-development-channels plugin:arbiter@claude-arbiter \\\n  --append-system-prompt-file ~/.claude/plugins/cache/claude-arbiter/arbiter/*/prompts/manager.txt \\\n  -n \"arbiter\"\n\n# Worker\nARBITER_SESSION_NAME=api-service ARBITER_SESSION_ROLE=worker claude \\\n  --dangerously-load-development-channels plugin:arbiter@claude-arbiter \\\n  --append-system-prompt-file ~/.claude/plugins/cache/claude-arbiter/arbiter/*/prompts/worker.txt \\\n  -n \"worker:api-service\"\n```\n\nOr have the manager spawn workers for you -- just tell it:\n\u003e \"Spawn a worker in ~/projects/api-service to fix the auth bug\"\n\n## Architecture\n\n```\n  Manager (command center)       Worker A              Worker B\n       │                           │                     │\n  [MCP server] ──────┐      [MCP server]          [MCP server]\n       │             │            │                     │\n  cmux CLI           ▼            ▼                     ▼\n  (terminals,  ┌──────────────────────────────────────────┐\n   browsers,   │           Hub (Unix socket)               │\n   screens)    │   ~/.claude/channels/arbiter/hub.sock     │\n               └──────────────────────────────────────────┘\n```\n\n- **Hub**: Auto-starts when the first session connects, auto-stops after 60s with no connections. Routes messages between sessions. Worker messages (questions, permissions, status updates) are routed only to manager sessions.\n- **MCP server**: Each Claude Code session gets its own instance. Exposes different tools depending on role (manager vs. worker).\n- **cmux**: The manager uses cmux CLI commands (via Bash) to manage terminals and browsers. No MCP tools needed for cmux -- the manager calls commands directly.\n- **State**: `~/.claude/channels/arbiter/` -- hub.sock, hub.pid, sessions.json, server.log\n\n## Environment variables\n\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `ARBITER_SESSION_ROLE` | `manager` or `worker` | `worker` |\n| `ARBITER_SESSION_NAME` | Display name for the session | Project directory basename |\n| `ARBITER_STATE_DIR` | Override state directory location | `~/.claude/channels/arbiter/` |\n\n## Skills\n\n- `/arbiter:manage` -- Full command center workflow: discovery, worker management, terminal/browser control, workflow recipes\n- `/arbiter:configure` -- Configure session identity, check hub status\n\n## Manager tools (MCP)\n\n| Tool | Description |\n|------|-------------|\n| `list_sessions` | See all connected Claude worker sessions |\n| `send_task` | Dispatch a task to a worker |\n| `spawn_session` | Start a new Claude worker in cmux |\n| `deregister_session` | Remove a stale session from the hub registry |\n| `respond_to_worker` | Answer a worker's question |\n| `respond_permission` | Allow/deny a worker's tool permission |\n| `broadcast` | Message all workers |\n| `set_status` | Update this session's status or current task |\n\nThe manager also uses cmux CLI commands directly via Bash for terminal and browser management. See the `/arbiter:manage` skill for the full command reference.\n\n## Worker tools (MCP)\n\n| Tool | Description |\n|------|-------------|\n| `report_status` | Send progress update to manager |\n| `ask_manager` | Ask the human a question (blocks until answered) |\n| `task_complete` | Signal task completion |\n| `set_status` | Update this session's status or current task |\n| `list_sessions` | See all connected sessions |\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fianmurrays%2Fclaude-arbiter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fianmurrays%2Fclaude-arbiter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fianmurrays%2Fclaude-arbiter/lists"}