Skip to content
AASC

Changelog

What changed in each desktop release, newest first. The files for the latest one are on the download page.

2.10.60

On GitHub

Features

  • Lighter on memory: macOS counts every Claude and Codex CLI that AASC starts (and their MCP servers) as AASC's own memory, which is why a big workspace could read as 10 GB. The header now shows a memory chip ("≈ 10.4 GB") and each LIVE card shows its session's share, so you can see which sessions hold it.
  • Sleep idle sessions (opt-in): Settings → ADVANCED → Sleep idle sessions (off by default; 15 min to 4 hours). A session quiet for that long has its CLI stopped and its card kept, marked Asleep; opening it resumes the conversation. Pinned, busy, asking, queued, central and non-resumable sessions never sleep.
  • Remote computers: pair another computer's AASC from the devices chip (Remote computers → Add a computer) using its Copy link; once it allows you, its shared sessions open here in their own window.
  • Quick-launch permission modes: a project frame's Claude+ / Codex+ open a menu of permission modes, opening on the one you picked last for that CLI.
  • Add to queue from Prompts: a past prompt in Prompt Trace (desktop and phone), a session's Prompts tab or the phone's saved prompts can be added to the end of a live session's queue.
  • PINNED and RECENT in the Projects view: the rail's built-in frames now also show when the rail is grouped by project.
  • Phone app: attach videos (screen recordings or camera clips) to a message; each kind in the Usage sheet's context breakdown opens to what it holds (memory files, skills, tools, attachments); central sessions in their own CENTRAL group in the Sessions list; the queue always sends with Enter on the phone.
  • Pair a phone is on by default now that the phone app ships ("phonePairing": false in server-config.json or AASC_PHONE_PAIRING=0 turns it off).

Improvements

  • Central sessions are off by default: the central sessions feature and its MCP endpoint start only when turned on in Settings → ADVANCED → Central sessions (takes effect at the next start of AASC). If you use central sessions, turn the switch on after updating.

Bug Fixes

  • Launch line eaten by oh-my-zsh: oh-my-zsh's one-key update prompt no longer swallows the first character of the command AASC types into a new terminal (codex ran as odex).
  • Remote computer status: when opening a remote computer fails, its row is re-checked at once instead of showing Online until the next check.

2.10.59

On GitHub

