{"_id":"@anujmau/agent-conductor","_rev":"2-4440edb64927f10cf425d1f0bcff8eff","name":"@anujmau/agent-conductor","dist-tags":{"latest":"0.3.2"},"versions":{"0.3.1":{"name":"@anujmau/agent-conductor","version":"0.3.1","keywords":["ai-agents","multi-agent","codex","opencode","claude","orchestrator","llm","git-worktree","parallel"],"author":{"name":"Anuj Mhatre"},"license":"MIT","_id":"@anujmau/agent-conductor@0.3.1","maintainers":[{"name":"anujmau","email":"anujmhatre125@gmail.com"}],"homepage":"https://github.com/a18-n03/agent-conductor#readme","bugs":{"url":"https://github.com/a18-n03/agent-conductor/issues"},"bin":{"agent-conductor":"bin/cli.js"},"dist":{"shasum":"569bf77f814bcf79f4edc622316987415c900649","tarball":"https://registry.npmjs.org/@anujmau/agent-conductor/-/agent-conductor-0.3.1.tgz","fileCount":20,"integrity":"sha512-v61drBwDbYkYIw0S5iVyuYNA/BSjxSJGA6MCnij//99su+88KysYA+0xO9IBc33n4R2BkOGwc+rm+PAec1CJ0Q==","signatures":[{"sig":"MEUCIGl0XqPX6fk6GINoDsfmQljDkcKqUFhEYt381Q2mKcXYAiEA8UZkqsTK9NDfxPrctbpp5+A3k9G4fffUHW+NM6d79V8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54984},"main":"bin/cli.js","engines":{"node":">=16"},"gitHead":"d5f9472a180448bafbafce3bc9f33191dc7a3444","scripts":{"postinstall":"node bin/setup.js"},"_npmUser":{"name":"anujmau","email":"anujmhatre125@gmail.com"},"repository":{"url":"git+https://github.com/a18-n03/agent-conductor.git","type":"git"},"_npmVersion":"12.0.2","description":"Run Codex CLI, OpenCode CLI and Claude Code simultaneously on isolated git worktrees - LLM task planner, parallel headless runners, auto-merge","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/agent-conductor_0.3.1_1787727153553_0.9176139258340978","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@anujmau/agent-conductor","version":"0.3.2","description":"Run Codex CLI, OpenCode CLI and Claude Code simultaneously on isolated git worktrees - LLM task planner, parallel headless runners, auto-merge","main":"bin/cli.js","bin":{"agent-conductor":"bin/cli.js"},"scripts":{"postinstall":"node bin/setup.js"},"keywords":["ai-agents","multi-agent","codex","opencode","claude","orchestrator","llm","git-worktree","parallel"],"author":{"name":"Anuj Mhatre"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/a18-n03/agent-conductor.git"},"engines":{"node":">=16"},"gitHead":"8567ed90416485f5839249db5565da97471e812c","_id":"@anujmau/agent-conductor@0.3.2","bugs":{"url":"https://github.com/a18-n03/agent-conductor/issues"},"homepage":"https://github.com/a18-n03/agent-conductor#readme","_nodeVersion":"24.18.0","_npmVersion":"12.0.2","dist":{"integrity":"sha512-txl3YW1BtSiI+heLEsJWydCQbM+rXY61kkKbvbf/zb9pLZkl3xrI9G68ihFd4eSp2Ez3s09Nj7PDU4kHuAVmeQ==","shasum":"b1b480e22873420fbf5e6b211ac6e85bb6ce67b3","tarball":"https://registry.npmjs.org/@anujmau/agent-conductor/-/agent-conductor-0.3.2.tgz","fileCount":20,"unpackedSize":55235,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDCtcz8nOLqgYDubHrd0MulpIYHhyWw+gLpU/MIhbm3fAiAo1p9PJidplPlJWBd/qagEnJycl1+z//XB/NRS1y3DUw=="}]},"_npmUser":{"name":"anujmau","email":"anujmhatre125@gmail.com"},"directories":{},"maintainers":[{"name":"anujmau","email":"anujmhatre125@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/agent-conductor_0.3.2_1787727989412_0.4619700888794913"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-26T06:52:33.385Z","modified":"2026-08-26T07:06:29.710Z","0.3.1":"2026-08-26T06:52:33.698Z","0.3.2":"2026-08-26T07:06:29.550Z"},"bugs":{"url":"https://github.com/a18-n03/agent-conductor/issues"},"author":{"name":"Anuj Mhatre"},"license":"MIT","homepage":"https://github.com/a18-n03/agent-conductor#readme","keywords":["ai-agents","multi-agent","codex","opencode","claude","orchestrator","llm","git-worktree","parallel"],"repository":{"type":"git","url":"git+https://github.com/a18-n03/agent-conductor.git"},"description":"Run Codex CLI, OpenCode CLI and Claude Code simultaneously on isolated git worktrees - LLM task planner, parallel headless runners, auto-merge","maintainers":[{"name":"anujmau","email":"anujmhatre125@gmail.com"}],"readme":"# Agent Conductor ⚡\n\n[![PyPI](https://img.shields.io/pypi/v/agent-conductor?color=blue&logo=pypi&logoColor=white)](https://pypi.org/project/agent-conductor/)\n[![Python](https://img.shields.io/pypi/pyversions/agent-conductor)](https://pypi.org/project/agent-conductor/)\n[![License](https://img.shields.io/pypi/l/agent-conductor)](LICENSE)\n\n**Run Codex CLI, OpenCode CLI and Claude Code simultaneously on the same project — frontend and backend in parallel, zero file conflicts.**\n\n```bash\npip install agent-conductor\nagent-conductor \"build a weather app: React frontend, FastAPI backend\"\n```\n\nOne command splits your goal into two independent workstreams, gives each agent its own\nisolated git worktree, runs both CLIs headlessly at the same time, and merges the work back.\n\n## 🖥️ Web UI\n\n```bash\npip install fastapi uvicorn\nuvicorn webui:app --port 8600\n```\n\nOpen **http://localhost:8600** — type a goal, pick your agents, hit Run, watch both\nagents work live in the terminal panel.\n\n![Web UI](images/webui.png)\n\n## Real run (claude + opencode, parallel)\n\n![Conductor report](images/report_terminal.png)\n\nMerged output passed a live endpoint test:\n`GET /api/quote → {\"author\": \"Lao Tzu\", \"quote\": \"The journey of a thousand miles...\"}`\n\n## Install\n\n**npm (any OS, any folder — auto-creates its own Python venv):**\n\n```bash\nnpm install -g @anujmau/agent-conductor\nagent-conductor \"build a todo app: React frontend, FastAPI backend\"\n```\n\n> Requires Python 3.10+ on the machine. The npm package bundles the Python source,\n> creates an isolated venv on install, and runs from YOUR current directory\n> (`.env` and generated `projects/` live in whatever folder you run it from).\n\n**pip (Python users):**\n\n```bash\npip install agent-conductor\nagent-conductor \"build a todo app: React frontend, FastAPI backend\"\n```\n\n**From source:**\n\n```bash\ngit clone https://github.com/a18-n03/agent-conductor\ncd agent-conductor\npip install -e .\ncp .env.example .env        # add ZEN_API_KEY (planner) + OMNIROUTE_API_KEY (codex via gateway)\n```\n\n## Examples\n\n```bash\n# default: Codex + OpenCode\nagent-conductor \"build a todo app: React frontend, FastAPI backend\"\n\n# Codex (via OmniRoute, free) + ox-alpha (free) - the proven combo\nagent-conductor \"build a joke app: static HTML frontend, FastAPI backend\" \\\n  --agents \"codex@omniroute/auto,opencode@opencode/x-preview-f-free\"\n\n# Claude + OpenCode\nagent-conductor \"landing page + contact API\" \\\n  --agents \"claude@auto/best-coding,opencode@opencode/x-preview-f-free\"\n\n# custom project dir + timeout\nagent-conductor \"build a scraper + dashboard\" --dir C:\\dev\\myproject --timeout 20\n```\n\n## How it works\n\n```\nyou: python agent-conductor \"build a todo app: React frontend, FastAPI backend\"\n                          |\n              [1] LLM PLANNER (splits goal into 2 isolated workstreams)\n                          |\n        ┌─────────────────┴──────────────────┐\n        ▼                                    ▼\n  [2] git worktree                    [2] git worktree\n      .conductor/codex-…                  .conductor/opencode-…\n        ▼                                    ▼\n  [3] codex exec …                    [3] opencode run …  (or claude -p …)\n      frontend/ (parallel)                backend/ (parallel)\n        ▼                                    ▼\n        └────────────► [4] MERGE ◄───────────┘\n                          |\n                  [5] REPORT (commits, timings, conflicts)\n```\n\n- **Isolation:** each agent works in its own git worktree + branch → it physically cannot\n  touch the other agent's files\n- **Contract:** the planner writes a shared interface contract (API endpoints/types) into\n  both prompts so the two halves fit together\n- **Headless:** uses `codex exec -C <dir> -s workspace-write`, `opencode run --dir <dir>`\n  and `claude -p` with per-agent model overrides\n- **Merge:** branches merged back to `main` automatically; conflicts are aborted and reported\n\n## Requirements\n\n- Python 3.10+\n- At least TWO of these CLIs installed and authenticated:\n  - [Codex CLI](https://github.com/openai/codex) (`npm i -g @openai/codex`)\n  - [OpenCode CLI](https://opencode.ai) (`npm i -g opencode-ai`)\n  - [Claude Code](https://claude.com/claude-code) (`npm i -g @anthropic-ai/claude-code`)\n- An OpenAI-compatible API key for the planner (default: OpenCode Zen — free)\n- Optional: [OmniRoute](https://github.com/diegosouzapw/OmniRoute) (`npm i -g omniroute`)\n  — free gateway so any of the CLIs run on free models\n\n## Model setup (tested working)\n\n| Agent spec | Routes to | Needs |\n|---|---|---|\n| `codex` | your ChatGPT plan via Codex | codex login |\n| `codex@omniroute/auto` | OmniRoute gateway → free models | omniroute serve + `OMNIROUTE_API_KEY` in `.env` |\n| `opencode` | OpenCode default model | opencode auth |\n| `opencode@opencode/x-preview-f-free` | ox-alpha (free) | nothing |\n| `opencode@opencode/glm-5` | GLM-5 via OpenCode Zen | OpenCode Zen billing |\n| `claude` | Claude Code default (Anthropic plan or `ANTHROPIC_MODEL`) | claude login / env |\n| `claude@auto/best-coding` | OmniRoute → free Claude routing | `ANTHROPIC_BASE_URL` + `ANTHROPIC_AUTH_TOKEN` env |\n\nFor the OmniRoute path, add this block once to `~/.codex/config.toml`:\n\n```toml\n[model_providers.omniroute]\nname = \"OmniRoute\"\nbase_url = \"http://localhost:20128/v1\"\nwire_api = \"responses\"\nenv_key = \"OMNIROUTE_API_KEY\"\n```\n\n## Usage\n\n```bash\npip install -r requirements.txt\ncp .env.example .env        # add ZEN_API_KEY (planner) + OMNIROUTE_API_KEY (codex via gateway)\n\n# ox-alpha frontend + ox-alpha backend (two free instances)\npython conductor.py \"build a joke app: static HTML frontend, FastAPI backend\" \\\n  --agents \"opencode@opencode/x-preview-f-free,opencode@opencode/x-preview-f-free\"\n\n# Codex (via OmniRoute) frontend + ox-alpha backend\npython conductor.py \"build a joke app: static HTML frontend, FastAPI backend\" \\\n  --agents \"codex@omniroute/auto,opencode@opencode/x-preview-f-free\"\n\n# default: your Codex plan + OpenCode default\npython conductor.py \"build a todo app\"\n```\n\n## What you get\n\n```\n  CONDUCTOR REPORT\n  [OK ] codex      frontend             done (6.2 min)\n  [OK ] opencode   backend              done (4.8 min)\n  [OK ] merge      conductor/codex-frontend      merged\n  [OK ] merge      conductor/opencode-backend    merged\n```\n\nFull agent transcripts land in `logs/` — every tool call both agents made.\n\n## Architecture\n\n| Module | Role |\n|---|---|\n| `src/planner.py` | LLM splits goal into 2 file-disjoint workstreams with an interface contract |\n| `src/worktrees.py` | git worktree + branch lifecycle, base commit handling |\n| `src/runners.py` | Parallel headless runners (threads), live logs, per-agent timeouts |\n| `src/merger.py` | Branch merging with conflict abort + final report |\n\n## Notes & limits\n\n- Two agents is the sweet spot; more agents = more merge risk\n- Agents can't see each other mid-run — that's a feature (isolation), the interface\n  contract in their prompts is what keeps the halves compatible\n- Conflicts are intentionally aborted, never auto-resolved — you decide\n\n## Proven result\n\nReal run on this machine (2026-08-25): Codex (via OmniRoute, free models) built the\nfrontend in 4.0 min while OpenCode (ox-alpha, free) built the backend in 0.7 min —\nin parallel, zero conflicts. Merged app passed a live endpoint test:\n\n```json\n{\"joke\": \"What does a cloud wear under its raincoat? Thunderwear.\"}\n```\n\n---\n\n<div align=\"center\">\n<sub>Built by <a href=\"https://github.com/a18-n03\">Anuj Mhatre</a> · BTech CSE (AI & ML)</sub>\n</div>\n","readmeFilename":"README.md"}