* fix: keep Claude Code interactive after initial prompt Claude Code's -p flag runs in one-shot mode (exits after responding), which prevents follow-up messages via `ao send`. Instead, launch Claude interactively and deliver the initial prompt post-launch via runtime.sendMessage(). Adds `promptDelivery` property to the Agent interface so each agent plugin can declare whether prompts should be inlined in the launch command or sent after the agent starts. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: make post-launch prompt delivery non-fatal and add test coverage - Move sendMessage call outside the try/catch that destroys the session. A prompt delivery failure should not kill a running agent — user can retry with `ao send`. - Add tests: no-prompt + post-launch agent, sendMessage failure resilience, 5s delay verification, systemPrompt/systemPromptFile alongside omitted -p. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * test: add integration test for prompt delivery (proves bug and fix) Two real-Claude integration tests that contrast: 1. `-p` mode: Claude exits after responding (the bug) 2. Interactive + sendMessage: Claude stays alive, follow-up works (the fix) Runs in CI with ANTHROPIC_API_KEY. Skips when prerequisites missing. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(test): skip interactive test without auth, improve TUI readiness detection The integration test failed in CI because interactive Claude requires full login auth (not just ANTHROPIC_API_KEY). Skip the interactive suite when `claude auth status` reports not logged in. Also fix local flakiness: replace blind 5s sleep with polling for Claude's TUI prompt character (❯) before sending the first message, and increase scrollback capture from 200 to 500 lines. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(test): skip interactive test in CI, fix TUI readiness detection The interactive test ran in CI despite hasInteractiveAuth() — Claude reports logged in when ANTHROPIC_API_KEY is set, but interactive mode requires OAuth. Use `!process.env.CI` as the skip condition instead. Also fix waitForTuiReady false positive: the OAuth screen's "Paste code here if prompted >" matched the `>` regex. Now checks the last non-empty line for Claude's specific ❯ prompt character, and bails early if the OAuth/login screen is detected. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| .changeset | ||
| .cursor | ||
| .github/workflows | ||
| .husky | ||
| artifacts | ||
| changelog | ||
| docs | ||
| examples | ||
| packages | ||
| scripts | ||
| tests/integration | ||
| .gitignore | ||
| .gitleaks.toml | ||
| .npmrc | ||
| .prettierignore | ||
| .prettierrc | ||
| ARCHITECTURE.md | ||
| CLAUDE.md | ||
| DASHBOARD_FIXES_SUMMARY.md | ||
| LICENSE | ||
| README.md | ||
| SECURITY.md | ||
| SETUP.md | ||
| TROUBLESHOOTING.md | ||
| agent-orchestrator.yaml | ||
| agent-orchestrator.yaml.example | ||
| eslint.config.js | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| test-ao-config.yaml | ||
| test-ao-config2.yaml | ||
| tsconfig.base.json | ||
README.md
Agent Orchestrator — The Orchestration Layer for Parallel AI Agents
Spawn parallel AI coding agents, each in its own git worktree. Agents autonomously fix CI failures, address review comments, and open PRs — you supervise from one dashboard.
Agent Orchestrator manages fleets of AI coding agents working in parallel on your codebase. Each agent gets its own git worktree, its own branch, and its own PR. When CI fails, the agent fixes it. When reviewers leave comments, the agent addresses them. You only get pulled in when human judgment is needed.
Agent-agnostic (Claude Code, Codex, Aider) · Runtime-agnostic (tmux, Docker) · Tracker-agnostic (GitHub, Linear)
Quick Start
# Install
git clone https://github.com/ComposioHQ/agent-orchestrator.git
cd agent-orchestrator && bash scripts/setup.sh
# Configure your project
cd ~/your-project && ao init --auto
# Launch and spawn an agent
ao start
ao spawn my-project 123 # GitHub issue, Linear ticket, or ad-hoc
Dashboard opens at http://localhost:3000. Run ao status for the CLI view.
How It Works
ao spawn my-project 123
- Workspace creates an isolated git worktree with a feature branch
- Runtime starts a tmux session (or Docker container)
- Agent launches Claude Code (or Codex, or Aider) with issue context
- Agent works autonomously — reads code, writes tests, creates PR
- Reactions auto-handle CI failures and review comments
- Notifier pings you only when judgment is needed
Plugin Architecture
Eight slots. Every abstraction is swappable.
| Slot | Default | Alternatives |
|---|---|---|
| Runtime | tmux | docker, k8s, process |
| Agent | claude-code | codex, aider, opencode |
| Workspace | worktree | clone |
| Tracker | github | linear |
| SCM | github | — |
| Notifier | desktop | slack, composio, webhook |
| Terminal | iterm2 | web |
| Lifecycle | core | — |
All interfaces defined in packages/core/src/types.ts. A plugin implements one interface and exports a PluginModule. That's it.
Configuration
# agent-orchestrator.yaml
port: 3000
defaults:
runtime: tmux
agent: claude-code
workspace: worktree
notifiers: [desktop]
projects:
my-app:
repo: owner/my-app
path: ~/my-app
defaultBranch: main
sessionPrefix: app
reactions:
ci-failed:
auto: true
action: send-to-agent
retries: 2
changes-requested:
auto: true
action: send-to-agent
escalateAfter: 30m
approved-and-green:
auto: false # flip to true for auto-merge
action: notify
CI fails → agent gets the logs and fixes it. Reviewer requests changes → agent addresses them. PR approved with green CI → you get a notification to merge.
See agent-orchestrator.yaml.example for the full reference.
CLI
ao status # Overview of all sessions
ao spawn <project> [issue] # Spawn an agent
ao send <session> "Fix the tests" # Send instructions
ao session ls # List sessions
ao session kill <session> # Kill a session
ao session restore <session> # Revive a crashed agent
ao dashboard # Open web dashboard
Why Agent Orchestrator?
Running one AI agent in a terminal is easy. Running 30 across different issues, branches, and PRs is a coordination problem.
Without orchestration, you manually: create branches, start agents, check if they're stuck, read CI failures, forward review comments, track which PRs are ready to merge, clean up when done.
With Agent Orchestrator, you: ao spawn and walk away. The system handles isolation, feedback routing, and status tracking. You review PRs and make decisions — the rest is automated.
Prerequisites
- Node.js 20+
- Git 2.25+
- tmux (for default runtime)
ghCLI (for GitHub integration)
Development
pnpm install && pnpm build # Install and build all packages
pnpm test # Run tests (3,288 test cases)
pnpm dev # Start web dashboard dev server
See CLAUDE.md for code conventions and architecture details.
Documentation
| Doc | What it covers |
|---|---|
| Setup Guide | Detailed installation and configuration |
| Examples | Config templates (GitHub, Linear, multi-project, auto-merge) |
| CLAUDE.md | Architecture, conventions, plugin pattern |
| Troubleshooting | Common issues and fixes |
Contributing
Contributions welcome. The plugin system makes it straightforward to add support for new agents, runtimes, trackers, and notification channels. Every plugin is an implementation of a TypeScript interface — see CLAUDE.md for the pattern.
License
MIT