Features

  • Central sessions over MCP: a Claude or Codex session can be made the "central" for everything, one room or one project (New Session → Central session). It sees and steers the sessions in its scope through an in-process MCP endpoint, with a task ledger, an ACTIVITY tab and worker badges. Anything that is yours to decide shows an Allow once / Deny card on the Mac and on paired phones. Auto routing ships off.
  • Next-prompt suggestions: Claude Code's grey suggested next prompt now reaches AASC. On the phone it appears in the Composer with a "Use suggestion" button; on the desktop the queue box shows it with "Tab to use". It only fills the box and never sends. Codex has no such feature, and Claude only suggests on some turns.
  • Save several projects at once: RESOURCES → Projects → Save projects lists this Mac's GitHub folders as a checklist with Select all, plus a folded "Paste a GitHub link" option. Each row reports its own result.
  • Agent CLI one-click update: ADVANCED (and the phone's Advanced page) shows the installed Claude Code and Codex versions and updates them in one click, with the update log.
  • Ranked by use: the / command and skill list and the phone's New Session project list put what you use most first.
  • Phone app: remote access over Tailscale and a LAN rescan that finds the Mac after an IP change; Resources mirroring the desktop Library; token usage and plan limits; a Prompts tab; Recent activity; conversation search; Voice settings; files named in the chat open in the Project tab; "Compacting" status; a PINNED frame on the desktop rail; app versions for desktop and phone.

Bug Fixes

  • Project save explains itself: a running agent session in the folder no longer blocks saving it, and a refused save now says why (folder missing, remote or branch changed, not on a branch, Git operation in progress) instead of "Choose a canonical checkout".
  • iOS app over Tailscale: the iOS app can now reach a Mac on its Tailscale address.
  • Helper forks: Claude Code's own helper forks no longer show as "unknown" agents in the AGENTS tab.
  • Terminal contrast: xterm's minimum contrast is 4.5 in every theme.
  • npm package: the published package starts and its terminals spawn.

2.10.58

On GitHub

Improvements

  • One 3D look: the 3D scene now draws only the Diorama look. The Cyberdrome/Diorama switch in the 3D panel is gone, along with the old neon look. Robots show the light name chip.

Bug Fixes

  • Sharing survives a quick quit: turning SHARE on or off is saved within about a second, even while sessions are busy, so the next restart restores it. Before, a change made shortly before quitting could be lost.
  • Phone, Back in folders: in the phone's project browser, Back goes up one folder at a time before it leaves the screen.
  • Phone, faster reconnect: returning to the phone app reconnects right away instead of showing "Reconnecting…" for up to 10 seconds.
  • Dropdown lists stay usable in dialogs: a dropdown inside a scrolling dialog now opens above or below its field, fully visible, and follows the page as it scrolls or the phone keyboard opens. On a phone, opening a list no longer pops up the keyboard.
  • Terminal buffer stays put: only the Mac sets the terminal replay-buffer size. Connecting a second device no longer resets it.

2.10.57

On GitHub

v2.10.57 brings the redesigned phone app into the release, along with simpler device sharing on the Mac.

Features

  • Phone app redesign: a native-feeling phone frame with Sessions, Queue and More tabs, history-aware back navigation and deep links. Every paired phone now gets it.
  • Phone sessions: Chat · Changes · Project tabs, with the terminal as a screen over Chat (Fit, pinch to zoom, sticky Ctrl). The Changes tab shows what a session edited. The Project tab opens recent files, searches inside a file and colours code.
  • Answer from the phone: approval and question cards plus an Inbox for Claude Code and Codex, including Codex y/p/a/Esc approvals.
  • Send from the phone: the Mac types the prompt and confirms it was accepted. You can pick a model, its version and an effort in one place.
  • Start on the phone: start a Claude or Codex session in any folder under home.
  • Phone parity with the desktop: rooms work like the desktop's room strip, all ten desktop themes are available, AI popups match the desktop, and the app uses the desktop's robot icon and splash screen.
  • Phone cloud browse: read-only AASC Cloud status and browsing, read through the Mac. Revoking a phone cuts off both the Mac and the cloud in one step.
  • Any device drives: any device can type into a shared session directly; there is no more Ask, Take control or Release. A new Mac setting, Share new sessions with my devices, chooses whether new sessions are shared by default.

Bug Fixes

  • Shared sessions stay shared after a restart.
  • AASC-launched Codex sessions link to their own hooks.
  • The prompt queue fires only once, even before device presence arrives.
  • A paired phone keeps its client id when it signs in again.
  • The plan-usage popover says where its numbers come from and no longer claims "up to date".
  • The Review page names the language each AI popup answered in.
  • The pairing list no longer repeats a device's platform label.
  • The control-request hint now reads clearly in every theme.

Security

  • Phones never see a secret file's content or its commands in chat, edits, subagent transcripts or the terminal peek.
  • A session can read only its own transcript.
  • A phone's backend code is issued only after an approved pairing, and its expiry is capped.

2.10.56

On GitHub

Features

  • Model · effort · context chip: the session header shows the live model and effort, following /model and /effort, plus how full the context window is once Claude Code reports it. The latest model and effort are kept when a session is restarted or resumed.
  • Queue model steps: besides "Set effort…", a chain can include a "Set model…" step.
  • AGENTS tab: click a subagent to read its own transcript, paged from the end; click a teammate to open its session.
  • Terminal / list: typing / partway through a prompt in a Claude or Codex terminal opens the command and skill list.
  • Continue interrupted sessions: after the app reopens, one prompt offers to continue the sessions that were busy when it quit. Nothing is sent until you click.
  • Phone access groundwork: the server side of pairing a phone, phone-sized screens, push notification wiring and an optional "keep the Mac awake while an agent is busy" setting. Phone pairing is off by default, and the phone app itself is not part of this release.
  • Optional cloud connection: RESOURCES → Cloud can sync skill notes and abbreviations through your own backend.

Improvements

  • CONVERSATION opens on your own prompts, and a QUEUE badge marks prompts that the queue sent.
  • UI polish: the LIVE board, the session rail header, menus, the Agenda task card and the minimize icon; text contrast was checked across all ten themes.
  • Saved prompts and rooms are now kept on the Mac, so every device sees the same ones.

Security

  • Requests that arrive through a tunnel or proxy are treated as remote devices, and only requests that name this machine count as local.
  • Terminal routes, history, notes and team data reach a remote device only for sessions you have shared, and terminal routes respect the per-session control baton.
  • A remote device ID stays bound to the sign-in that first used it.

2.10.55

On GitHub

Features

  • Project Sync: RESOURCES → Projects mirrors a project folder to one of your SSH devices — preview the plan, then push. Files are copied over a pinned-key SSH connection, replaced files are backed up first, and each device folder has a single owner.
  • PDF viewer: PDFs open inside the project browser, and long files reopen at the place you were reading.
  • Queue effort steps: chains can include a "Set effort…" step, so a queued prompt can switch the agent's effort level before it runs.
  • Richer LIVE cards: each card shows its room, its note and how long the session has been quiet.

Improvements

  • The session switcher (hold ⌘/Ctrl+E) now moves with ↑/↓ and lists the current session.
  • The plan-usage chip refreshes on click instead of waiting for the next poll.
  • AGENTS log rows open to the full command or tool input.
  • Queue loops, schedules and auto-send settings now survive an app restart.
  • The README is shorter and easier to follow.

Bug Fixes

  • A queue chain no longer stalls after /compact or /effort, which fire no completion hook.
  • Headless background agents no longer take over a dashboard terminal, and a reused process ID can no longer inherit another session's terminal.
  • The hook's terminal cache is now a private per-user directory instead of a shared /tmp path.

2.10.54

On GitHub

Features

  • Windows x64 desktop installer is now included with the macOS release.
  • Linux x64 packages are now available as AppImage and Debian/Ubuntu .deb downloads.

Improvements

  • Every release builds macOS arm64, Windows x64 and Linux x64 from the same commit on native CI runners.
  • All five downloads are verified before publication, with SHA-256 checksum files using the exact public download names.
  • Release publication waits until every platform is complete.

2.10.53

On GitHub

Features

  • Restart session: a new terminal-toolbar button quits the agent and reconnects the same session (same card, name, model and effort) in a fresh terminal. The card is never ended or unpinned, and it asks first when a turn is running.
  • AGENTS tab: a live diagram and log of a session's subagents and teammates.
  • Skill notes: favourites, tags and abbreviation commands for skills and commands across RESOURCES, prompt autocomplete and the Transfers picker, with alias command files for Claude Code and Codex.
  • Resource transfers: reviewed copies of your own skills, commands, rules and agents to saved SSH destinations, with checksums and backups of anything they replace.

Bug Fixes

  • The prompt queue now also waits for a running background shell before sending the next prompt (it only waited for subagents).
  • The terminal toolbar wraps onto a second row instead of clipping Fullscreen and Pop out on narrow panels and phones.

Improvements

  • A session's subagent runs end when its process dies.
  • The repository no longer tracks private working folders and agent guides.

2.10.52

On GitHub

Features

  • Shared view-tab UI kit — History, Prompts, Projects, Queue, Agenda, Review and Resources now use one set of controls (Button, NativeSelect, Field, EmptyState, Pagination…)
  • RESOURCES Uninstall — move user skills/commands/rules/agents/memory to the trash, with Restore
  • Terminal Clear output — eraser button clears the terminal on every connected device

Bug Fixes

  • Queue: Enter retried when Claude swallows it during image-path ingest after /clear
  • Vite dev server no longer answers cross-origin preflights (CORS locked down)

Improvements

  • Removed the AUTO-RELINK daemon (launch-time Remote Control kept)
  • Feature docs realigned with the code

2.10.51

On GitHub

Features

  • Start a session without leaving the session panel. While a panel is open the top bar is hidden, so its + NEW and DIRS were out of reach. The panel's strip now has a + (new-session form) and a recent-directories icon (a folder with a clock) right after the minimize button. Main window only.
  • Plan usage updates as soon as Claude reports it. The server now watches the folder where the status-line tap writes each session's limits, so a new reading reaches the chip in about half a second instead of up to 15 s.

Bug Fixes

  • The recent-directories menu opened from the panel no longer conflicts with the top bar's DIRS (a shared open state let the hidden copy swallow the top bar's launches), is placed correctly inside the panel, closes when the panel is hidden or the terminal goes fullscreen, and can be reached from the keyboard (Enter/Space moves focus into it, Escape returns it).

