Changelog
Every release of Turret, newest first. Turret updates itself, so on the stable channel the version at the top is the one you'll get.
0.62.4
Released on .
New
- Offer Claude Code's suggested next message in the composer
- Let the Level tab follow a pan or zoom with live frames from the game
- Redesign the Game pane so a growing game fits
- Ship the Game and VFX panes in the game engine
- Move the Level tab's pan and zoom onto the compositor
- Let a person turn a game's layers in the normal view
- Tell the person to ask the session to load the game from the Level tab
- Move the Level tab into the game engine package
- Give the Level tab its own camera, and lay it out around the picture
- Say the Level tab's load document starts the level
- Level editor phase 10: describeDocument, and the feature closes
- Level editor phase 9: palette, along and the property form
- Level editor phase 8: reloadAssets
- Level editor phase 7: watch, reconcile and undo
- Level editor phase 5: the Level tab
- Level editor phase 4: documents and the token writer
- Level editor phase 3: the edit protocol in the engine
- Level editor phase 2: the Game pane takes a pointer
- Level editor phase 1: design the Level tab
- Link objc on macOS in the game setup skill's CMake, for version 8's live play
- Game mode phase 9b: the model view in the asset register
- Game mode phase 7: live play in the game's own window, with the run coming back as steps
- Game mode phase 8: run_scenario, and a shipped protocol client
- Capture a step's sound to a WAV, name it in the answer and play it in the pane
- Start a game's pictures in the view it declares, and keep the view a model chose
- Game mode phase 3: load the everyday tools up front, and cut what they repeat
- Game mode phase 2: load puts a held run back by default, and a build-and-reload button
- Design the model view in the asset register
- Game mode phase 4: harness protocol version 8, and the live-play decision
- Game mode phase 1: entity diff and field lists, and the schema edges models hit
- Report on 75 game mode sessions and plan the improvements they call for
- Take the pane's picture on every game call, even with picture: false
- Settle a turn once the Claude CLI says it is idle
- Close a self-opened turn that follows a /clear
- Put Codex's async questions on the question card
- Draw Codex fileChange kinds as text instead of crashing the window
- Codex: fail the session when the app-server exits between turns
- Codex: open a new assistant message at a steer's echo, and suppress the unstable-features warning
- Game prompt: carry every game code rule, and say what to do without the skill
- Game tools: pointer input, where a hung game is stuck, and the setup skill's two rules
- Game tools: leave out what the model was told, filter trace rows, measure drift
- Let a game call leave out the game's own fields and its knobs' rows
- Game engine updates: ship game mode's engine apart from Turret
- Keep one resolution for a region drawn at no named size
- Show a repository's own thumbnail from a .thumbnails folder beside an asset
- Draw a still of each .glb in the Assets tab
- Size game tool answers to what a model can use
- Engine sign-in console: sign in to Claude Code and Codex from Turret (phases 1–5)
- Draw the turn-activity dots as an animated PNG mask
- Admit a Windows detached spawn that has to outlive its parent
- Quality pass 2026-10-03: the report and the turret-quality-pass skill
- Onboarding O1: engine sign-in research and decision, Claude Code sign-in check
- Slack channels: start and steer sessions from Slack, Claude Tag style
- Restart onto X11 by replacing the launch in place, so the new copy cannot be lost
- Start on X11 when the Wayland compositor has no output, keep the AppImage relaunch's environment clean, and repoint launchers after an update
- Tag a dev APK's draft release v<version>, the same name as the desktop dev version
- Draw the repository list over the peer new-session dialog, and let the wheel scroll it
- Let the Telegram guide's tick boxes be pressed, and pass Join requests for a private group
- Split New session into New session and Resume session views, search every repository by typing, and widen the form
- Keep the skill ledger's hashes across a squash, serve the catalogue's fixture routes, and measure the smoke build
- Telegram deep link, picker detail and not-in-group line; keep the pairing PIN a person read
- Fold case in rooted-path checks by platform, key a map's frame by its folder, type by the foreground layout, match Consolas to Segoe UI on Windows
- Refuse a late reply to a closed channel question, one constant per Telegram sentence, and carry the host's Bypass default and gone folders on the wire
- Report a multi-peer step's changed notes only, and name a desync's first tick
- Computer use on Linux: a Go helper that drives GNOME on Wayland through Mutter and X11 through XTEST
- Free a worktree's wt slot when Turret removes it, and fetch Electron's binary at install
- Kill a timed-out CAD worker's whole tree on Windows, refuse a rooted runtime.entry, and name Linux x64 in the platform text
- A File Viewer toggle beside Files, and Vendors and Services on one row when collapsed
- Game mode follow-ups: serialised calls, sized results, step until, harness v3, and twin-stick netcode under Turret
- The Files region in every mode: a tree that tucks away, ⌘P, and ⌘E to fold the transcript
- Computer use: sessions can screenshot and drive the desktop on macOS and Windows
- Show game mode the game's output and crashes, and resume a rebuilt binary
- Remove an idle-archived automation run's worktree, and finish its run on any archive
- Telegram home group: one private group with topics, hand-added members, and sessions that always ask first
- Make design_render's pictures read clearly: colours, cuts, edges, shapes and sheets
- See Telegram threaded mode switched on without restarting Turret
- Make design_render's pictures match the design, and keep the user's view across a rebuild
- Give each checkout its own electron-packager temp dir
- Make design_render's crop, cutaway, section and viewer kinds draw what they claim
- Add get_automation and set_automation so an automation can improve its own prompt
- Give Node connections 2 s per address so Telegram is reachable over slow links
- Show paired machines as connecting after a launch, not disconnected
- Remove print-pipeline: CAD mode builds and reads designs from the repository
- Codex questions: request_user_input reaches the person on every client
- Manage every setting on a paired machine's settings page
- Keep the composer placeholder and the sidebar out of drag selections
- Offer only GPT-6-and-later Codex models, the newest of each family
- Close inherited descriptors when an AppImage update relaunches
- Drop the remote-child paragraph from the orchestrate skill
- Board listbox, file-tree hover contrast, themed scrollbars with a check that keeps them
- Offer Update for an older shipped skill copy, and let a modified one be replaced
- Double the title band into two tiers and make New the workspace's filled action
- Open a machine's session from a compressed snapshot rather than the stream's replay
- Turn the pairing panel over when its expiry timer fires a millisecond early
- Sidebar footer as icon tiles, and themed scrollbars on New session
Fixed
- Fix turret_client.py on Windows: _winapi has no PIPE_TYPE_BYTE
- Game tools: report missing pictures, fix stale knobs, add input scripts
- Game mode: fixes from the twin-stick review
- Quality fix pass 2026-10-03: the Windows editor bug, ten killed mutants, dead code, a sleep ratchet
- Fix eight defects a hands-on review of the CAD design tools found
0.62.3
Released on .
New
- Update the Agent SDK to 0.3.284 and open Claude API sessions on Sonnet 5.5
- Desktop design language: direction A (Tidy), a component kit, every desktop screen restyled, and a literal check in the gate
- Child sessions on a paired machine (remote-children)
- Sync useWorkspaceWatch's callback ref in a layout effect, not during render
- Close an open turn on graceful teardown, checkpoint a database's WAL before autosync, and show Drive's free space
- Split notarization submit from its wait, and redact notarytool's argv on failure
- Sort a lookup column by its value, anchor a refresh by key, and remember a database viewer's place
- Tell an outdated shipped skill from one ahead of this build
- Say a paired machine needs a newer Turret on desktop, not that it is unreachable
- Encode a Telegram multi-select answer the way the desktop does, and prove multi-select
- Send the 'make me an admin' notice only to a group where the bot is not an admin
- Refuse and hide a channel-initiated session's background-task Stop
- /session: open no topic for a folder that has gone, and explain a failed start in the topic
- Draw a channel-initiated session's workbook and database panes read-only
- Move the quiet-machine check into run-timings, and keep polling loops out of --category
- Channels: talk to a session from Telegram
- Warn when a Codex session runs an older Codex, and offer codex update
- Say why an ad-hoc signed Mac build cannot update, before downloading
- Track each platform's published version and commit centrally on R2
- Limit autosync's fetch and push by silence instead of a total
- Tell agent-harness sessions about their environment and the local time
- Unpack the Windows ripgrep zip with unzip when syncing on Linux
- Loosen the feature skills' how-to guidance, and have the orchestrator do rebases
- Add new_conversation, and rename make_self_for_reaper to mark_self_for_reaper
- Count only live events toward a subscriber queue's capacity
- Design and plan paging a machine session's transcript (peer-transcript-paging phase 1)
- Correct the fixture README on how subagent frames reach their turn
- Keep the file tree mounted across width breakpoints, and bound the remote transcript's height
- Select one sidebar row at a time across local and peer sessions
- Cut steady-state tailnet identity-probe traffic to known peers
- Say a paired machine needs a newer Turret, not that it is unreachable
- SQLite databases in Productivity mode (productivity-databases, phases 1–10)
- Run a message sent during the idle teardown, and keep its turn first
- Strip a replayed turn close for a paired machine, and correct two stale peer docs
- Delete stale Cloudflare rows, collapse sudo's per-retry prompts, drop wt-install's dead seed
- The Productivity panel for a session on a paired machine
- Fetch back an elided tool result on a paired machine's session
- Draw galleries and widgets in a paired machine's sessions, and steady three gate failures
- Keep Cancel and Create on screen in a short window
- Open text files up to 100 MB in the Productivity panel, and draw old German umlauts
- Stop the composer scrolling when the pane is narrow
- Let the map tile cache's disk allowance be set on every Settings surface
- Point cutting a release at the tailnet sidecar prerequisite
- Cache peer conversations so switching between them is instant on a slow link
- Warn when a session runs an older Claude Code, and offer claude update
- Build the release APK on Windows
- Move the agent SDK to 0.3.280 and keep game mode's tools listable
Fixed
- Repair three Next-band issues: image pointer, peer link, machine header buttons
- Measure where sessions spend time on heavy work, and add a skill that fixes the worst of it
- Close the Claude API max_tokens failure, fixed in agent-harness 3c7f354
- Fix what the first live Google Drive check found, and rename Repositories to Auto-Sync
- Fix quit-flush mailbox replay, IPC destroyed-listener growth, disabled danger buttons
- Fix the game fixture's macOS display probe to catch a sleeping display
- Fix fs.rmSync's non-functional retry, the real Windows folder-EPERM cause
- Fix three autosync follow-up gaps: folder-not-found, guard-trip kind, chat header chip
0.62.2
Released on .
0.62.1
Released on .
New
- Keep the update notification after a tap
- Pack underscore directories and dotfiles into the APK's assets
- Draw the predictive-back scrim and edge hairline the design specifies
- Tell the person when a lost Keystore key replaces their stored secrets
- Per-repository settings and git autosync
- Import render lazily in turret-map CLI so non-render commands work without Pillow
- Add a Views menu to the map viewer
- Hide the Peer Discovery row from the sidebar while discovery is off
- Notice a silent peer stream and redial a peer the moment it reappears
- Stop the source-tree walkers reading boundary-imports' transient fixtures
- Re-pair a tailnet peer that has forgotten this machine
- Accept the signed tailnet sidecar in a packaged macOS build
- Download tailscale.com before reading its licence in the sidecar build
- Reach every Turret instance over Tailscale
- Drop the file tree's head and the file bar from the Productivity panel
- Give the update check a deadline and say when a download is starting
- Join the session header across the transcript and the pane
- Duplicate and delete automations from a row's actions menu
- Interactive maps in Productivity mode
- Move Settings explanations behind ⓘ help popovers
- Pop a session out into its own window, and back in
- Stop pointing release and install-app at the removed restart_to_update tool
- Design popping a session out into its own window
- Ask about a filled-in or picked folder without the typing delay
- Move a workbook's columns by dragging their headers, and store the order in view.toml
- Resize a workbook's columns, and store the widths in view.toml
- Remove restart_to_update, and turn the RunAsNode fuse on where sudo needs it
- LLM-driven spreadsheets: the .sheet format, the sheets skill and a read-only viewer on three clients
- Say linux in the dev cut's unsupported-platform message
- Gather every outside account onto a Settings Accounts tab
- Narrow the sudo escalation issue to the repeated prompts
- Let a session's sudo use a password stored in Turret, behind a prompt
- Stop the unit suite flaking: drain archive writes, await the repo combobox, refire the observer
- Split a long HTML Telegram message without cutting a tag
- Send to Telegram from any session through a built-in host server
- Draw a turn's notices where they arrived instead of pinned below the turn
- Put the sidebar's head in one title-band row and keep the top-left corner draggable
- Collapse a disconnected peer's section and disable its heading buttons
- Stop the sidebar's drag row swallowing clicks through full-page screens
- Stop flagging a diagram as altered when only its comments were dropped
- Play a notification sound on the machine that started a session
- Archive the five finished plans, and say docs changes need no gate
- Name a missing session_id instead of calling the target invisible
- Remember where a Productivity session's files were left
- Draw every top bar with one TitleBar component
- Use the GitHub CLI's token where gh is signed in
- Attach pictures from Google Photos in the composer
- Add session rename, and stop a refused chat send from doubling up
- Strip a Gemini snapshot's thought signature, and narrow effort per model
- Make a failed clone's release own only the folder it made
- Truncate a mirror batch that fails mid-write; make a spawn's registry row durable
- Hand the session lifecycle the wrapping emitNotice, not the raw fanout one
- Say plainly that the preflight can't help a host nobody can run commands on
- Fail smoke.sh loudly on Linux when chrome-sandbox isn't setuid root
- Compile the app's Kotlin in the gate
- Keep the mermaid fence rule in one place
- Zip the archive's transcripts and geometry
- Retry a notarization upload that drops from a poor connection
- Give an accepted security advisory a folder of its own
- Accept the extract-zip Dependabot advisories, don't remediate
- Draw the conversation's own predictive-back transition, and close the stopped-screen capture race
- Read a session's files again when its worktree lands
- Hold an unchecked release base to the same bar as one known to be behind
- Keep a GitHub token GitHub has rejected out of new sessions
- Open a session on another machine without a first message
- Keep the peer session header clear of the Windows and Linux window buttons
- Never auto-install a cut release locally
- Share one interface tracker and mDNS socket pool across peer discovery
- Peer sessions look and work exactly like local ones
- Dial a peer at the address its advert came from
- Allow electron-winstaller to run its install script
- Base folder and GitHub repositories
- Build the UI-only peer session gaps, and plan the rest
- Leave a peer's chats out of its section in the Sessions list
- Flash changed files and colour git status in the Productivity tree
- Keep a peer machine's Updates section current after a manual check
- Drop the harness sub-turn cap from Turret's wire types and translators
- Cloudflare private route on loopback, at port 443
- Show tool calls and turn errors in view_session's transcript excerpt
- Draw full-window screens on one FullPage, and move notices out of the top row
- Keep finding Codex and the user's PATH when the login shell is slow
- Track how long the app takes to exit, and finish a quit started by SIGTERM on macOS
- Steer a next-priority mid-turn send into a running Codex or Gemini turn
- Steer a mid-turn send into a running DeepSeek response
- Replan Cloudflare access as a private route with HTTPS and OAuth
- Load the release .env from publish-update.mjs as well as release.mjs
Fixed
- Fix the three Windows smoke failures, and stop the game harness crashing where no display is attached
- Fix the userland extraction's tar -C path on macOS
- Fix the git credential helper's Windows pipe bind and the self-updater's console flash
- Add the Cloudflare settings reference, fix a stale mockup blurb, and let MarkdownEditor drop its chrome
- Fix three unrelated issues: workspace read reason, agy/spawn guard gaps
- Add the Cloudflare route help page, document Chat as a seventh mode, fix the ready mockup
- Fix the composer's IME send, the permission card's engine name, and the resume-column squeeze
- Fix three ways the skills registry reports a state that isn't on disk
- Fix doubled tool args, sideways scroll, and a leaked Gemini signature in the transcript
- Fix CAD service supervisor never retrying after a failed cycle
- Fix Gemini in Productivity mode, and show a failed session's error
- Fix the peer session UI defects catalogued in docs/reports/2026-09-15-peer-session-ui-gaps.md
- Fix three Cloudflare route issues and report a session whose turns keep failing
- Two Windows fixes found cutting 0.62.0: tar.exe by path, and the installer icon
0.62.0
Released on .
New
- Give Codex a CLAUDE.md fallback when it has no AGENTS.md
- Trace six recent regressions to their changes, sessions and models
- Add TURRET_DISABLE_GPU escape valve for Linux GPU-process crashes
- Never resolve the harness binary from PATH or ~/go/bin
- Pick a peer address this machine can actually route to
- Linux support: packaging, agent-harness, CAD runtime, self-update, and background auto-update
- Advertise this machine's mDNS host with an explicit .local suffix
- Mirror every transcript, and resume a session whose worktree is gone
- Archive the Productivity mode and Skill Teleport plans
- Catalog every response shape the conversation UI drops
- Demand the whole staged set before packaging, not just what the manifest names
- Stage the pinned ripgrep beside the harness binary, and pass it as -rg
- Stop the prompts naming tools a harness engine was never given
- Overlap a cut's checks with its package step, and upload the installer in parts
- Assert the empty pane column by its own state, not by emptiness
- Hide redacted thinking blocks instead of drawing a placeholder
- Skill teleport: promote a repo skill to personal, push it to a paired machine
- Give the empty pane column a draggable top bar
- Find an engine installed under a Node version manager when the login shell cannot be probed
- Hang settled thinking in the transcript's margin instead of on a line of its own
- Draw the New Chat screen in the pane column rather than over the window
- Make two path assertions hold on Windows as well as POSIX
- Productivity mode: a file tree and an editor beside the transcript
- New Chat: a chat mode, its create path, and the New Chat screen
- Route deepseek-flash, drop the retired deepseek-v4-flash-vision-exp id
- CAD inspection: frame on a detail, aim a section, and fork the CAD service
- Give an agent-harness session the CLAUDE.md files its working directory carries
- Report a Gemini thought step with no summary as redacted, not as blank
- Prevent every before-quit pass until teardown has actually finished
- Move Gemini back onto agent-harness, with a Google API key
- Load every print-pipeline tool into a CAD session's prompt from the first turn
- Stop seven console spawns opening a terminal window on Windows
- Give an Antigravity session its mode's prompt, and say what agy actually reported
- Give the warning bands and the vendor gate the title bar they sit in
- Let a machine's session be stopped from the machine watching it
- Let a session list the saved automations and run one
- Let a session tag itself for cleanup, and draw the tag on its row
- Let every engine take an attached image
- Open the folder picker where the working-directory field points
- Tell the person approving a peer session which vendor it will run on
- Take the whole-window screens over the title bar
- Report a machine's vendors, and let a spawn name vendor, model and thinking level
- Write the polling-helper-deadline convention into docs/TESTING.md
- Archive the stale Gemini agent-harness wire documents
- Hydrate a machine's tool results, then elide and batch its transcript over the peer link
- Refuse to start Turret in a worktree wt never finished attaching
- Give DeepSeek a help page and correct the Gemini reference
- Stop a successful create from re-arming Enter-to-create
- Reject parked waiters in CodexEventQueue.fail() instead of resolving them clean
- Drop tool-call-result duplication, and archive pictures inside structured
- Follow agent-harness's own main rather than a pinned commit
- Add .gitattributes for LF; eliminate the CRLF hypothesis for the game-fixture failure
- Reserve room for Windows' title-bar overlay in the renderer's right-aligned controls
- Step the infinite animations, and stop the CPU probe under-reporting
- Render the CAD viewers on demand rather than every frame
- Name what each header control opens, and give the sidebar its words back
- Open the window with no session selected
- Re-read the skill band while it is up, so a fresh worktree clears it
- Don't detach a Windows child process, or it opens its own console window
- Name the deadline every Bash row ran under, on the row and in the body
- Move this repo's planning skills to the names it ships them under
- Draw every top row to the title bar's height, and drag the window by their spare space
- Cancel the skill offer band for a folder, not for a session
- Archive the plans whose work has landed
- Remove the three root CDP driver scripts
- Reap orphaned processes, and stop creating them
- Turret's own CAD render
- Draw the title bar in the sidebar's own header row
- Name the worktree in the title of a packaged build and a descriptor-less worktree
- Welcome screen, onboarding skills and one skill registry
- Hand files off the machine with an archive_files download card
- Key CAD mode's geometry server `cad`, and plan Turret's own render
- Offer only the effort levels each Antigravity model will take
- Draw the input keys a tool renderer does not name
- Load every part in the CAD viewer and hide the ones not asked for
- Make Antigravity sessions work against a real agy binary
- Check engine readiness once at app start, not on every screen
- Write a speedscope profile for every design build
- Regenerate stale help docs for the agy/DeepSeek rename
- Catalogue TURRET_AGY_BINARY and correct the help coverage counts
- Phase 10 spike: no per-session agy data dir found; recommend deferring
- agy-and-deepseek phase 9: smoke, end-to-end and documentation
- agy-and-deepseek phase 8: the settings surface follows the engines
- agy-and-deepseek phase 7: gemini moves to agy
- agy-and-deepseek phase 5b: the harness wire moves to the Responses vocabulary
- agy-and-deepseek phase 5: split the model list, efforts per engine
- agy-and-deepseek phase 4: the deepseek engine id and its surface
- agy-and-deepseek phase 6: the agy backend and translator
- agy-and-deepseek phase 1: rename the agent-harness stack to a provider-neutral home
- agy-and-deepseek phase 2: the agy wire pin, client and fake agy
- agy-and-deepseek phase 3: agy binary discovery
Fixed
- Add scripts/check: a fixed menu of verification scripts
- Reserve the window buttons' room only where they are, and fix four load-sensitive deadlines
- Fix Codex reasoning summaries; surface non-blocking async questions
- Fix the real race in harness-cold-resume: an event batch's [0] is not always the match
- Give a CAD session a way to find out why its tools are missing, and a way to fix it
- Fix a stale desktop-host.ts comment and file the Windows title-bar overlay bug it papered over
- Fix the agy spawn flag that stopped every Antigravity session starting
- agy-and-deepseek phase 9b: fix the agy post-restart stuck send
0.61.0
Released on .
New
- Show a machine's version and run its updates from its Settings page
- Show every paired machine, whether or not it is running anything
- Let a remote spawn ask for a worktree, made by the machine that holds the repo
- Name a Codex session's git directories, and recompute them when it moves onto a worktree
- Start a session on another machine from its section in the sidebar
- Show whether each vendor works, above Services in the sidebar
- Draw the Resume list from the folder's last answer, and close the new session screen from its header
- Gate Coding v2 behind an Experimental coding mode setting
- Close the Automations screen when a job is run
- Say how full each session's context window is when listing sessions
- Take the title field off the new session screen
- Say where a session sits on its sidebar row, with a glyph beside the name
- Say who sent a message when one session messages another
- Archive a paired machine's session from this one
- Automations: a worktree tick box, and the recent-folders rail in the job editor
- Draw Claude's engine mark as an asterisk
- Place a transcript file reference against the session's file listing
- Hold a message for a full machine, and say when macOS will interrupt a session
- Coding v2: a mode that puts the agents' creed at the head of the system prompt
- Machine settings: read and write a paired machine's settings from this one
- Answer a machine's permission ask from the machine watching it
- Spawn a worktree with a boolean, on peers as well as children
- Hand a subagent the host's shell guidance on a SubagentStart hook
- Give agents a creed, and point CLAUDE.md at it first
- Add Assistant mode, which runs without Claude Code's own system prompt
- Make a working directory that is not there yet from either new-session screen
- Bound a background wait loop, and stop one that is not bounded
- Pin agent-harness v0.51.0, which advertises every Gemini Flash model
- Close the archive question once the archive goes through
- Give each engine a mark, and pick one from cards
- Package the agent-harness binary Gemini sessions spawn
- Session runtime and transport facades
- Give the Gemini fake the executable bit macOS spawns it by
- Gemini sessions through agent-harness
- Give a job its armed next fire and its repository name
- Cap an automation job's run history at 200
- Automations: scheduled and manual jobs that open sessions
- Wrap long words in prose, and open a machine group by default
- Catalogue the Claude Code, Codex and Gemini host surfaces
- Line the session header up with the sidebar header
- Find the git directory above a Codex session's cwd, not just at it
- Give a Codex session on a worktree its git directory to write
- Ask the archive question in the session row rather than over the window
- Decode imageView file:// paths without the host's platform conventions
- Let a person type into a session running on a paired machine
- Show the Codex items the transcript was dropping, an image among them
- End the Codex app-server when the prompt feed ends, so the thread can be resumed
- Unlink a POSIX symlink where a Windows junction takes rmdir
- Give a Codex session on Windows the sandbox it needs to run a command
- Tell every session the orchestrator tools exist, so it stops reaching for ListAgents
- Hold a Codex mid-turn send instead of steering it, so it shows queued
- Read the last turn's token usage for a Codex context reading, not the session's running total
- Log two Codex-engine defects: missing queued indicator and context percentage over 100%
- docs: plan session runtime transport facades
- Swallow the EPIPE from writing to an exited app-server's stdin
- Refactor the main-process composition root into four kernels
- Keep a turn that outran the event buffer drawn as still running
- Fill the window with a picture the transcript draws
- Choose an output style per engine, behind Claude and Codex tabs
- Freeze a Codex session's archive transcript from the event store
- Draw a Codex turn in the order it happened
- Start a session on a paired machine by naming the repository
- Resolve and spawn the codex binary the way Windows installs it
- Shorten a Windows path in the transcript's tool rows
- Separate the transport-neutral api layer from the Electron IPC adapters
- Read the Resume list fresh, and across a repository's worktrees
- Draw the transcript's scrollbar in the app's own colours
- Draw the sidebar's new-session control as a New button beside the title
- Verify the codex binary under the login shell's PATH
- Let the game and VFX panes resize the picture they draw
- Let set_state name the view its picture is drawn in
- Stop the archive sink's capture window outliving the database it writes to
- Name the report each comment points at, and raise the root cad scripts
- Ask for a task in the empty composer
- Draw the new session form as a screen rather than a dialog
- Cap a delegation on live sessions, never on sessions created
- Clean up code comments in main/orchestration, peers, db and top-level main
- Clean up comments in src/renderer
- Clean up comments in main-remainder, shared and preload
- Clean up stale comments in main/game and main/modes
- Clean up comments in src/main/agent
- Drop pure section-label comments in main/events
- Clean up comments in main/ipc A slice (src/main/ipc, 40 files)
- Clean up comments in main/ipc B (35 files)
- Say in CLAUDE.md what a code comment is for
- Split CLAUDE.md into an architecture document and its own decisions
- Resume an old session from the New Session screen
- A Codex session reaches a tool that is not read-only
- A Codex row is prepared before anything sends to it, and the Tools screen says it is Claude's
- A Codex turn reads its own id, so Stop reaches the app-server
- A running subagent gets a row in the session tree
- A session runs on Codex as well as Claude, behind a SessionBackend seam
- CLAUDE.md says no formatter runs over the TypeScript
- A file reference in the transcript opens in your editor
- A dot wave at the foot of the transcript says the model has the turn
- The composer's placeholder reads as a hint, and the header sheds the session name
- A peer is named by its machine name, not its numbered mDNS hostname
- The slash menu opens on a draft that starts with whitespace
- The header opens a session's folder in Finder and in an editor
- The session header shows the session id, and copies it whole
- The composer names its two menus in the empty box
- A peer carries the operating system it runs
- A header over the desktop transcript, and a thinner composer
- The peer discovery toggle persists, and the Deny List takes entries
- Correct the design documents against the code, and drop the frozen rule
- Carry a refused picture's reason onto the event instead of dropping it
- Publish commandInFlight so the game pane's strip disables for a model's call
- A subject going gone or coming back notifies the panes showing it
- Drop the two printer routes the vendored CAD service cannot serve
- The electron-builder NSIS step retries a locked output file and stops losing its own error
- Add a reference page for background auto-update
- Game sessions forward the real log, closing the last gap in child-process quit handling
- Type main/index.ts's ipcSeams literal Required<IpcSeams>
- Carry a declaration file's problems to the pane that would have shown its contents
- A spawned child's model lands on its registry row, so a restart keeps it
- The CAD runtime pin hash covers interpreter.json as well as requirements.txt
- A CAD service or game process that fails to spawn no longer crashes the app
- Renderer shortcut hints name Ctrl on Windows instead of the Mac glyph
- Split the four largest files in src/renderer
- An asset library holds every file it names, and the repository names the grids
- De-duplicate src/renderer: transport panes, skill banners, session row, palette, editors, tool renderers, cad fixtures
- A peer keeps the id it was paired under, instead of minting a new one each launch
- The new-session recents rail fills its column instead of stopping at five
- Session media store: images held once on disk, fetched by digest
- Name the machine in a remote session's state indicator, and resume its stream
- Peer reach: cross-machine sessions over the LAN
- acp-gemini: move the engine migration to 016
- Undo the entities an agent escapes in a status or a spawn title
- Let a new session be typed at while its worktree is made
Fixed
- Fix sync-agent-harness.mjs on Windows
- Draw Mermaid in the transcript, and fix the Codex tool name that hid a diagram
0.60.0
Released on .
New
- Ship peer discovery off by default
- Compile the update feed's base URL into the app
- Restore mainCheckoutRoot, and prove release.mjs's module body evaluates
- Sign the macOS bundle inside out, fail when notarization does, and check credentials first
- Read the update artifact's name from the manifest rather than predicting it
- Take a dev cut's version from the channel, and find the credentials from a worktree
- Advertise and browse on every interface, not the one the OS picks
- Give the composer the whole column and its errors their own strip
0.59.0
Released on .
New
- Windows and macOS auto-update via R2 and electron-updater
- Peer discovery on the LAN
- Stop a session reading idle while the CLI is still working
- Archive a worktree session on Windows instead of half-removing it
0.58.2
Released on .
New
- Wait for Windows to let go of the install before replacing it
0.58.1
Released on .
New
- Run worktree hooks in a real shell on Windows
0.58.0
Released on .
New
- Windows support: packaging, wt tooling, CAD runtime, game mode, self-update
0.57.0
Released on .
New
- Name the repository and worktree under the composer
- Make looksLikeGitCheckout run git, not just look for .git
- Register CAD designs against the main checkout, build from the session's own
- Draw a host notice where it happened, and let it reach the model
- Let a spawned session read the scratch directories
- Fold Settings into three tabs, and list the running services
0.56.0
Released on .
New
- Give the effect host its own tools, and draw a game's knobs
0.55.0
Released on .
New
- Put matplotlib and vtk back in the CAD runtime
0.54.0
Released on .
New
- Put build123d in the CAD runtime, and install a changed pin set on its own
0.53.1
Released on .
New
- Stop the CAD service supervisor mistaking a stranger's port for its own
0.53.0
Released on .
New
- Read and write print-pipeline's own store
- Ship a CAD design skill, and put a failed open in the conversation
0.52.1
Released on .
New
- Reset the context meter when a conversation is cleared
- CAD mode without print-pipeline
0.52.0
Released on .
New
- Remember a folder's worktree answer, and widen the recent list
0.51.0
Released on .
New
- Read a session's transcript off disk, and draw how full its context is
- Build the game-mode fixture once per vitest run