Changelog

What's New

The latest updates, improvements, and new features in Agent Orchestrator. Updated weekly. For detailed release notes, see GitHub Releases

View releases on GitHub

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

v0.12.12

Automated stable release built from Untrivial-ai/agent-orchestrator@84fb37ce5aa947ceb9b19b0c2435b242ac92ce26.

v0.12.11

Automated stable release built from Untrivial-ai/agent-orchestrator@7e8a662296d6d3015e89766007b4bb92937d6a23.

v0.12.10

Automated stable release built from Untrivial-ai/agent-orchestrator@ed88a86d12027e0e37aa793d2f016165dde18e83.

v0.12.9

Automated stable release built from Untrivial-ai/agent-orchestrator@4cbb4b6ced1ad93f79641a2347d2342f1ffd218a.

v0.12.8

Automated stable release built from Untrivial-ai/agent-orchestrator@c4abb3d0e19d048b48afaaf32694747212dc9e40.

v0.12.7

Automated stable release built from Untrivial-ai/agent-orchestrator@4c3f4d72e3fb0606b09e3cac2b575a2ad7e346a7.

v0.12.6

Automated stable release built from Untrivial-ai/agent-orchestrator@075de7a0195d84f1de8d8eaef03ad3b98871bee1.

v0.12.5

Automated stable release built from Untrivial-ai/agent-orchestrator@0a67cc897eb3e59a610bdb5516223b8c9ff2810c.

v0.12.4

Automated stable release built from Untrivial-ai/agent-orchestrator@c01ef2d39783c1bc9f99ed75abfb7e90e6c7d3bf.

v0.12.3

Automated stable release built from Untrivial-ai/agent-orchestrator@b48c98c94ca0039ad1bc42bd1b78134d3ff5773d.

v0.12.2

Automated stable release built from Untrivial-ai/agent-orchestrator@b6609ae610e809309be86fce56c0845cc45628cb.

v0.12.1

Automated stable release built from Untrivial-ai/agent-orchestrator@1df40e93772c2c48e916870d9c3ddf8f29a69f84.

Agent Orchestrator 0.12.0

80 commits since 0.11.2. The desktop app now speaks eight languages, sits on a new color palette, and lets you pin sessions and pick a reviewer per session. The mobile app got theming and hold-to-talk dictation. Containers a session started get cleaned up when it dies.

Covers everything since v0.11.2.

macOS users should go straight to 0.12.1 or later. This build leaks file descriptors and breaks the Files view and task creation after a few hours of use.

0.11.0 was about the foundation holding weight. 0.12.0 is what got built on it: the app now speaks eight languages, the sidebar and settings work the way you would expect them to, and a class of failure that could wipe every session off your board is gone.

80 commits from 22 authors, 26 features and 44 fixes, no breaking changes.


Highlights

The app speaks eight languages

