Cordy Desktop

Changelog·Preview

This page mirrors the product repository changelog and is not a download or publication record. Read the product documentation.

v0.4.0Latest source entry2026-09-12

This release is about the keyboard and the mouse inside a terminal. Cordy's terminal now speaks both keyboard protocols Windows CLIs rely on, so the newline keys those CLIs advertise in their own footers — Shift+Enter in Claude Code, Shift+Enter and Ctrl+J in Codex — insert a newline instead of submitting the message. A TUI that asks for the mouse gets it back, with Shift+drag to select text. And a terminal tab opened after startup no longer occasionally begins life having missed the first bytes of its own session. Around that: the CPU / memory chip regains a compact overview, the toolbar's editor button opens your editor in one click, and the app moves to Electron 42.11.3 for the current Chromium security fixes.

Added

  • Both keyboard protocols Windows CLIs rely on — so Shift+Enter means newline. Cordy's terminal now enables win32-input-mode (the protocol Windows Terminal always runs, read by CLIs that consume console input records) and the kitty keyboard protocol (read by CLIs that consume VT bytes). With neither of them on, the terminal could not express a modifier on Enter at all: Shift+Enter and Ctrl+Enter left as a bare carriage return — the same byte a plain Enter sends — so every CLI in a Cordy pane read them as "submit". Each CLI now gets the key its own documentation promises: in Codex, Shift+Enter and Ctrl+J insert a newline; in Claude Code, Shift+Enter does. Cordy encodes keystrokes faithfully and adds no remappings of its own — which key means what stays the CLI's decision — and the newline keys were verified against the real Codex CLI, not simulated. Both protocols are inert until a program asks for them, so a pane running a plain shell is unchanged byte for byte. Chinese IME composition is unaffected: a key-release guard keeps the IME's own internal key events off the wire. The bundled Windows Terminal ConPTY pair moves to 1.25.2603.03002 — the same pair VS Code ships to its own users, from the preview line rather than a stable Windows Terminal release — because it is the build that re-encodes a keystroke as the kitty protocol's form for a CLI that asked for it. One consequence worth knowing: inside a CLI that turned the kitty protocol on, Ctrl+C arrives as that protocol's key event instead of the raw interrupt byte, and the CLI handles it — the specified behaviour of every terminal implementing the protocol, Windows Terminal, kitty and ghostty included. Where no CLI asked, Ctrl+C is the interrupt byte exactly as before.
  • A compact performance overview, back on the chip. Clicking the toolbar's CPU / memory chip opens a small popover again: live memory and CPU charts over a 2m / 10m / 1h window, the six heaviest app processes with what each one is hosting, a Workload line totalling the Rust runtime, shells and agents, and buttons to choose which numbers the chip itself displays. View details opens the full monitor 0.3.0 introduced, which is unchanged — the overview is the part of the old popover that was worth keeping.
  • The toolbar's editor button opens your editor in one click. In the compact top bar it was a single control that could only open a menu, so launching an editor always cost two clicks. It is now split in two: the left half opens the current workspace in your default editor immediately and wears that editor's own icon (its tooltip names it), and the chevron on the right opens the list to pick a different one. Picking one from the list makes it the new default.

Fixed

  • A terminal tab opened after startup could miss the first bytes of its session. A new tab could come up having never received the one-shot terminal setup its session had already emitted — focus reporting, and the keyboard protocol above — because the pane was still subscribing while those bytes were broadcast. Ordinary output survived that window (the terminal repaints itself), but a one-shot mode never comes back, so that tab alone silently fell back to the old encoding with nothing visibly wrong. Every new terminal is now reconciled against the runtime's own snapshot, exactly the way a reattached one already was, so nothing produced before the tab could listen is lost.
  • The quit confirmation fills its own window. When Cordy has been closed to the tray, the quit prompt opens as a standalone window — but it drew the same floating, bordered card it uses inside the app, so it appeared as a small boxed dialog framed inside another small window. It now fills the window it owns.
  • Importing passwords from CSV starts in your download folder. The Password vault's Import from CSV chooser opened wherever the system decided; it now opens in the download directory Cordy is configured to use, which is where a password manager's export actually lands.

