T3 Code Orchestrator V2 is now stable
v0.1.0 is the first stable release of T3 Code Orchestrator V2, which has been in Nightly since early October. V2 rebuilds the part of T3 Code that runs your agents: how turns start, stop, queue, and resume; how subagents and background work are tracked; how threads move between providers; and how history is saved. Read "Before you update" if you use the mobile app or OpenCode.
The short version
- Pi, Muse Code and OpenCode 2 support
delegate_task: an agent can start child agents on any provider or model and wait for their results. This is the way to use several harnesses together.- Fork any thread
- Switch provider or model mid-thread, with caveats (see below)
- The T3 Code MCP: agents can create, launch, message, wait on, read, search, and interrupt threads
- ACP Registry: add any registry agent (Devin, Cline, Kimi, Droid, and more)
- Cursor runs on the official Cursor SDK instead of the CLI
- A real server-side queue: queued messages survive restarts, and you can steer or queue each message
- Subagents you can follow: every child shows up with its model, status, and results
- Interrupted threads continue after a restart
- Auto-resume when usage limits reset
- Scheduled tasks
Highlights
Agents that manage agents
-
delegate_tasklets an agent hand work to a child agent on any provider and model, with its own options and role. Each child runs as its own thread, keeps its own provider-native history, and reports a result. The parent can wait for children or keep working, and it wakes up when they finish, with results batched together. This is the recommended way to combine harnesses, for example Claude planning and Codex implementing. -
The T3 Code MCP gives agents tools to create, launch, message, wait on, read, search, and interrupt threads. They can also:
- fork and merge back;
- edit and reorder queues;
- answer questions;
- rename threads, regenerate titles, link pull requests, and settle threads;
- manage scheduled tasks and projects;
- hand work off to a worktree;
- list and close previews.
Agents can't approve their own permission requests.
-
Attach another thread as context: type
@and the thread's name, or drag a thread from the sidebar into the composer.
Fork any thread
- Fork from any finished run, including failed, interrupted, and limited ones. Forks stay on the same provider by default and use the provider's native fork where it has one (Codex, Claude, Pi, OpenCode 2), so the full history comes along. When you're done, merge the fork's context back into its source.
Switching providers mid-thread
- You can change provider, account, model, or options between turns, and queue a switch without stopping the current turn. Per-provider and per-model options are remembered.
Warning
Switching providers is supported, but it isn't the recommended way to use multiple harnesses. The handoff is lossy. The new provider gets a budgeted selection of the conversation's messages, but not the previous provider's reasoning, its tool calls and results, or attachments. The agent can look up omitted messages, but the working state the first provider built up doesn't carry over. To get another harness's help, have the agent use delegate_task instead. Changing model or options within the same provider usually continues the provider's own session, so nothing is lost.
Subagents and background work you can see
- Native subagents from Claude, Codex, OpenCode 2, Cursor, and Pi show as child threads in a lineage view, with their model, status, progress, results, and duration. Several subagents fold into one collapsible card, and the mobile app has an agents sheet.
- When background work finishes, the agent wakes up and says which subagent, command, or monitor finished.
- Stop works on background work too, including after the foreground turn has finished.
- After a restart, T3 Code tells the agent which background work died, and threads that lost background work can continue.
More providers, and deeper support
-
Pi, including Pi 1.0: native resume, fork, rollback, and steering; skills, extensions, and extension dialogs; T3 Code tools inside Pi; and permission modes Pi enforces itself.
-
OpenCode 2 (2.0.18+):
- native steering, forks, rollback, compaction, and plan mode;
- child sessions as subagent threads;
- T3 Code tools injected into the server;
- recovery after restarts.
T3 Code detects whether you run 1.x or 2.x. OpenCode 1.x keeps the support it had in V1, plus forking.
-
ACP Registry: search the official registry and install an agent on the server you choose, with shared sign-in across your devices.
-
Cursor on the official SDK: browser sign-in, model discovery, project skills and rules, images, plans, and resuming local agents.
-
Many fixes for Claude, Codex, Grok, and Antigravity. Questions, plans, and todos work again, along with compaction and resume. Subagent output stays in the right thread, and approvals route correctly.
A queue you can trust
- The queue lives on the server and keeps its order across restarts. After a restart it waits for you to resume it. It also survives usage limits.
- Edit, reorder, remove, and steer queued messages, including their attachments. This works on mobile too.
- Choose whether a follow-up message steers the running turn or queues: Settings → General → Follow-up behavior.
Cmd/Ctrl+Enterdoes the opposite of your default.
Limits and recovery
- Threads stopped by a usage limit show as Limited. Resume manually, resume at reset, or snooze until reset.
- With Settings → General → Continue threads after restarts on, interrupted threads continue after an update, crash, or reboot.
- A live context meter, plus usage that stays correct through compaction and session changes.
Scheduled tasks
- Create, edit, pause, resume, run, and delete automations on web and mobile, filtered by project and environment. Fixed schedules use the server's time zone.
Thread details and the sidebar
- Workspace, Git, scripts, linked pull requests, automations, and lineage now live in a thread-details panel. Merge controls follow the current checks.
- Sidebar status reflects what's actually running: working, waiting, limited, or failed. Settling is handled by the server and accounts for linked PRs, pins, and background work.
- Working section (beta): busy threads stay out of the way until they need you.
- Configurable worktree branch names, per project if you like.
Faster and lighter
- Long conversations load in pages.
- Streaming updates are batched, and the app re-renders less.
- Memory use is lower, and mobile scrolls more smoothly.
Before you update
- Your threads come with you, but it's a one-way copy. The first time V2 starts, it copies your existing database and imports your threads. The previous version keeps its own copy, and changes made in one version don't show up in the other. See "Moving from V1 to V2" in the pinned issue.
- Update every app you connect with. A V2 server and a V1 app can't talk to each other. Whichever side is older refuses the connection and tells you which machine to update. Update every machine that runs a T3 Code server, including background services and remote machines you connect to, and every desktop app you use.
- The mobile app must be updated too. T3 Code 2.0 for iOS and Android is rolling out on the App Store and Google Play. If your store doesn't offer the 2.0 update yet, check back a little later; until then, the web app works in a mobile browser.
- OpenCode users: V2 is built for OpenCode 2.0.18 and newer, and 1.x keeps limited support. "Limited support" means OpenCode 1.x works in V2 much as it did in V1 (steering, rollback, subagents, approvals, plan mode, compaction, T3 Code tools), and gains forking. The one thing it loses is that an approval or question still waiting when T3 Code restarts is not shown again; answer or stop it before updating. New OpenCode features go to OpenCode 2 only. OpenCode 2 is a separate package (
@opencode/cli), and it converts OpenCode's shared database the first time it runs. Don't run 1.x and 2.x side by side on one machine. - Minimum provider versions: Codex 0.159+, Claude Code 2.1.280+, Grok 1.0.13+, OpenCode 2.0.18+, Pi 0.80.5+ (1.0 recommended). Settings → Providers tells you if a version is too old.
Read this issue for more info: #14871
Changed or removed
- The desktop app uses a new browser profile, so you may need to sign in again to websites opened inside the app.
- The separate agents panel is gone. Subagents appear in the lineage view and inline in the thread.
- Workspace, Git, and script controls moved into thread details.
- The token-by-token streaming setting is gone.
- Grok no longer offers Auto-accept edits. Those threads run in Supervised mode.
- Antigravity receives images directly. Other attachments are passed as file paths.
- Subagent threads are read-only. Message the parent thread instead.
Please report anything that feels off.
What's Changed
- fix(mobile): opening a thread no longer crashes Android release builds by @bompus in #14850
- fix(server): stop a second server from resending Claude turns by @cestercian in #13295
- docs(triage): leave protected PRs open by @juliusmarminge in #14852
- feat(orchestrator): introduce new orchestrator by @juliusmarminge in #2829
- fix(server): Claude MCP tools show their names and icons by @scratchyone in #14860
- fix(server): released builds keep the OpenCode policy for their own version by @juliusmarminge in #14863
- fix(server): idle shells stop reloading every project once a minute by @SunkenInTime in #14893
- fix(server): Claude model changes no longer kill running background agents by @juliusmarminge in #14726
- fix(server): API-key Codex installs no longer warn on every start by @yordis in #14903
- fix(server): steers keep the newest next-turn selection by @juliusmarminge in #14725
- fix(settings): Pi and ACP Registry no longer show an Early Access badge by @juliusmarminge in #14915
- fix(server): Codex auth tokens are an omitted key, never undefined by @yordis in #14908
- chore(lint): forbid declaring tests inside for loops by @juliusmarminge in #14921
- fix(desktop): markdown no longer loads invisible in new dark-mode browser tabs by @shivamhwp in #14727
- test(server): the fake Claude CLI exits with its parent by @yordis in #14926
- fix(mobile): production OTAs no longer reach the previous major's store binaries by @juliusmarminge in #14944
- fix(web): thread panel shows the remote machine a thread runs on by @t3dotgg in #14972
- fix(web): Claude skill calls show the skill name by @t3dotgg in #14980
- test(server): the fake Claude CLI is a fixture file, not a generated string by @yordis in #14950
- fix(server): Claude subagents show the model their agent file picks by @t3dotgg in #14994
- fix(client-runtime): format subagent descriptions as display names by @Yash-Singh1 in #14999
- fix(web): outdated servers can be updated even when the client can't connect by @juliusmarminge in #15002
- fix(web): new worktree threads no longer flicker while starting by @t3dotgg in #15019
- fix(server): subagent threads stop publishing tombstones to the relay by @juliusmarminge in #15016
- fix(client-runtime): reconnects back off with jitter and keep healthy sockets by @t3dotgg in #14897
- fix(server): working timers no longer reset on every background wake by @t3dotgg in #15029
- fix(server): threads settle as soon as an agent merges their PR by @t3dotgg in #15024
- fix(opencode): fill blank reasoning labels by @Yash-Singh1 in #14978
- fix(preview): agent browser clicks no longer steal your composer focus by @t3dotgg in #15008
- fix(web): Woke dismiss syncs, preview mute is back, and subscription retries back off by @t3dotgg in #15034
- chore: docs, dev scripts and CI catch up with orchestration V2 by @t3dotgg in #15041
- fix(server): Claude V2 turns start on Windows with the default binary path by @maria-rcks in #15021
- fix(web): diff panel opens on all branch changes, not just uncommitted by @t3dotgg in #15005
- fix(server): threads stay working while Claude starts a wake turn by @t3dotgg in #15055
- feat(web): mod+alt+enter on an existing thread sends and opens a new thread by @maria-rcks in #15050
- fix(chat): sending on an older thread no longer jumps to the top by @t3dotgg in #15059
- chore: add bmdavis419 to triage exemptions by @bmdavis419 in #15062
- fix(server): runs no longer get stuck by @t3dotgg in #15048
- fix(usage): Codex Fast and Ultrafast now cost what they bill by @t3dotgg in #15101
- fix(clients): a dev server left running no longer says the thread is waiting by @t3dotgg in #15114
- fix(web): a thread that left a shell running shows its unseen completion by @Mnigos in #14910
- fix(web): mod+enter starts a new thread in the background again by @t3dotgg in #15060
- feat(usage): show cost by token type, speed, and model detail by @t3dotgg in #15108
- feat(server): agents can watch a PR and get woken when checks, reviews, or conflicts need them by @t3dotgg in #15057
- fix(server): keep delegated review rounds on the task API by @t3dotgg in #15115
- fix(shared): classify workspace previews by literal filenames by @yashranaway in #10311
- fix(mobile): iOS threads no longer jump to the top by @znoraka in #14808
- fix(web): reduce the gap above the draft composer by @Bil0000 in #15196
- fix(mobile): a dev server left running no longer shows the waiting bolt by @jakeleventhal in #15194
- fix(server): a Claude command you stop shows as interrupted by @SunkenInTime in #14896
- fix(server): editors appear once a slow discovery scan finishes by @bfowler in #13917
- fix(server): Claude threads no longer stay stuck in plan mode Claude entered itself by @juliusmarminge in #15224
- fix(mobile): show complete subagent details by @jakeleventhal in #15189
- fix(mobile): an expired Live Activity no longer leaves a second card by @juliusmarminge in #15254
- test(web): remove redundant thread sort fallback tests by @t3-code[bot] in #15095
- fix(web): thinking row after a failed tool expands the run's tool calls by @maria-rcks in #15056
- perf(web): DOM changes no longer restyle the whole page by @flamboh in #15265
- perf(usage): cut warm usage scans from seconds to milliseconds on large histories by @t3dotgg in #15149
- perf(web): virtualize command palette results by @flamboh in #15266
- chore(lint): flag :has() variants that restyle the whole page by @flamboh in #15274
- fix(web): workspace card docks beside chat when the window is narrow by @t3dotgg in #14992
- feat(web): render mermaid code blocks as diagrams by @maria-rcks in #15067
- feat(web): Nightly tells you to get the beta mobile app by @t3dotgg in #15070
- test(server): ACP adapter tests no longer race the prompt settle by @t3dotgg in #15330
- feat(usage): fold preview model IDs into the model they belong to by @t3dotgg in #15333
- refactor(server): check RPC scopes in group middleware by @juliusmarminge in #15324
- feat(mobile): beta Working section hides busy threads until they need you by @t3dotgg in #15346
- fix(settings): symlinked settings files stay linked when saved by @yordis in #15009
- fix(server): Stop ends a dev server left running before a provider switch by @t3dotgg in #15355
- fix(server): merged threads settle even after the agent wakes on its own by @t3dotgg in #15388
- fix(web): no-project drafts can switch machines by @maria-rcks in #15356
- fix(web): highlight tool inputs and remove nested work log indentation by @Yash-Singh1 in #15384
- fix(server): restarts keep delegated tasks, queued threads, and stops intact by @maria-rcks in #15323
- fix(web): sending past the resume banner compacts first by @maria-rcks in #15290
- fix(codex): resume archived native sessions by @maria-rcks in #15389
- feat(web): morph composer and panel action icons by @jakeleventhal in #14924
- fix(web): subagents sent a follow-up show as running in Lineage by @scratchyone in #15334
- fix(web): clear stale chat action shortcuts by @maria-rcks in #15394
- fix(orchestration-v2): restore earlier app agent transcript pages by @Bil0000 in #14104
- fix(web): remove the square thread info panel shadow by @PixPMusic in #15069
- fix(mobile): Android usage widget no longer sticks on "Loading widget" in release builds by @tris203 in #15142
- fix(web): size the model picker to its content by @saphid in #15152
- test(server): replay checks a Claude subagent's thread takes its reported model by @juliusmarminge in #15022
- fix(web): subagent finish notifications look like subagent cards by @flamboh in #15281
- fix(web): thread status dot has an accessible name by @ryanilano in #14587
- fix(web): legacy sidebar options button has a label by @ryanilano in #14602
- fix(web): imported themes keep switches and focus rings visible by @flamboh in #14498
- fix(web): links to issues no longer strand the pull request viewer by @flamboh in #14242
- fix(web): repo/task breadcrumb no longer bounces when the sidebar collapses by @flamboh in #15046
- fix(web): Pull request panel entry works for linked PRs by @flamboh in #15061
- fix(web): add context menu to draft threads in the sidebar by @flamboh in #10637
- fix(web): keep sidebar branding and build pills from clipping at varying font sizes and zoom levels by @flamboh in #12141
- fix(usage): model shares and order follow the selected metric by @flamboh in #11391
- feat(web): sweep sidebar buttons to settle, un-settle, and wake threads by @argofowl in #14768
- feat: retry a failed workspace preparation by @juliusmarminge in #15326
- fix(server): registry test stubs no longer outlive the test run by @yordis in #15457
- test(server): the registry's fake Claude CLI is a fixture file, not a generated string by @yordis in #15463
- refactor(clients): share opening a machine's No project folder by @bmdavis419 in #14759
- test(server): the git-ssh wrapper's fake SSH script is a fixture file, not a generated string by @yordis in #15480
- test(server): the ACP registry's fake npm is a fixture file, not a generated string by @yordis in #15483
- test(server): the ACP registry's fake uv is a fixture file, not a generated string by @yordis in #15484
- feat(clients): step a new thread to the next machine from the keyboard by @juliusmarminge in #15391
- fix(web): promoting a draft thread no longer logs a React key warning by @yordis in #15458
- test(server): the text generation's fake Claude CLI is a fixture file, not a generated string by @yordis in #15479
- fix(mobile): keep dictation running across navigation behind an edge pill by @juliusmarminge in #15502
- fix(client-runtime): relay disconnects no longer show as thread errors by @juliusmarminge in #15470
- fix(web): subagent cards name the provider account by @SunkenInTime in #15493
- fix(server): read paginated review replies when watching PRs by @eimexdev in #15427
- fix(server): offer one-click provider updates for every install by @maria-rcks in #15416
- fix(mobile): keep the dictation timer from shifting width by @juliusmarminge in #15504
- fix(relay): T3 Connect links no longer fail on colliding prepared statements by @juliusmarminge in #15411
- fix(server): sqlite transactions wait for the write lock instead of failing by @juliusmarminge in #15488
- fix(web): unpin button shows the pin-off icon on hover by @flamboh in #15425
- fix(mobile): make queued message removal tappable by @PixPMusic in #15417
- fix(web): keep workspace panels below dialogs by @maria-rcks in #15454
- fix(clients): Working section keeps its order while agents finish and wake by @t3dotgg in #15418
- feat(mobile): full-screen simulator viewer with on-demand controls by @juliusmarminge in #15551
- fix(client-runtime): closing a busy stream no longer drops the connection by @t3dotgg in #15563
- feat(web): add shift-held pull request quick actions by @maria-rcks in #15549
- fix: expanded tool calls show their output, empty ones don't expand by @maria-rcks in #15505
- fix(web): show device diagnostics before hub readiness by @maria-rcks in #15435
- fix(web): open thread picker for unsent drafts by @maria-rcks in #15436
- fix(desktop): print version before initializing the app by @maria-rcks in #15440
- fix(server): recover claude skill scalar frontmatter by @maria-rcks in #15452
- fix(server): keep settled threads asleep after restarts by @maria-rcks in #15604
- fix(server): avoid inferring forgejo conflicts from mergeability by @maria-rcks in #15441
- fix(web): dismiss hovered timeline tooltips on scroll by @maria-rcks in #15455
- fix(server): discover Claude commands in each workspace by @maria-rcks in #15462
- fix(web): restore project action preview opening by @maria-rcks in #15490
- fix(desktop): keep titlebar controls inset when zoomed by @maria-rcks in #15496
- fix(source-control): use the Azure DevOps mark by @maria-rcks in #15512
- fix(web): open provider update details from both icons by @maria-rcks in #15501
- fix(web): reveal sidebar actions for secondary hovering pointers by @maria-rcks in #15536
- fix(markdown): preserve descriptive file-link labels by @maria-rcks in #15509
- feat(clients): tool calls show the call above a muted result, without cards by @maria-rcks in #15506
- fix(chat): repair unclosed local file links in assistant responses by @maria-rcks in #15520
- fix(server): match manual update commands to installed cli by @maria-rcks in #15539
- fix(server): preserve staging during commit message generation by @maria-rcks in #15532
- fix(mobile): Keep the last line of iOS markdown replies visible by @mwolson in #15737
- feat(release): include nightly changelogs in Discord announcements by @extoci in #15754
- revert(web): remove automatic compaction before resume by @maria-rcks in #15771
- fix(server): Claude threads no longer get stuck after background commands by @eimexdev in #15770
- fix(cli): reject accidental server launches by @maria-rcks in #15795
- feat(clients): reach one environment over several routes by @juliusmarminge in #15467
- feat(clients): learn an environment's LAN and tailnet addresses by @juliusmarminge in #15468
- fix(server): share MCP tool presentation across providers by @juliusmarminge in #15475
- revert(chat): remove automatic file-link repair by @maria-rcks in #15824
- perf(web): validate monospace fonts when selected by @maria-rcks in #15642
- fix(server): expand home-relative media paths by @maria-rcks in #15618
- fix(server): recover Linux runtime directory for device hub by @maria-rcks in #12402
- fix(web): center icons in thread details icon buttons by @RakshithBhat03 in #15669
- fix(mobile): back from an agent's thread returns to its parent by @AKolenda in #15068
- fix(dev): worktree setup never deletes a real env file by @juliusmarminge in #15845
- fix(server): drop the duplicate Option import that breaks main CI by @juliusmarminge in #15847
- fix(dev): write bootstrap warnings directly to stderr by @maria-rcks in #15865
- fix(mobile): a message that fails to send now says why in the thread by @shivamhwp in #15807
- fix(server): queue background notifications during active tools by @Yash-Singh1 in #15892
- refactor(server): share one keyed lock that releases idle keys by @juliusmarminge in #15577
- feat(server): T3 MCP tools take explicit thread and project targets by @juliusmarminge in #15219
- fix(desktop): V2 imports stashed prompts and drafts from the V1 profile by @juliusmarminge in #15072
- feat(web): shell commands in the timeline are syntax highlighted by @scratchyone in #15037
- fix(mobile): upgrade Uniwind and remove local patch by @Brentlok in #14597
- fix(server): Stop ends a Codex command after its thread was settled by @t3dotgg in #15546
- fix(server): subagents no longer inherit parent pull-request links by @Lucenx9 in #14918
- fix(prs): queue fast actions and close batches by dragging by @maria-rcks in #15851
- perf(prs): share concurrent github routing metadata probes by @maria-rcks in #15853
- fix(mobile): back from a finished subagent in the feed returns to its parent by @AKolenda in #15844
- fix(desktop): bound preview inspector retention and record renderer identity by @maria-rcks in #16032
- fix(web): show fast mode beside reasoning as text by @maria-rcks in #16069
- fix(mobile): make the routes list match the other settings rows by @juliusmarminge in #15958
- fix(threads): stop pull request watches when settling by @Bil0000 in #16095
- feat(contracts): clients tolerate union members they don't know yet by @juliusmarminge in #15951
- refactor(contracts): project icons decode forward-compatibly instead of encoding a fallback by @juliusmarminge in #16118
- Removed an unused helper from the Android push payload builder by @kridaydave in #16116
- perf(mobile): reduce shell cache encoding work by @juliusmarminge in #15096
- perf(mobile): defer audio recorder creation until dictation by @juliusmarminge in #15248
- feat(server): bump Antigravity ACP agent to 1.3.0 by @Droyder7 in #15746
- feat(acp): support local provider commands by @maria-rcks in #16021
- fix(server): honor submodule settings when creating worktrees by @BlankParticle in #15594
- chore(deps): upgrade Effect to stable 4.0.1 by @juliusmarminge in #16138
- fix(server): worktree threads survive a local branch named t3code by @juliusmarminge in #16167
- chore(refs): sync Effect and Alchemy references to 4.0.1 and beta.80 by @juliusmarminge in #16170
- fix(web): match subagent timestamp fonts to chat by @StiensWout in #16151
- fix(web): wrap full status text in composer hover details by @UtkarshUsername in #16158
- ci: run the transfer report job on Blacksmith by @juliusmarminge in #16178
- fix(server): Stop also stops delegated tasks and pull request watches by @t3dotgg in #16002
- feat: native /goal for Codex and Claude, with goal status in the UI by @t3dotgg in #15592
- fix(server): name the cause of a failed git command by @walid-baharwal in #8645
- fix(server): PR watch wakes the agent when a bot edits its review comment by @Gigioxx in #15415
- feat(source-control): omit agent credits from PR merge messages by @juliusmarminge in #16192
- fix(clients): dropped connections say why in the client trace by @t3dotgg in #16200
- fix(server): PR watch reports a required check that first appears already passed by @ScottN-PV in #15804
- fix: a failed DPoP key load and a fresh maintenance read are no longer cached by @juliusmarminge in #15500
- fix: tool screenshots show as images, not base64 text by @t3dotgg in #16199
- docs(mcp): thread tools reach threads in any project by @t3dotgg in #15947
- fix(threads): threads watching a PR stay in Working instead of bouncing to the inbox by @t3dotgg in #16204
- chore(deps): bump cursor sdk and astro to clear vulnerable transitives by @juliusmarminge in #16214
- fix(server): PR sync waits out a GitHub rate limit pause instead of failing every PR by @t3dotgg in #16203
- feat(server): scheduled tasks can run on a webhook by @juliusmarminge in #15085
- feat(relay): forward webhook requests to the environment's tunnel by @juliusmarminge in #15086
- feat(mobile): create and copy webhook automations by @juliusmarminge in #15087
- feat(web): create webhook automations and inspect their deliveries by @juliusmarminge in #15088
- feat(relay,server,web,mobile): opt-in to hold webhooks while offline by @juliusmarminge in #15487
- fix(server): PR watches stop burning GitHub's rate limit and giving up by @t3dotgg in #16208
- fix(server): delegation sees a fixed provider without the app open by @t3dotgg in #16219
- feat: new branches use the shorter t3/ prefix by @t3dotgg in #16220
- perf: cheaper shell refreshes, one copy of Codex streaming text, no MCP wait polling by @t3dotgg in #15033
- feat: agents can show HTML pages inline in threads by @t3dotgg in #15968
- chore(relay): match Alchemy to the PS-80 Postgres cluster by @juliusmarminge in #16228
- feat: agents ask the user for a secret through a private card by @juliusmarminge in #15907
- feat(web): see and stop pull request watches in the thread details card by @t3dotgg in #16235
- fix(server): ACP mode states with null descriptions are no longer dropped by @juliusmarminge in #16218
- fix(server): finished outbox rows and old PR cache files are pruned by @juliusmarminge in #16247
- fix(relay): releasing a tunnel that still has a connector no longer 500s by @juliusmarminge in #16250
- refactor(server,relay): webhook capabilities live in services, not handlers by @juliusmarminge in #16232
- fix(server): a T3 Connect preferences save finishes even if the client disconnects by @juliusmarminge in #16266
- refactor(server): import service modules as namespaces, not aliased layers by @juliusmarminge in #16267
- feat(server): log how long PR watches stay quiet before they end by @t3dotgg in #16262
- feat(server,web): choose where new worktrees are created by @juliusmarminge in #16231
- perf(server): idle status polls and PR sweeps start fewer git processes by @t3dotgg in #16272
- perf(server): PR watches spend ~90% fewer GitHub points by checking a 1-point fingerprint first by @t3dotgg in #16270
- fix(pull-requests): PR detail reads no longer drain the GitHub quota by @t3dotgg in #16280
- refactor: layer variables are named layer or layerXyz by @juliusmarminge in #16282
- refactor(server): T3 Connect link capabilities live in a CloudLink service by @juliusmarminge in #16265
- fix(web): sidebar drag and drop no longer snaps back by @t3dotgg in #16291
- fix(web): inline HTML renders no longer trap the thread's scroll by @t3dotgg in #16283
- refactor(server): one module per service instead of Services/ and Layers/ folders by @juliusmarminge in #16295
- chore(review): configure CodeRabbit in TypeScript by @esthor in #16281
- docs: put the Effect and web UI review rules in the docs by @esthor in #16286
- chore(lint): require a reason on every lint and type-checker suppression by @esthor in #16294
- refactor(relay): import HookInboxObject once, as a namespace by @juliusmarminge in #16307
- fix(web): a rejected desktop-local credential is not retried every poll by @juliusmarminge in #16273
- feat(desktop): the renderer's bootstrap token rotates every 12 hours by @juliusmarminge in #16275
- fix(web): recover from a closed IndexedDB connection by @juliusmarminge in #16311
- fix(relay): stop forcing manual relay deploys by default by @juliusmarminge in #13563
- feat(relay): measure the managed tunnel backlog by @juliusmarminge in #13564
- feat(relay): clean up tunnels of hosts that never registered recovery by @juliusmarminge in #13565
- perf(relay): delete expired tunnels four at a time within a time budget by @juliusmarminge in #13566
- feat(connect): tell users when an idle tunnel was removed by @juliusmarminge in #13567
- docs(relay): add the legacy tunnel cleanup rollout runbook by @juliusmarminge in #13568
- chore(review): point CodeRabbit at the web UI conventions by @esthor in #16324
- chore(review): turn off CodeRabbit's docstring coverage check by @esthor in #16328
- refactor(server): CloudLink keeps only the link lifecycle; pure checks live beside it by @juliusmarminge in #16340
- refactor(server): CloudLink fails with its own errors; the connect routes map them to HTTP by @juliusmarminge in #16341
- refactor(server): replay guards stay in CloudLink by @juliusmarminge in #16349
- fix(server): forks no longer merge into their upstream repo's project group by @t3dotgg in #16353
- fix(server): stop the startup project sync from delaying the app window by @Mnigos in #14912
- fix(web): avoid blocking image preparation conversions by @Bil0000 in #13342
- fix(server): return partial workspace index on timeout by @Michel-Liao in #11500
- fix(server): probe project favicon candidates concurrently by @ishaanko in #12543
- fix(observability): a failing trace disk no longer stalls the server by @t3dotgg in #13758
- fix(server): status polling no longer locks the git index by @ahalekelly in #14718
- perf(shared): scan PATH once per command before spawning, not on every spawn by @SkiTee3000 in #12600
- fix(server): main's startup auto-pull test compiles again by @t3dotgg in #16357
- fix(server): project favicons stop being rescanned every minute by @t3dotgg in #16206
- fix(server): Claude limits load again for users with large transcript histories by @t3dotgg in #16358
- fix(server): caches and ids are written atomically by @juliusmarminge in #16242
- fix(server): one-shot initializers no longer race by @juliusmarminge in #16260
- fix(server): the PR cache sweep only removes real entry files by @juliusmarminge in #16285
- chore: keep one copy each of undici 8 and ws 8 by @juliusmarminge in #16211
- fix(shared): DrainableWorker keeps running after a failed item by @juliusmarminge in #16223
- fix(server): metrics count interrupted work on the monotonic clock by @juliusmarminge in #16207
- refactor(web): import connection storage as a namespace in its test by @juliusmarminge in #16315
- fix(contracts): trimmed IDs round-trip by @juliusmarminge in #16300
- fix(server): main's settings, keybindings and session tests compile again by @juliusmarminge in #16363
- chore(lint): catch known tags with Effect.catchTags by @esthor in #16361
- fix(observability): T3 Connect tracing stops at the relay boundary by @juliusmarminge in #16314
- fix(relay): error and deadline responses carry CORS headers by @juliusmarminge in #16253
- fix(web): bring back the live shimmer on work log rows by @juliusmarminge in #16372
- refactor: Effect code gets UUIDs and SHA-256 from Effect's Crypto by @esthor in #16377
- fix(relay): export traces through one tracer, one request span each by @juliusmarminge in #16382
- fix(server): Pi thread titles use linked PR context by @juliusmarminge in #16210
- fix(desktop): retry transient bearer bootstrap and degrade on session fetch failure by @jamesvillarrubia in #12919
- fix(server): avoid scanning completed history for pending secrets by @Yash-Singh1 in #16409
- fix(orchestration-v2): let Stop recover stalled runs by @Yash-Singh1 in #15442
- fix(release): resolve version-qualified catalog overrides by @Yash-Singh1 in #16411
- fix(web): type in front of bold that starts a composer line by @saphid in #13217
- fix(desktop): prevent browser screenshot filename collisions by @saphid in #14784
- fix(server): end clone options before the repository URL by @saphid in #14781
- fix(web): queued messages no longer split the composer notice stack by @tristanmanchester in #16400
- fix(server): reject invalid explicit Bitbucket repositories by @aravhawk in #15876
- fix: restore desktop and server typechecks on main by @Yash-Singh1 in #16415
- fix(shared): find versioned JetBrains macOS app bundles by @Sypher760-gif in #16246
- fix(server): OpenCode 2 threads get T3 Code's MCP tools by @nkoynov in #16142
- feat(preview): run the browser on the environment server by @maria-rcks in #15328
- fix: restore service references breaking ci by @maria-rcks in #16495
- fix(mcp): mark declared tool failures as errors by @maria-rcks in #15617
- fix(release): unblock nightly browser tests and cli builds by @maria-rcks in #16515
- fix(mcp): preserve thread command rejection reasons by @maria-rcks in #15627
- chore(deps): upgrade @effect/tsgo to 0.46.1 by @esthor in #16360
- fix(orchestration-v2): show reported subagent models by @Bil0000 in #14108
- fix(web): Apple logo no longer dips below the device host label by @jakeleventhal in #14825
- fix(web): show subagent effort and speed in hover cards by @Bil0000 in #13056
- feat(web): reopen closed tabs across the app by @Bil0000 in #15207
- fix(web): stop wide ordered list markers from clipping by @UtkarshUsername in #16523
- fix(desktop): build AppImage with the static runtime toolset (fixes libfuse2 launch failure) by @Bombatomica64 in #7765
- fix(mobile): keep usage-limit notice opaque by @bjrump in #15602
- feat(server): GitHub API transport that uses gh only for the token by @juliusmarminge in #16319
- feat(server): pull requests talk to GitHub's API instead of the gh CLI by @juliusmarminge in #16320
- feat(server): source control, media and discovery use GitHub's API instead of gh by @juliusmarminge in #16321
- feat: choose the GitHub account per host, save a GitHub token, and fewer reads per PR action by @juliusmarminge in #16322
- fix(server): Rebase stack moves each layer onto the rebased layer below it by @juliusmarminge in #16551
- fix(web): diff panel keeps the chosen scope while a turn runs by @juliusmarminge in #16571
- fix(desktop): honor the telemetry opt-out from the shell profile by @juliusmarminge in #16563
- docs(marketing): disclose product usage data in the privacy policy by @juliusmarminge in #16562
- feat(web): note anonymous usage data in onboarding and link the privacy policy by @juliusmarminge in #16564
- perf(web): diff panel no longer re-renders every file header each time a patch arrives by @stevan-borus in #16033
- feat(server): every T3 MCP tool declares who may call it by @juliusmarminge in #16335
- feat(server): outside agents sign in to the T3 MCP server with OAuth by @juliusmarminge in #16336
- feat(web): copy an environment's MCP URL for outside agents by @juliusmarminge in #16337
- chore(tsconfig): turn off the Schema-over-JSON diagnostic in test files by @esthor in #16375
- chore(review): CodeRabbit gates outside contributors' pull requests by @esthor in #16332
- fix(desktop): include Linux package license and app metadata by @juliusmarminge in #16597
- fix(server): one failing RPC handler no longer ends the client's other requests by @juliusmarminge in #15515
- fix(contracts): a context record that cannot be encoded no longer fails the send by @juliusmarminge in #16398
- fix(web): open pull request row actions on right-click by @jakeleventhal in #16612
- fix(web): show attempted paths in file preview errors by @maria-rcks in #15628
- fix(vcs): passive sidebar rows stop retaining remote pollers by @maria-rcks in #15666
- feat(web): group keybindings settings by area with a page toolbar by @maria-rcks in #12822
- feat(web): stop T3-owned subagents from Lineage by @Bil0000 in #15211
- feat(web): add fast actions to linked pull requests by @maria-rcks in #16627
- feat(web): open right panel tab menu with Mod+T by @Bil0000 in #15686
- fix(server): provider sessions clean up when their start is interrupted by @juliusmarminge in #15571
- fix(web): show "No project" near the top of the new thread picker by @juliusmarminge in #16628
- refactor(server): instrument WS RPCs in group middleware by @juliusmarminge in #15548
- chore(deps): upgrade @pierre/diffs to 1.5.2 and @pierre/trees to beta.6 by @juliusmarminge in #16644
- fix(relay): a host restarting onto a deleted tunnel gets a new one by @juliusmarminge in #16649
- fix(server): recover a deleted tunnel when Cloudflare says "Tunnel not found" by @juliusmarminge in #16648
- fix(web): iPhone Duo fold controls follow the phone's orientation by @gabrielelpidio in #16630
- fix(web): keep workspace options when expanding lineage by @maria-rcks in #16635
- fix(web): preserve bare anchor placeholders in markdown by @maria-rcks in #16637
- fix(pi): preserve provider identity in discovered models by @maria-rcks in #16661
- fix(auth): preserve explicitly granted pairing scopes by @juliusmarminge in #9785
- feat(auth): separate environment administration permissions by @juliusmarminge in #9786
- feat(auth): separate source control write permissions by @juliusmarminge in #9787
- feat(auth): separate filesystem read and write permissions by @juliusmarminge in #9788
- feat(auth): separate browser preview control permissions by @juliusmarminge in #9789
- feat(auth): separate diagnostics and usage permissions by @juliusmarminge in #9790
- feat(auth): allow passive terminal observation by @juliusmarminge in #9791
- fix(auth): keep old clients connected across scope changes by @juliusmarminge in #10298
- feat(server): hosted agents like ChatGPT can sign in to the T3 MCP server by @juliusmarminge in #16718
- docs: connect Claude Code, Codex, ChatGPT and bots over MCP by @juliusmarminge in #16741
- fix(web): thread details card gives titles room to read by @t3dotgg in #16746
- fix(mcp): agent HTML pages stop painting slab backgrounds by @t3dotgg in #16752
- fix: composer picks up new project skills without a server restart by @juliusmarminge in #16750
- feat(server): run a project action when a worktree thread settles by @t3dotgg in #16290
- feat(web): old Claude threads compact on send instead of stacking notices by @t3dotgg in #16631
- fix(server): settled threads stop polling their pull requests by @t3dotgg in #16762
- fix(server): stop storing tool image bytes no client reads by @derektrimm in #16652
- fix(server): status refresh no longer pegs CPU in repos with thousands of untracked files by @t3dotgg in #16771
- perf(server): background branch lookups share one GitHub query per sweep by @t3dotgg in #16760
- fix(server): threads settle as soon as a client sees their PR merge by @t3dotgg in #16761
- feat(server,web,mobile): agents see snooze state and link to threads by @t3dotgg in #16782
- fix(web): replace Lineage timers with Stop on hover by @Bil0000 in #16791
- fix(clients): running subagent cards stay visible after their parent turn settles by @juliusmarminge in #16878
- feat: MCP apps render and run inline in threads by @juliusmarminge in #16236
- fix(server): a background Claude subagent's work shows while its parent is idle by @Vantrongs in #16486
- fix(mobile): hide threads from switched-off environments by @entity in #16886
- fix(server): a refused Claude turn no longer throws away its session by @SunkenInTime in #16287
- fix(web): onboarding Continue no longer locks on computers that won't connect by @juliusmarminge in #16887
- fix(server): worktree cleanup no longer deletes files hidden by showUntrackedFiles=no by @SunkenInTime in #15834
- fix(server): merged-worktree cleanup removes worktrees after squash merges by @tris203 in #14847
- fix(server): free worktrees for terminal thread statuses by @ANSHSINGH050404 in #15150
- fix(server): Windows worktrees with long paths no longer fail or strand by @That1Drifter in #14917
- fix(server): main typechecks again after a test used renamed helpers by @juliusmarminge in #16895
- fix(server): Claude prompts no longer hang on a uuid the session already holds by @juliusmarminge in #16897
- feat(models): add Claude Haiku 5.5 and retire Sonnet 5 and Opus 5 to legacy by @juliusmarminge in #16903
- fix(web): iPhone Duo folds animate, center on the hinge, and keep the phone's orientation by @gabrielelpidio in #16885
- fix(server): Claude 5-series models always run 1M context by @juliusmarminge in #16908
- fix(desktop): setup prompts name a t3 that runs on desktop installs by @juliusmarminge in #16676
- feat(desktop): install the t3 command from Settings by @juliusmarminge in #16683
- fix(web): show live names in thread-read activity by @Bil0000 in #13140
- feat(mobile): adopt v5 navigation and native iPad columns by @juliusmarminge in #16733
- fix(mobile): Android composer picker scrolls past the first four rows by @shivamhwp in #15856
- fix(desktop): sign-in and captchas work again in desktop browser tabs by @juliusmarminge in #16939
- fix(server): missing project folders no longer log favicon warnings by @yordis in #16757
- fix(server): unload Codex threads left idle on the shared app-server by @RhysSullivan in #16917
- fix(web): fast typing no longer scrambles text when type-to-focus kicks in by @otavio in #14595
- fix(web): simplify workspace card rows by @Bil0000 in #16823
- fix(web): Copy MCP URL shows up for environments reached over plain http by @SunkenInTime in #16909
- fix(web): C#, Java, PHP and 11 other languages get file icons by @juliusmarminge in #16974
- feat(clients): live row shows the agent's latest thought by @t3dotgg in #16284
- feat(web): block-level Markdown in the rich text composer by @chrisdeeming in #14677
- fix(web): center project monograms in settled rows by @Aforno in #16841
- fix(web): cancelling a new citation no longer leaves a stray space by @Aforno in #16828
- fix(settings): provider updates show live progress instead of a bare spinner by @shivamhwp in #16958
- feat(web): find in diffs with Cmd+F by @juliusmarminge in #14623
- refactor(server): GitHub services are named for the API they call, not gh by @juliusmarminge in #16967
- refactor(server): GitHub GraphQL batches use variables and share one pager by @juliusmarminge in #16960
- refactor(server): GitHub source control reads GitHubApi directly by @juliusmarminge in #16982
- refactor(server): GitHub rate limits read the response headers by @juliusmarminge in #16986
- chore(review): remove the custom Approvability check by @esthor in #17018
- perf(mobile): show the cached thread list sooner and stop the freeze after it by @juliusmarminge in #16713
- fix(server): replaying a command no longer freezes the server by @SunkenInTime in #17041
- fix(server): opening a long thread no longer blocks the server for a second by @SunkenInTime in #17029
- fix(server,web,mobile): thread links reference the thread id, not a baked title by @juliusmarminge in #17017
- fix(web): messages with quotes or links no longer collapse when short by @flamboh in #16624
- refactor(web): PR loading skeleton shares the detail panel's layout by @flamboh in #15583
- fix(web): PR file headers keep the file name in narrow panels by @flamboh in #15562
- fix(web): PR timeline no longer shifts when its scrollbar appears by @flamboh in #15588
- fix(server): held queued wakes no longer keep delegated tasks running by @juliusmarminge in #17028
- fix(server): a message sent during a rollback no longer undoes it by @t3dotgg in #17079
- fix(web): PR file stats ignore the hide-whitespace toggle by @flamboh in #16162
- perf(mobile): omit duplicated turn items from bounded thread snapshots by @juliusmarminge in #15385
- perf(mobile): pause elapsed-time timers on hidden thread screens by @juliusmarminge in #15397
- fix(mobile): pause hidden home thread list updates by @juliusmarminge in #15705
- fix(mobile): restore file viewer insets and glass header by @juliusmarminge in #17073
- fix(web): PR code toolbar no longer overlaps in narrow panels by @flamboh in #15561
- fix(web): PR commit menu no longer stretches across the window by @flamboh in #15560
- fix(web): command palette scrollbar no longer clipped at the top by @flamboh in #17035
- fix(web): Usage breadcrumb stays centered on small viewports by @flamboh in #15552
- fix(mobile): stop refreshing Git status on streamed thread updates by @juliusmarminge in #15893
- fix(mobile): skip move indexes for empty and single-thread sections by @juliusmarminge in #16115
- perf(mobile): reuse encoded rows in shell cache saves by @juliusmarminge in #16129
- perf(mobile): skip showcase subscriptions in normal builds by @juliusmarminge in #16131
- perf(mobile): remove unused Home project sorting by @juliusmarminge in #16177
- perf(mobile): reduce move-menu index allocations by @juliusmarminge in #16256
- perf(mobile): skip impossible thread-key lookups by @juliusmarminge in #16263
- fix(mobile): collect UI runtime garbage on iOS memory warnings by @juliusmarminge in #16296
- fix(mobile): stop Git sheet refresh loop by @juliusmarminge in #16305
- fix(mobile): refresh Git status after reconnect by @juliusmarminge in #16329
- fix(mobile): update the iOS Git header menu when status changes by @juliusmarminge in #16330
- perf(mobile): reuse the settled sort when settled rows are unchanged by @juliusmarminge in #16369
- perf(mobile): highlight source files in small batches that keep grammar state by @juliusmarminge in #16729
- feat(web): quote chips show what you said about the quote by @flamboh in #15703
- feat(web): projectless threads show their machine in the sidebar by @flamboh in #17022
- fix(lineage): keep agent effort and speed after completion by @Bil0000 in #16925
- fix(mobile): align diff scrolling with glass headers by @juliusmarminge in #17085
- fix(web): workspace page headers can no longer grow past the top-bar height by @maria-rcks in #17086
- feat(mobile): redesign the Add environment sheet by @juliusmarminge in #17092
- feat(providers): run Muse Code as a native provider by @t3dotgg in #17082
- feat(web): compact-before-send is a chip that shows the token count by @t3dotgg in #17127
- fix(clients): copy button is back in its old spot, before fork by @t3dotgg in #17137
- fix(usage): repeat usage scans no longer decode unchanged Antigravity databases by @t3dotgg in #17139
- fix(server): shell snapshots no longer block other database reads while decoding by @t3dotgg in #17141
- perf(server): ACP tool updates no longer persist a snapshot per streamed chunk by @darjss in #16682
- feat(web): filter the Usage page to just the providers you want by @t3dotgg in #16970
- fix(usage): Cursor account history loads about 4x faster by @t3dotgg in #17140
- fix(server): threads settle as soon as branch status sees their PR merge by @t3dotgg in #17148
- perf(usage): the Usage page shows numbers in under a second and dims only what is still loading by @t3dotgg in #17147
- fix(server): an agent can settle its own thread when its turn ends by @t3dotgg in #17145
- feat(web): Add provider button sits with the provider list by @t3dotgg in #17152
- fix(web): link pull requests to threads in folders that aren't Git repos by @shivamhwp in #15946
- feat(web): find messages and plans in the current thread by @Noojuno in #10439
- feat(web): improve terminal scrollback navigation and snapshots by @StiensWout in #17091
- docs(internals): add a checklist for adding a provider by @juliusmarminge in #17229
- fix(mobile): keep native screens ordered during stack pops by @juliusmarminge in #17231
- fix(server): pairing tokens work on Node versions that cannot bind booleans by @chisewaguri in #16730
- fix(mobile): HTML pages in a thread no longer trap scrolling on Android by @SunkenInTime in #17211
- fix(web): centered scrollers no longer shift when the scrollbar appears by @maria-rcks in #17077
- fix(web): distinguish thread search matches from code tints by @Yash-Singh1 in #17263
- fix(server): Pi extension wakes get an owned continuation turn by @StiensWout in #17214
- fix(server): Pi discovers optional T3 tools on demand by @StiensWout in #17220
- fix(web): stack merge dialog closes as soon as you confirm by @flamboh in #17116
- fix(server): Pi editor dialogs prefill the answer composer by @StiensWout in #17206
- fix(desktop): generate valid User-Agent that follows RFC 9110 guidelines by @jztmanyl in #17264
- fix(server): Pi discovers workspace skills and commands by @StiensWout in #17190
- fix(mobile): preserve navigation after native swipe back by @juliusmarminge in #17268
- fix(server): keep newly discovered models out of legacy groups by @Bil0000 in #14314
- feat(editors): open remote projects in JetBrains IDEs over SSH by @juliusmarminge in #17271
- test(desktop): expect JetBrains IDEs among remote editors by @juliusmarminge in #17291
- fix(server): recognize authenticated GitHub Enterprise hosts by @alimek in #11059
- fix(connect): relay client updates itself and skips incompatible cloudflared by @juliusmarminge in #17275
- fix(shared): relay client install waits out a brief Windows file lock by @ScottN-PV in #16998
- fix(shared): release relay install locks on cancellation by @yashranaway in #10585
- chore(shared): bump managed cloudflared to 2026.10.0 by @bompus in #11184
- fix(shared): bound cloudflared download with 10-minute timeout by @kvnloo in #14139
- refactor(provider-core): add provider-core and provider-testing packages by @juliusmarminge in #17299
- refactor(settings): drop the legacy per-driver providers map by @juliusmarminge in #17300
- refactor(provider-pi): move Pi into its own provider package by @juliusmarminge in #17302
- feat(models): tell users when a CLI update unlocks a new model by @juliusmarminge in #17307
- fix(web): collapsed composer reserves room for wide send actions by @maria-rcks in #17016
- fix(muse): workflow subagents no longer stall on hidden approvals by @t3dotgg in #17329
- refactor(provider-core): share attachment prompts, notifications, and event loggers by @juliusmarminge in #17330
- fix(web): file previews handle downloads, in-page links, and repo paths, and favicons stop leaking internal hosts by @juliusmarminge in #16950
- fix(server): environment-hosted browser tabs behave like a normal browser by @juliusmarminge in #16963
- fix(desktop): browser tab fixes for fullscreen, shortcuts, links, reload and hidden tabs by @juliusmarminge in #16961
- fix(web): desktop opens remote environments' browser tabs locally by @juliusmarminge in #17316
- fix(desktop): the t3 command warns instead of installing behind another t3 by @juliusmarminge in #17351
- fix(web): images, video, HTML and PDF preview in a thread before its first message by @juliusmarminge in #17352
- refactor(provider-muse): move Muse Code into its own provider package by @juliusmarminge in #17331
- fix(web): semantic branch naming hint lines up with its setting by @limineol in #16972
- fix(mobile): restore chat image previews in the v5 stack by @juliusmarminge in #17361
- feat(mobile): fade working threads and match web's status labels by @juliusmarminge in #17368
- fix(server): agent browser tools stop bloating history, fall back sensibly, and respect ownership by @juliusmarminge in #16956
- fix(web): add room for thread timeline markers by @Yash-Singh1 in #17372
- fix(web): drop sidebar context before cancelling pointer drag by @Yash-Singh1 in #17373
- refactor(providers): namespace-import service modules in core, Muse, Pi, and testing by @juliusmarminge in #17375
- fix(auth): show connection permissions and enforce session lifetime by @juliusmarminge in #17370
- refactor(provider-opencode): move OpenCode into its own provider package by @juliusmarminge in #17345
- refactor(provider-cursor): move Cursor into its own provider package by @juliusmarminge in #17349
- refactor(provider-acp): move the shared ACP adapter into its own package by @juliusmarminge in #17354
- refactor(provider-grok): move Grok into its own provider package by @juliusmarminge in #17357
- fix(server): speed up long thread message sync by @Yash-Singh1 in #17387
- fix(desktop): cancel backend pipe reads to avoid slow shutdown by @Yash-Singh1 in #17386
- refactor(providers): adapter factories yield their services by @juliusmarminge in #17381
- fix(web): show a row spinner instead of a banner when expanding a folder by @juliusmarminge in #17378
- fix(server): a timed-out browser drag no longer exits the server by @ScottN-PV in #17360
- fix(server): a logged-out Claude CLI no longer reports as authenticated by @yordis in #15459
- fix(server): Pi loads every selected skill without losing prompt text by @StiensWout in https://github.com/pingdotgg/t3code/pull/17194
- fix(server): keep the Claude MCP token out of process arguments by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17408
- fix(server): reconcile Pi native session rewinds by @StiensWout in https://github.com/pingdotgg/t3code/pull/13839
- test(provider-pi): cover continuation offers through the driver by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17407
- refactor(provider-acp-registry): move the ACP Registry into its own package by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17405
- fix(server): relay client updates no longer drop the host off T3 Connect by @t3dotgg in https://github.com/pingdotgg/t3code/pull/17366
- fix(connect): Cloudflare and other VPN addresses no longer show as Tailscale by @shivamhwp in https://github.com/pingdotgg/t3code/pull/17158
- fix(web): Local environment switch stays reachable after turning it off by @ScottN-PV in https://github.com/pingdotgg/t3code/pull/17359
- fix(web): keep chat banners inside the lane beside the docked details card by @macodev00 in https://github.com/pingdotgg/t3code/pull/17094
- fix(web): settled and snoozed lines line up with the messages above them by @RakshithBhat03 in https://github.com/pingdotgg/t3code/pull/17191
- fix(web): distinguish project filter from new project by @voltcrash in https://github.com/pingdotgg/t3code/pull/12113
- feat(web): assign a thread details panel shortcut by @maria-rcks in https://github.com/pingdotgg/t3code/pull/16694
- fix(web): chat content keeps pace with sidebar resizing by @flamboh in https://github.com/pingdotgg/t3code/pull/17383
- refactor(provider-core): expose model metadata through a ModelCatalog port by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17417
- refactor(provider-core): follow the Effect service conventions throughout by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17427
- refactor(provider-core): latest-version lookups go through a ProviderLatestVersions service by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17434
- refactor(provider-core): MCP provider sessions live in a McpProviderSessions service by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17446
- refactor(provider): bring opencode, muse, pi, core and testing in line with Effect conventions by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17542
- refactor(provider-acp): ACP, ACP Registry and Grok follow the Effect service conventions by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17544
- refactor(provider-cursor): follow the Effect service conventions by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17545
- fix(marketing): use app wordmark in header by @voltcrash in https://github.com/pingdotgg/t3code/pull/13240
- fix(web): pr merge actions stay visible while the stack refreshes by @maria-rcks in https://github.com/pingdotgg/t3code/pull/17559
- chore(deps): upgrade Effect to 4.0.2 by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17571
- fix(devices): recover stalled video without losing simulator input by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17566
- fix(web): keep checkout stable while pr actions load by @maria-rcks in https://github.com/pingdotgg/t3code/pull/16625
- fix(mobile): show waiting thread status by @maria-rcks in https://github.com/pingdotgg/t3code/pull/16693
- feat(web): add parent thread breadcrumb navigation by @maria-rcks in https://github.com/pingdotgg/t3code/pull/16666
- fix(server): restart inactivity after snoozed threads wake by @maria-rcks in https://github.com/pingdotgg/t3code/pull/16674
- feat(desktop): passkeys in the in-app browser on macOS by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/16952
- fix(client): load earlier turns works for MCP threads over T3 Connect by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17599
- refactor(client): sign relay request URLs built from the HttpApi contract by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17602
- refactor(source-control): add @t3tools/source-control-core by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17573
- refactor(source-control): Forgejo lives in @t3tools/source-control-forgejo by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17581
- refactor(source-control): Azure DevOps lives in @t3tools/source-control-azure-devops by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17592
- refactor(source-control): GitLab lives in @t3tools/source-control-gitlab by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17594
- refactor(source-control): Bitbucket lives in @t3tools/source-control-bitbucket by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17597
- refactor(source-control): GitHub lives in @t3tools/source-control-github by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17607
- refactor(usage): transcript readers come from their drivers by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17576
- refactor(usage): OpenCode usage comes from provider-opencode by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17577
- refactor(usage): Cursor account usage comes from provider-cursor by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17578
- refactor(usage): Antigravity usage is a reader on its driver by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17579
- refactor(usage): usage readers use Effect FileSystem and SqlClient by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17615
- fix(web): composer context strip pads both edges evenly by @limineol in https://github.com/pingdotgg/t3code/pull/17562
- test(usage): v4 cache upgrade test waits for the migrated cache write by @Mnigos in https://github.com/pingdotgg/t3code/pull/17553
- feat(mobile): support Duo in the shared iOS app by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/12648
- refactor(source-control): GitManager reads provider resolvers, not host kinds by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17617
- refactor(source-control): PullRequestService reads GitHub resolvers, not its kind by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17619
- refactor(source-control): Forgejo identity and Azure DevOps addressing move into their packages by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17624
- refactor: home directory comes from a HostProcessHomeDirectory reference by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17628
- refactor(shared): host process references live in a HostProcess module by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17641
- feat(web): filter PR comments by bots and resolved threads by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17645
- fix(clients): remove redundant prefix from PR watch status by @extoci in https://github.com/pingdotgg/t3code/pull/17635
- fix(web): pending requests wait until you stop typing by @maria-rcks in https://github.com/pingdotgg/t3code/pull/17637
- fix(models): remove new badges from Claude Opus and Sonnet 5.5 by @extoci in https://github.com/pingdotgg/t3code/pull/17646
- fix(ui): keep focus and selection borders visible across the app by @maria-rcks in https://github.com/pingdotgg/t3code/pull/16675
- fix(mobile): prevent row presses during native back swipes by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17648
- fix(server): Codex shadow homes replace stray sqlite maintenance locks by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17663
- feat(desktop): T3 Code can be your default web browser on macOS by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17587
- test(server): the ACP process-tree test no longer collides with the runner's own pid by @yordis in https://github.com/pingdotgg/t3code/pull/17647
- fix(web): keep branch restore action inline in narrow composers by @Saikrishna1876 in https://github.com/pingdotgg/t3code/pull/14811
- fix(web): composer banner actions stay inline whenever they fit by @maria-rcks in https://github.com/pingdotgg/t3code/pull/17640
- feat(web): draft screen project picker is searchable by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17664
- fix(server): report incomplete transcript usage scans by @maria-rcks in https://github.com/pingdotgg/t3code/pull/15661
- fix(web): every resize-driven layout commits in the same frame by @maria-rcks in https://github.com/pingdotgg/t3code/pull/17656
- fix(web): right panel and terminal drawer follow the pointer while dragging by @maria-rcks in https://github.com/pingdotgg/t3code/pull/17657
- fix(web): terminal drawer keeps its height after the window shrinks by @maria-rcks in https://github.com/pingdotgg/t3code/pull/17658
- perf(web): sidebar drags restyle only the sidebar by @maria-rcks in https://github.com/pingdotgg/t3code/pull/17659
- fix(web): server browser page resizes while the panel is dragged by @maria-rcks in https://github.com/pingdotgg/t3code/pull/17660
- fix(storage): make worktree cleanup work and show why it skipped by @maria-rcks in https://github.com/pingdotgg/t3code/pull/17563
- test(usage): usage service tests keep their state directory until cache writes land by @tris203 in https://github.com/pingdotgg/t3code/pull/17636
- fix(checkpoint): pulls and rebases no longer flood a turn's changed files by @t3dotgg in https://github.com/pingdotgg/t3code/pull/17161
- fix(web): place notification icons after titles by @voltcrash in https://github.com/pingdotgg/t3code/pull/12209
- fix(web): attachments on an open question are visible again by @tiliakoos in https://github.com/pingdotgg/t3code/pull/15537
- fix(web): scale Files tree with interface font size by @Umais-Adeed in https://github.com/pingdotgg/t3code/pull/8011
- fix(server): probe only owned preview listeners by @maria-rcks in https://github.com/pingdotgg/t3code/pull/16687
- fix(chat): surface pending subagent questions on parents by @maria-rcks in https://github.com/pingdotgg/t3code/pull/16634
- fix(web): section header chevrons point up when collapsed by @ZenderGoD in https://github.com/pingdotgg/t3code/pull/14273
- fix(web): timeline divider pill shows a pointer, visible hover and focus ring by @jonesfionn101-dotcom in https://github.com/pingdotgg/t3code/pull/15188
- fix(git): allow creating prs from dirty worktrees by @maria-rcks in https://github.com/pingdotgg/t3code/pull/15625
- docs(install): polish binary install destination phrasing by @ege-arhan in https://github.com/pingdotgg/t3code/pull/15732
- perf(server): keep passive terminal output flowing by @StiensWout in https://github.com/pingdotgg/t3code/pull/17178
- fix(web): stop button icon no longer shifts on hover by @NK-Works in https://github.com/pingdotgg/t3code/pull/16012
- fix(web): add bottom padding to expanded tool panels by @12ya in https://github.com/pingdotgg/t3code/pull/16525
- fix(web): keep incremental highlighter return type portable by @luke2x in https://github.com/pingdotgg/t3code/pull/17259
- fix(web): sidebar "Code" label no longer clips its letter tops by @akbarakma in https://github.com/pingdotgg/t3code/pull/16134
- fix(tests): use POSIX paths for the simulated macOS device host by @Quicksaver in https://github.com/pingdotgg/t3code/pull/17241
- fix(mobile): Android composer keeps the caret in view on AOSP-based keyboards by @bitmvk in https://github.com/pingdotgg/t3code/pull/17492
- test(web): allow cold timeline imports on CI by @lastobelus in https://github.com/pingdotgg/t3code/pull/16608
- fix(mobile): pinch zooms chat images on Android by @AKolenda in https://github.com/pingdotgg/t3code/pull/15047
- fix(web): selected provider ring no longer clipped during panel resize by @jfortez in https://github.com/pingdotgg/t3code/pull/17534
- docs(usage): OpenCode Go limits need a Go API key by @nexxeln in https://github.com/pingdotgg/t3code/pull/15664
- fix(web): improve usage scanning indicator alignment by @AksharP5 in https://github.com/pingdotgg/t3code/pull/15498
- fix(server): print pairing credential expiry as ISO timestamp by @kvnloo in https://github.com/pingdotgg/t3code/pull/14128
- chore(ci): use GPT 6.1 Sol Max for check agents by @ishaanko in https://github.com/pingdotgg/t3code/pull/14312
- fix(mobile): honor requested terminal native architectures by @bompus in https://github.com/pingdotgg/t3code/pull/10709
- fix(server): keep preview browser connected after operation timeouts by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17693
- fix(web): timeline divider focus ring stays inside the pill by @t3dotgg in https://github.com/pingdotgg/t3code/pull/17702
- perf(desktop): reuse the prepared shell environment in the local backend by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/17384
- fix(web): align settings page widths by @diegoarff in https://github.com/pingdotgg/t3code/pull/12158
- test(server): resolve the temp dir before matching the symlinked entrypoint by @ylcn91 in https://github.com/pingdotgg/t3code/pull/9400
- fix(web): keep inline code pills intact when they wrap by @satyalyadav in https://github.com/pingdotgg/t3code/pull/12038
- Revert "chore(ci): use GPT 6.1 Sol Max for check agents" by @maria-rcks in https://github.com/pingdotgg/t3code/pull/17698
- fix(web): show the correct new thread shortcut in command palette by @vaishnavsm in https://github.com/pingdotgg/t3code/pull/8513
- fix(desktop): declare macOS local network usage by @jsilets in https://github.com/pingdotgg/t3code/pull/11922
- docs: add Scoop as Windows installation method by @Mostafa-Ben-Git in https://github.com/pingdotgg/t3code/pull/10509
- fix(server): agents run in their own systemd scopes so an OOM kill spares the server by @t3dotgg in https://github.com/pingdotgg/t3code/pull/17662
- fix(web): welcome wizard says where imported projects come from by @UzEE in https://github.com/pingdotgg/t3code/pull/14584
- fix(web): cite works on responses that end before a tool call by @maria-rcks in https://github.com/pingdotgg/t3code/pull/17713
- fix(desktop): sign Windows native addons by @Lumbreras2306 in https://github.com/pingdotgg/t3code/pull/8206
- fix(server): track resumed subagent follow-ups as separate tasks by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/17696
- fix(web): nested corners follow their container's radius by @maria-rcks in https://github.com/pingdotgg/t3code/pull/17695
- feat(web): pr panel actions confirm in place by @maria-rcks in https://github.com/pingdotgg/t3code/pull/17710
- feat(web): reorder right panel tabs by dragging by @eimexdev in https://github.com/pingdotgg/t3code/pull/17730
- fix(azure-devops): list pull requests with token sign-in and check out into worktrees by @maria-rcks in https://github.com/pingdotgg/t3code/pull/17725
- fix(usage): keep one email in two workspaces as two accounts by @maria-rcks in https://github.com/pingdotgg/t3code/pull/17711
- feat(pull-requests): hosts can report edit and resolve permissions per item by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17667
- perf(server): run Git for Windows' real git.exe, not its launcher by @SunkenInTime in https://github.com/pingdotgg/t3code/pull/17707
- fix(clients): restart continuations show as a T3 Code notice, not another agent's message by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17723
- fix(mobile): browser picture in picture opens from the header button by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17731
- feat(source-control): GitCafe lives in @t3tools/source-control-gitcafe by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17681
- fix(web): add provider wizard no longer shifts sideways while it grows by @flamboh in https://github.com/pingdotgg/t3code/pull/17292
- fix(web): PR search keeps the caret where you type by @flamboh in https://github.com/pingdotgg/t3code/pull/17675
- fix(server): thread PR badges catch up when another environment reads the PR by @flamboh in https://github.com/pingdotgg/t3code/pull/17729
- fix(server): refuse editor paths with line breaks or quotes when the editor is a Windows command shim by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17749
- fix(web): align compact button touch targets by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/17748
- fix(server): t3_thread_launch refuses a new worktree whose base ref has no commit by @tris203 in https://github.com/pingdotgg/t3code/pull/17791
- fix(web): omit underlines on markdown image links by @Saikrishna1876 in https://github.com/pingdotgg/t3code/pull/17728
- fix(server): restore auto resume for wrapped Claude gateway rate limits by @tzachbon in https://github.com/pingdotgg/t3code/pull/17778
- fix(opencode): name OpenCode 2 sessions after their thread by @nkoynov in https://github.com/pingdotgg/t3code/pull/17414
- fix(web): find update settings from the command palette by @sergical in https://github.com/pingdotgg/t3code/pull/17396
- fix(provider-opencode): tell OpenCode Zen and Go models apart by @mr-karan in https://github.com/pingdotgg/t3code/pull/17424
- fix(server): a pull that fast-forwards no longer fails on large Git output by @ScottN-PV in https://github.com/pingdotgg/t3code/pull/17376
- fix(web): cancel question auto-advance after navigation by @maxwellyoung in https://github.com/pingdotgg/t3code/pull/17364
- fix(server): a bare repository name resolves to the signed-in account again by @ScottN-PV in https://github.com/pingdotgg/t3code/pull/17379
- fix(web): a maximized right panel stays maximized when you return to its thread by @jamesvillarrubia in https://github.com/pingdotgg/t3code/pull/17327
- fix(mobile): allow starting a task with only an image by @Claudesaul in https://github.com/pingdotgg/t3code/pull/17409
- fix(server): PR watch no longer reports passed while a second run of a check is still going by @ScottN-PV in https://github.com/pingdotgg/t3code/pull/17344
- fix(server): say why a thread can't be settled by @DylanTX in https://github.com/pingdotgg/t3code/pull/17258
- fix(server): prevent busy terminals from starving history persistence by @StiensWout in https://github.com/pingdotgg/t3code/pull/17181
- feat(server): use macOS .icns app icons as project icons by @psv2522 in https://github.com/pingdotgg/t3code/pull/17149
- fix(mobile): usage reset icon lines up with its row by @Aforno in https://github.com/pingdotgg/t3code/pull/17175
- fix(web): paths pasted after @ keep their underscores by @derektrimm in https://github.com/pingdotgg/t3code/pull/16619
- fix(server): settle every OpenCode subagent call one report answers by @nkoynov in https://github.com/pingdotgg/t3code/pull/17134
- perf(web): switching project keeps Diagnostics and Providers mounted by @flamboh in https://github.com/pingdotgg/t3code/pull/17122
- perf(web): Open Source Licenses downloads its manifest once per session by @flamboh in https://github.com/pingdotgg/t3code/pull/17119
- fix(server): restore OpenCode adapter test typecheck by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/17810
- fix(server): Claude subagents show the reasoning effort they run at by @RakshithBhat03 in https://github.com/pingdotgg/t3code/pull/17496
- feat(server): stop Claude subagents without stopping their owner by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/17826
- fix(server): stopped native subagents no longer read as Running by @im-kvijay in https://github.com/pingdotgg/t3code/pull/17223
- perf(server): t3_thread_list reads only the listed project's threads by @only21mil in https://github.com/pingdotgg/t3code/pull/17843
- fix(server): show diffs for projects outside the server cwd by @maria-rcks in https://github.com/pingdotgg/t3code/pull/17724
- fix(server): check the specific scope for scripts, preview input, and full-access MCP grants by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17772
- fix(source-control): stop Forgejo status refresh from scanning every pull request by @loispostula in https://github.com/pingdotgg/t3code/pull/12223
- refactor(contracts): source control provider kind is an open branded slug by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17739
- feat(source-control): each host package ships a client definition by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17746
- refactor(client-runtime): add project clone sources come from host definitions by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17756
- refactor(web): host presentation and behavior come from client definitions by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17757
- refactor(source-control): reference parsing and project matching are host resolvers by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17770
- feat(pull-requests): quick actions follow each host's capabilities, not GitHub by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17774
- feat(projects): new projects can be published to any ready host by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17860
- fix(server): send Claude MCP servers over the control channel by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17898
- fix(web): a finished reply replaced by a steer is no longer labeled partial by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17761
- fix(client-runtime): queued runs that start after a steer show up in the thread by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17764
- feat(mobile): choose the microphone order for voice input by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17896
- feat(source-control): host settings live on each host's definition, with a GitCafe token by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17901
- fix(pi): preserve tool images and structured results by @StiensWout in https://github.com/pingdotgg/t3code/pull/17851
- fix(server): Claude 5 task lists reach the tasks drawer by @Mnigos in https://github.com/pingdotgg/t3code/pull/14964
- fix(web): find bar and thread details panel stop covering each other by @MatthewFeroz in https://github.com/pingdotgg/t3code/pull/17858
- fix(web): use server metadata for file chip icons by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/17923
- fix(desktop): copy images from HTML previews by @Bil0000 in https://github.com/pingdotgg/t3code/pull/17555
- docs(pi): update installation and remote login guidance by @StiensWout in https://github.com/pingdotgg/t3code/pull/17836
- fix(pi): preserve native abort outcomes by @StiensWout in https://github.com/pingdotgg/t3code/pull/17853
- fix(pi): keep thinking defaults specific to each model by @StiensWout in https://github.com/pingdotgg/t3code/pull/17835
- fix(pi): preserve shell command exit codes by @StiensWout in https://github.com/pingdotgg/t3code/pull/17834
- fix(pi): expire and cancel extension approvals by @StiensWout in https://github.com/pingdotgg/t3code/pull/17840
- feat(pi): include native sessions in usage reports by @StiensWout in https://github.com/pingdotgg/t3code/pull/17848
- fix(server): route Copilot ACP subagent output into subagent threads by @maria-rcks in https://github.com/pingdotgg/t3code/pull/17714
- fix(web): composer banner titles truncate beside their icon instead of wrapping by @maria-rcks in https://github.com/pingdotgg/t3code/pull/17699
- fix(server): Muse turns no longer fail on Windows by @ntindle in https://github.com/pingdotgg/t3code/pull/17163
- fix(pi): allow known read-only T3 tools without approval by @StiensWout in https://github.com/pingdotgg/t3code/pull/17852
- fix: worktree threads keep their worktree when the agent starts, and messages sent during setup queue by @maria-rcks in https://github.com/pingdotgg/t3code/pull/17654
- fix(server): keep Claude workflows alive while they report progress by @maria-rcks in https://github.com/pingdotgg/t3code/pull/17715
- fix(web): media preview centers its content and pins the close button by @maria-rcks in https://github.com/pingdotgg/t3code/pull/17951
- fix(server): threads without a project no longer need Git installed by @t3dotgg in https://github.com/pingdotgg/t3code/pull/17959
- fix(web): toggling tools and thinking at the bottom keeps you at the bottom by @t3dotgg in https://github.com/pingdotgg/t3code/pull/17954
- fix(web): Compact chip follows Claude's real prompt cache TTL by @t3dotgg in https://github.com/pingdotgg/t3code/pull/17945
- fix(usage): bound OpenCode history reads to prevent backend OOM by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/17961
- refactor: format diff line counts through one shared helper by @maria-rcks in https://github.com/pingdotgg/t3code/pull/17948
- fix: new projects start their first thread in the project folder, not a worktree by @t3dotgg in https://github.com/pingdotgg/t3code/pull/17371
- perf(server): drive shell last-error lookup from thread bindings by @only21mil in https://github.com/pingdotgg/t3code/pull/17842
- perf(server): skip parsing plain terminal history output by @StiensWout in https://github.com/pingdotgg/t3code/pull/17179
- perf(server): batch terminal history writes every 250 ms by @StiensWout in https://github.com/pingdotgg/t3code/pull/17183
- perf(server): storage cleanup no longer runs a full status or size walk for worktrees it keeps by @tris203 in https://github.com/pingdotgg/t3code/pull/17911
- perf(usage): usage scans skip OpenCode legacy messages older than the window by @tris203 in https://github.com/pingdotgg/t3code/pull/17254
- perf(usage): OpenCode legacy walk stats entries before checking for symlinks by @tris203 in https://github.com/pingdotgg/t3code/pull/17638
- fix(web): MCP app permission prompts no longer overflow the screen by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/17962
- feat(provider-antigravity): support subscription quota and usage limits by @Maseeek in https://github.com/pingdotgg/t3code/pull/17530
- fix(desktop): keep generated annotation styles in sync by @t3-code[bot] in https://github.com/pingdotgg/t3code/pull/17838
- fix(web): Resume continues on the model picked in the composer by @akbarakma in https://github.com/pingdotgg/t3code/pull/17867
- fix(devices): bump agent-device to 0.21.24 for native Windows hosts by @TanJeeSchuan in https://github.com/pingdotgg/t3code/pull/17706
- fix(web): keybinding group headings no longer touch the group above by @fixfon in https://github.com/pingdotgg/t3code/pull/17766
- feat(web): configure OpenTelemetry exports in diagnostics by @MatthewFeroz in https://github.com/pingdotgg/t3code/pull/12538
- docs: update user count to 500k by @Kamkmgamer in https://github.com/pingdotgg/t3code/pull/17783
- fix(mobile): working pill no longer bulges on its right end by @id0Sch in https://github.com/pingdotgg/t3code/pull/16143
- perf(opencode): stop retaining every message of a loaded OpenCode thread by @tris203 in https://github.com/pingdotgg/t3code/pull/17784
- fix(web): switch thumbs stay in their track while scrolling by @raphaelpra in https://github.com/pingdotgg/t3code/pull/15240
- fix(keybindings): thread jumps no longer overlap model picker jumps by @Fluffy-Bunny-23 in https://github.com/pingdotgg/t3code/pull/14475
- fix(mobile): restore QR scanning in iPad pairing sheet by @arhammahajan in https://github.com/pingdotgg/t3code/pull/16019
- fix(server): delegated Muse tasks no longer ask approval for every command by @t3dotgg in https://github.com/pingdotgg/t3code/pull/18065
- fix(codex): prevent unsupported agent history in ChatGPT sharing by @connwalk in https://github.com/pingdotgg/t3code/pull/17499
- fix(server): disabled providers stop checking for CLI updates by @yordis in https://github.com/pingdotgg/t3code/pull/16772
- fix(mobile): round Android queued message sheet corners by @PixPMusic in https://github.com/pingdotgg/t3code/pull/14934
- fix(ssh): record the archive lock owner's real PID by @Gigioxx in https://github.com/pingdotgg/t3code/pull/14598
- fix(desktop): keep annotation comment direction independent of host page by @abdelrhmanehab10 in https://github.com/pingdotgg/t3code/pull/11005
- fix(ssh): qualify runner script builders in tunnel test by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/18078
- fix(web): keep thread links open until the shell is live by @saphid in https://github.com/pingdotgg/t3code/pull/14697
- fix(web): scope PR title collapse to tab scrollers by @Adamulek123 in https://github.com/pingdotgg/t3code/pull/14644
- fix(server): detect fork PRs for branches without upstreams by @Adamulek123 in https://github.com/pingdotgg/t3code/pull/13894
- fix(search): find threads by their branch PR number by @tris203 in https://github.com/pingdotgg/t3code/pull/14658
- feat(web): show Claude workflow phases and members in Lineage by @Bil0000 in https://github.com/pingdotgg/t3code/pull/12598
- fix(mobile): round Android Agents sheet corners by @PixPMusic in https://github.com/pingdotgg/t3code/pull/14925
- fix(web): the Usage page sends a signed-out browser to pairing by @AdEx-Partners-DE in https://github.com/pingdotgg/t3code/pull/17938
- fix(server): OpenCode 2 continuations end after a reconnect took a Stop's end by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/14744
- fix(server): OpenCode 2 continuations replay only their own background reply by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/14752
- fix(server): ACP reapplies a model after a switch away from it failed partway by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/14723
- fix(web): focus settings search with command-f by @extoci in https://github.com/pingdotgg/t3code/pull/17859
- fix(mobile): keep Android project paths on one line by @wellorbetter in https://github.com/pingdotgg/t3code/pull/14178
- fix(web): unpin preview dragging on narrow chat canvases by @MatthewFeroz in https://github.com/pingdotgg/t3code/pull/15556
- fix(web): thread details toggle no longer covers the thread title on Windows desktop by @freddy-d in https://github.com/pingdotgg/t3code/pull/16869
- fix(server): a directory no longer resolves as the resource monitor binary by @Furox-Art in https://github.com/pingdotgg/t3code/pull/16838
- fix(server): a Claude usage limit no longer resets the context meter to 0% by @Vantrongs in https://github.com/pingdotgg/t3code/pull/16394
- fix(server): GitLab merge requests can expand unchanged lines by @ScottN-PV in https://github.com/pingdotgg/t3code/pull/17528
- fix(provider-cursor): a skill tree deeper than the scan limit no longer hides every skill by @ScottN-PV in https://github.com/pingdotgg/t3code/pull/17389
- fix(web): pass hex theme colors to HTML renders by @RustedAperture in https://github.com/pingdotgg/t3code/pull/16325
- fix(web): align the API estimate info icon by @RakshithBhat03 in https://github.com/pingdotgg/t3code/pull/15655
- test(server): ACP teardown tests pass on Windows hosts by @sheehanmunim in https://github.com/pingdotgg/t3code/pull/17080
- fix(server): sync device tool license versions with installer pins by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/18121
- fix: sync model favorites and visibility across clients by @jakeleventhal in https://github.com/pingdotgg/t3code/pull/16816
- chore(deps-dev): bump compression from 1.8.1 to 1.8.2 in the npm_and_yarn group across 1 directory by @dependabot[bot] in https://github.com/pingdotgg/t3code/pull/16309
- fix(server): update fff to stop runaway watcher rescans by @realhasanshoaib in https://github.com/pingdotgg/t3code/pull/14543
- fix(mobile): license generation works with filtered installs by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/18127
- fix(mobile): image-only messages ask the agent to respond, like desktop by @whoisaldo in https://github.com/pingdotgg/t3code/pull/16480
- feat(pull-requests): guided reviews, a beta tour of a pull request by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/18124
- feat(mcp): agents can write and read pull request review guides by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/18143
- fix(server): Sol Ultrafast stops vanishing from the Codex model picker by @t3dotgg in https://github.com/pingdotgg/t3code/pull/18200
- fix(usage): say resets momentarily in the final minute by @extoci in https://github.com/pingdotgg/t3code/pull/17869
- fix(server): preserve ambient Cursor MCP servers by @aravhawk in https://github.com/pingdotgg/t3code/pull/15875
- fix(server): skip Windows cleanup for exited child processes by @Alb11747 in https://github.com/pingdotgg/t3code/pull/16007
- feat(settings): providers can be turned on or off per project by @yordis in https://github.com/pingdotgg/t3code/pull/17879
- perf(github): resolve credentials once per GraphQL request by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/18289
- fix(server): refresh linked PRs without a checkout by @PixPMusic in https://github.com/pingdotgg/t3code/pull/17167
- fix(mobile): add compose to the single-column iPad list by @PixPMusic in https://github.com/pingdotgg/t3code/pull/18157
- fix(mobile): let sheet lists scroll before dismissal by @PixPMusic in https://github.com/pingdotgg/t3code/pull/17177
- fix(mobile): restore compact iPad trackpad scrolling by @PixPMusic in https://github.com/pingdotgg/t3code/pull/13665
- fix(mobile): preserve filters across layout changes by @PixPMusic in https://github.com/pingdotgg/t3code/pull/13085
- fix(mobile): separate unfolded thread list from header by @PixPMusic in https://github.com/pingdotgg/t3code/pull/13088
- fix(android): Match thread fallback layouts to the loaded pane by @PixPMusic in https://github.com/pingdotgg/t3code/pull/14669
- fix(mobile): size inline MCP apps to their content by @PixPMusic in https://github.com/pingdotgg/t3code/pull/17040
- fix(mobile): preserve iPad search chrome across layout changes by @PixPMusic in https://github.com/pingdotgg/t3code/pull/13667
- fix(client): apply host color scheme to saved MCP apps by @PixPMusic in https://github.com/pingdotgg/t3code/pull/17026
- fix(android): Use MD3 loading spinners by @PixPMusic in https://github.com/pingdotgg/t3code/pull/14282
- fix(client): merge No project filters across environments by @PixPMusic in https://github.com/pingdotgg/t3code/pull/17050
- fix(client): tolerate blocked cookies in MCP app sandboxes by @PixPMusic in https://github.com/pingdotgg/t3code/pull/17027
- feat(mobile): browse and review pull requests natively by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/18126
- feat(mobile): guided reviews for pull requests by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/18267
- fix(devices): refresh backlogged iOS video and require input admission by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/18326
- feat(mobile): keep pull requests available offline by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/18351
- fix(mobile): keep bot badges out of PR attachments by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/18347
- fix(desktop): tooltips no longer open under the Windows and Linux window controls by @flamboh in https://github.com/pingdotgg/t3code/pull/17672
- fix(web): revert trailing toast icons by @t3-code[bot] in https://github.com/pingdotgg/t3code/pull/18356
- fix(web): even 4px inset around rows in the PR badge tooltip by @SunkenInTime in https://github.com/pingdotgg/t3code/pull/18352
- ci(mobile): publish nightly Android APKs to a GitHub prerelease by @SunkenInTime in https://github.com/pingdotgg/t3code/pull/16271
- fix(server): Claude 5.1+ text before a tool call shows as assistant text by @Gigioxx in https://github.com/pingdotgg/t3code/pull/18364
- feat(provider-muse): native subagents open in their own child threads by @bmdavis419 in https://github.com/pingdotgg/t3code/pull/18353
- fix(desktop): tooltips no longer open under the macOS traffic lights by @flamboh in https://github.com/pingdotgg/t3code/pull/17726
- fix(web): Cite button stays anchored to the selected text by @flamboh in https://github.com/pingdotgg/t3code/pull/17650
- fix(web): terminal selection drags scroll at the window edge by @flamboh in https://github.com/pingdotgg/t3code/pull/17653
- fix(web): scrolling over the thread minimap scrolls the chat by @flamboh in https://github.com/pingdotgg/t3code/pull/17652
- perf(web): panel toggles no longer re-render the timeline and composer by @flamboh in https://github.com/pingdotgg/t3code/pull/18077
- fix(web): composer keeps its border while resting and expanding by @flamboh in https://github.com/pingdotgg/t3code/pull/18333
- fix(web): center the empty-thread placeholder above the composer by @flamboh in https://github.com/pingdotgg/t3code/pull/18331
- fix(web): PR badge tooltip opens after a thread gains a second PR by @flamboh in https://github.com/pingdotgg/t3code/pull/18368
- fix(web): timeline keeps live-following after returning from Settings by @flamboh in https://github.com/pingdotgg/t3code/pull/17348
- fix(web): update toast download badge no longer hides behind the provider logo by @t3dotgg in https://github.com/pingdotgg/t3code/pull/18401
- fix(shared): preserve generated branch namespaces by @maria-rcks in https://github.com/pingdotgg/t3code/pull/15615
- fix(provider-muse): run on Muse 1.4.6, with linked web search hits and workflow results by @t3dotgg in https://github.com/pingdotgg/t3code/pull/18409
- feat(mobile): replace custom Markdown rendering with Enriched by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/16979
- chore(mobile): sync Screens fork with upstream v5 fixes by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/18396
- docs(mobile): point fork links to pingdotgg by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/18433
- perf(web): reuse the collator when sorting diff files by @saphid in https://github.com/pingdotgg/t3code/pull/18420
- perf(web): avoid quadratic markdown link scans by @saphid in https://github.com/pingdotgg/t3code/pull/18387
- perf(server): expired PR diffs no longer stay in memory until restart by @tris203 in https://github.com/pingdotgg/t3code/pull/17786
- perf(usage): the first usage scan skips decoding transcript lines that carry no usage by @tris203 in https://github.com/pingdotgg/t3code/pull/17255
- fix(mobile): preserve browser prompt replies across control updates by @saphid in https://github.com/pingdotgg/t3code/pull/18419
- fix(web): closed popovers no longer stay on screen and click-through by @akbarakma in https://github.com/pingdotgg/t3code/pull/18341
- fix(web): keybinding settings label Focus URL with a capitalized acronym by @RakshithBhat03 in https://github.com/pingdotgg/t3code/pull/18279
- fix(web): long commands no longer overflow the Add Action dialog by @fixfon in https://github.com/pingdotgg/t3code/pull/18207
- fix(web): provider Runtime controls follow the settings row layout by @ScottN-PV in https://github.com/pingdotgg/t3code/pull/18190
- perf(web): Thinking shimmer steps instead of drawing every frame by @realhasanshoaib in https://github.com/pingdotgg/t3code/pull/18191
- chore(typecheck): typecheck with tsc-rs by @t3dotgg in https://github.com/pingdotgg/t3code/pull/16704
- test(server): finish workflow reads before changing transcripts by @lastobelus in https://github.com/pingdotgg/t3code/pull/18192
- test(server): Claude sign-in message test passes on Windows hosts by @AdEx-Partners-DE in https://github.com/pingdotgg/t3code/pull/18183
- fix(web): context menus no longer scroll when they fit the window by @kacigaya in https://github.com/pingdotgg/t3code/pull/16776
- fix(server): checkpoint restore keeps a nested workspace on Windows by @JonasFocus in https://github.com/pingdotgg/t3code/pull/14874
- Reject unknown params in t3_thread_read by @mfazekas in https://github.com/pingdotgg/t3code/pull/17823
- fix(desktop): Option-click on a chat link opens the system browser by @whoisaldo in https://github.com/pingdotgg/t3code/pull/18238
- fix(mobile): new thread draft names its repo and says it is a new thread by @kaovilai in https://github.com/pingdotgg/t3code/pull/17611
- fix(web): keep queued threads subscribed by @ANSHSINGH050404 in https://github.com/pingdotgg/t3code/pull/15293
- test(server): Claude reset tests are skipped on Windows hosts, where their mock CLI cannot run by @AdEx-Partners-DE in https://github.com/pingdotgg/t3code/pull/18184
- fix(web): hide stash menu behind maximized panel by @Saikrishna1876 in https://github.com/pingdotgg/t3code/pull/18115
- fix(web): sidebar toggle no longer sits under the macOS window buttons by @realhasanshoaib in https://github.com/pingdotgg/t3code/pull/18193
- fix(server): a missing agent binary no longer reads as a wrapper kill by @Moinax in https://github.com/pingdotgg/t3code/pull/15344
- feat(android): add Pull Requests tab by @PixPMusic in https://github.com/pingdotgg/t3code/pull/18372
- fix(mobile): Forgejo change requests ask for the summary they require by @flamboh in https://github.com/pingdotgg/t3code/pull/18455
- fix(server): cap automatic thread continuations and turn them on by default by @t3dotgg in https://github.com/pingdotgg/t3code/pull/18461
- feat(mobile): stock tab bar, glass filter pills, and saved list filters by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/18476
- fix(mobile): keep PR surfaces and Android tab selection visible across themes by @PixPMusic in https://github.com/pingdotgg/t3code/pull/18479
- fix(mobile): keep preview count badges inside the working pill by @RVZO6 in https://github.com/pingdotgg/t3code/pull/18449
- fix(mobile): show rounded pull request selection in the sidebar by @PixPMusic in https://github.com/pingdotgg/t3code/pull/18480
- feat(web): model options for source control writer and review guide models by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/18488
- ci(mobile): cut a store build when the native fingerprint has no build by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/18496
- fix(web): terminal colors no longer look washed out by @psv2522 in https://github.com/pingdotgg/t3code/pull/17168
- refactor(settings): centralize schema-declared secrets and inputs by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/18505
- fix(mobile): restore native scroll-edge effects on forms and PRs by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/18507
- feat(mobile): native-sized pull request action bar by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/18527
- fix(mobile): preserve theme contrast across surfaces and actions by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/18506
- refactor(mobile): share themed list rows and sections by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/18510
- refactor(mobile): share themed toggle rows in settings by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/18511
- refactor(mobile): share themed choice rows in settings by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/18516
- fix(server): consolidate browser credential handling by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/18509
- feat: open T3 Code from a link with a prompt ready to send by @t3dotgg in https://github.com/pingdotgg/t3code/pull/18454
- fix(release): drop placeholder allowBuilds entry that broke nightly builds by @t3dotgg in https://github.com/pingdotgg/t3code/pull/18560
- ci: fail PRs on invalid allowBuilds entries in pnpm-workspace.yaml by @t3dotgg in https://github.com/pingdotgg/t3code/pull/18564
- fix(mobile): menu dismiss taps no longer press the view underneath by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/18565
- feat(web): one sidebar click updates every machine and provider by @t3dotgg in https://github.com/pingdotgg/t3code/pull/18053
- fix(release): avoid PowerShell crashes on Windows ARM by @t3dotgg in https://github.com/pingdotgg/t3code/pull/18573
- fix(server): Forgejo pull requests report their head commit by @flamboh in https://github.com/pingdotgg/t3code/pull/18463
- test(provider-acp): terminal kill test passes on Windows hosts by @AdEx-Partners-DE in https://github.com/pingdotgg/t3code/pull/18450
- fix(web): context meter no longer reads 1000k just under a million tokens by @luke2x in https://github.com/pingdotgg/t3code/pull/17539
- fix(desktop): avoid Hyprland 0.48–0.50 Wayland color-manager startup crashes by @krankos in https://github.com/pingdotgg/t3code/pull/18566
- fix(mobile): iPhones on iOS 27.2 beta no longer open to a black screen by @shivamhwp in https://github.com/pingdotgg/t3code/pull/18654
- fix(mobile): installs skip the Enriched math download again by @juliusmarminge in https://github.com/pingdotgg/t3code/pull/18679
- fix(web): setup wizards follow custom themes by @SunkenInTime in https://github.com/pingdotgg/t3code/pull/18725
- fix(server): resolve configured PR bases to branch names by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/18754
- fix: expose running terminals and prevent setup install stalls by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/18740
- fix(mobile): hide Claude Read image placeholders when previews exist by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/18761
- fix(gitlab): merge request details report their head commit by @ScottN-PV in https://github.com/pingdotgg/t3code/pull/18608
- feat(server): rename built-in models from settings by @t3dotgg in https://github.com/pingdotgg/t3code/pull/18840
- fix(web): Git actions follow the selected thread by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/18862
- fix(desktop): preserve updater failure causes in diagnostics by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/18864
- fix(web): attach dropped threads to pending answers by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/18789
- fix(web): keep button text stable during press scaling by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/18866
- fix(bitbucket): preserve PR head commits for review guides by @ahilles107 in https://github.com/pingdotgg/t3code/pull/18402
- fix(server): return null for unresolved optional commands by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/18871
- fix: show computer-use action titles and align app icons by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/18865
- fix(server): apply confirmed Claude subagent outcomes by @Yash-Singh1 in https://github.com/pingdotgg/t3code/pull/18778
- fix(mobile): Browser page no longer logs a duplicate key warning by @tris203 in https://github.com/pingdotgg/t3code/pull/18776
The list is cut here to fit GitHub's release note limit. Every change since v0.0.45 is in the Full Changelog: v0.0.45...v0.1.0