Improvements

  • Plan-usage reads are capped at four a second per CLI, recover from a swept or recreated usage folder, and a host error is logged at most once a minute.
  • Feature docs updated for both changes.

2.10.50

On GitHub

This release covers everything since v2.10.49.

Features

  • Diorama look for the 3D scene — a second look beside the neon cyberdrome, and the default whenever 3D is on: rounded matte furniture and robots, painted lanes and seat outlines, soft light and blob shadows, doorway posts in each room's colour and potted plants. A HUD button switches between the two looks while 3D is on. Colours follow your theme, and on bright themes the robots, floor paint and livery use deep tones so they stay visible.
  • Selection and attention markers in 3D — the selected robot gets corner brackets and a glow pad, a robot waiting for approval or input gets a bobbing pin, and every robot carries a name chip with its status. Before this, the 3D scene showed no selection at all.
  • LIVE session board — with 3D off (the default), the LIVE page is now a board of your sessions in the rail's order, with All / Working / Needs you filters; click a card to open its session. With no sessions yet it shows a card offering + NEW, DIRS, running claude in any terminal, or turning on 3D, and on a remote device it says when no sessions are shared with it. A one-time tip points at the LIVE tab.
  • Collapse button on the queue — a chevron at the end of the QUEUE header folds the docked queue to its header and back. Floating the queue into its own window folds the docked one too.

Bug Fixes

  • No false "Approval needed" in bypass and dontAsk modes — a session thinking for a long time in bypassPermissions or dontAsk mode could show "Approval needed" when nothing had asked. The approval guess is now off in those modes; real permission dialogs there (ask rules, a dangerous rm) are still caught from Claude's own permission events.
  • A folded queue gives its height back to the terminal — collapsing the queue under the terminal used to leave about 220px of blank space above the header. The terminal now takes that space, and the queue's dragged height comes back when you expand it.
  • DIRS dropdown on phones and narrow windows — below 640px the sideways-scrolling nav clipped it, so it opened invisibly. It now shows.
  • 3D scene — ground decals no longer intercept clicks meant for a robot, and the scene's tone-mapping exposure is no longer reset by the next render.

Improvements

  • The diorama's posts and plants are instanced, so it draws fewer calls per frame than the neon look (787 against 847).
  • The project guide (CLAUDE.md) went from 97k to 42.8k characters: its long invariants moved, unchanged, into the feature docs that own them.

2.10.49

On GitHub

This release covers everything since v2.10.48.

Features

  • Plan limits at a glance — a chip at the top left of the session header shows each CLI's 5-hour and weekly plan usage and when it resets. Codex numbers come from its session logs; Claude's come from a status-line tap that the app passes to each Claude session it launches (it chains to your own status line, and AASC_DISABLE_STATUSLINE_TAP=1 turns it off).
  • Projects view — the session strip's view button now offers Rooms, Projects and Recent activity. Projects groups sessions by directory, and each project frame has a one-click new Claude / new Codex session chip that starts in the same folder and keeps the new card visible under a room filter.
  • Read a whole queued prompt — long prompts in the queue get an unfold/fold toggle, placed so a touch tap can't land on DEL.
  • Detach the queue into its own window — the QUEUE panel's new float button opens one session's queue in a separate native window you can drag to another monitor; its size and position are remembered. Windows merge their edits instead of overwriting each other.
  • Shortcut commands — a command described as "Shortcut for /<target>" now links to its target in prompt autocomplete and in the RESOURCES tab.

Bug Fixes

  • Status badges update on their own — the rail's green "Completed" check used to stay until you clicked the card, and a session that went idle by itself kept its old status until the next event (a reload showed the stale one too). The check now clears when a session moves on, and the server announces the automatic prompting → waiting and waiting → idle changes. An approval or input request you haven't answered still shows as one: only those two safe changes are announced, so the queue never types into a permission dialog.
  • Killing a pinned session is final — the server unpins it before terminating, so it is no longer relaunched on any device, and the phone list's ✕ on a pinned session no longer shows a separate confirmation.
  • Hidden sessions' queues no longer leak — live queue updates are now filtered by the per-device sharing switch like everything else; before, the prompts of a session you had not shared could be sent to other devices.
  • A new session from a project frame now refuses a folder that no longer exists instead of silently starting in your home folder.
  • Pop-out windows no longer relaunch pinned sessions or rewrite the room list (only the main window does), and a pop-out kind this build doesn't know shows a notice instead of a second dashboard that would send every queued prompt twice.
  • RESOURCES tab — redaction now catches long base64 secrets and secret-looking keys in frontmatter, no longer slows down on pathological input, and the tab's dropdowns show their arrow again on dark themes.

