Skip to content

v0.2.6

Choose a tag to compare

@github-actions github-actions released this 16 Oct 09:57
· 91 commits to main since this release
cce9152

Release notes

v0.2.6 replaces v0.2.4 and v0.2.5, whose downloads have been taken down. These notes cover everything since v0.2.3.

Update every device together

The host–client protocol changes from version 11 to 14. A desktop host, phone app or browser tab on v0.2.5 or earlier cannot connect to a v0.2.6 host, and the reverse. Update the machine and every paired device together, and reload browser clients after updating the host.

Pull request instructions travel through each agent's own channel

Tcode's pull request instructions used to be prepended to your first message. Now each provider receives them through the channel it is built for, and your message carries only what you typed:

Agent Channel
Claude Code appended to the system prompt on every launch, resume included, and kept across compaction
Codex developer context on every turn, beside the thread's own developer instructions; put back after a compaction, even mid-turn
OpenCode system instruction on every prompt
Cursor, Grok and ACP agents a separate block after your text and images, left out for a native /command and for agents without HTTP MCP

What the agent sees is now shown verbatim and attributed: the linking instructions under their channel, the instructions of every MCP server attached to the thread (pull requests, preview, orchestrate, report, computer use), and Codex's developer instructions.

Around it, pull requests got more accurate:

  • Branch discovery shows the pull request found on a thread's branch without linking it; only links you or the agent make count as links.
  • Mergeability follows what each host actually asserts. GitHub's Unknown and GitLab's and Azure DevOps's checking states show as Pending and are polled for at most 10 minutes at one head; a conflict on GitLab, Bitbucket or Azure DevOps shows at the first read instead of after 30 seconds.
  • A watched pull request's merge wakes the thread once, a wake steers into a running turn, Stop clears the watches of an idle thread, and watches pause on interrupt and catch up on resume.
  • Non-GitHub hosts back off exponentially on rate limits, per host and credential, up to 15 minutes, honoring the time a host names.
  • A merged pull request no longer settles its thread by default.

Performance: the host does work once, and sends only what changed

v0.2.5 reworked how the host stores, projects and sends state, so cost follows what you look at rather than how much history you have.

Startup and every turn. Each thread's activity is written in the same transaction as its events, so startup reads it in one query instead of decoding every thread's log. Per-turn activity projection builds the parent/child map once per snapshot instead of scanning every thread for each lookup (91% less time). Status, plan and Git projections are built only for topics a client is subscribed to.

History. Opening a conversation you have seen shows its cached history immediately and resumes the subscription from where it left off. A turn index is maintained as events are appended. Cold history is served from bounded, pinned database reads that stop as soon as the window is full (91% faster first window for large messages), while full hydration continues in the background. Idle histories kept for quick reopening are bounded to 32 MiB.

Sync. A reconnecting client sends a fingerprint of its index, and an unchanged index is answered with one short reply instead of a full snapshot (95% fewer bytes). Activity and token-usage changes travel as deltas rather than full summaries and statuses. One owner recovers subscriptions after a reconnect. A slow client's queue is bounded: superseded states and terminal output fold into the latest full frame.

Rendering. Streaming a long code block reuses line offsets and resumes highlighting from the last checkpoint (95% lower frame latency). Markdown measures only the blocks that changed, the chat is rebuilt only when a frame changed it, and phones draw on GPUI's demand instead of ticking continuously.

Images and files. Image tiles draw from previews; an original is read only when you open it, over its own stream with progress, so it never holds up messages. Oversized file previews are refused before they are read. One attachment policy owns read budgets, queues and transfer limits.

Git and pull requests. Git status reads are coalesced per working directory and run in parallel, diff and file preview output is bounded, identical pull request reads are shared across projects, and release and Claude manifest checks revalidate with ETags.

Agents

Codex capacity failures retry with a countdown. Claude API retries, Claude model fallback and the start of Codex compaction show while the turn runs. A steer that misses the ending turn is sent as the next turn. Settle every finished child at once from the Agents view or the settle_all tool.

Phones

Pushed pages and bottom sheets follow the edge-back swipe. iOS text input goes through the system keyboard with native dictation. Android remembers paired machines across launches. Background notifications no longer take the composer's focus.

Also

  • An expanded command shows the screen the host's terminal renders, updated while the command runs.
  • Quick chats have their own sidebar group, and the project view keeps a Settled shelf per project; unarranged threads follow activity and pins stay in view.
  • A profile with threads settled by an older build upgrades instead of stopping at the upgrade dialog.
  • The compact macOS app no longer aborts when returning to conversations, and the desktop app no longer aborts while an expanded command's output grows.
  • The composer keeps its undo history and input shortcuts.
  • The diff panel keeps its content while a refresh is pending, then opens the new diff at the file and line you were reading.
  • A display formula at the start of a line is a block of its own; Enter confirms project dialogs; typed pairing addresses stay first among saved hosts.

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: tcode-0.2.6-ios-arm64-unsigned.ipa is unsigned (iOS 26+, arm64). Re-sign it with your own Apple ID or install it with a sideloading tool such as AltStore or Sideloadly before it runs on a device.

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

  • Push host-rendered command output to expanded command panels by @Tryanks in #902
  • Keep the diff panel's content while a refresh is pending by @Tryanks in #903
  • fix(markdown): measure only changed root items instead of the whole document by @Tryanks in #904
  • Drop chat states that do no work by @Tryanks in #905
  • Rebuild the chat only when a frame changed it by @Tryanks in #906
  • protocol: version 14 for v0.2.6 by @Tryanks in #908

Full Changelog: v0.2.5...v0.2.6