* feat(start): implement ao start fetch/open for Windows and Linux Fill in the non-darwin branches of the bootstrapper (T6/T7): - assetName() selects the per-GOOS stable release asset: windows -> agent-orchestrator-win32-x64.exe (NSIS installer), linux -> agent-orchestrator-linux-x64.AppImage. amd64-only for now via requireAMD64(), which returns a clear unsupported-arch error. - fetchApp() dispatches per GOOS. Windows downloads the NSIS installer and runs it silently (/S) to the default per-user dir, then resolves the installed exe under %LOCALAPPDATA%\Programs. Linux downloads the AppImage to a stable path under ~/.ao (atomic temp+rename), chmods it executable, and skips any install step so re-runs resolve without re-fetching. - knownAppLocations() scans the per-user and per-machine Windows install dirs and the stable Linux AppImage path. - isUsableBundle() treats a win exe / linux AppImage as a regular file (darwin stays a directory). - openApp() launches win/linux detached via the existing StartProcess seam, forwarding --installed-via=npm-bootstrap, and falls back to manual-open on spawn failure. The Windows silent-install path is marked ponytail (untestable on the macOS build host); a wrong install dir surfaces as a clear not-found error. Tests cover asset naming, arch gating, scan locations, regular-file vs dir, and the detached-spawn + fallback paths. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * feat(release): build + publish a Linux AppImage for ao start (T7) AppImage is the Linux fetch-and-run artifact for the bootstrapper (spec §11.3): a single self-contained executable ao start downloads and runs directly, no system package manager. - makers/maker-appimage.ts: a MakerBase subclass bridging to electron-builder's buildForge (appImage target), mirroring maker-nsis.ts, since Forge has no first-party AppImage maker. publish:null so Forge owns release uploads. - forge.config.ts: register MakerAppImage for linux; keep deb/rpm for users who want a system package. - frontend-release.yml: on ubuntu-latest, copy the built AppImage to the stable, space-free name agent-orchestrator-linux-x64.AppImage and upload it to the v<version> release with --clobber, mirroring the Windows step. Build-untested on this macOS host: the first ubuntu CI run must confirm the electron-builder AppImage target token and the out/make/*.AppImage output glob. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(ci): green up ao start Win/Linux PR (lint, cross-OS test, container smoke) Five golangci-lint findings in start.go, two cross-OS test failures, and the fresh-install container smoke were broken by the Win/Linux bootstrapper diff. Go lint (start.go): - gocritic filepathJoin: build "/Applications/<bundle>" as a literal instead of filepath.Join with a separator-bearing arg. - gocritic httpNoBody: pass http.NoBody, not nil, to NewRequestWithContext. - gosec G302: annotate the AppImage chmod 0755 with a nolint; an AppImage is a self-contained executable and must be executable. - nilerr: annotate openApp's intentional (false, nil) on launch failure; the failure is reported via the bool, not as an error. - unparam: resolveApp's error result was always nil; drop it and update callers. Cross-OS tests (start_test.go): - makeBundle created a directory, which only stats as usable on macOS. Make it a regular file on Windows/Linux so the marker/scan resolve tests pass there, matching isUsableBundle's per-OS rule. Container fresh-install smoke (test/cli/install-check.sh, Dockerfile): - ao start is now the desktop-app launcher and no longer runs a daemon, so the old daemon status/shutdown/stop assertions could never pass. Assert instead that on a fresh box start reaches the fetch path and exits non-zero with a clear error (404 download on amd64, unsupported-arch on arm64). Refresh the stale daemon-reaping comments in the Dockerfile. Verified locally: go build/vet ok, golangci-lint v2.12.2 reports 0 issues, go test -tags e2e ./internal/cli/... passes (the only remaining failure, TestE2E_Lifecycle, is a pre-existing daemon-shutdown flake that fails the same way on upstream/main on this host), and the container smoke passes on both linux/arm64 and linux/amd64. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|---|---|---|
| .github/workflows | ||
| backend | ||
| docs | ||
| frontend | ||
| packages | ||
| screenshots | ||
| scripts | ||
| skills/bug-triage | ||
| test/cli | ||
| .envrc | ||
| .gitignore | ||
| .prettierignore | ||
| .prettierrc | ||
| AGENTS.md | ||
| CLAUDE.md | ||
| DESIGN.md | ||
| README.md | ||
| ao-dashboard-preview.png | ||
| ao-logo.svg | ||
| flake.lock | ||
| flake.nix | ||
| package-lock.json | ||
| package.json | ||
README.md
Agent Orchestrator
The orchestration layer for parallel AI coding agents
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.
See AO in Action (before the re-write)
![]() Visit |
![]() Visit |
![]() Visit |
![]() Visit |
Features • Quick Start • Architecture • Documentation • Contributing
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 runtimegh(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:
tmuxon Darwin/Linux,conptyon 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
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
- Join the Discord - Connect with the community and get guidance
- Read the contributor contract - See AGENTS.md for repo layout, daemon/API boundaries, and coding conventions
- Pick a focused problem - Browse open issues and choose one small enough for a focused PR
- Open a clear PR - Keep changes narrow, explain user-visible impact, link issues, include tests
- Iterate with contributors - Use review feedback to tighten the PR until verified
License
Apache License 2.0 - see LICENSE for details.
Star us on GitHub • Report Issues • Discussions
Made with love by the Agent Orchestrator community



