Release notes
Update every device together
This release changes the host–client protocol (version 7 → 8). A desktop host, phone app or browser tab on v0.1.58 or earlier cannot connect to a v0.2.0 host, and the reverse. Update the machine and every paired device together.
Your data moves to ~/.tcode and into one database
Tcode now keeps its data in ~/.tcode on every platform (%USERPROFILE%\.tcode on Windows). Threads now live in one database, tcode.db, instead of an index file plus one file per thread.
On first start the desktop app shows a dialog with a progress bar before anything else. First it moves your old data directory in: ~/Library/Application Support/tcode on macOS, $XDG_DATA_HOME/tcode on Linux, or %APPDATA%\tcode on Windows. Then it converts your threads into tcode.db. About 3,000 threads take about a minute. You can quit at any time, and the next start continues where it stopped. The originals are removed only after the copy has been verified. A headless host prints the same progress.
To use a different data directory, set TCODE_DATA_DIR. If your old data is somewhere other than the usual place, point LEGACY_TCODE_DATA_DIR at it. Two Tcode hosts can no longer share a data directory. The second one stops with an error that names the directory.
Do not run an older Tcode against the new directory. It cannot read tcode.db and would start with no threads. You can open tcode.db with sqlite3 to inspect it while Tcode is not running.
Faster long threads
Long threads open in milliseconds, because the first screen is read from the end of the thread. A thread that loads from disk no longer freezes your other threads while it loads.
Codex records the whole diff of a turn again on every change. Tcode now keeps only the last of those snapshots, and a one-time pass on first start does the same for existing threads. This roughly halves the space your threads take. The app also keeps less in memory for threads you have left: only the open thread and the four you left most recently.
Threads and worktrees
- Unarchiving a thread now sticks. Auto-archive no longer takes an idle thread straight back.
- Deleting a thread also deletes every thread under it, and the confirmation says how many. The same applies to deleting all archived threads.
- A worktree you chose to keep when deleting a thread is no longer swept away an hour later.
- Worktrees now live under the data directory, so a profile with its own
TCODE_DATA_DIRno longer cleans up another profile's worktrees. - A thread is marked read only once its conversation is on screen. A slow remote device that merely asked for it no longer marks it read.
- Every device shows the same state for a thread. A phone now shows Background separately from Working, and sees the same plan as the desktop.
Cursor and Grok
Cursor and Grok are now native providers, alongside Claude Code, Codex, pi and OpenCode. Grok supports steering, questions, plan mode and usage. Cursor has no steering, forking or usage, and neither has rewind. Your existing ACP threads with either one still resume.
Tcode no longer writes "always allow" or "always reject" rules into any agent's config unless you pick that option yourself.
Plugins and provider updates
Settings → Plugins installs, updates and removes plugins and marketplaces for Claude Code, Codex and Grok. When a CLI asks for confirmation, you see its own text.
Provider update checks now raise one notice that lists every update, with an Update all action. Settings → Providers has the same button and shows progress while updates run.
Markdown and images
```mermaid blocks render as diagrams. Code blocks have a copy button. Images open in a viewer that zooms and pans with the wheel, a pinch, a drag or the keyboard. Copying a drag selection no longer drops the last character.
Composer
Agent questions use one card that folds to a single line, and a long question scrolls inside the card. On a phone, /, @ and $ open their menus, and /later schedules the turn. / opens the command menu only at the start of a message, so a path like /Users/… is sent as text. Dictation now works on macOS 13 and later and on Windows.
Elsewhere
- Right-click menus are available almost everywhere: text fields, messages, tool calls, diffs, terminal tabs and composer chips.
- The Add Project dialog keeps the path field at the top, so it no longer moves under your pointer.
- Orchestrate's bundled Codex executor is now GPT-6.1 Sol. Orchestrate settings now save only what you changed, so an older Tcode will not show your bundled guidance.
- If an orchestrated child thread fails to start, the orchestrator now hears why.
Under the hood
Thread storage now runs on Turso, a SQLite-compatible database engine written in Rust. The protocol version now changes once per release whose wire format changed, so this section's "Update every device together" note tells you when a release needs it.
Platform notes
-
macOS 12+: release builds are Developer ID signed and notarized when the maintainer has configured signing credentials. If you downloaded an unsigned build, clear Gatekeeper quarantine after moving the app to Applications with:
xattr -dr com.apple.quarantine /Applications/Tcode.app -
Windows: Microsoft Edge WebView2 Runtime is required. It is included with Windows 11.
-
Linux: requires ALSA, Fontconfig, Wayland/X11 client libraries, libgbm, the Vulkan loader, and a working Vulkan ICD/graphics driver.
-
Android: the arm64 APK is signed with the project's release key and installs over previous releases signed with it. A build signed with a different key (a local build, or a release from before the key existed) must be uninstalled first.
-
iOS: not published yet.
Packages are uploaded as soon as each platform build completes. macOS artifacts are
architecture-specific. Windows MSI/NSIS and Linux AppImage packages are not currently
produced. SHA256SUMS.txt is added after every platform package has finished.
What's Changed
- fix(sidebar): put the path row above recent activity and bound its scan by @Tryanks in #561
- fix(markdown): copy the characters a drag selection highlights by @Tryanks in #563
- fix(ui): host the touch sheet on gpui-base Sheet by @Tryanks in #565
- docs: gpui-base is the infrastructure (Principle 7) by @Tryanks in #564
- fix(palette): host the command palette on gpui-base Dialog by @Tryanks in #569
- fix(menu): position the context menu with gpui-base Positioner by @Tryanks in #566
- fix(ui): build the segmented control on gpui-base ToggleGroup and Toggle by @Tryanks in #567
- fix(ui): build tab strips on gpui-base Tab and Tabs by @Tryanks in #568
- docs: what to do when a test fails by @Tryanks in #570
- docs: drop the Orchestrate principle and scope the upstream rule by @Tryanks in #572
- test(store): wait for the archived count instead of assuming it arrived with the index by @Tryanks in #571
- fix(computer-use): tell visited AX elements apart by identity, not address by @Tryanks in #573
- fix(ui): take every corner radius from the theme's radius tokens by @Tryanks in #574
- feat(ui): right-click context menus across the app by @Tryanks in #575
- test: audit redundant owner-boundary coverage (1000 → 886) by @jiayuqi7813 in #576
- orchestrate: upgrade bundled Codex executor to GPT-6.1 Sol by @Tryanks in #578
- feat: render Mermaid fences as diagrams by @Tryanks in #579
- feat: add a copy button to Markdown code blocks by @Tryanks in #581
- fix: open the composer's /, @ and $ menus on the phone by @Tryanks in #582
- feat: add Cursor and Grok as native providers over ACP dialects by @Tryanks in #584
- feat(orchestrate): move the bundled fleet into fleet.json by @Tryanks in #586
- docs: the protocol version follows releases, not changes by @Tryanks in #592
- fix(composer): send commands and skills the way the harness expands them by @Tryanks in #593
- fix(ui): end the text selection before a click stops propagation by @Tryanks in #595
- feat(composer): one collapsible question card for both deliveries by @Tryanks in #596
- feat(ui): image viewer with zoom, pan and gesture support by @Tryanks in #597
- feat: keep thread metadata and event logs in a Turso database by @Tryanks in #594
- feat: manage Claude Code and Codex plugins from Settings → Plugins by @Tryanks in #580
- build(deps): GPUI Kit 0.7.1 on gpui-fast v0.1.0; composer dictation via gpui-component speech by @Tryanks in #598
- feat(providers): merge update notices, Update all with progress by @Tryanks in #600
- feat: keep Tcode's data in ~/.tcode on every platform by @Tryanks in #601
- feat(grok): manage Grok plugins through
grok pluginby @Tryanks in #602 - fix: mark a thread read only once its conversation loads on screen by @Tryanks in #603
- fix(orchestrate): tell the orchestrator why a revived child failed to start by @Tryanks in #604
- fix: host-authored session state for every client by @Tryanks in #608
- fix: unarchive keeps a thread active, kept worktrees survive the sweep, delete cascades to descendants by @Tryanks in #609
- perf: open long threads from their tail, drop superseded diffs, bound client history by @Tryanks in #611
- protocol: version 8 for v0.2.0 by @Tryanks in #612
New Contributors
- @jiayuqi7813 made their first contribution in #576
Full Changelog: v0.1.58...v0.2.0