Improvements

  • The DIRS launcher and the project frames share one launch path.
  • Installing the app's hooks also installs the status-line tap script, and uninstall/reset removes it.
  • The README is rewritten: get started, requirements, how it works, what it changes on your machine, phone and LAN access, troubleshooting and known limitations.
  • Feature docs were realigned with the code (54 docs), and the automated suite now stands at 3,548 passing tests, with type checks for both src/ and server/ clean.

2.10.48

On GitHub

This release covers everything since v2.10.47.

Features

  • Share sessions with other devices, on your terms — a session stays invisible to other devices on your network until you switch it on with the new HOST ONLY toggle. Session lists, terminal streams, history and every session endpoint honour it, and the computer running the app always sees everything.
  • One prompt queue across all your devices — the queue now lives on the server, so the desktop app and a phone show and edit the same queue.
  • Smarter prompt queue — it now pauses after you press Esc or decline a tool, and waits while subagents are still running, with a Resume button. The header shows how many items are active and inactive, items can be reordered by touch, and the divider between the terminal and the queue can be dragged.
  • Session rail upgrades — a built-in RECENT frame lists sessions with recent work (each one also stays in its own room), the current session and its room are always shown, and rooms can be reordered by dragging or with ▲/▼. The LIVE tab now reopens the session panel instead of closing it, and the separate agents list on the LIVE page is now phone-only.
  • Jump to any session fast — hold Cmd/Ctrl and tap E to cycle through recent sessions, or press Cmd/Ctrl+Alt+0 and type a session's number to go straight to it.
  • RESOURCES tab (this computer only) — a read-only view of your Claude Code and Codex skills, commands, agents, MCP servers, config and instructions across global, ~/.agents and project scopes, with compare, checks and sources panels. Other devices get a 404, and credentials and transcripts are counted but never opened.
  • Remote Control relink — an armed session's Claude Code Remote Control link is refreshed automatically when the session goes idle.
  • Per-session AI popup switch — turn the select-to-explain/translate popup off for a single session.

Bug Fixes

  • The queue no longer sends the next prompt into a turn you just stopped with Esc, and a long turn is no longer treated as finished after 30 seconds without a hook event.
  • Fixed the Electron preload script never loading, which left window.electronAPI undefined in every window.
  • Fixed phones and other narrow devices shrinking the terminal for everyone: they now pan or wrap instead of resizing the PTY, which had permanently hard-wrapped the output.
  • Fixed the terminal's selection highlight drifting on lines that mix Chinese/Japanese/Korean and Latin text.
  • Fixed skill descriptions written with YAML >- showing blank in command autocomplete.
  • The quick-create dialog now always opens sessions on the server-owned terminal.

Improvements

  • Session numbers on the rail, Cmd/Ctrl+Alt+1–9 and the new jump all use one numbering. Cmd/Ctrl+Alt+N on the session that is already open just restores it, so switch-to-previous keeps working.
  • Removed the offline Kokoro voice feature and its dependencies (@huggingface/transformers, kokoro-js). With them gone, the download is about 40% smaller: the DMG is 176 MB instead of 298 MB, and the ZIP 170 MB instead of 288 MB.
  • Feature docs were realigned with the code (36 docs), and the automated suite now stands at 2,707 passing tests with type checks for both src/ and server/ clean.

2.10.47

On GitHub

Features

  • Multi-device dashboard access and control — open the dashboard from another device on the LAN, see connected devices, and use a per-session control baton so multiple viewers can watch a terminal without stealing its input stream. Remote access is blocked until a dashboard password is configured.
  • Session pop-out windows — detach an entire session into a native Electron window for another monitor, then return it cleanly to the main dashboard.
  • Prompt Trace — browse and search the complete prompt record across projects and sessions, with human, command, and agent-injected filters.
  • Conversation navigation and search — improved heading navigation, in-view scrolling, text highlighting, and fallback reconstruction from persisted prompts.

Bug Fixes

  • Fixed terminal output freezing on one device when another device subscribed to the same PTY.
  • Fixed workspace restore/save races between multiple connected dashboard clients by electing one restore owner and one workspace writer.
  • Fixed unsafe remote access when no password is configured: loopback remains available, while LAN requests now fail closed until authentication is enabled.
  • Fixed Electron pop-out sizing and placement across multiple displays, and restricted internal window handling to trusted app URLs.
  • Fixed floating prompt windows and selection actions losing model/effort overrides or being blocked by asynchronous popup creation.

Improvements

  • Added a secure npm run set-password command that prompts without echo and atomically updates the packaged app configuration.
  • Improved responsive layouts, session controls, terminal presentation, project browsing, file icons, queue editing, and narrow-screen behavior.
  • Added independent server TypeScript validation through npm run typecheck:server and npm run typecheck:all, with expanded regression coverage for authentication, presence, PTY subscribers, pop-outs, prompt search, and workspace restore.
  • Consolidated backend feature documentation into the manifest-backed docs/feature/ tree.

2.10.40

On GitHub