Changed

  • A TUI that asks for the mouse now gets it. 0.3.0 made an ordinary drag select text even while a TUI held mouse reporting on, at the price of the application never receiving the mouse at all: a clickable or hoverable TUI — Claude Code's in-session agent list, for one — saw a click only while you held Alt, and never saw hover. That trade is reversed. Clicks, drags and hover go to the application, and selecting text there is Shift+drag — the gesture every other terminal uses, and the one Claude Code's own footer tells you about — followed by Ctrl+C or Ctrl+Shift+C to copy. On macOS the Option key forces a selection too (which costs Alt block-select on that platform; Windows and Linux keep both). Ctrl+C with no selection is still an interrupt, unchanged.
  • Electron 42.11.3, and a dependency refresh. The 42.11 line carries the current Chromium security fixes (Chromium 148, Node 24.19) — which matters because Cordy's browser pane loads arbitrary pages. Alongside it: xterm 6.1 beta.304 with Cordy's IME patch re-derived unchanged, React 19.3, tiptap 3.31, and electron-builder 26.16 for packaging.
  • WebSQL is no longer listed as clearable site storage. Chromium removed WebSQL, so the bucket Settings → Site data offered to wipe for a site had not existed for some time. Everything else a per-site clear covers — cookies, local storage, IndexedDB, caches, service workers — is unchanged.

Known Limitations

  • The Windows installer is not code-signed. SmartScreen will show its "unrecognised app" interstitial on first run; choose More info → Run anyway. A certificate is a planned purchase, not something a self-signed build can fix.
  • The monitor's Workload half is Windows-only. On macOS and Linux it says so and shows the App half alone; the compact overview's Workload line follows the same rule and is simply absent there.
v0.3.02026-09-04

The first release that ships an installer: cordy-Setup-0.3.0.exe for Windows is attached to the GitHub Release (macOS and Linux packages are built by the same pipeline but have had far less real-world use). Beyond packaging, this is a daily-driver release: importing a repository and creating a workspace each take one keystroke, a preset can be split-launched into the tab you are already in, the right column's Files and Git panels stop stalling the app while an agent writes files, and the performance chip opens a real monitor that finally says which half of Cordy is holding the memory.

