Skip to main content

Agent orchestrator for terminal-based coding agents — discovers installed CLIs, runs them in parallel, ships giant projects in hours

Project description

agentorchestr

A supervisor/worker orchestrator for terminal-based coding agents.

agentorchestr discovers installed CLI agents (Claude Code, Kiro, OpenClaude, OpenCode, Codex, Gemini CLI, Aider, Goose…), assigns one as a lead that receives an MCP tool surface, and tiles the rest as workers in a single tmux session — each in its own git worktree.

┌─────────────────────────────────────────────────────────┐
│  tmux window "agentorchestr"                            │
│  ┌───────────────────────────────────────────────────┐  │
│  │  lead agent (kiro / claude / …)  ← MCP tools     │  │
│  ├──────────────────┬────────────────────────────────┤  │
│  │  worker w01      │  worker w02                    │  │
│  │  (implementer)   │  (tester)                      │  │
│  └──────────────────┴────────────────────────────────┘  │
└─────────────────────────────────────────────────────────┘

Install

# From PyPI (once published):
pipx install agentorchestr

# From source:
git clone https://github.com/IAZENT/agentorchestr && cd agentorchestr
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"

MCP support (required for auto mode):

pip install 'agentorchestr[mcp]'

Optional extras:

pip install 'agentorchestr[discover]'   # cross-terminal mDNS discovery
pip install 'agentorchestr[research]'   # web research via DuckDuckGo
pip install 'agentorchestr[memory]'     # vector retrieval (sqlite-vec + fastembed)

LLM keys

agentorchestr's router is used for planning and compression only — the agents use their own auth for coding. Configure at least one:

export ANTHROPIC_API_KEY=...   # paid; 90% off cached prefix (recommended)
export CEREBRAS_API_KEY=...    # 1M tok/day free, ~2100 tok/s
export GROQ_API_KEY=...        # 30 RPM free, ~315 tok/s
export GEMINI_API_KEY=...      # 1500 req/day free, 1M context
export OPENROUTER_API_KEY=...  # 28+ free models

Quickstart

# Check what's installed:
agentorchestr --detect

# Scaffold per-project context files:
agentorchestr --init

# Run with a goal (auto mode — lead + workers):
agentorchestr --goal "Add JWT auth to /api/users"

# Long goal from a file:
agentorchestr --goal-file design-doc.md

# Interactive multi-line paste (end with /end):
agentorchestr --interactive

# Single agent, no supervisor (manual mode):
agentorchestr --manual --task "fix the login bug"

agentorchestr attaches you to the tmux session automatically. Detach with Ctrl-B D. Reconnect later:

agentorchestr --list-sessions
agentorchestr --resume <session_id>

How it works

  1. Lead agent runs in tmux pane 0 with an MCP server on 127.0.0.1:<random-port>.
  2. The lead calls spawn_worker(task, perspective) → agentorchestr creates a git worktree on a fresh branch and launches a worker agent in a new pane.
  3. Workers write WORKER_DONE: <summary> (and a .agentorchestr/done.flag file) when finished. The lead reads their output via read_worker_output.
  4. The lead calls verify() then mark_goal_done(summary) to end the session.

Worker perspectives

Perspective Role
implementer minimal-diff code change
tester tests for success + at least one failure mode
reviewer numbered concerns with file:line
security auth / injection / secrets / crypto only
performance N+1, quadratic loops, sync I/O on async paths
verifier runs the FULL suite + linters, no shortcuts
researcher gathers external facts; produces no patches

MCP tools exposed to the lead

spawn_worker · read_worker_output · send_to_worker · wait_for_worker · list_workers · kill_worker · cross_review · verify · report_progress · mark_goal_done · mark_goal_failed · list_perspectives · discover_running_agents · send_to_external_agent · read_from_external_agent · web_research · compact_session · clear_tool_results


Filesystem layout

Follows the XDG Base Directory spec.

Scope Path Holds
Global state $XDG_DATA_HOME/agentorchestr/ (~/.local/share/agentorchestr/) state.db, skills/, memory/
Global config $XDG_CONFIG_HOME/agentorchestr/ (~/.config/agentorchestr/) global hooks / overrides
Per-project <project>/.agentorchestr/ PROJECT.md, CONVENTIONS.md, memory/, hooks.json
Per-session /tmp/agentorchestr-<sid>/ prompt files, progress log

Existing ~/.agentorchestr/ installations keep working — agentorchestr never silently moves your data.

Per-project context

agentorchestr --init creates:

.agentorchestr/
├── PROJECT.md       # stack, architecture, verify commands
├── CONVENTIONS.md   # style, naming, test rules
├── hooks.json       # lifecycle hook commands
├── memory/
│   ├── topics/      # learned topic notes (auto-indexed)
│   ├── episodes/    # per-session journals
│   └── research/    # cached web-research payloads (24h TTL)
└── skills/          # project-pinned skills (override globals)

PROJECT.md and CONVENTIONS.md are auto-loaded into the cacheable preamble of every session. Keep them short — every byte is re-paid on every turn.


Cross-terminal worker pool

Wrap any CLI agent so agentorchestr can find and drive it from another terminal:

# Terminal 1
agentorchestr-shim kiro chat