Features

  • Saved-prompt library — a curated, bookmark-only prompt library (SAVED tab) alongside a read-only pool of recent prompt history (RECENT tab), portaled into the queue compose row and the queue edit modal. Nothing is saved automatically — only an explicit 🔖 promotes text into the library.
  • Unified queue editor — QueueItemEditModal is now the single editor for every queue item type (once / loop / schedule); before/after chain steps are no longer restricted to loop/schedule items.
  • Codex $skill autocomplete — Codex skills under $CODEX_HOME/skills (including symlinked dirs and the preinstalled .system/ tier) are now discovered and inserted as $SkillName, matching how Codex actually invokes them (Claude/Gemini sessions keep using /name).
  • Configurable terminal scrollback — new Settings → Advanced control for the live in-browser terminal buffer (1,000–200,000 lines, default 20,000), independent of the reconnect replay buffer.

Bug Fixes

  • Fixed a session-splitting bug where a lost SessionStart hook could strand a session as "Reconnect" while a duplicate "Unnamed" card was created on the same live terminal — a new terminal-adoption rule re-keys the original session onto its terminal on any hook event instead of just SessionStart.
  • Fixed duplicate session cards from the background process scanner: it now checks whether a discovered process's parent belongs to an existing dashboard terminal before minting a new "external" card, plus a one-time reconciler for previously-created duplicates.
  • Fixed the "Commands Terminal" (ops shell) leaking on session kill/delete, and no longer counting against the visible session cap — session and terminal limits are now tracked separately.
  • Fixed the queue move-picker and saved-prompt picker clipping inside scrollable queue containers by portaling them to the document body.
  • Fixed local Kokoro TTS silently depending on a CDN fetch for its WASM runtime — it now runs fully offline.
  • Fixed a race where a truncated in-memory prompt could permanently overwrite the full prompt text in the database.

