Terminal Deck

Changelog

Everything below is the real commit history, rewritten so it reads as a story rather than a list of subject lines. The short hashes are the commits themselves. Three versions are released; 0.1.0 is by far the longest entry because it is the entry in which the application was written, and the two after it are small on purpose.

Terminal Deck was built in one long day, in waves of parallel work, so the timestamps say almost nothing useful. Grouping by what changed is more honest than grouping by hour.

0.1.2

13 August 2026 current

The first release with a Windows build in it. The installer and the portable executable are both x64 and both unsigned, and both have since been run on Windows 11 — where the app installs and opens but cannot start a session yet. That is the current state, not a claim about the next release.

Windows in the release

  • 1ecca75 Version 0.1.2 — the first tag whose artifacts include an x64 installer and a portable executable alongside the macOS disk image.
  • 03b6a42 Let the Windows installer build while its test port is unfinished, so a failing test on a platform nobody has shipped to does not hold back the artifact people are asking for.
  • ef0312d, 5648d65 Stopped the test suite assuming POSIX where the product does not, and fixed two tests that depended on the machine they happened to run on.
  • af1f02d Put back the workflow step that creates the release, missing since the previous tag.

0.1.1

13 August 2026

The release that taught an unsigned build to update itself.

Updates

  • 40e84d9 Update inside the app, without Squirrel and without a signature. Squirrel.Mac refuses to replace a bundle it cannot verify, which is every unsigned build — but the feed, the archive and its SHA-512 are all public, so the app reads the feed itself, proves the bytes, and swaps the bundle. The old app is moved aside rather than deleted, and moved back if the new one fails to land.
  • b161be7 Build Windows on Windows. Cross-building was producing an artifact the prebuilds rule then broke; building it natively in CI does not.

0.1.0

13 August 2026 first release

The first version that is a usable application. It runs from source and packages into an unsigned macOS build, published as a disk image; it predates both the Windows target and the in-app update path, so it can neither be installed on Windows nor replace itself.

The window, and the processes behind it

  • 473d9bb The Electron shell: multiple terminal sessions in one window, each a real process, with the tab strip and scrollback that survive switching away.
  • 51f59c5 Projects and window bounds persist between launches, installed agent CLIs are detected through the login shell’s PATH, and a strict content security policy is set from the main process — permissive only while developing.

Knowing what a session is doing

  • b72448a Session status arrives: working, waiting, needs input, exited — with tests, and a full build plan for the eight phases that follow.
  • 17a418d The first real correction. Status had been classified from the tail of the output stream, which is meaningless for a full-screen program that repaints by moving the cursor. Each session now feeds a headless terminal emulator and the status is read from the rendered screen — including the discovery that Claude Code draws its prompt as , and never on the last line.

The features, built in waves

  • 769ab1d Six modules built in parallel and wired in: transcript reading, cost and context maths, the git panel, the file tree and viewer, project search, and the command palette.
  • 678e6bd Session resume — continue the last conversation in a folder rather than starting a fresh one.
  • 6265ba5 Wave two: the session inspector, the GitHub panel driven by gh, AI-readiness scoring, the project dashboard and the swarm view.
  • b601f77 Wave three: full-text search across past transcripts, the alerts panel, agent profiles with isolated logins, provider hooks, the MCP inspector, the first embedded browser, and one keymap table that replaced three drifting copies of the shortcut list.
  • 7502ef7 Wave four: the settings window, a browser that is a real browser rather than a panel, the new-session dialog, in-app help and a debug panel.

Making it look like one application

  • 0c5724c The Notion-style palette — near-neutral surfaces, warm grey text, hairline dividers, one blue reserved for selection and focus — and a side panel that collapses and resizes.
  • d21799c The app shell proper, which made every feature reachable. Several panels existed and worked before this and simply had no way in.
  • b51b44f The view switcher was styled as a control, because it read as a caption.
  • a2971c3 Tabs moved into the window header, and sessions and browsers were merged into one strip. Two separate controls for “what do I have open” meant the browser was effectively unreachable.
  • 0bf3904 One header bar. Overview and Board moved to the side rail, where views of a project belong — the tab strip is for windows you opened.

Making every panel actually work

  • f8ac57e Fixed the panels and views that rendered nothing. Typechecks and tests had all passed; the failures were contract mismatches at the bridge and runtime throws, neither of which a compiler sees.
  • 56e5273 Every remaining mismatch between the interface and the main process fixed, and the app made installable.
  • 6f4e500 Tracing across the bridge, so a panel that silently fails says why instead of showing an empty box.
  • 2abed94 The browser fix worth naming: a request-style call answered by an event-style handler rejects every time, so every browser action failed.
  • b986623 A test over the seam itself, so a method the interface calls and the main process does not implement fails a test rather than a user.
  • 64b2370 The browser hides while a dialog is open. It is a native view layered above the interface, so pressing , on a browser tab dimmed the window and showed nothing — settings were underneath the web page.

The browser grows up

  • b98be29 A Setup section that reports what your machine actually has, cookie import from an installed Chrome so a dev server behind a login does not need signing into twice, and per-tab isolation for when you need two accounts at once.

Chat mode

  • 6be5d78 A session as a conversation, read from Claude Code’s own transcript — prompts and replies, none of the tool plumbing. The address bar in the browser stopped guessing at port 3000 and started listing the dev servers actually listening.
  • c4c15f6 Chat mode gained a composer. It writes into the session’s own terminal, so the two views never disagree about what was said.

Housekeeping

  • 3472525 A README and a working guide for the repository — which also closed two of the app’s own readiness findings against itself.
  • 6b99916, d951c4c, a3e6acb The roadmap kept current after each wave landed.
  • 41a96fc Renamed to Terminal Deck. The name lives in exactly one file, so this was an edit rather than a hunt.

Not in any version yet

Listed here so the absence is on the record rather than discovered after installing.

  • Session sharing between machines.
  • Updating in place on Windows. On macOS it works, from 0.1.1 onwards. On Windows the check is wired to electron-updater's installer and nobody has watched it run, and the portable executable is a loose file nothing can replace for you.
  • Translations.
  • A signed installer on either platform. The disk image, the Windows installer and the portable executable are all built; nothing signs any of them, so macOS needs the right-click step and Windows needs the SmartScreen override.
  • Split panes. The layout code and its chords are in the repository, but nothing in the app renders the split view, so there is no way to reach it.
  • A working session on Windows. 0.1.2 installs and opens there, then reports every agent CLI as missing and fails to start a session. Fixes are open on a pull request and unreleased.
  • Anything at all on Linux. Intel Macs are deliberately out of scope.