Added

  • Import a repository from the keyboard. Ctrl+Shift+O opens the folder chooser directly — the same import the sidebar's Add repository button runs, including on the first-run screen — and the command palette lists it too. A dropped folder, the button and the shortcut all report success or failure through one place, so a rejected import is never silent.
  • Create Workspace is one step. Every "new workspace" entry now creates a project-root workspace immediately; the dialog that asked you to choose between Project root and Worktree is gone, because Cordy's workspaces run on the project root today. Existing worktree-backed workspaces still open and show their worktree path; only the fork in the creation flow was removed.
  • Right-click a preset to split-launch an agent. The terminal preset bar's context menu gains Split right with … and Split down with …: the current tab splits, and the agent from that preset starts in the new pane with the same supervised status the tab launch has. The command palette offers the same as Split with rows. Closing a pane that still has an agent or a running command asks first, under exactly the rule tab close uses.
  • A performance monitor that answers "which half?" The toolbar's CPU / memory chip now opens a full-size, read-only monitor dialog instead of a cramped popover. It splits Cordy into two halves and names the quantity in every column: App (Chromium — GPU, main window, browser pages, utility processes, each row with its pid and what it is hosting) and Workload (the Rust runtime and every terminal session's process tree — shells, console hosts, coding agents — grouped by workspace and session), with a totals row that reconciles against Task Manager's "Commit size". Per-process private commit, working set and CPU%, host memory, the four internal budgets (resident workspaces, WebGL contexts, parked runtimes, warm browser pages) and the last twenty process deaths sit on one screen. A number Cordy could not read shows as , never as 0. Nothing here kills or evicts anything.
  • Choose your default shell. Settings gains a Shell tab listing the shells actually installed on the machine — PowerShell 7, Windows PowerShell, Command Prompt, Git Bash and each WSL distribution — plus a custom command row, and new terminals open the one you pick. Cordy discovers them the way Windows Terminal does and hands the terminal an absolute path, so a machine whose PATH is broken (which is what made the packaged build's terminal arrive dead) no longer matters.
  • Windows installers, in three channels. pnpm dist:win:prod produces the installer attached to Releases; dev and test channels build side by side with their own product name, Start Menu entry and data directory, so a preview build never touches the data of the one you rely on.
  • File icons everywhere you look at files. The file tree, workspace file tabs, search results, the Changes list, the command palette's Go-to-File rows and the Graph panel's commit files now show a per-type icon instead of one generic page. Shapes encode a category rather than a brand — source, config, manifest, lockfile, docs, media, secrets, archives, databases — so a row is readable at a glance without a wall of colour. .d.ts, .test.ts and .tar.gz are recognised as the compound types they are, and .env*, Dockerfile* and Makefile* variants all land on their family's icon. Settings → Appearance has a new File icons row to pick the icon theme, with a live preview: Lucide (the new default) or Minimal, which keeps the plain generic look Cordy had before. Icons stay neutral in colour on purpose — Git status keeps colouring the file name and status letter, so a changed file is never encoded twice.
  • A colored icon theme. Settings → Appearance's File icons row gains a third option, Material — the brand marks from the Material Icon Theme set (MIT), so TypeScript, Rust, Python, Docker, Git, npm and friends each look like themselves. Common folders get their own icon too, with open and closed variants: src, node_modules, docs, tests, scripts, dist, assets, components, hooks, .github, .vscode and more. Anything the colored set does not cover falls back to the Lucide glyph rather than to a blank, so no row is ever left without an icon. The icon files are fetched only as they are actually drawn, so picking this theme does not slow the app's start. On a light theme a handful of the yellow marks (JavaScript, database, lockfiles) do read faint against the background — Lucide remains the default for that reason.
  • Right-click a file tab. The editor, diff and commit-diff tabs in the workspace strip now have the context menu their terminal neighbours already had: Close, Close others, Close tabs to the right and Close tabs to the left, plus Copy path, Copy relative path (always forward slashes, relative to the workspace's code target) and Reveal in File Explorer. The close commands stay strictly inside the file tabs — "close tabs to the right" can never reach a terminal tab sharing the same strip. A bulk close keeps any tab with unsaved edits: it closes the clean ones around it rather than throwing a stack of dialogs at you or quietly dropping a buffer. Closing one file tab on its own still offers Save / Don't save / Cancel as before.
  • A warning before a close that would destroy something. Closing a terminal tab that still has work in it now asks first — and it knows the difference: an agent mid-task, or a command still running (the prompt names it, e.g. "node.exe"). An idle shell still closes instantly, with no dialog and no pause. Closing a file tab with unsaved edits offers Save, Don't save and Cancel rather than silently discarding a buffer that was never on disk; if the save loses a race with something that changed the file first, the close is called off and the conflict is shown instead. Escape always cancels, and the safe button holds focus, so a stray Enter can never be the thing that kills a build. Bulk closes — "Close others", closing a workspace, quitting the app — deliberately do not ask. Both confirmations can be turned off independently in the new Settings → General tab.
  • Project-wide search. The right Project Tools panel gains a Search tab — the magnifier that never did anything is now a real feature. It is backed by ripgrep (the same engine VS Code uses), respects .gitignore, streams grouped, highlighted results with per-file counts, offers match-case / whole-word / regex toggles plus include/exclude globs, and clicking a result opens the file in the editor scrolled to the match — first click, every click.
  • Find and replace that belongs in the app. The editor's search panel is no longer the stock browser-styled CodeMirror bar: it is a compact, themed card floating over the editor's top-right — VS Code style — that no longer shifts the code down when it opens. Inline match-case / whole-word / regex toggles, an "N of M" match counter, Enter / Shift+Enter navigation, an expandable replace row, and selection-seeded queries. Ctrl+F is now user-rebindable in Settings, and the terminal still keeps its own Ctrl+F.
  • A right-click menu on terminal tabs. Split the terminal right or down, pin a tab (pinned tabs stick to the left, lose their close button, and survive every bulk close), close others / close tabs to the right or left, rename inline, and give the tab one of nine colors shown as a small dot — pin, color, and custom title all survive a restart.
  • Merge a terminal tab into the one you are looking at. That right-click menu gains Move into current split → Right / Down: the tab you clicked stops being a tab and becomes a pane beside the active one, so two terminals you were flipping between are suddenly side by side. Nothing restarts — the shell keeps running, its scrollback comes with it, and a long-running agent carries on uninterrupted. The new arrangement survives a restart.
  • A far more capable Ctrl+K. The command palette shows live keybinding hints, jumps to files (fuzzy, over the active workspace), and grows VSCode-style prefix modes: > commands, : go to line, % quick project text search, ? help — plus workspace switching and a session-scoped "Recently used" group. Escape still closes in one press, always.

Fixed

  • The file tree no longer freezes the app while an agent writes files. Every Git status refresh used to tear down and rebuild the whole tree, and the tree's own watcher fed the next refresh, so a coding agent touching many files could lock the UI for seconds at a time. The tree now keeps its nodes and only repaints the rows whose status changed, refreshes incrementally from file-system events instead of remounting, and remembers which folders you had expanded — switching workspaces and coming back no longer collapses everything. A file an agent just created appears without pressing Refresh.

  • The Git panel shows every untracked file and keeps up. Status refreshes are now rate-limited through a single in-flight run instead of piling up, the .git directory is watched through an allow-list so lock files and index churn no longer trigger refresh storms, and the old 25 000-file ceiling that quietly truncated the untracked list — and folded whole new directories into one line — is gone: Cordy asks Git for every untracked file and, if the output ever had to be cut, cuts it in a documented order rather than dropping entries from the middle.

  • The Changes list scrolls smoothly at any size. It is virtualised, so a status with thousands of changed files renders the rows on screen rather than all of them.

  • Tray Quit always confirms inside Cordy. Right-click → Quit on the tray icon used to quit silently when no terminal was running, and to fall back to the operating system's dialog when the window had been closed to the tray; both cases now show Cordy's own confirmation, at any session count. Programmatic quits (closing the last window on macOS, scripted teardown) keep their silent path.

  • Text that terminal apps draw over their own dark backgrounds — like the Codex composer — now stays readable in light themes. Some terminal apps paint a hardcoded dark band and then write on it with the terminal's default text colour, assuming you are on a dark theme. Under Cordy's light themes that default is near-black, so the text landed black-on-black and the Codex input box looked empty. Cordy now enforces a minimum contrast ratio while drawing, the same way VS Code's terminal does, and re-tints any text that would be unreadable against the cell behind it. Nothing changes in what the program actually sent, so copied text, saved sessions and restored terminals are untouched — only what you see gets lightened enough to read.

  • The browser pane stays visible while you edit files. Opening a file tab used to hide the whole pane area — terminal, notes and browser together — behind the editor, so a page you were reading vanished the moment you clicked a file, and toggling the browser on while editing appeared to do nothing at all. The editor now replaces only the terminal, so the browser and notes panes stay on screen and the page stays live beside your code instead of being quietly frozen and eventually reclaimed. If the split gets cramped, the existing row-fullscreen toggle still gives the editor the whole workspace.

  • A crashed page offers a reload instead of a blank pane. When a browser page's process died, the pane just went blank — no message, no way back, and sometimes a spinner stuck on forever. It now shows the same quiet error card the other load failures use, with a Retry that brings the page back.

  • Arrow keys walk the whole tab strip again. Roving keyboard focus on the terminal tab strip used to die after one step — activating a tab handed focus to its terminal, so a second ArrowRight typed into the shell instead of moving along the tabs. Keyboard activation now keeps focus on the strip; clicking a tab still hands the terminal the keyboard.

  • The editor owns its own scrolling. A wheel over a freshly opened file used to fling the whole workspace canvas to another row (the gesture chained out of the editor at its scroll boundary); it now stays in the editor, and the workspace canvas can no longer grow an invisible horizontal scroll range either.

  • Stopping a coding agent hands its terminal back. A tab you launched an agent into from a preset or shortcut used to die with it: the agent process is that terminal's only process, so stopping it killed the session, and the tab was left showing [process exited] — and the agent's last full-screen frame — until you closed it by hand. Stopping now returns the tab to a working shell in the same directory, with the dead agent's screen cleared. Cordy also asks the agent to leave on its own first, with a Ctrl+C and a short bounded wait, so an agent that cleans up after itself gets the chance to. A stopped agent's tab also keeps its status dot until you close the tab, which is what it was always meant to do.

Changed

  • The Windows installer ships only the two locales the product renders (English and Simplified Chinese) instead of Chromium's full set of 55, which takes the unpacked install from about 390 MB to about 344 MB.
  • The monitor replaces the old diagnostics popover. Its Runtime & Store, Activity and Terminal I/O counters and the Refresh button are gone; they had nothing to do with memory and took half the panel. Export is still there, in the dialog's footer.

Known Limitations

  • The Windows installer is not code-signed. SmartScreen will show its "unrecognised app" interstitial on first run; choose More info → Run anyway. A certificate is a planned purchase, not something a self-signed build can fix.
  • The monitor's Workload half is Windows-only. On macOS and Linux it says so and shows the App half alone.
v0.2.02026-08-12

A source-only release like 0.1.3 (build from a checkout with pnpm install && pnpm build). This is a feature release: every workspace gains a built-in browser pane that agents can work against, coding agents launch into supervised, visible terminal tabs with real status, the Commit Graph grows into an expandable, endlessly-scrolling history with syntax-highlighted diffs, and terminal splits are rebuilt on VS Code's model — the split belongs to the tab.

Added

  • A browser pane in every workspace. Open a browser beside the terminal — agent on the left, results on the right — with its own tab strip, a toolbar (back / forward / refresh-with-stop, an editable address bar), a global bookmarks bar, and a clear error overlay for failed loads. Pages keep running while hidden: a small warm budget with idle reclaim keeps memory in check, and the pane stays available in Zen Mode. The embedded surface is hardened — locked-down webview preferences, permission prompts denied by default, and a navigation backstop for the embedded page.
  • A browser agents can use. The new Browser Gateway is a single policy-guarded seam for browser capability, with two backends: the built-in pane, and a real Chrome session connected through the cordy-chrome extension. Pairing is zero-typing — Cordy discovers the extension locally and you approve the connection in a native dialog; the channel is loopback-only, token-authenticated and origin-filtered, reconnects automatically via a persisted token, and locks out pairing spam.
  • Agents launch into supervised, visible tabs. The preset bar and the command palette now share one launch path: a supervised agent run whose terminal tab you can see, with an inline status badge (working / waiting for input / exited / failed) and an attention tint on the tab. Toasts and the sidebar status dot jump you straight to the agent's tab, Stop agent lives in the palette, and closing an agent's tab tears down its entire process tree — no orphaned processes.
  • Commits expand in the Graph. Every commit in the Graph panel unfolds to its changed files, and each file opens as a read-only diff tab in the center canvas (file @ sha) — the same surface working-tree diffs use. The timeline now loads more history seamlessly as you scroll instead of stopping at a fixed count.
  • Syntax-highlighted diffs. Diff rendering adopts @pierre/diffs with Shiki highlighting — grammars load on demand behind a lazy chunk, so app startup is unchanged. Hunk staging, unstaging, and discard work exactly as before.
  • Diagnostics and storage controls. Settings → Diagnostics can open the logs folder, export a time-scoped zip (last hour / 24 hours / 7 days / everything, with per-section toggles), and clear logs. A storage view breaks disk usage down by category with tiered cleanup — caches are one click, snapshot backups ask first, and core data is not deletable at all.
  • "Open in editor" works out of the box. Cordy now detects the editors actually installed on your PATH, uses the first available one until you choose explicitly, and shows brand icons in the menu — instead of erroring until configured.

Fixed

  • A terminal split now belongs to its tab — like VS Code. Splitting a terminal and then clicking the very tab you were on could blank one pane and overlay stale content in the other, and switching tabs could tear the split apart. Splits were restructured from a workspace-level arrangement into per-tab groups: switching tabs swaps the whole group, every tab remembers its own layout, and split shells reattach after close-to-tray instead of orphaning.
  • The caret comes back when you return to an agent's tab. Leaving a running Claude Code tab and returning left its input caret invisible until you typed: terminals that turn on focus reporting never heard about the focus they regained. The focus event is now re-announced whenever a terminal view reattaches, and focus / mouse / paste reporting modes survive snapshot reconstruction too.
  • The Codex input bar respects the light theme even at launch. Supervised launches start the CLI before any terminal view exists, so Codex's color probe — answered within 100 ms or never — always timed out and fell back to dark. The runtime now answers theme-color queries itself while no view is attached, using your current theme.
  • Diff backgrounds follow your theme. The new diff renderer painted pure white in light themes regardless of the active palette; its background and foreground are now anchored to Cordy's theme variables in both appearances.
  • Agent status is real. Claude Code's status was inferred by matching text on screen against patterns that no longer exist in its current version, so a whole session could report nothing but "launched". Status now comes from Claude Code's official hook events; screen matching remains only as a fallback for CLIs with no extension point, and was fixed to detect working rather than guess at waiting.
  • A password typed into the built-in browser can no longer reach a CLI agent. The page-inspection path read control values back indiscriminately, so a password field's plaintext could travel out through the agent's browser tool. Credential fields (password, current/new password, one-time code) now read back as empty — the write path already had this guard, the read path did not.
  • Opening a URL in the built-in browser works. open_or_focus_url compared URLs by exact string, so a browser-normalized http://localhost:3000/ never matched the requested http://localhost:3000; every call failed and left an orphan tab behind. URLs are now compared by origin, path and query, the request waits for the navigation to actually commit, and a failed open cleans up its tab.
  • A browser session can no longer get stuck open. Closing a tab the window no longer knows about used to hang, which wedged finishing or stopping the session permanently. Closing is idempotent now: a tab that is already gone counts as closed.
  • The terminal tab strip holds still. Preset launch buttons no longer scroll out of view, the new-tab button follows the last tab instead of pinning to the far edge, and the tab list no longer scrolls vertically.
  • Diagnostics polish. Path redaction handles directories with spaces, and the storage statistics count exactly what cleanup reclaims.

Changed

  • Toolbars are icon-first. The workspace toolbar and the Project Tools tabs are now compact icon buttons with tooltips (change counts stay visible as badges), freeing header room in narrow layouts.
  • The Chrome extension no longer requests the debugger permission. Screenshots use the standard visible-tab capture instead, which only works on the active tab — a request for an inactive tab now fails loudly instead of silently capturing the wrong page.
  • Codex is no longer launched with hook trust bypassed. The bundled Codex preset shipped --dangerously-bypass-hook-trust by default; that is now something you opt into explicitly, not something Cordy decides for you.
  • Element Picker no longer claims to resolve a source file and line. It read a React internal that React 19 does not emit, so it silently returned nothing on every page. It now forwards the page context it genuinely has.

Removed

  • The Agent panel is gone. The header launcher, the panel toggle, and the Agent Run panel are removed — an agent is its terminal tab, and supervision (status badge, click-to-focus, safe teardown) lives right on it. Custom presets remain manageable under Settings → Terminal Presets.
  • Developer Session is gone. The time-boxed chrome.debugger diagnostic session has been removed end to end, together with the permission it required.
v0.1.32026-07-15

A source-only release like 0.1.2 (build from a checkout with pnpm install && pnpm build). This release closes out the terminal input-reliability defects surfaced during daily use — headlined by three Chinese-IME character-swallowing bugs, each root-caused from real input event traces — and adds a round of Source Control and workspace UX upgrades (Zen Mode, a Commit Graph, a git-decorated Files tree, renamable tabs) plus local-only crash and log diagnostics.

Fixed

  • Chinese IME input in terminals no longer drops characters. Three distinct swallowing bugs — each root-caused from real Microsoft-Pinyin event traces rather than guesswork — are fixed: the boundary character lost after an English word and a space; the letter lost when you pick an English candidate from the IME window; and, the deepest one, the leading already-typed characters silently truncated when text preceded the composition (Windows TSF replaces the whole input value on commit, which our offset math had mis-sliced). We reported the underlying defect upstream together with a fix (xtermjs/xterm.js#6049, PR #6051). All three are now held down by expanded permanent regression scenarios.
  • Voice-input tools can paste into terminals again. Third-party speech-to-text tools running with simulated-keyboard turned off inject a Ctrl+V that carries no physical key code, which the terminal was rejecting — so the dictated text never landed. Cordy now falls back to the logical key, and the paste goes through.
  • Full-quit then reopen no longer corrupts the restored terminal. Quitting Cordy entirely and relaunching could bring a running terminal back with a blank top, overlapping lines, or a missing cursor. Snapshots are now saved without full-screen / mode control sequences, restored at the exact size they were captured at, and the fresh shell always starts on a clean line below the restored history — a VS Code-style revive.
  • Opening the right panel no longer blanks the center terminal. Revealing the Project Tools panel could intermittently clear the active terminal until the next repaint; the resize now repaints in step.
  • Source Control stays in sync with your working tree. The diff open in the center canvas refreshes after you stage or discard hunks, after worktree writes, and after a pull; commit-history parsing is hardened against commit signatures and stray Git output; the Files tree's selected-row highlight is fixed on Windows paths; and inline tab rename no longer mis-fires while an IME composition is in flight.
  • File-tree Git status is announced to assistive technology, so screen-reader users hear which files have changed.

Added

  • Zen Mode. A toolbar button (and a shortcut) collapses the surrounding chrome and spotlights the active agent's CLI terminal — for heads-down work with a coding agent.
  • Renamable terminal tabs. Give any tab your own name inline; clearing it restores the original launch title.
  • Git status in the Files tree. Files and folders are decorated with their change status (M / A / D / R / C / ?), so you can spot what changed without opening the Changes panel.
  • A Commit Graph. The placeholder Review tab is replaced by a Graph tab that shows your commit history. Diffs now open in the center canvas like an editor, and every change row has an Open File action.
  • Deeper local diagnostics. Local-only crash capture, rotating file logs, and a richer, path-redacted diagnostics export make a post-install problem actually diagnosable — all still on your machine, never uploaded.

Changed

  • Dependency and toolchain refresh. Cordy now builds on TypeScript 7 (the native compiler), with in-range updates to Vite, Vitest, tiptap and others and bumped dev tooling (oxfmt 0.59, oxlint 1.74). No user-facing behavior change — just a faster, current build.
v0.1.22026-07-12

A source-only release like 0.1.1 (build from a checkout with pnpm install && pnpm build). This release lands the rest of the terminal-reliability campaign: reliable Chinese IME input, theme-aware terminals on Windows, and fixes to workspace restore.

Fixed

  • The workspace you left active is the one you return to. Restoring from the tray (or reloading) used to land on the last-created workspace no matter which one you were using. The active selection is now persisted and honored — including when you close the window within moments of switching.
  • Chinese IME input in terminals is reliable again. Long pinyin sentences no longer swallow or duplicate characters, and the IME candidate window stays put instead of chasing a full-screen TUI's repaints. The fix is protected by a permanent regression gate so it cannot silently regress in future upgrades.
  • Returning to a terminal no longer shows a stale frame. Switching back to a workspace or tab could briefly show a missing cursor until the app's next repaint; panes now repaint immediately on return.

Changed

  • Windows terminals now run on the modern Windows Terminal ConPTY, bundled with the app (Microsoft-signed). Terminal apps that probe the terminal's background color get a real answer, so tools like the Codex CLI now theme their UI correctly on light themes — and the output stream is cleaner (no more full-viewport repaints on resize).
  • Terminals advertise the app theme via COLORFGBG, so vim / neovim / delta style tools detect light vs dark correctly in newly opened sessions.