Improvements

  • Terminal replay buffers now grow on demand instead of being pre-allocated at full size; per-session prompt history and archived session data are now capped, and the session detail panel evicts least-recently-used project tabs and cached file content instead of keeping everything mounted indefinitely.
  • Reduced the eager JS bundle by roughly half via lazy-loading pop-out views and separating dependency-free 3D metadata from the Three.js modules that use it.
  • Removed unused dependencies (@dnd-kit/*, ansi_up, recharts) and an orphaned, unused module.

2.10.39

On GitHub

Features

  • Local Kokoro TTS: offline, in-browser click-to-speak using Kokoro-82M (Apache-2.0). Runs entirely in a Web Worker — no API key, no network round-trip after the first model fetch (cached in-browser). English-only in this release.
  • Codex model catalog: the new-session modal can now query and cache available Codex models for selection.
  • Queue click/keyboard reorder: ▲/▼ buttons alongside existing drag-and-drop reordering, closing the keyboard-accessibility gap.
  • Terminal hyperlinks open externally: clicking an http(s) link in a terminal now routes through the OS default browser (Electron shell.openExternal) instead of xterm's blocking confirm dialog.

Bug Fixes

  • Terminal permanent hard-wrap fixed: a fitAddon measurement narrower than 20 columns (a collapsed or not-yet-laid-out container) is now rejected instead of being sent to the PTY — previously this could hard-wrap scrollback at the wrong width permanently.
  • Terminal memory leak in backgrounded windows fixed: the un-flushed output buffer is now capped with a fallback flush timer, preventing unbounded growth while requestAnimationFrame is throttled (window hidden / App Nap).
  • Session identity hardening: alias resolution now follows the full chain (not just one hop) after workspace restore; killing one Codex "thread" card no longer drops a shared PID claim needed by a live sibling card.
  • Packaged app entrypoint fixed: package.json main now points at the built Electron bundle (dist/electron/main.cjs) instead of the TypeScript source.
  • Missing dependency declaration fixed: kokoro-js was present in package-lock.json but missing from package.json, which would break npm ci on a clean checkout.

Improvements

  • File-path links to absolute paths outside any project root (e.g. /tmp queue images) now open via the local server's HTTP file stream instead of a popover whose actions would all fail.
  • Queue action row now wraps at narrow panel widths instead of overflowing.
  • Feature docs refreshed across TTS, terminal, session-matching, floating-fork, and process-monitor domains.

2.10.38

On GitHub

Covers everything since v2.10.34 — v2.10.36 and v2.10.37 were tagged in the changelog but never published, so their changes ship here too.

Features

Every live session is now traced (v2.10.38) Previously, a Claude CLI the dashboard didn't launch was invisible — its hooks were silently dropped in "SSH-only mode". Two discovery paths now surface them:

  • Hook fallback — a hook matching no dashboard terminal becomes an external card with full data (real sessionId + transcript). Gated on a controlling tty, so headless claude -p, CI, and MCP runs never create phantom cards.
  • Process scan (20s) — finds interactive claude CLIs that fire no hooks at all (started before hooks were installed) as thin external-<pid> cards. Fully async, so the scan never blocks the event loop.

External sessions are marked with an amber ⌁ badge.

Room kill-all + real session kill (v2.10.36) Killing or closing a session now actually terminates the agent. AI CLIs run as PTY → zsh → claude with claude in its own process group, so the old single-PID SIGTERM never reached it — the card flipped to ENDED while the process kept running. Kill now resolves the process group, escalates SIGTERM → SIGKILL, verifies death, and reports the truth instead of always claiming success. A skull icon in the room header kills every live session in a room.

Effort/model persistence (v2.10.37) effortLevel and model now survive AASC restart and are re-applied across all resume, fork, and clone paths — not just the import path.

Prompt queue & file picker (v2.10.38)

  • A bare @ now lists the shallowest files and folders instead of an empty dropdown, with a retry while the file index is still warming up.
  • Editing a queued prompt gets the same @-file and /-command autocomplete as composing one.
  • A cyan badge shows queued-prompt count on session cards.

Bug Fixes

  • Restore no longer drops sessions. A missing .catch(undefined) on the model field meant a non-Claude session's raw command (or a contaminated Claude model id) would 400 the entire workspace restore, silently losing the session and its room.
  • No phantom cards on restart. external-<pid> cards are never persisted — a dead or OS-reused PID would resurrect a ghost. Live ones are re-discovered within 20s.
  • No duplicate cards. A discovered card upgrades in place on its first real hook regardless of event type; previously a non-SessionStart first hook created a second card for the same process.
  • No launch races. Discovery skips processes without a resolvable cwd and any cwd matching a CONNECTING placeholder, so it can't race a dashboard launch mid-flight.
  • No phantom session history. Upgrading an empty external card no longer archives a bogus "previous session".
  • Stale autocomplete responses can no longer overwrite the dropdown after the trigger has moved.
  • Room header icons (collapse chevron + kill-all) share one line in the vertical rail instead of stacking.

Improvements

  • 49 new tests across session matching and external discovery.
  • Feature docs realigned across docs/feature/.

2.10.34

On GitHub

Features

  • Per-status session icons — each session card now shows a distinct glyph per status in addition to colour, so states are tellable apart at a glance (colour alone was ambiguous — waiting and prompting share cyan):
    • ✓ completed/ready-for-review · ! needs approval · ? needs your input · spinner working · ↑ prompting · ❚❚ idle · … connecting · ✕ ended.
    • The mapping is backend-agnostic — Claude and Codex in the same state show the same icon.
  • Conversation tab separates real prompts from injected content — skill bodies (Base directory for this skill: …), <system-reminder> blocks, and SessionStart/hook context that previously rendered as USER are now demoted to labelled, collapsible rows (SKILL · <name>, SYSTEM REMINDER, HOOK CONTEXT) with a one-line preview, so your actual prompts stand alone. The User filter now shows only genuine prompts + slash commands.

Bug Fixes

  • Toolbar dropdowns no longer clip off-screen — the room-filter and status-legend menus (which open leftward) are measured on open and nudged back inside the viewport when their trigger sits near the window's left edge (e.g. the left-rail layout). New reusable useDropdownFlipX hook.

Improvements

  • Enlarged & decluttered the session-title header row in the left rail — larger, bolder title; bigger status dot, index chip and edit/tag icons; even spacing; and in the narrow rail the label chip now wraps below the title instead of crushing it to a 3–4 character ellipsis.
  • Floating project panel — removed the pop-out header icon; the drag-to-edge gesture is now the sole pop-out affordance.
  • Performance & readability cleanups — transcript classification and the system-row preview no longer scan multi-KB message bodies needlessly; shared SVG props hoisted out of the per-card render path.
  • Viewport-safe-overlay guardrails added to the project rules and feature docs so this class of dropdown-clipping bug is caught at review time.

2.10.33

On GitHub

Features

  • Session labels — assign client-only colored labels to sessions, shown per-card (dot in compact view, chip in detailed view) with a new label picker.
  • Multi-CLI launch buttons — the DIRS dropdown now shows per-directory Claude / Codex / Gemini brand-icon buttons to launch the CLI of your choice.
  • Queue OnceGate — once-items in the prompt queue now drain sequentially, preventing concurrent firing.
  • Queue image attachments — attach images both in the Queue tab compose row and the queue item edit modal.
  • Native folder picker — a "Browse…" button opens the OS folder picker (via dialog:select-directory) in the session creation modals.
  • Terminal toolbar shortcuts — keyboard shortcuts for the terminal toolbar icon-button actions.
  • Room fold/collapse — collapse and expand rooms in the header agent strip and session switcher.
  • Cross-monitor pop-out — drag the Floating Project Panel to another screen to pop it into a native Electron window.

Bug Fixes

  • CJK / non-English file paths are now clickable in the conversation view (Unicode-aware path linking).
  • Attention badge changed from a red "!" to a green "✓" in the session switcher.
  • Fixed session tab badge overlapping the title text.

Improvements

  • Slimmed down the Project tab and removed the legacy Activity Feed.
  • Rewrote the README, added a LICENSE, and realigned all feature docs + manifest.

2.10.32

On GitHub

Bug Fixes

  • Session resume no longer hijacks unrelated conversations. When --resume <id> fails (the original transcript never persisted), the launch command now falls back to a fresh claude/codex instead of --continue / resume --last. The old fallback could adopt the most-recent unrelated conversation in the same directory, re-key the restored card onto it, and corrupt the session's identity (dropping it out of its room) on workspace restore.
  • Session matching no longer steals freshly-spawned terminals. Priority 2 (workDir link) and Priority 3 (CONNECTING placeholder by path) now only fire on SessionStart, so a pre-existing Claude already running in the same working directory can't grab a terminal that was just created for a different session.
  • Two sessions in the same directory no longer collapse into one card. The orphan CONNECTING-terminal merge is now guarded so a session that already owns a live terminal won't absorb another session's terminal (which previously caused both cards to merge and lose data).
  • Prompt-queue Auto-Enter now actually submits. Queued prompts are sent as the prompt text followed by a separate Enter keystroke after a short delay. Concatenating the carriage return onto the text made Claude / Codex / Gemini TUIs insert a literal newline in the input box instead of submitting.

Features

  • More vertical space for the session detail panel. The dashboard Header is hidden while a detail panel is open; the NavBar stays pinned, and switching top-level tabs closes the panel.
  • Detail-panel layout controls. New dock toggle to move the session-navigation bar between a top strip and a left rail (persisted), plus a maximize mode that hides the session strip for more terminal space (Esc to exit).
  • Status colour legend popover in the session switcher, alongside the new dock and maximize controls.

2.10.31

On GitHub

Features

  • Collapse/expand file-viewer pane — a chevron toggle folds the whole project file panel to a thin breadcrumb strip; state is remembered per session.
  • Conversation tab cleanup — slash-command plumbing (/clear, /effort, …) now renders as compact ⌘ chips with output folded in, and "DO NOT respond…" caveat boilerplate collapses into a ▸ system toggle. Added a role filter (All / User / Asst / Tool) and a jump-to-latest button.
  • Dash-insensitive find-in-file — searching A1-A21 now matches A1–A21; en-dash, em-dash, the Unicode minus sign, non-breaking and fullwidth hyphens all fold to a plain hyphen.
  • Multi-monitor terminal pop-out — the Electron terminal pop-out opens on a second monitor when one exists and remembers its position/size across opens (validated against connected displays so an unplugged monitor falls back gracefully).
  • File-Open Chooser — clicking a file path in session text opens a chooser popover.

Bug Fixes

  • Restart / reload audit — hardened workspace-snapshot restore, queue store, session store, floating-session and IndexedDB persistence so sessions, pinned sessions, and queued prompts survive an app restart more reliably.

Improvements

  • Session creation simplified to local-only (remote/SSH mode removed from the new-session modals).
  • Feature documentation and the docs manifest refreshed across all affected areas.

2.10.30

On GitHub

Features

  • Effort & model via launch flags — model/effort are now applied as --model/--effort flags at launch (deterministic) instead of post-startup slash injection, plus a new ultracode effort level.
  • CONVERSATION tab — the old PROMPTS tab now shows the full interleaved history (prompts + assistant replies + tool calls/results + events), read from the real Claude JSONL transcript.
  • AI POPUPS tab — per-session trace of every floating translate/explain/vocab sub-session (favorite ★ / alias / notes / archive / delete).
  • Popup context inheritance — AI popups inherit the parent session's model, effort, and (for all modes, not just explain) its conversation context via --resume --fork-session.
  • AI-popup review history, vocabulary (bilingual dictionary) mode, recursive fork & pop-out floating windows.
  • Rebindable hotkeys for floating-window minimize / maximize / close.
  • Queue automation — per-session queue automation, aliases, effort levels & chain force-start; global queue scheduler with history (favorites) and per-item on/off toggle.
  • 12-hour time picker (dropdowns + AM/PM) with daily first-fire clamp for loops.

Bug Fixes

  • Effort level max no longer silently falls back to high (was a /model→/effort injection race).
  • Fixed "No conversation found" when popping up from a brand-new session — popups now fall back to a clean fresh launch when the parent has no transcript yet.
  • Fixed garbled AI-popup response body — proper UTF-8 decode (no more Â/· mojibake) plus stripping of box-drawing / Braille-spinner TUI chrome.
  • Loop status shows "— in quiet hours —" instead of a misleading "due now" when silenced.

Improvements

  • Terminal scrollback retention increased 5k → 100k lines.
  • Feature-documentation alignment and cleanup.

2.10.29

On GitHub

Features

  • Per-session Auto-send / Auto-Enter — the ➤ and ↵ toggles are now scoped to each session instead of being global. Each agent remembers its own automation policy; the state persists in IndexedDB and defaults to ON.
  • Queue-history aliases — give any saved queue item a custom name. Click to rename inline; aliases are searchable and round-trip through export/import.
  • Claude Code effort levels — the session-creation panel now offers low / medium / high / xhigh / max (adds the new xhigh, drops the invalid min), applied via /effort after launch.
  • ⚡ NOW force-start — manually trigger a loop/schedule item's full before → main → after chain on demand.
  • Queue-history export / import — back up and share saved queue items via a versioned JSON file.
  • Clone/fork auto-title — cloned and forked sessions now generate a sensible title automatically.
  • Custom translate/fork mode — a free-form prompt option for the selection popup, plus a reusable AutocompleteTextarea component.

Bug Fixes

  • Fixed workspace-snapshot session loss / corruption when closing and reopening the app before resolving the Restore dialog.
  • Multi-step chains now wait for the previous step's Stop signal before sending the next, preventing the input box from piling up un-submitted commands.
  • Loops with a missing/zero interval are clamped and rescheduled instead of being silently deleted.
  • Fixed a claude --resume re-key race that could orphan a loop (queue is now hydrated before the WebSocket connects).

Improvements

  • The Electron quit flow shows a saving-progress overlay so you can see workspace/config being saved.
  • Force-start is guarded against mid-chain re-fire and paused sessions.
  • Feature docs and the docs manifest were refreshed to match the code.

2.10.28

On GitHub

Features

  • 12-hour time picker with AM/PM dropdowns. Native <input type="time"> was replaced everywhere time-of-day input is needed (queue item exclude windows, session-level quiet hours, and the new daily-start field) with a three-dropdown picker — Hour (1–12), Minute (0–59), AM/PM. Storage stays HH:MM 24-hour everywhere; the picker is purely a render layer. Conversion is one isolated parseHHMM / formatHHMM pair with full round-trip unit tests covering the midnight (00:00 ↔ 12 AM) and noon (12:00 ↔ 12 PM) edge cases. Styled with theme-aware tokens so the picker is visible in both dark and light themes.
  • Daily first-fire clamp on loop items. New optional first fire each day field — when set, the loop won't fire before that local clock time on any given day. Effectively a positive "start at" version of an exclude window. The meta line shows — waits until 9:00 AM today — (italic dim) while clamped, and the status row appends (waiting for daily start). Schedule items ignore the clamp by design — they have an explicit runAt. The clamp is carried through history snapshots (it's part of the saved pattern).

2.10.27

On GitHub

Bug Fixes

  • Quiet-hours UI lie fixed. When a loop's nextFireAt had passed but the scheduler was silently holding it back because of a per-item or session-level exclude window, the meta line said due now · 1 after — telling users the item was about to fire when it was actually frozen. The item row now shows — in quiet hours — (italic dim, matching the — paused — style), and the bottom status row gains a (in quiet hours) suffix (combined with (N paused) if both apply). Schedule items still ignore quiet hours by design.

2.10.26

On GitHub

Features

  • Background queues now fire on their own. The 1-second scheduler tick was lifted out of QueueTab and into a global useGlobalQueueScheduler mounted in the dashboard. Loops, schedules, and auto-sent "once" items in any session — not just the one you're looking at — now fire on cadence. Toast notifications carry a [session name] prefix so background fires are attributable.
  • Queue history (favorites). Click the ☆ on any queue row to save a snapshot to a new global history (Dexie schema v5). The QUEUE header's top-right 📚 button opens a sheet listing every saved item with filter / type / sort controls. Each entry has View (read-only preview), Edit (modify the saved record), and + Apply (clone into the currently viewed session — no picker, target is implicit). Loop nextFireAt is recomputed on apply so a saved loop doesn't re-fire at the original wall-clock time.
  • Per-item on/off toggle. Every queue row has a power-icon at its leftmost edge. Click to pause that one item — the row dims with a left pause-stripe and the countdown changes to — paused —. The scheduler skips disabled items entirely (loops don't tick, schedules don't fire). Re-enabling a loop resets nextFireAt = now + intervalMs so it doesn't fire immediately from a frozen value. Status row shows (N paused) so the silent inertness is visible.

Improvements

  • Cleaner status messages — distinguishes idle-guard hold vs. mid-prompt hold vs. loop-active.
  • Removed the dead prevStatusRef tracker that survived the scheduler extraction.

2.10.25

On GitHub

Improvements

  • Queue scheduler — no more stuck "due now" loops. When skipWhenPrompting is on and a loop's nextFireAt lands during a mid-prompt window, the cycle is now forfeited cleanly: nextFireAt rolls forward to now + intervalMs so the UI countdown ticks to the next interval instead of showing "due now" indefinitely. Schedules keep their user-chosen time; in-flight chains are left untouched.

  • Queue status row — clearer hold messaging. The status row now distinguishes between three blocked states:

    • ⏳ Holding fire — session is mid-prompt (skip-prompting on)
    • ⏳ Waiting for session to be idle (status: …)
    • ⟳ Loop active / 🕐 Scheduler armed

    Previously a due loop during a working state would just say "Loop active" with no hint why nothing was firing.

Docs

  • Feature-doc manifest realigned: removed orphan LabelChips reference, added review-tab entry, regenerated all hashes.

2.10.24

On GitHub

Bug Fixes

  • Gatekeeper "damaged" fix bundled in DMG — The DMG now includes an Open App.command script. If macOS blocks the app with "AI Agent Session Center is damaged and can't be opened", just drag the app to /Applications, then double-click Open App.command in the DMG. It strips the quarantine flag and launches the app automatically — no Terminal commands needed.

2.10.23

On GitHub

Bug Fixes

  • Fork session hook routing — Hooks fired by a forked Claude session (e.g. claude --resume '<id>' --fork-session) were being dispatched to the origin session instead of the fork. This caused the origin's PID to be overwritten with the fork's PID, and when the fork ended its SessionEnd hook could kill the origin session. Fixed by detecting fork candidates before PID caching and redirecting all hook events to the correct fork session.

Improvements

  • Session matcher now uses session.sessionId (post-routing) rather than the raw session_id from the hook payload when writing PID cache entries, ensuring correctness regardless of fork/resume routing.
  • Added 5 new unit tests for matchSession covering fork routing edge cases (SessionStart, SessionEnd, PID caching, non-fork guard, missing terminal ID).

2.10.22

On GitHub

Features

  • Codex full lifecycle hooks — dashboard-hook-codex.sh now reads from stdin (supporting all 5 native Codex lifecycle events: SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, PermissionRequest) with legacy $1 fallback for older installs
  • Codex hook installer — writes proper [[hooks.X]] blocks for each lifecycle event plus the legacy notify entry; uninstall cleanly removes both forms
  • Queue Auto-Enter toggle — new button in the Queue tab; when ON sends \r (real Enter keystroke that submits in Claude Code / Codex / Gemini TUIs); when OFF types the prompt only so you can review before submitting
  • PostCompact event — added PostCompact to hook payload types and session event types

Bug Fixes

  • SessionSwitcher attention badge — now fires when a session transitions from idle → waiting (fixes Codex sessions that jump straight from idle to waiting without a working/prompting intermediate)
  • Codex hook enrichment — full terminal environment now captured per-event (TTY path, tab ID, tmux, Kitty, WezTerm, Ghostty, iTerm, Warp, VS Code PID)

Improvements

  • Gemini medium density — BeforeTool/AfterTool events included so Gemini sessions correctly reach the "working" (orange) state
  • Session modals — extracted loadSessionPrefs/saveSessionPrefs helpers shared by both NewSessionModal and QuickSessionModal; model + effort level preferences now persist across opens
  • Queue empty state — removed hint text to reclaim screen space
  • Types — added cli_source/codex_event fields on HookPayloadBase, cliSource on Session, last_assistant_message on StopPayload

Older releases are on GitHub.