# Terminal 2
agentorchestr-shim claude

# Terminal 3
agentorchestr --goal "build the auth module"

Three discovery layers run in order:

  1. mDNS via _agentorchestr-agent._tcp.local. (requires zeroconf extra)
  2. Filesystem cards under $XDG_RUNTIME_DIR/agentorchestr-agents/
  3. tmux pane scan as a last resort (send-keys only, no structured RPC)

Skills

Skills are git-clone-able bundles (instructions + optional ed25519 signature) that auto-inject into matching worker prompts.

agentorchestr --skill-add github.com/<author>/<skill-name>
agentorchestr --skill-list
agentorchestr --skill-verify <skill-name>
agentorchestr --skill-remove <skill-name>
agentorchestr --goal "..." --require-signed-skills   # production

A skill directory:

~/.local/share/agentorchestr/skills/<skill-name>/
├── skill.toml         # name, version, triggers (keywords + file_globs)
├── skill.md           # markdown injected into matching workers' prompts
├── signature.sig      # optional ed25519 signature
└── signing-key.pub    # optional public key

Dashboard

agentorchestr --dashboard   # http://localhost:3000

Endpoints: /api/sessions, /api/sessions/<id>, /api/sessions/<id>/workers, /healthz, /api/docs. Auto-refreshes every 5s.


CLI reference

Flag Purpose
--goal "..." one-shot goal (auto mode)
--goal-file PATH read goal from a UTF-8 file
--interactive paste a multi-line goal (/end to submit)
--manual --task "..." single agent, single task, no supervisor
--agents NAME [...] restrict to these agent names
--lead NAME force a specific lead (must be in --agents)
--init [--init-force] scaffold this project's .agentorchestr/
--detect show installed agents + LLM keys + deps
--list-sessions recent sessions, resumable ones flagged
--resume <id> pick up a paused or crashed session
--dashboard run the FastAPI dashboard
--attach / --no-attach force / suppress auto-attach to tmux
--skill-add/list/verify/remove skill marketplace
--require-signed-skills refuse unsigned skills
--doctor comprehensive health check (exit 0 = healthy)
--version print version and exit

Security model

  • --dangerously-skip-permissions is passed to Claude/OpenClaude/Amp automatically. This is intentional — the supervisor drives the agent non-interactively and needs it to accept tool calls without prompting. Only run agentorchestr in projects you trust.

  • Worker prompts are written to files inside each git worktree and fed to agents via bash -lc 'agent "$(cat prompt_file)"'. The $(cat …) substitution is literal — shell metacharacters inside the prompt are NOT re-evaluated (verified).

  • MCP server binds to 127.0.0.1 only. The port is random and written to the agent's MCP config file for the duration of the session.

  • Skills with --require-signed-skills are verified against an ed25519 public key bundled in the skill directory. Unsigned skills are allowed by default; use the flag in production.


Known limitations

  • tmux required for the full multi-pane UX. Without tmux, --manual mode still works via subprocess.
  • Max 5 panes per tmux window (1 lead + 4 workers). Past that, workers spill into agentorchestr-2, agentorchestr-3, … windows automatically.
  • MCP required for auto mode. Install with pip install 'agentorchestr[mcp]'.
  • Hosted LLM keys are needed for the router (planning/compression). The agents themselves use their own auth.
  • Linux / macOS only. Windows is not supported (PTY + tmux dependency).

Requirements

  • Python 3.11+
  • tmux 3.0+ (recommended)
  • git (for worktrees)
  • Optional: zeroconf, sqlite-vec, fastembed, ddgs, cryptography or pynacl

License

MIT.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

agentorchestr-0.7.0.tar.gz (115.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

agentorchestr-0.7.0-py3-none-any.whl (99.2 kB view details)

Uploaded Python 3

File details

Details for the file agentorchestr-0.7.0.tar.gz.

File metadata

  • Download URL: agentorchestr-0.7.0.tar.gz
  • Upload date:
  • Size: 115.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for agentorchestr-0.7.0.tar.gz
Algorithm Hash digest
SHA256 645e6b1271adb76edb6079354d014dffd61238d3e79c020d0c3ccf6c6e44a61e
MD5 7c0c746c305aec34ac1f237ed3b96d90
BLAKE2b-256 e313e92bd7cbf4ef6b37621494a45df0e8aed922ab550b3648208dab0c72878a

See more details on using hashes here.

Provenance

The following attestation bundles were made for agentorchestr-0.7.0.tar.gz:

Publisher: release.yml on IAZENT/agentorchestr

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file agentorchestr-0.7.0-py3-none-any.whl.

File metadata

  • Download URL: agentorchestr-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 99.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for agentorchestr-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b35d7289d803ec9ef0c2084f1c4cd0948c57ab481392e8295802ceab75ef6cc6
MD5 e95c1d7230e62a3385f93bdcc341e8f4
BLAKE2b-256 85bb06c6abc51201c29cd7aba01ee050265c03a6a0bb84fdab3210da4db1641a

See more details on using hashes here.

Provenance

The following attestation bundles were made for agentorchestr-0.7.0-py3-none-any.whl:

Publisher: release.yml on IAZENT/agentorchestr

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page