Agentic orchestrator for parallel coding agents — plans tasks, spawns agents, and autonomously handles CI fixes, merge conflicts, and code reviews.
Go to file
Harshit Singh Bhandari cfe505eb4d
feat: Global Settings (migration + update channel) + ao start download progress (#2235)
* feat(settings): IPC bridge for global update settings (get/set)

Expose readUpdateSettings/writeUpdateSettings to the renderer via
updateSettings:get/set so the Global Settings page can read and persist
the auto-update channel choice. Refs #2207.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(cli): show ao start download + install progress

The fetch path streamed a hundreds-of-MB asset and ran a silent install
with zero output, so a slow download looked like a hang. Print a start
line (asset, ~size, repo), stream a TTY-aware progress reader (live \r
percentage on a terminal, start+done lines off a TTY), and announce the
otherwise-silent unpack/install step. stderr only, so --json stdout stays
clean; no new dependency. Closes #2234.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(settings): Updates (channel) + Migration sections in Global Settings

- UpdatesSection: pick Stable vs Nightly auto-update channel, persisted to
  ~/.ao/update-settings.json via the new IPC bridge. Closes #2207.
- MigrationSection: drop-in card showing migration status + last report/error
  and a Run/Re-run button hitting the idempotent POST /api/v1/import; works
  even after Don't Migrate. Closes #2205.
- Wire both into the (previously blank) GlobalSettingsForm; cover both with tests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* chore: format with prettier [skip ci]

* fix(browser): re-measure preview bounds after layout transitions

The native WebContentsView preview is positioned from a renderer-measured
rect, re-measured on ResizeObserver + window resize/scroll. But a
ResizeObserver fires on size changes only, so a position-only layout shift
(entering/leaving pop-out moves the slot to another panel; opening the
inspector, which ao preview does, reflows its x) left the overlay at stale
bounds, visibly spilling over the sidebar/terminal until an unrelated resize
fixed it. Drive a settle re-measure on mount and on active/pop-out
transitions (immediate frame + once the ~240ms panel transition settles) so
the final geometry always wins.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* chore(backend): gofmt + goimports pre-existing files (fix red CI)

config.go, project_test.go, importer_test.go and spawn_windows.go were
committed unformatted earlier and fail go.yml's gofmt check and golangci's
goimports formatter on main. Apply `golangci-lint fmt`; formatting only, no
logic change. Unblocks this PR's lint/build-test jobs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(settings): manual Check for updates + Update button

Auto-update only checked at launch, so users with auto-updates off (or who
just want it now) had no way to update from the app. Add an on-demand flow:
checkForUpdatesNow/downloadUpdateNow/quitAndInstallUpdate in auto-updater
(works regardless of the opt-in; not-packaged dev surfaces 'unsupported'),
forwarded to the renderer as a live UpdateStatus over updates:status. The
Updates section gains a Check for updates button and an Update button that
downloads then installs (Restart & install), with checking/available/
downloading%/downloaded/error status. Refs #2207.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* chore: format with prettier [skip ci]

* fix(sidebar): always offer Global settings in the footer menu

The footer Settings menu showed either Project settings (with a project
selected) or Global settings (with none), so global settings was
unreachable while inside a project. Always list Global settings; add
Project settings above it when a project is active. Refs #2205.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(settings): show current app version in Updates section

Surface app.getVersion() as a 'Current version vX.Y.Z' line above the
update controls so users can see what they're running. Refs #2207.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* chore: format with prettier [skip ci]

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-27 23:08:55 +05:30
.github ci(gitleaks): allowlist historical false-positive commits from rewrite graft (#2169) 2026-06-27 23:07:35 +05:30
backend feat: Global Settings (migration + update channel) + ao start download progress (#2235) 2026-06-27 23:08:55 +05:30
docs feat: electron-updater feed publishing + macOS signing (#2220) (#2226) 2026-06-27 18:10:20 +05:30
frontend feat: Global Settings (migration + update channel) + ao start download progress (#2235) 2026-06-27 23:08:55 +05:30
packages feat(cli): ao start fetches + opens the desktop app; deprecate npm as an app channel (Track A) (#2201) 2026-06-26 19:31:56 +05:30
screenshots docs: refresh repository readme [skip ci] (#2190) 2026-06-26 17:28:07 +05:30
scripts chore: add daemon build script (#365) 2026-06-21 19:45:27 +05:30
skills/bug-triage fix(skills): adapt bug-triage skill to ReverbCode stack (#281) 2026-06-17 22:27:25 +05:30
test/cli feat(cli): ao start fetch/open for Windows and Linux (T6/T7) (#2204) 2026-06-26 20:50:30 +05:30
.envrc Add agent adapters and wire per-session agents into the session manager (#65) 2026-06-02 16:51:32 +05:30
.gitignore Zellij to tmux + ConPTY runtime, session save/restore, crash-proof reconcile (port #404) (#2183) 2026-06-25 15:05:41 +05:30
.prettierignore chore: add prettier config and CI auto-formatter (#166) 2026-06-10 09:09:17 +05:30
.prettierrc chore: add prettier config and CI auto-formatter (#166) 2026-06-10 09:09:17 +05:30
AGENTS.md feat(frontend): add live browser panel (#375) 2026-06-22 04:14:18 +05:30
CLAUDE.md feat(frontend): add live browser panel (#375) 2026-06-22 04:14:18 +05:30
DESIGN.md feat(renderer): full-width shell topbar; retire per-view topbars and review dashboard (#195) 2026-06-12 15:20:04 +05:30
LICENSE docs: add Apache License 2.0 (#2233) 2026-06-27 20:23:09 +05:30
README.md docs: aligned readme (#2238) 2026-06-27 20:20:34 +05:30
ao-dashboard-preview.png docs: refresh repository readme [skip ci] (#2190) 2026-06-26 17:28:07 +05:30
ao-logo.svg docs: refresh repository readme [skip ci] (#2190) 2026-06-26 17:28:07 +05:30
flake.lock Add agent adapters and wire per-session agents into the session manager (#65) 2026-06-02 16:51:32 +05:30
flake.nix Add agent adapters and wire per-session agents into the session manager (#65) 2026-06-02 16:51:32 +05:30
package-lock.json feat: dashboard legacy-migration popup + app-state migration marker (#2219) 2026-06-27 02:24:36 +05:30
package.json chore: add prettier config and CI auto-formatter (#166) 2026-06-10 09:09:17 +05:30

README.md

Agent Orchestrator

Agent Orchestrator

The orchestration layer for parallel AI coding agents

Stars
Contributors
Twitter
Discord
License: Apache-2.0

An Agentic IDE that supervises parallel AI coding agents in isolated workspaces, with complete control and automatic feedback loops from CI failures, review comments, and merge conflicts.

Agent Orchestrator Dashboard

Witness AO's Journey on X

First

Visit
Second

Visit
Third

Visit
Fourth

Visit

FeaturesQuick StartArchitectureDocumentationContributing


Features

Feature Description
Agent-Agnostic Platform 23+ agent adapters including Claude Code, OpenAI Codex, Cursor, OpenCode, Aider, Amp, Goose, GitHub Copilot, Grok, Qwen Code, Kimi Code, Cline, Continue, Kiro, and more
Isolated Workspaces Each session spawns into its own git worktree with dedicated runtime
Platform-Native Runtimes tmux on Darwin/Linux, conpty on Windows for optimal performance
Live PR Observation Provider-neutral SCM observer with automatic feedback routing
Automatic Feedback Routing CI failures, review comments, and merge conflicts routed to the owning agent
Durable Facts Storage SQLite persists immutable facts with display status derived at read time
CDC Broadcasting DB triggers append changes to change_log, broadcasted via SSE
Desktop Experience Native Electron app with React UI and live terminal streaming
Loopback-Only Daemon HTTP control over 127.0.0.1 with no auth, CORS, or TLS by design

Supported Agents

Works with 23+ CLI-based coding agents including Claude Code, OpenAI Codex, Cursor, OpenCode, Aider, Amp, Goose, GitHub Copilot, Grok, Qwen Code, Kimi Code, Crush, Cline, Droid, Devin, Auggie, Continue, Kiro, and Kilo Code.

If it runs in a terminal, it runs on Agent Orchestrator.


Quick Start

Prerequisites

Requirement Minimum Recommended
Go 1.25+ Latest
Node.js 20+ Latest LTS
Git Any Latest
pnpm Any Latest

Optional:

  • tmux (Darwin/Linux) - For Unix runtime
  • gh (GitHub CLI) - For authenticated GitHub API calls

Installation

Download the latest release for your platform:

Platform Download
Windows Setup.exe
macOS Agent Orchestrator.dmg
Linux Agent Orchestrator.AppImage

Direct Download: Latest Release


Telemetry

Agent Orchestrator collects minimal telemetry for reliability and product understanding. Data is stored locally by default; remote transmission is opt-in via environment variables. Read the full telemetry policy.


Architecture

Agent Orchestrator is a long-running Go daemon built around inbound/outbound port contracts with swappable adapters.

Core mental model: OBSERVE external facts → UPDATE durable facts → DERIVE display status / ACT

Key components:

  • Frontend - Electron + React UI with TanStack Router/Query and shadcn/ui
  • Backend Daemon - Go-based HTTP server with controllers, services, and adapters
  • Runtime - Platform-specific: tmux on Darwin/Linux, conpty on Windows
  • Storage - SQLite with change-data-capture (CDC) for real-time updates
  • Adapters - 23+ agent adapters, git worktree workspace, GitHub SCM integration

For detailed architecture diagrams, data flows, and load-bearing rules, see architecture.md.


Documentation

Document Description
Architecture System architecture, data flows, and load-bearing rules
Backend Code Structure Package-by-package ownership and dependency rules
AGENTS.md Contributor and worker-agent contract
Agent Adapter Contract Agent adapter interface and hook behavior

Testing

# Backend tests
cd backend
go test -race ./...

# Frontend tests
cd frontend
pnpm test

# Full CI validation locally
npx @redwoodjs/agent-ci run --all

Configuration

All configuration is environment-driven. The daemon takes no config file.

Variable Default Purpose
AO_PORT 3001 HTTP bind port
AO_REQUEST_TIMEOUT 60s Per-request timeout
AO_SHUTDOWN_TIMEOUT 10s Graceful shutdown cap
AO_RUN_FILE ~/.ao/running.json PID/port handshake
AO_DATA_DIR ~/.ao/data SQLite data directory
AO_AGENT claude-code Compatibility agent adapter
GITHUB_TOKEN - GitHub auth token

Health Checks

curl localhost:3001/healthz   # Liveness probe
curl localhost:3001/readyz    # Readiness probe

Contributing

We love contributions! Join our community on Discord to get started.

Join us on Discord

Discord

Daily contributor sync: Every day at 10:00 PM IST

Get your issues verified by core contributors, ask questions, share progress, and learn from the community. New contributors are always welcome!

Why join Discord?

  • Get your issues and PRs verified by core contributors before investing time
  • Learn from experienced contributors in daily sync calls
  • Share your progress and get feedback
  • Get help troubleshooting in real-time
  • Stay updated on the latest developments and roadmap

Quick Start

  1. Join the Discord - Connect with the community and get guidance
  2. Read the contributor contract - See AGENTS.md for repo layout, daemon/API boundaries, and coding conventions
  3. Pick a focused problem - Browse open issues and choose one small enough for a focused PR
  4. Open a clear PR - Keep changes narrow, explain user-visible impact, link issues, include tests
  5. Iterate with contributors - Use review feedback to tighten the PR until verified

License

Apache License 2.0 - see LICENSE for details.


Star us on GitHubReport IssuesDiscussions

Made with love by the Agent Orchestrator community