The desktop app has a real localization layer now, built on i18next, with the language picked under Settings > General and remembered in ~/.ao/ui-settings.json. Simplified Chinese landed first and covers the shell chrome, sidebar, board, settings, dialogs, inspector tabs, command palette and terminal copy. Japanese, Korean, Spanish, French, German and Brazilian Portuguese followed, along with READMEs in each. English stays the default and the fallback, so an untranslated string shows English rather than a key. (#3465, #3541)

Mobile: themes, native sheets, and hold-to-talk

The mobile app is no longer dark-only. It ships light and dark palettes plus a "system" preference that keeps following the OS instead of latching onto whatever it read at launch, with the app shell rebuilt on native sheets and the session board splitting on terminated runtime rather than finished status.

It also has push-to-talk dictation. Hold the mic key in the composer to speak, release to insert, or swipe up to latch it hands-free. Recognition runs on-device (iOS SFSpeechRecognizer, Android SpeechRecognizer), so there is no API key and no per-minute cost, and it is biased toward the vocabulary that agent prompts are full of, so you get "git" and "npm" instead of "get" and "MPM". The transcript lands in the composer as an editable draft rather than sending, because speech-to-text mishears code often enough that silent submission is not safe. Held bursts append, so several presses build one prompt.

Plus a Liquid Glass app icon matching the desktop build, and a fix for the default LAN port, which pointed at the loopback-only daemon port instead of the mobile bridge on 3011, so a fresh install could not connect without hand-editing it. (#3399, #3400, #3304, #3494)

A new color foundation

The renderer moved onto an oklch design token palette with Geist as the UI font and shadcn color aliases mapped onto it, replacing hardcoded values across the component library. Session status now has one consistent palette everywhere it appears: working is blue, needs-you is orange, in-review is yellow, ready is green. (#3421)

Pin the sessions you keep coming back to

Sessions can be pinned to a Pinned section at the top of the sidebar, persisted server-side so the pin survives a restart. The sidebar itself became collapsible: Pinned and Projects each fold away, and a click on a project's folder icon expands or collapses it without switching to it first. (#3511, #3310)

Pick the reviewer per session

The reviewer agent used to be a single project-wide setting. You can now pick one for an individual session, and running that pass will not change what any other session in the project uses. The Reviews tab also lists every recorded pass for the session instead of only the current and previous run for a PR, so you can compare what two different reviewers said. A declined review, when the daemon reuses an existing pass rather than running a new one, no longer reports itself as a success. (#3477)

Settings opens as a modal

Settings and project settings open over the board instead of navigating away from it, with a sidebar for General, Updates, Developer and Help. Escape or a click outside closes it, and you land back where you were. (#3497)

Notifications you can act on

When a session needs you and the window is not focused, the macOS dock bounces, the Windows taskbar flashes until you come back, and the badge count of unread notifications stays in sync on macOS, Windows and Linux.

Inside the panel, whole rows are click targets rather than just the title text, and the manual Unread/All tabs and mark-as-read are gone. Notifications now track two independent things: whether you have seen it (cleared when you open the panel) and whether the underlying issue is still open (written only by lifecycle). A notification you already read stays listed while the thing it reported is unresolved, and closes itself when the session leaves the needs-input state, terminates, or the PR merges or closes. Transitions that happened while the daemon was down are re-checked at startup. (#2534, #3296, #3495, #3558)

Command palette actions and a menu bar tray

Cmd/Ctrl+K now carries session actions, not just navigation, and the task composer behind New Task was extracted so the palette can spawn work with the same UI. macOS also gets an attention tray icon in the menu bar for sessions waiting on you. (#3531)

Containers a session started get cleaned up

Docker containers a session launched are removed when that session reaches a terminal state, including when it crashes or is SIGKILLed rather than only when you kill it explicitly. Label a container ao.session=$AO_SESSION_ID to have it reaped, or ao.spare=true for shared infrastructure that should outlive the session. Docker calls are bounded by a timeout, and a project that fails to load fails closed rather than reaping. (#3153)

Files and diffs

The Files panel replaced its toggled search button and file-count label with an always-visible search input, dropped the refresh button (the list already polls), and rebuilt the list as an accordion with a live file count on the tab. The diff viewer streams workspace changes as they happen, has a clearer layout toggle and inline per-file feedback, and expands properly in the maximized view. Workspace diffs are also base-aware now, so a child session diffs against the branch it actually came from instead of a fixed base. (#3466, #3503, #3492, #3369, #3214)


Reliability

One outage no longer wipes your board. This was the big one (#3475). Three separate bugs could archive every session at once. Preview teardown group-killed a bare PID without re-verifying it still belonged to the process it launched, and a recycled PID number took out an unrelated process family; because a tmux server is its own group leader, one stale group kill destroyed every session. A tmux "no server running" probe was read as per-session death when it says nothing about any individual session, so a server hiccup archived the board. And a burned migration returned 500s that the board treated as absent sessions. Liveness probes now report inconclusive instead of dead, the reaper refuses to conclude a pass where most of the board probes dead simultaneously, and the migration ledger repairs itself on histories that were already burned. (#3491, #3598)

Orchestrators. Duplicate active orchestrators can no longer be created for the same project, ao session ls surfaces hidden orchestrator sessions and counts hidden terminated ones instead of quietly dropping them, and the automated orchestrator re-engagement messages were reverted after they proved noisier than useful. (#3397, #3393, #3394)

Agents. Droid forwards role-specific model config through its settings file, written under the data dir rather than a temp directory. Grok prompts are delivered after its TUI finishes starting instead of into a terminal that is not listening yet, and its terminal scrolls with the wheel. The internal fake test harness no longer shows up in agent pickers. (#3156, #3534, #3533, #3518)

Browser. Annotation selection is locked while a prompt is in flight so a click cannot retarget it mid-send, native views no longer paint over the app when hidden, URL editing works in the maximized browser on macOS, the element selector badge is out of the annotation dialog, and switching away from a session and back no longer re-asserts a preview URL you had already navigated away from. (#3232, #3295, #3488, #3464, #3538, #3370)

Desktop. The auto-updater logs 404s on missing release manifests instead of raising a dialog telling you to check an auth token you do not have. Sidebar and inspector drags clamp at their minimum width rather than snapping shut. The daemon ignores SIGPIPE on closed output. PR and Completion sections in the inspector stay hidden when there is nothing in them, and duplicate PR summaries are deduped. Alongside those, a pass of chrome fixes: titlebar nav aligned to the macOS traffic lights, terminal tab bar polish, settings and archive hairlines, terminal topbar padding, and text selection disabled on app chrome and marketing pages. (#3012, #3478, #3193, #3325, #3250, #3505, #3480, #3507, #3556, #3508, #3520)


Under the hood

Telemetry gained a runtime kill switch: AO_TELEMETRY_DISABLED_EVENTS silences named streams (with * prefix matching) without shipping a release, and silenced streams still land in local SQLite so they stay debuggable. Daemon events are stamped with a version, update events are recorded, PostHog controls were hardened, and autocapture is asserted off in tests. CI now emits a Linux .rpm alongside the .deb.

On the site: docs are published as Markdown twins with the full hierarchy exposed in llms.txt, agent comparison pages were added, the hero board, delegation demo and mobile mockup were rebuilt to match what the desktop app actually looks like, and the iOS beta CTA went live. Duplicate Organization structured data was removed and content signals now apply to allowed crawlers. (#3401, #3388, #3406, #3395, #3363, #3438, #3344, #3430, #3496, #3428, #3429, #3500, #3521, #3522, #3144, #3367, #3365, #3389)


Upgrading

GitHub Releases and Homebrew are the supported install paths. Existing installs update in place. If a previous update left your migration ledger in a broken state, 0.12.0 repairs it on start rather than failing the boot.


Contributors

22 authors landed work in this range. Thanks to Just_Anniee, prateek, ronish, VenkataSakethDakuri, Vaibhaav Tiwari, Prasad Ware, Pulkit Saraf, Khushi Diwan, Harshit Singh Bhandari, Tamish Mhatre, Maaz, Hardik Sharma, Anmol, AllBeingsFuture, Aditi, vanshx999, i-trytoohard, achal, Yash Maheshwari, Keshav Varshney, AshutoshIIT1234 and Apoorv Singh.

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

v0.11.2

What's Changed

New Contributors

Full Changelog: https://github.com/Untrivial-ai/agent-orchestrator/compare/v0.11.1...v0.11.2

v0.11.1

Automated stable release built from AgentWrapper/agent-orchestrator@2f6d98f272afa2cd9ea142511fe3a9197d94d2c6.

Agent Orchestrator 0.11.0 — The Floor

271 commits and 270 merged PRs later, from 49 authors. The difference isn't a rewrite stacked on a rewrite — it's that the foundation finally holds weight, and the app grew outward on top of it.

Covers everything since v0.10.0. If you are on 0.10.3, you already have part of this.

v0.10.0 was the first release after a ground-up rewrite — Go daemon, tmux session layer, Electron shell. It worked, mostly. But a rewrite's first release is a promise, not a product.

0.11.0 is 271 commits and 270 merged PRs later, from 49 authors. The difference isn't a rewrite stacked on a rewrite. It's that the foundation finally holds weight — and the app grew outward on top of it.


Highlights

Your phone is a real control surface

The mobile companion app went from a port to a shipping surface. Pair a phone to your daemon over LAN with a password via Connect Mobile, co-view terminals with pinch zoom and pan, and get push notifications on iOS and Android when a session needs you. Settings walks you through LAN or Tailscale pairing and links straight to the app. (#2522, #2533, #2569, #2654, #2851, #2881, #2918, #2933)

Agents can drive a browser

Agents render Markdown and drive an embedded browser preview. Annotate directly inside it to point an agent at a specific UI element, and localhost links clicked in a terminal open there instead of bouncing you out of the app. (#2455, #2548, #2610, #3085)

Feature Releases — install any open PR

Every PR can now produce its own installable prerelease build, so testing an in-flight change means installing a real app rather than doing a checkout. Gated behind a new Developer Mode toggle so the channel picker stays out of the way for everyone else. (#2459, #3039)

GitHub issue intake

Projects can auto-start a worker session per assigned GitHub issue — polling, dedupe, pagination and per-project backoff — configured under Tracker Intake in project settings and the create-project flow. (#2325)

Workspace files, and a diff viewer that parses

A new inspector panel browses a session's workspace files. The Changes view now renders a parsed diff with gutters, hunk headers, +/- markers and an adds/dels summary, instead of dumping raw git diff text with broken line numbers. (#2772, #3013)

Standalone shell terminals

Open a plain terminal not bound to any agent session — scoped per session, renameable, with a right-click context menu, drag-a-file-to-insert-path, and sane tab overflow. (#2828, #2861, #2948, #2644, #3019, #3077)

Keyboard-first navigation

Experimental Cmd/Ctrl+K command palette wired into sidebar search, a spawn shortcut, settings and session-navigation and terminal-focus shortcuts, an in-app shortcuts reference, and Enter-to-send / Shift+Enter-for-newline in the New Task brief to match Claude and Codex. (#2687, #2695, #2795, #2954, #2955)

Also new

  • Paste, drag-drop or attach images directly into a task brief (#2722, #2907)
  • Restart-to-update row with per-channel escalation, a revamped Updates screen, and a fix so the desktop app performs background update checks at all (#2381, #2709, #2939)
  • CLI: ao agent ls with install and auth status, ao spawn resolving project context instead of demanding --project, --kind worker|orchestrator, ao review stop|restart, ao pr (#2371, #2416, #2669, #2673, #3043)
  • Settings and first run rebuilt — redesigned settings with the PR board folded into the per-session inspector, onboarding replacing four empty kanban columns, and a first-run scratch project so there's somewhere to try AO immediately (#2432, #2797, #2952, #2348)
  • Renderer moved to a token-based design system (~1.4k lines of legacy CSS removed), followed by a unified framed desktop shell across macOS, Windows and Linux (#2535, #2937, #2997)

Reliability

This is where most of the cycle went.

Sessions survive restarts. Sessions now resume the agent's own native transcript rather than restarting cold, with a toast when AO has to fall back to replaying the saved prompt. Per-harness restore landed for OpenCode, Copilot, Agy, Kimi, Grok, Qwen, Goose and Vibe, backed by a test proving sessions survive daemon restart and upgrade. (#2350, #2744, #2765, #2790, #2796, #2856, #2857, #2858)

Model config actually reaches the agent. The model you picked in settings was silently dropped for most agents. Closed across Codex, Cline, Goose, Auggie, Pi, Vibe, Autohand, Kimi, Kilocode, Qwen and Copilot, with Kiro now advertising its options at all. (#2869, #2932, #2953, #2956, #2961, #2969, #2971, #2975, #2985, #2989, #2993, #3044)

Lifecycle and coordination. Killed sessions stay dead. Worker-idle completions reach a busy orchestrator through a durable outbox instead of being dropped. Orchestrator replacement goes through a safe canonical branch handoff with stale worktree recovery. AO no longer nudges a session that is genuinely paused on a permission dialog. (#2319, #2320, #2357, #2431, #2530, #2600, #2794, #2798, #2799, #2836, #3072)

Daemon failures explain themselves. Start failures surface the real error with recovery instructions and copyable output, as a floating toast rather than a banner that shoves the board around. ao spawn --issue without a GitHub token no longer panics the daemon. (#2690, #2871, #2972, #3017)

tmux and terminal. Fail fast with a clear message when tmux is missing, correct TERM on attach, forced UTF-8 client mode so non-ASCII stops garbling, pane descendants reaped on destroy so no zombie processes leak, no more double-firing Ctrl+Arrow / Ctrl+Backspace / Ctrl+V, wheel scroll in Codex and OpenCode transcripts, and a startup state instead of a blank pane while launching. (#2259, #2312, #2466, #2499, #2512, #2586, #2602, #2650)

Upgrade safety. Two duplicate migration-version collisions resolved, and out-of-order migrations are now applied instead of silently skipped. (#2294, #3035, #3092)

Windows. NSIS installer shortcut points at the real binary, .ico taskbar icon, ConPTY ProgramFiles(x86) fix, Codex preferring the npm binary over the WindowsApps stub, npm-installed agent binaries found when launched from the GUI, native notifications, a custom titlebar, and background auth checks routed through aoprocess so console windows stop flashing. (#2404, #2481, #2566, #2583, #2666, #2691, #2838, #3006)

PR review. Reviewer enforced read-only via a tool allowlist, binary preflighted with unavailable options disabled before a run is created, pane respawned when the harness changes instead of reusing a stale process, cross-fork PR detection across all remotes, forced re-fetch past max age so the list stops going stale, and the previous-head verdict shown as context while a new review runs. (#2193, #2194, #2368, #2506, #2678, #2750, #2767, #2800, #3008, #3009, #3049)


Under the hood

The agent adapter layer was consolidated, cutting ~3,100 lines of duplication into shared agentbase and activitystate packages. The release pipeline gained channel awareness, retried macOS sign/notary flakes, a guard on the latest desktop release, an advisory e2e gate against real installed builds before a stable cut, and a dispatchable unsigned build-artifacts workflow that emits the Linux .deb. On quality: a T0/P0 renderer smoke suite with data-testid instrumentation, a deterministic no-LLM fake harness for e2e, and TypeScript typechecking in frontend CI. Telemetry was capped in volume, switched to anonymous IDs, and no longer leaks raw CLI args into error events. (#2266, #2415, #2489, #2683, #2692, #2696, #2697, #2829, #2864, #2978, #2986)

Docs and the landing site now deploy to aoagents.dev via GitHub Pages, with a privacy policy, a PR-wise changelog, platform-detecting download links, and a contributing guide. (#2308, #2385, #2605, #2757, #2826, #2837, #2846, #2913)


Upgrading

GitHub Releases and Homebrew are the supported install paths; the npm package is frozen. Existing installs should update in place — the migration ordering fixes in this release specifically target the "it broke after updating" class of failure.


Contributors

49 distinct authors landed work in this range, and 30 of them landed four commits or fewer. That shape is the point: a first PR to AO is a realistic weekend.

Special thanks to Harshit Singh Bhandari, Nikhil Achale, Just_Anniee, Apoorv Singh, Khushi Diwan, Vaibhaav Tiwari and Pulkit Saraf, and to everyone else who filed an issue, tested a nightly, or sent a patch.

Full changelog: https://github.com/AgentWrapper/agent-orchestrator/compare/v0.10.0...v0.11.0