Agent Orchestrator 0.13.0

668 commits and 635 merged PRs from 51 authors since 0.12.0. AO Cloud's control plane landed in the monorepo, chat became a first-class surface whose providers survive daemon restarts, a wave of new agent harnesses joined the roster, and the terminal went real-time.

Covers everything since v0.12.0. The 0.12.1–0.12.12 patch releases carried most of the fixes but never got their own entries, so the whole cycle is folded into this one. If you are on 0.12.0, this is everything you skipped.

0.12.0 was polish on the foundation: languages, palette, pins, notifications. 0.13.0 is the cycle where the product grew new limbs. A cloud control plane now lives in the repo behind a flag. Chat stopped being a view and became a durable surface. The agent roster roughly doubled. And the two ugliest classes of failure left — a restart taking your in-flight turn with it, and a big diff freezing the inspector — both got structural fixes.

668 commits from 51 authors, 174 features and 409 fixes, no breaking changes.


Highlights

AO Cloud is in the repo

The private control plane — a separate Go service with a 28-table PostgreSQL schema, WorkOS sign-in, GitHub App installations and webhooks, organization-scoped projects and sessions, durable message queues, event replay and cluster-safe SSE reconnects — now lives in this monorepo, wired to an authenticated Next.js Cloud UI through new @aoagents/cloud-client and @aoagents/product-ui packages and a public cloud contract. Desktop sign-in gained native WorkOS auth. Everything is flag-gated; nothing changes for local-only users yet. (#4434, #3692, #4722)

Chat is first-class, and it survives restarts

The composer was redesigned around resolved agent and model defaults, with a queued message dock that supports editing, cancel, drag-to-reorder and attachments that survive restarts. Queued turns can be promoted to steer the active turn. Claude Code conversations gained message editing, failed turns retry without retyping the prompt, and tool calls render as readable cards instead of raw dumps.

Under it all, Codex and the ACP chat providers are owned by authenticated detached hosts now: close the desktop app, restart the daemon, and the provider is re-adopted with its conversation snapshot, pending approvals and in-flight turn intact. (#3657, #4649, #4684, #4715, #3838, #3858, #4256, #5027, #4529, #4766)

The agent roster grew

New harnesses and drivers landed across the cycle: Kimchi, Kimi, Pi, OMP, Prime Agent, Muse Code, and a Cursor ACP chat driver, with adapter-aware model selection, per-provider model catalogs and discovery, --model on ao spawn with per-session scoping, and an act primitive that resolves instructions and retries stale references. ao doctor now probes all 26 registered harness binaries, so "why is this agent missing" is a one-command answer. (#2649, #4193, #4194, #4196, #3736, #3647, #4201, #3386, #4610, #4102, #4244, #5025)

Real-time terminal

The terminal is a duplex stream with predictive local echo now, backed by native PTY hosts on macOS and Linux, selectable Windows shells, line-boundary editing shortcuts on macOS, and tab cycling shortcuts. Output bursts are back-pressured instead of killing the WebSocket. (#4763, #4768, #4473, #4727, #4517, #5199, #3658, #4552)

A diff viewer that keeps up

Diff and file viewers are virtualized — only the rows on screen render — so a 5,000-line diff scrolls instead of freezing. Alongside them: a full-tree file explorer next to the changed-files view, GitHub-style Markdown rendering, mermaid fences drawn as diagrams, before/after previews for image files, and file previews you can select text in and close. (#5175, #4252, #4251, #4892, #4173, #5012)

Reviews, end to end

Interactive reviewer panes work for every agent harness, review passes can auto-start for pull requests, and the project can carry its own auto-review config. The Reviews inspector merged into one list with pagination for unresolved comments, external reviews support inline comments, PR readiness cards were redesigned, and the review funnel is instrumented end to end. (#3384, #3338, #4128, #3664, #4032, #4131, #4055, #4255)

Mobile ships

AO Mobile went live on both app stores, with a TestFlight flow, over-the-air updates via EAS, Connect Mobile pairing over Tailscale including iOS, a device roster to see, mute and remove paired phones, PostHog analytics and Sentry-ready error capture. (#4761, #3689, #4474, #3707, #3674, #3661, #4181)

Agent switching you can trust

Switching a session between TUI and Chat became durable, responsive and phase-aware, with failure-only observability capturing exactly where a switch dies. Interfaces without a Chat UI hide the switch instead of offering it. (#3548, #3770, #4598, #3966)

The desktop got a facelift

A focused home page, a vertical tabs rail replacing the tab dropdown, Nord, Gruvbox and Solarized themes, drag-to-reorder for projects and sessions, session renaming from navigation surfaces, and app icons derived from the Ruto mascot on every platform. (#4549, #4781, #3668, #3585, #4274, #4874, #5079, #5238)

Browser that agents can actually use

Per-session browser profiles persist cookies and history across sessions, agents can capture screenshots and save downloads from the page, and annotation gained multi-element select with contextual shortcuts. (#4135, #4994, #3549, #4643)

GitLab joins GitHub

A GitLab SCM integration landed behind a multi-provider dispatcher, with response and cache consistency handled per provider. (#2773, #5148)

Onboarding without the dead ends

Import from a Git URL, a full project import flow with validation APIs and optimistic loading, GitHub repository creation during import, folder drag-and-drop, flags for projects whose local folder went missing, remembered permission defaults, and a startup gate that checks real system requirements (git, tmux, harness, gh) with one-click install. (#4104, #4872, #4760, #5127, #5092, #4065, #4894, #4956, #3825)

Also new

  • Editor handoff: cross-platform Neovim support next to the GUI editors, plus an Open-in-editor button beside Kill (#4723, #3284)
  • Attention sound: a beep when an agent needs input or a PR is ready, and the macOS Dock bounces on notifications (#4051, #4115)
  • Harness setup in settings: installer settings and harness login actions in one place (#4221, #4523)
  • Usage and cost: event-driven per-session token usage, Kimi usage observability, estimated costs (#2928, #4311, #4168)
  • Updates: sidebar downloads became a live install flow, with a macOS repair installer for machines where a staged build was rejected (#5047, #5002, #4981)
  • Board: the all-sessions board is back, finished sessions show PR progress, closed-without-merge shows in red (#5249, #4916, #5165)
  • Connectivity: the mobile client races every advertised endpoint to connect from any network (#4615)

Reliability

The 409 fixes were mostly grind work, but a few groups deserve their name in lights.

Queued messages became durable. Edits persist with atomic delivery receipts, inline edits recover from durable branch receipts on reconnect, attachments survive editing and restarts, and a failed turn holds the queue instead of draining it into the same error. (#5109, #5110, #5006, #5107, #5188, #5106, #5274)

Terminals stop dying at the wrong moment. Back-pressured PTY output, no more leaked shell renderer on window close, user shells preserved across relaunches, and focus restored after fullscreen and restart. (#4552, #5150, #5040, #4988)

Restore checks before it restores. --resume verifies the persisted session before attaching, sessions can switch to terminal until they have real work, and OpenCode keeps its Plan Mode selection. (#5214, #5053, #5015)

Smaller fixes that mattered: change log retention is bounded so the CDC table stops growing forever, nightly build stamps parse as UTC, percent-encoded ACP approval ids decode instead of failing, the resolve-comments route validates its PR number, and the board re-renders on change events instead of poll ticks. (#5103, #5115, #5193, #5239, #4854)

Note: the chat explore command (#4262) shipped and was reverted (#4289) in this window — it needs more work before it is ready. The settings and mobile pairing restructure (#4315) was briefly reverted and re-landed as #4322.


Under the hood

Sentry capture with Go stacks and triage classification landed on the daemon, renderer and mobile, wired through build DSNs. Every surface stamps a uniform client tag on telemetry. The daemon reports 5xx and panics with stacks. On the site: the public site migrated to useao.dev, the bug report form got shorter, and reviewer avatars render through one path. (#4346, #4180, #4181, #4394, #3663, #5133, #5153, #4764)


Upgrading

GitHub Releases and Homebrew are the supported install paths. Existing installs update in place. No migrations in this cycle are destructive and no configuration changes are required. Cloud remains flag-gated — local-only setups see nothing new there yet.


Contributors

51 authors landed work in this range. Thanks to Dhruv Sharma, NIKHIL ACHALE, prateek, Just_Anniee, Nihal, Pulkit Saraf, Vaibhaav Tiwari, ronish, Aditi, Prasad Ware, Khushi Diwan, Adil Shaikh, Harshit Singh Bhandari, Yash Maheshwari, Apoorv Singh, JAYATI AHUJA, Maaz, Ayash, vicky prasad, Piyush Mudgal, Pritom Mazumdar, VenkataSakethDakuri, Yash Kumar Saini, axisrow, vanshx999, Anmol, Vansh Singhal, vytautas-petrikas, Aniket Vishwakarma, N!hal, Sundaram Kumar Jha, i-trytoohard, Heet, Hendrixx, Misbah Ansari, OllieinCanada, Rishet Mehra, krish rathi, pikachu, Aniket Shukla, Anusha, Atul Upadhyay, Keshav Varshney, LaibaFirdouse, Mukul Katewa, Phan Nguyen Quoc Minh, Priyanshu Ranjan, Rishet11, Rugved Mavidipalli, Soubhagya Sadhukhan and mknayam.

Full changelog: https://github.com/Untrivial-ai/agent-orchestrator/compare/v0.12.0...v0.13.0