Releases: aterrylu/autonomOS
Release list
v0.5.0
A big one — v0.5.0 is anchored by a major security-hardening pass (an unauthenticated RCE closed, the whole control plane moved off the public port onto a Unix socket, per-agent tokens), a brand-new keyboard-shortcut system, Codex and multi-provider support maturing into first-class territory, and a lot of reliability and cleanup throughout.
🔒 Security hardening
The headline theme this release. Several defects — including one that composed into remote code execution — are closed, and the agent control plane is now locked down by construction.
- 🚨 #281 — Require auth on
/mcp, closing an unauthenticated RCE./mcpmatched no auth prefix, so any host on your network could open an MCP session andcreate_agentwithbypass— arbitrary code execution as you. Auth is now enforced at the transport boundary (ADR-054). - 🔌 #284 — Move
/mcp+ the hook relay onto an internal Unix socket. The orchestration tools no longer sit on the network port at all. Breaking change: an external MCP client pointed athttp://host:3100/mcpnow needs a tunnel or local forwarder — on-box clients are unaffected (ADR-055 PR A). - 🪪 #293 — Gateway onto the control socket + per-agent identity. Completes the socket move and gives each agent its own identity on the gateway rather than a shared fleet token (ADR-055 PR B).
- 🔑 #297 — Per-agent tokens in a 0600 file. Consolidates token delivery to a per-session owner-only file, fixing a Codex argv leak and wiring up Gemini outbound in the process (ADR-055 follow-up).
- 🕵️ #274 — Stop leaking the auth token in a URL. The post-install connect panel surfaced the token on stdout instead of in a shareable link that could land in shell history or browser logs.
- 🧼 #301 — Security hygiene bundle. Owner-only (0700) config directories, config validation, a link-scheme filter on terminal hyperlinks, and dependency bumps — defense-in-depth with no live exposure open.
- 🚪 #288 — Deprecate the agent
capabilitiesfield. It was bypassable (a restricted agent still held the token and could call the REST API) and misleading (the system prompt advertised tools that weren't registered). Removed from thecreate_agentschema; restrict workers via their system prompt instead (ADR-058). - ⏱️ #298 — Remove the scheduler's
isolatedtarget. It was the last execution path that could grant autonomy outside the permission-mode system — a schedule created without an explicit flag ran with full access. Schedules now send a prompt to a running agent, which acts under its own permission mode (ADR-062).
⌨️ A real keyboard-shortcut system
CMUX-style quick navigation, built on a central registry so shortcuts are consistent, discoverable, and can't fight the terminal.
- 🔢 #300 — Keyboard shortcut registry +
mod+digit pane switching. One table drives both the app dispatcher and xterm's key handler, so the app-vs-terminal key-capture boundary is defined in one place (ADR-063). - 🔀 #305 —
mod+digit jumps to the Nth sidebar agent, with hold-to-reveal badges. Hold the modifier and each agent row shows its digit, so the hint can never lie about what the shortcut will do (ADR-066). ↕️ #306 —mod+↑/↓ to move between agents. Relative previous/next navigation with neighbor hint chips on the active agent during the hold.- 🧯 #304 — Free the dead ctrl+d/w/b reservations + route Escape through the registry. A LIFO escape stack replaces dead document-level Escape listeners (which never fired under terminal focus);
mod+wstays deliberately declined to the browser (ADR-065).
🤖 Codex & multi-provider
Codex inbound gets more reliable, and a new env-preset mechanism lets you run alternative model backends through the real Claude Code binary.
- 📨 #287 — Stop losing Codex inbound messages silently + kill a false boot alarm. Codex has no hook relay, so the prompt-delivery receipt fired a bogus "may have failed to boot" warning on every prompted Codex agent; that tracking is now capability-gated.
- ⚡ #294 — Inject Codex inbound immediately. Removes an idle gate that duplicated Codex's own mid-turn safety and deadlocked agents blocked in
wait_agent(ADR-060). - 📊 #276 — Codex usage tracking plugin. Live usage from the ChatGPT backend with a rollout-file fallback, shown as status-bar items alongside the Claude usage bar.
- 🎛️ #308 — Per-provider, per-tab, per-runtime usage-queue auto-Enter. The auto-submit that resumes a capped session when its window resets now covers Codex too, and one tab's reset no longer fires another tab's queued prompt (ADR-068).
- 🧩 #302 — Model-override env presets. Named, human-keyed presets run an alternative backend (e.g. Kimi via its Anthropic-compatible endpoint) through the real Claude Code binary — no new provider, hooks/MCP/permissions all keep working. Secrets are masked on read and keyed in by a human (ADR-067).
🔄 Resume & reliability
Sessions survive restarts, statuses recover on their own, and "sent" now means "delivered."
- 📂 #283 — Resume any external Claude Code session. Click a terminal-started
claudesession in the Projects panel (or via MCP) and autonomOS adopts it into a managed agent with its conversation intact (ADR-056). - 💾 #270 — Keep Claude Code agents across a server restart. A provider-parity resume fallback stops never-conversed CC agents from vanishing on restart.
- 🌀 #278 — Recover agent status after compaction. Status resolution is now order-independent, so an agent no longer gets stuck showing "compacting" when the hook events arrive out of order (ADR-053).
- 🎚️ #296 — Permission mode: the record follows the process;
default→ask. A resume with an explicit mode no longer leaves the record disagreeing with what's actually running, and the enum value is renamed to match what it does (behavior-preserving) (ADR-061). - ✅ #299 —
send()acks delivery, not routing. You're no longer told "sent" for a message injected into a dead daemon or a closing socket.broadcast://and the stubslack://are removed (ADR-064).
🚀 Install & operations
The operator path drops pm2, first-run install gets a real smoke test, and the Electron app is retired in favor of the always-on server.
- 🧰 #271 — Retire pm2 from the operator path. launchd/systemd-user supervision with a server-owned rotating log, auto-migrating existing pm2 setups.
- 🎁 #272 — First-run install UX. A post-install smoke test that waits until the daemon is actually responsive, then a connect panel with the dashboard URL + token.
- ✂️ #273 — Cut the Electron desktop app. The real need was an always-on remote server, not a local desktop wrapper; the PWA covers the thin-client role at zero Electron maintenance cost (ADR-051).
🧹 Dashboard polish & cleanup
- 🗑️ #289 — Remove the broken markdown file preview. It had regressed to tearing down the dock when you clicked a
.mdlink; removing it also drops the dashboard's entiredangerouslySetInnerHTMLsurface and ~70MB of deps (ADR-059). - 🩹 #282 — Eliminate layout/terminal/store stuck-states. An audit sweep across the dockview layout, terminal, and store closing a cluster of ways the UI could wedge.
- 🔦 #269 — Distinct highlight for co-visible sidebar rows. Agents shown side-by-side are now easy to tell apart in the sidebar.
- 📖 #307 — Rewrite
MCP_INSTRUCTIONS+ add a drift-guard. Clearer inter-agent messaging guidance and a peer-discovery note, with a test that pins the instructions to the actual registered tools so they can't drift. - 📝 #309 — Complete the v0.5.0 changelog. Retroactive changesets for five PRs that had merged without one, so nothing in this release ships undocumented.
📦 Install / upgrade: curl -fsSL https://raw.githubusercontent.com/aterrylu/autonomOS/main/scripts/install.sh | sh && autonomos start
💾 Manual download: grab autonomos-<os>-<arch>.tar.gz for your platform from the assets below (verify against SHA256SUMS)
Thanks for using autonomOS! 💛
v0.4.0
A meaty release — the entire tabs + split-pane layout has been rebuilt on dockview (the fragile detached-terminal overlay is gone), the sidebar got pinning + drag-reorder + a proper active-agent highlight, per-provider permission modes replace the old autonomousMode boolean, Claude Usage now tracks the account you're logged into via read-only OAuth, and the terminal feels meaningfully faster under heavy output.
🪟 New layout engine — dockview, with kept-alive terminals
The biggest architectural ship in this release. The old binary-tree split-pane plus hand-positioned terminal overlay (a recurring source of geometry desyncs on resize/drag/sidebar-toggle) is gone, replaced by dockview with its panels mounted-always. xterm.js terminals now survive any drag/resize/reorder without remount.
- 🏗️ #263 — Tabs + split-pane rebuilt on dockview, default on. Layout topology is now owned by dockview (model + toJSON/fromJSON); Zustand keeps content. Drag-to-edge splits, native tabs per group, command-bar header. The hidden
groupsworkspace-swap behavior is gone — one canonical layout, no surprise rearrangements when you click an agent. (Breaking change for anyone who relied on the workspace-swap behavior.) - 🧹 #266 — Removed the legacy layout engine entirely. ~1,500 lines of binary-tree, detached overlay, geometry-sync, and groups-slice machinery — gone. dockview is now the only layout engine; the
layoutEngineflag is removed.
📑 Sidebar overhaul — easier to find what you're talking to
Make the agent list usable when you have a lot going on.
- 🌳 #249 — Default to the hierarchical view. New users + anyone who hadn't explicitly picked now lands on the org-chart view first. The show-exited-agents toggle (and the exited list it surfaced) is gone — exited agents stop cluttering your sidebar.
- 📌 #250 — Pin agents + drag-reorder. Flat view now has a pinned section (top) and unpinned section (below). New agents land at the top of unpinned; pin/unpin moves them between sections; drag to reorder within either section. Survives reloads.
- ✨ #248 — Brighter active-agent highlight. A gold ring + soft glow makes the currently-displayed agent immediately findable — even in a long list. Works in both flat and hierarchical views; theme-aware (navy+gold in Midnight, amber in Daylight); coexists with the notification badge so you can still see "this agent has new activity" on the one you're watching.
- 📍 #255 — Vertical pin icon in flat-view rows. Small visual polish on the hover-reveal pin button.
🛡️ Per-provider permission modes
The old autonomousMode: boolean flag was too coarse for three providers with different permission semantics. Replaced with a per-provider enum that maps to each provider's native flags — and the default is now fail-closed.
- 🎚️ #257 — Pick a permission mode per provider. Four modes:
default(ask on every tool use),auto(auto-accept edits),plan(read-only investigation),bypass(skip all prompts). Settings hold a global default; the create-agent panel lets you override per spawn. Each provider maps to its native flags under the hood (--permission-modefor Claude,approval_policyfor Codex,--approval-modefor Gemini). OldautonomousModesettings are scrubbed-and-warned on read. - 🔒 #261 — Default permission mode is
default, notbypass(fail-closed). New agents now ask for permission unless you explicitly opt into a more permissive mode. Safer default; existing built-in templates updated to match. - 🏷️ #265 — Clearer permission-mode labels. "Ask" instead of
default, "Accept edits" instead ofauto— the dropdown now reads in plain English instead of internal enum names.
🔑 Claude Usage knows which account you're logged into
Claude Usage now auto-detects your current Claude Code account — even when you switch logins.
- 🪪 #264 — Read-only OAuth account detection. The plugin reads CC's own OAuth token from your keychain and asks
claude.ai/api/oauth/usagedirectly. Works on a clean install (no live session needed), surfaces full per-model + extra-credits breakdown, and never refreshes the token (refreshing would invalidate CC's own session). Manual session-key paste still wins as an override. Removes ~946 lines of earlier cookie-scan machinery in the process. - 🔄 #258 — Switch accounts when a new Claude session is detected. Intermediate mechanism shipped earlier in this release cycle — server scanned running
claudeprocesses and adopted the freshest external session's cookie. Superseded in this same release by #264, which doesn't need a live session.
⚡ Terminal performance under heavy output
Long-running output (npm install, make build, busy agent streams) now feels faster.
- 🏎️ #260 — Server-side frame coalescing on by default. Multiple PTY chunks within a short window collapse into one WebSocket frame — fewer frames, less overhead per byte, smoother streaming.
- 🔬 #253 — Frame coalescing, flag-gated + ablation harness. The mechanism + a measurement harness; #260 flips the flag default after the data was clean.
🩹 Reliability + tooling fixes
- 🔁 #254 — Resume agents after self_exit.
self_exitwas hard-deleting the agent record, making "resume" fail with "resumeAgentId not found." Now self_exit soft-exits (record kept withreason: "self_exited"), symmetric withkill_agent— resume works on any exited agent regardless of how it exited. - 📋 #244 — Release notes include every changeset. The release-notes consolidator was reading only one package's CHANGELOG and silently dropping entries from changesets that didn't list it. Now reads all per-package CHANGELOGs, dedups by PR, and renders one line per PR.
- 🚧 #259 — Quarantined the
usage-queue-sim-integrationflake. Test is exposed to a known auto-trust ↔ TUI-stdin race (ADR-036). Skipped pending a proper fix; other CI signal preserved.
📦 Install: curl -fsSL https://raw.githubusercontent.com/aterrylu/autonomOS/main/scripts/install.sh | sh && autonomos start
🖥️ Desktop app: download the universal DMG from the assets below
🔄 Auto-update users (v0.3.0): the desktop app will update itself on next launch
Thanks for using autonomOS! 💛
v0.3.0
A big release — Codex agents are now a first-class citizen alongside Claude Code, the dashboard handles Claude usage limits gracefully, copy-to-clipboard finally works on remote deployments, and a bunch of polish landed throughout.
🤖 Codex agents land as a first-class provider
Codex agents now behave like Claude Code agents in autonomOS — same dashboard, same status, same messaging.
- 🛠️ #228 — Per-agent Codex daemon +
--remoteTUI. Each Codex agent runs a dedicatedcodex app-serversidecar plus a--remoteterminal — the foundation that everything else below builds on. - 📬 #234 — Codex agents can receive messages from other agents.
send()to a Codex agent now drops a message into its thread, just like a Claude Code agent. - 🟢 #236 — Live busy/idle status for Codex. No more flat "running" — status icons reflect what the agent is actually doing.
- 💾 #237 — Codex agents resume across server restarts. Conversation and memory survive a daemon restart instead of forking into a fresh empty thread.
- 🔓 #230 — Codex runs with full access (no bubblewrap). Fixes the "could not find bubblewrap on PATH" warning on Linux. autonomOS is the trust boundary.
- 🎯 #243 — Create-agent panel correctly shows Codex has live status. The capability row was incorrectly hardcoded to "via hooks" — Codex sources status from its event stream instead.
✨ Spawn any provider from anywhere
- 🌐 #231 —
create_agentMCP tool now takes aproviderfield. Agents (like Dispatcher) can spawn Codex or Gemini, not just Claude Code. - 🎨 #242 — Per-provider agent icons in the dashboard. New "Agent Icons" setting picks between provider+status or status-only icons. Defaults to provider+status so you can tell agents apart at a glance.
⏰ Hit your Claude usage limit? autonomOS waits for you
- 🚦 #232 — Queue-send on usage-limit clear. Type your next prompt while capped, click the hourglass, and autonomOS hits Enter for you the moment the limit lifts — even with no dashboard open.
- 🔘 #239 — At-limit toggle UI. The button only appears when you're actually capped, with clear on/off state and a built-in simulation mode for demos.
- 🚨 #233 — Per-pane credential-failure warnings. Each armed pane now gets its own warning when credentials break, instead of only the first one.
- 🧪 #235 — Dev/QA usage-limit simulation control. Demo the queue-send feature without burning a real limit.
🔑 Claude Usage plugin is now zero-touch
- ✨ #221 — Auto-detect your Claude session, no manual cookie paste. Claude Code injects the cookie; a SessionStart hook relays it; the plugin uses it. Works on any install once an agent has run.
- ✅ #218 — Validate your session key on save. No more false "Saved!" for keys that don't actually work. Errors are categorized — credential vs transient — with the right action button.
- 🏢 #219 — Query the right organization. Fixes a 403 for anyone who's also used the Anthropic API — the plugin now picks the org with chat/Max access instead of
memberships[0].
📋 Copy from the terminal — even on remote deployments
- 🌍 #222 — OSC 52 copy works on remote (plain-HTTP) deployments.
navigator.clipboardis undefined in insecure contexts; the dashboard now falls back to an off-screen<textarea>+execCommand("copy"). - 🎉 #224 — "Copied N chars" toast confirms auto-copy. No more silent OSC 52 copies — you see when something hit the clipboard.
- 📍 #225 — Toast moved to bottom-right corner. Less visually intrusive.
🧹 Big cleanup — terminal-only
- 💥 #220 — Removed "view mode" and all non-xterm renderers. Terminal (xterm.js) is now the only view and the only renderer. The
/api/conversationroute, the Ghostty renderer, and 5 dead dependencies are gone — slimmer bundle, simpler mental model. (Breaking change:terminalRenderersetting is silently dropped.)
🩹 Reliability fixes
- 🪟 #208 — Statusline + MCP channel-server bundle into the desktop app. Two runtime-loaded scripts were missing from the bundle — desktop spawns silently lost statusline + agent messaging tools. Fixed with a manifest + boot-time warnings + smoke-test gate.
- 📨 #209 — Silently-dropped starting prompts get re-delivered. Delivery-receipt tracking re-injects the prompt via PTY paste when
UserPromptSubmitnever arrives. Auto-trust watcher uses needle-verified Enters now instead of blind bursts. - 🚀 #227 — Hosted deploys always serve a fresh dashboard.
make prodremoves stale embedded artifacts;make deploydoesn't ship them; the server logs bundle ID + mtime; the dashboard warns when its tab is older than what the server is serving.
📦 Install: curl -fsSL https://raw.githubusercontent.com/aterrylu/autonomOS/main/scripts/install.sh | sh && autonomos start
🖥️ Desktop app: download the universal DMG from the assets below
🔄 Auto-update users (v0.2.0): the desktop app will update itself on next launch
Thanks for using autonomOS! 💛
v0.2.0
autonomOS v0.2.0 — the first signed + notarized macOS release. 🎉
Desktop app (macOS)
- Signed & notarized. The app opens without a Gatekeeper warning. Because it now has a stable Developer ID identity, macOS remembers folder-access grants across launches — no more repeated permission prompts on every open. (Grant Full Disk Access once if you'd rather skip per-folder prompts entirely.)
- Fixed — connection indicator falsely showing "Disconnected." The bottom-left status now uses adaptive polling: it recovers in ~1s instead of up to 15s and debounces transient blips, so it correctly reflects the embedded server.
- Universal2 — one app runs natively on Apple Silicon and Intel.
Claude Usage
- The session key is now the only required credential. The organization UUID is resolved automatically from your session key via claude.ai's bootstrap API — the Org ID field is gone from setup. Existing configs that still have an org ID keep working; it's simply ignored.
Under the hood
- First release cut on the hardened, hands-off pipeline: universal2 DMG built + validated in CI, signed + notarized + stapled, with SLSA build provenance.
- New CI gates catch regressions before they ship: an idle-renderer CPU peg-detector (guards against the past ~200% idle-CPU bug) and a full DMG / first-run validation that now runs on every artifact-touching PR.
Install
- Desktop (macOS): download
autonomOS-0.2.0-universal.dmgbelow, open it, and drag autonomOS to Applications. - Server (CLI): grab the matching
autonomos-<os>-<arch>.tar.gzbelow (or useinstall.sh).
Verify downloads against SHA256SUMS.
v0.1.0
Minor Changes
- #183
f301061Thanks @aterrylu! - Professional release pipeline: universal2 macOS DMG built and validated in CI (lipo'd Node + native modules across arm64/x64), changesets-driven versioning with a single root CHANGELOG, lefthook + commitlint git hooks, and CHANGELOG-derived GitHub Release notes.
Patch Changes
-
#186
9c81ca4Thanks @aterrylu! - Release pipeline: add a dry-run dispatch mode to test the universal DMG build without publishing, and SLSA build-provenance attestations on shipped artifacts. -
#187
ec1f536Thanks @aterrylu! - Fixed: the universal2 macOS app now runs on Intel Macs (a native HTTP dependency failed to load) and Built-in mode reliably spawns agents on both Apple Silicon and Intel (the bundled PTY spawn helper wasn't shipped correctly). Earlier 0.0.x desktop builds were affected.
v0.0.1
What's Changed
- feat: v0 server + terminal view by @aterrylu in #1
- feat: theme switcher (Midnight, Daylight, Void) by @aterrylu in #2
- feat: migrate dashboard to React + Zustand + Tailwind by @aterrylu in #3
- feat: session management sidebar + Zustand persist by @aterrylu in #4
- feat: align void theme with VSCode Pitch Black by @aterrylu in #5
- feat: project-based session view + responsive sidebar by @aterrylu in #6
- fix: PTY exit handling, error handling, sidebar persistence by @aterrylu in #7
- feat: production serving, Tailscale sidecar, README update by @aterrylu in #8
- fix: Tailscale sidecar host connectivity by @aterrylu in #9
- feat: resume sessions, auto-expand projects, deployment by @aterrylu in #10
- feat: session naming with customTitle passthrough by @aterrylu in #11
- docs: orchestrator-first vision (ADR-012) by @aterrylu in #12
- feat: autonomous sessions, prod default, optional Tailscale deploy by @aterrylu in #13
- feat: dashboard UX — shortcuts, reconnect, per-project sessions by @aterrylu in #14
- fix: review cleanup — timer leaks, scroll UX, buffer perf by @aterrylu in #16
- feat: JSONL title cache + live/project session sync by @aterrylu in #17
- fix: daily review — render perf, double-toggle, cleanup by @aterrylu in #18
- feat: optional token auth middleware (AUTONOMOS_TOKEN) by @aterrylu in #19
- fix: biome import ordering by @aterrylu in #20
- docs: ADR-013 plugin system + ADR-014 multi-CLI provider adapter by @aterrylu in #22
- fix: instant terminal switching — keep sessions alive (VSCode-style) by @aterrylu in #23
- fix: instant terminal switching + flicker-free rendering by @aterrylu in #24
- fix: terminal UX — scroll, focus, and mobile keyboard by @aterrylu in #25
- feat: plugin system + Claude usage status bar (ADR-013) by @aterrylu in #21
- feat: pinned sessions, drag-to-reorder, Codicon icons by @aterrylu in #26
- fix: PORT env leak, split usage cookie vars, fix vite proxy by @aterrylu in #27
- refactor: simplify Makefile — dev/prod split, remove Tailscale sidecar by @aterrylu in #28
- feat: favicon + sidebar cleanup by @aterrylu in #29
- feat: auto-persist sessions, settings UI, sidebar enhancements, MCP server by @aterrylu in #30
- feat: settings panel for API keys + cookie/theme fixes by @aterrylu in #31
- fix: settings panel inputs unresponsive when no saved value by @aterrylu in #32
- docs: update README with current make targets by @aterrylu in #33
- docs: update README, env config, CLAUDE.md, and ROADMAP by @aterrylu in #34
- fix: auto-install pm2 in make prod if missing by @aterrylu in #35
- fix: live session names sync with /rename + SPA fallback by @aterrylu in #37
- fix: serveStatic intercepting API routes + better preview errors by @aterrylu in #38
- docs: ADR-019 plugin system evolution + roadmap restructure by @aterrylu in #39
- feat: split-pane session grouping + ghost preview + bug fixes by @aterrylu in #40
- test: split-pane test suite + stale groups bug fix by @aterrylu in #41
- fix: usage panel hidden behind terminal panes by @aterrylu in #42
- fix: preview panes in split groups + restart all sessions by @aterrylu in #43
- fix: terminal scroll — mobile touch + desktop auto-scroll by @aterrylu in #44
- feat: inertial touch scrolling for terminal by @aterrylu in #45
- feat: LiteLLM endpoint toggle in settings by @aterrylu in #46
- fix: show Saved! feedback when toggling API override by @aterrylu in #47
- feat: generic hook relay + notification badges by @aterrylu in #48
- research: cmux competitor analysis by @aterrylu in #51
- research: A2A protocol analysis by @aterrylu in #50
- feat: channels config in settings — inject --channels into new sessions by @aterrylu in #52
- feat: conversation view v2 — structured chat transcript with TUI styling by @aterrylu in #53
- research: agent platform landscape analysis by @aterrylu in #49
- feat: agent status icons + hook-based status tracking by @aterrylu in #54
- feat: zero-config hook relay via --settings inline curl by @aterrylu in #55
- feat: session card layout — time + unread + status positioning by @aterrylu in #56
- fix: hook relay stdin — remove & that disconnects pipe by @aterrylu in #57
- fix: unread dot badge instead of count by @aterrylu in #58
- fix: polish — auth bypass, port mismatch, unread indicator by @aterrylu in #59
- refactor: simplify agent status code from /polish review by @aterrylu in #60
- fix: add 'unread' label after notification count by @aterrylu in #61
- fix: auto-clear unread for active session by @aterrylu in #62
- fix: /rename reflects immediately + sessions persist on restart by @aterrylu in #63
- fix: markdown preview resolves ~/... paths by @aterrylu in #64
- fix: preview close — layout-aware split collapse + focus restore by @aterrylu in #65
- fix: focus terminal on sidebar session click by @aterrylu in #66
- fix: guard against corrupted persisted groups causing crash by @aterrylu in #67
- research: Claude Code CLI flags evaluation for autonomOS by @aterrylu in #68
- feat: --session-id flag + SubagentStop/PostCompact hooks by @aterrylu in #69
- test: 19 tests for hooks status derivation by @aterrylu in #70
- feat: PWA — installable app + desktop notifications by @aterrylu in #71
- fix: rename Restart All Sessions → Restart Server by @aterrylu in #73
- feat: gateway channel system — MCP server + router infrastructure by @aterrylu in #72
- fix: remove session from persistence on Ctrl+C exit by @aterrylu in #74
- feat: send_to_agent accepts session name or ID by @aterrylu in #75
- fix: gateway WS auth via query param token by @aterrylu in #76
- feat: pass --name to Claude Code at spawn by @aterrylu in #77
- feat: agent UI labels + list_agents title enrichment by @aterrylu in #78
- fix: agent status no longer flickers between warning and in-progress by @aterrylu in #79
- fix: non-permission notifications no longer reset status to idle by @aterrylu in #80
- feat: --brief flag + SendUserMessage notification integration by @aterrylu in #81
- fix: deduplicate SendUserMessage notifications by @aterrylu in #83
- feat: URI-based send tool — inter-agent comms redesign by @aterrylu in #82
- fix: harden hooks + PTY exit handling by @aterrylu in #84
- feat: createAgent MCP tool with system prompt injection by @aterrylu in #85
- feat: consolidate MCP tools + base autonomOS context injection by @aterrylu in #86
- fix: MCP polish — timeout failure, name collision guard by @aterrylu in https://github.com/aterrylu/autonomOS/pull...