Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
258 commits
Select commit Hold shift + click to select a range
d7baa37
Fix incorrect pluralization of “entry” (#3933)
McMelonTV Jul 20, 2026
749baec
feat(server): title background-task work-log rows with the task name …
t3dotgg Jul 20, 2026
3235658
fix: delegate OpenCode session titles to provider (#3720)
tris203 Jul 20, 2026
df65a6c
Archive selected threads from the context menu (#3895)
theduke Jul 20, 2026
5fcfe24
fix(cli): support force removing projects (#3922)
Bortlesboat Jul 20, 2026
d266c06
fix: allow sidebar to be shrunk when wider than viewport (#2456)
shoaib050326 Jul 20, 2026
33f1cb4
fix(codex): show web search query and url in tool call details (#2093)
GuilhermeVieiraDev Jul 20, 2026
40c0ab0
Add Codex launch arguments setting (#2892)
jamesx0416 Jul 20, 2026
501ce27
[orchestration] Clear stale active turn when session becomes inactive…
Andrew-Forster Jul 20, 2026
08993a5
Regenerate Codex reset credit protocol bindings (#4173)
juliusmarminge Jul 20, 2026
2fae0d0
fix(preview): preserve direct localhost navigation (#3939)
Chrrxs Jul 20, 2026
8e3467f
Synchronize mobile threads with authoritative shell snapshots (#4163)
juliusmarminge Jul 20, 2026
b6d9ce3
Gate iOS glass layout on native support (#4032)
juliusmarminge Jul 20, 2026
f4da4f3
fix(opencode): resume the OpenCode session on follow-ups instead of s…
vdmkotai Jul 20, 2026
0ca3240
fix(server): use CLI for OpenCode health check instead of spawning se…
UtkarshUsername Jul 20, 2026
946b867
fix(web): scope timeline minimap hover target to the side gutter (#3869)
xxashxx-svg Jul 20, 2026
a135f2c
[codex] show complete approval details (#4111)
maxwellyoung Jul 20, 2026
c710167
fix(web): paint text selection over composer chips (#4139)
yordis Jul 20, 2026
fa69f05
[codex] preserve custom model slugs (#4168)
maxwellyoung Jul 20, 2026
0936fd2
fix(web): preview workspace images in the file panel (#3996)
Rhiz3K Jul 20, 2026
8ca4eec
feat(web): drag files from the explorer into the chat composer (#4140)
yordis Jul 20, 2026
2c199aa
fix(desktop): preserve main window bounds (#3851)
anirudhsama Jul 20, 2026
db4b2d8
perf(orchestration): speed up new-chat propagation and offline catch-…
RusiruSadathana Jul 20, 2026
c8a04bd
Finale: upgrade changed files card to fix various UI issues (#4113)
sandersonstabo Jul 20, 2026
5d34f9f
Pass CLI OAuth config to hosted web deploy (#4186)
juliusmarminge Jul 20, 2026
c0bb237
fix(web): always show environment chip for remote projects (#4217)
t3dotgg Jul 21, 2026
23c18fd
fix(web): keep composer editable while disconnected (#4241)
t3dotgg Jul 21, 2026
62cf461
fix: better defaults — Claude 1M context, Codex gpt-5.6, worktrees fr…
t3dotgg Jul 22, 2026
6f34ad3
fix(claude): handle all SDK stream messages; stop spurious work-log w…
t3dotgg Jul 22, 2026
32c6012
Sidebar v2 beta: flat thread list with a server-backed settled lifecy…
t3dotgg Jul 22, 2026
282ecb3
fix(settings): validate the add-provider wizard step before advancing…
leorivastech Jul 22, 2026
aa5ec80
fix(claude): isolate capability probe from user MCP servers (#4015)
jbbottoms Jul 22, 2026
783692a
Preserve connecting status while a turn starts (#4101)
D3OXY Jul 22, 2026
4e09cdd
fix(server): stop restoring stale OpenCode models (#4095)
nateEc Jul 22, 2026
c7b21ff
[codex] keep scoped package references as text (#4167)
maxwellyoung Jul 22, 2026
b6e1b39
fix(web): default provider selection for users without Codex (#4117)
mfazekas Jul 22, 2026
571a8b4
Unify temporary worktree branch naming (#4278)
juliusmarminge Jul 22, 2026
020179c
fix(web): use message-square icon for settled icon-less project threa…
UtkarshUsername Jul 22, 2026
18b4688
Stabilize sidebar settling animations (#4280)
juliusmarminge Jul 22, 2026
e5fba26
Restore Copy Link in chat link context menu (#4161)
caezium Jul 22, 2026
f74eb62
fix(desktop): handle EPIPE errors on stdout/stderr to prevent crash d…
UtkarshUsername Jul 22, 2026
18fa89c
Preserve draft thread highlighting during promotion (#4283)
juliusmarminge Jul 22, 2026
7e2bb47
Move mobile working timer into the thread timeline (#4285)
juliusmarminge Jul 22, 2026
376c149
Stabilize PR status lookups and provider session lifecycle (#4281)
juliusmarminge Jul 22, 2026
9fe4832
fix: open command palette instead of custom dialog for new thread pic…
UtkarshUsername Jul 22, 2026
9a0a071
fix(server): don't drop sticky PR fallback when remote URL can't be r…
juliusmarminge Jul 22, 2026
78a0ea5
feat(web): copy branch name via right-click in the branch selector (#…
t3dotgg Jul 22, 2026
ab4a883
Add remote server updates and standalone service management (#4286)
juliusmarminge Jul 22, 2026
593289c
Refine light-mode sidebar surfaces (#4268)
juliusmarminge Jul 22, 2026
bc9428a
fix(mobile): don't mark Android VPN/Tailscale as offline when connect…
Wraient Jul 22, 2026
2d31cb0
improve and prevent silent thread branch drift and PR fetching (#2284)
justsomelegs Jul 22, 2026
c5ff51e
feat(web): refresh application surfaces
maria-rcks Jul 22, 2026
b6a2563
style(web): polish dark mode dialogs
maria-rcks Jul 22, 2026
14b6bfd
fix(web): unify and tune glass surfaces
juliusmarminge Jul 23, 2026
29b1abc
fix(web): apply glass opacity to thread tooltip
maria-rcks Jul 23, 2026
6e5df67
fix(web): override thread tooltip background
maria-rcks Jul 23, 2026
10da67b
fix(web): apply glass opacity to model picker
maria-rcks Jul 23, 2026
0b1ce58
style(web): polish glass opacity slider
maria-rcks Jul 23, 2026
5961d36
fix(web): apply glass opacity to command palette
maria-rcks Jul 23, 2026
d330759
fix(web): add glass composer alerts
maria-rcks Jul 23, 2026
160d97f
fix(web): honor composer glass opacity
maria-rcks Jul 23, 2026
39cd15b
test(web): stabilize timeline module setup
maria-rcks Jul 23, 2026
c38225e
style(web): fade settings content beneath navbar
maria-rcks Jul 23, 2026
936394b
test(desktop): include glass opacity in settings fixture
maria-rcks Jul 23, 2026
9c9916a
fix(web): address redesign review findings
maria-rcks Jul 23, 2026
b44ed83
fix(web): sync provider banner dismissal
maria-rcks Jul 23, 2026
16491a8
fix(web): new-thread defaults ignored for remote environments (#4276)
t3dotgg Jul 23, 2026
fbd7742
feat: add "Auto" runtime mode — AI-reviewed approvals for Codex and C…
t3dotgg Jul 23, 2026
1c9a6de
Add shared t3.json project configuration support (#4317)
juliusmarminge Jul 23, 2026
e51538b
Restore light-mode surfaces and refine dialog styling
juliusmarminge Jul 23, 2026
4d83436
Unify dialog glass and fix composer overlays (#4365)
juliusmarminge Jul 23, 2026
b41e89e
fix(web): warn before silent Windows updates (#4350)
nateEc Jul 23, 2026
7609495
[codex] Move project grouping to General settings (#4313)
juliusmarminge Jul 23, 2026
0542abc
[codex] Group project scopes in mobile thread lists (#4314)
juliusmarminge Jul 23, 2026
719c905
[codex] Move mobile project grouping to General settings (#4315)
juliusmarminge Jul 23, 2026
315b273
[codex] Deduplicate connection failure messaging (#4367)
juliusmarminge Jul 23, 2026
3afb4a9
Restore grouped project filtering in Sidebar V2 (#4282)
shivamhwp Jul 23, 2026
57100fb
[codex] restore Sidebar V2 project actions (#4373)
juliusmarminge Jul 23, 2026
9d9208c
[codex] Group projects in new-thread pickers (#4312)
juliusmarminge Jul 23, 2026
9cbe50d
fix(web): restore dark composer toolbar styling
maria-rcks Jul 23, 2026
9798548
Fix thread tooltip folder icon color (#4383)
maria-rcks Jul 23, 2026
88c69ff
fix(server): parse CLI version in update preflight (#4389)
t3dotgg Jul 23, 2026
ddd5a46
fix(web): sidebar v2 polish — jump hints, working duration, in-flight…
t3dotgg Jul 23, 2026
b3e5131
Fix logical project grouping labels on mobile (#4391)
juliusmarminge Jul 23, 2026
79fe11b
Add preview color scheme controls and simplify project grouping (#4385)
juliusmarminge Jul 23, 2026
edb1240
fix(cli): publish nightly branded favicons (#4372)
maria-rcks Jul 23, 2026
91dfe60
Fix thread loading flash (#4396)
t3dotgg Jul 23, 2026
193e3c6
fix(client-runtime): keep a warm thread un-settled despite a merged/c…
t3dotgg Jul 23, 2026
6ef7aa8
Fix composer context strip alignment and glass shell (#4404)
juliusmarminge Jul 23, 2026
ce467da
Polish iOS git progress overlay with glass effects (#4387)
juliusmarminge Jul 23, 2026
67a7b1a
Improve composer glass fallbacks (#4406)
juliusmarminge Jul 23, 2026
51672b6
feat(web): collapse large git diffs by default to make chat more read…
t3dotgg Jul 24, 2026
2f41c07
Stop new threads inheriting checkout/branch from viewed thread (#4411)
t3dotgg Jul 24, 2026
fc3f78f
fix: tone down branch-mismatch banner (#4416)
t3dotgg Jul 24, 2026
6b9a598
fix: Claude Code skills discoverable for the composer $ picker (#4414)
t3dotgg Jul 24, 2026
bb38c33
fix(web): keep settled threads reachable when opened directly (#4413)
t3dotgg Jul 24, 2026
202e560
feat(sidebar-v2): thread snoozing (#4311)
t3dotgg Jul 24, 2026
5d17354
Upgrade Clerk packages and Expo integration (#4440)
juliusmarminge Jul 24, 2026
15e875a
Increase light-mode contrast for user message bubbles (#4441)
juliusmarminge Jul 24, 2026
f7cc776
Restore model picker layout and retain iterative test state (#4450)
juliusmarminge Jul 24, 2026
a7ee309
Color settled PR labels on hover (#4451)
juliusmarminge Jul 24, 2026
ece0508
[codex] Fix glass hover compositing artifacts (#4446)
juliusmarminge Jul 24, 2026
41a430a
Add Claude Opus 5 model (#4472)
thomaslittle Jul 24, 2026
38cfc25
feat(web): add collapse-all toggle to diff panel (#4475)
0x4bs3nt Jul 24, 2026
5719e8a
feat(web): show fast mode as a bolt instead of a "Normal" label (#4488)
t3dotgg Jul 25, 2026
a17cbc3
feat(dev): keep worktree dev state isolated on T3 Code dev servers (#…
t3dotgg Jul 26, 2026
23b5502
feat(dev): Make t3 code dev instances shareable over Tailscale (#4556)
t3dotgg Jul 27, 2026
89c5a19
fix(dev): skip browser-blocked ports (#4608)
t3dotgg Jul 27, 2026
d60f6e9
fix: cut websocket throughput in half by pruning activity payloads (#…
t3dotgg Jul 27, 2026
b4680cb
perf(mobile): defer work-log detail serialization (#4607)
saphid Jul 27, 2026
23ea08d
test: account for lazy thread feed details (#4628)
t3dotgg Jul 27, 2026
a78f245
feat(relay): limit managed tunnels per user (#4530)
juliusmarminge Jul 27, 2026
2b06c08
Add managed tunnel limits migration (#4635)
juliusmarminge Jul 27, 2026
f4c3943
Add background preview capture and picture-in-picture support (#4397)
juliusmarminge Jul 27, 2026
200fa82
feat(web): prompt stash — cmd+S saves the composer to a per-provider …
t3dotgg Jul 27, 2026
108e017
Upgrade Effect and Alchemy betas (#4643)
juliusmarminge Jul 27, 2026
bdf99c1
feat: allow new thread creation through project breadcrumbs (#4638)
0x4bs3nt Jul 27, 2026
7248877
fix(web): scope PR state to the thread branch (#4460)
juliusmarminge Jul 27, 2026
d2d40b6
Drop redundant Relay user indexes (#4648)
juliusmarminge Jul 27, 2026
96398e3
feat(connect): release the Cloudflare tunnel when the environment shu…
juliusmarminge Jul 27, 2026
180620e
Fix Relay Worker RuntimeContext wiring (#4653)
juliusmarminge Jul 27, 2026
da11342
Fix live sidebar resize limits and defer Alchemy runtime context (#4655)
juliusmarminge Jul 27, 2026
32843c2
fix(web): constrain branch toolbar context (#4657)
maxktz Jul 27, 2026
0e19c10
Keep MCP credentials alive across provider turns (#4659)
juliusmarminge Jul 27, 2026
f0121f3
fix: close actions dropdown when editing (#4660)
0x4bs3nt Jul 27, 2026
32af2f0
fix(preview): stabilize PiP viewport identity (#4661)
juliusmarminge Jul 27, 2026
80ead5f
Add glass styling for thread tooltips and simplify preview tab handli…
juliusmarminge Jul 27, 2026
5ba6ef7
Use tarball archiving for hosted web deploys (#4669)
juliusmarminge Jul 27, 2026
6e3b738
fix(server): bound editor discovery during config loading (#4291)
maria-rcks Jul 27, 2026
e77f42c
Prevent draft thread detail polling before shell registration (#4670)
juliusmarminge Jul 27, 2026
10bca3f
feat: add configurable source control writing settings (#4204)
maria-rcks Jul 27, 2026
eea3ea4
feat(diff-panel): show total line additions and deletions (#4674)
0x4bs3nt Jul 27, 2026
6afbed3
Clear provider update actions while updating (#4676)
juliusmarminge Jul 27, 2026
6a3df51
Fix sidebar highlighting for draft threads (#4679)
juliusmarminge Jul 27, 2026
3957a95
Use glass surfaces for web toasts (#4681)
juliusmarminge Jul 27, 2026
a2ffb12
Show origin ref in branch trigger label (#4680)
juliusmarminge Jul 27, 2026
1153afb
fix(mobile): match react version to react-native 0.85.3 vendored rend…
KrzysztofMoch Jul 27, 2026
831eb66
chore(release): prepare v0.0.29
t3-code[bot] Jul 27, 2026
a148e08
Add OTA update checks to mobile settings (#4686)
juliusmarminge Jul 27, 2026
476d69c
fix(mobile): threads load snapped to bottom on iOS (#4689)
t3dotgg Jul 28, 2026
c13a021
feat: default sidebar v2 on for nightly and dev builds (#4491)
t3dotgg Jul 28, 2026
dd5ea32
fix(web): 33 web UI fixes (#4700)
maxktz Jul 28, 2026
b0c4992
Make mobile Thread List v2 the default (#4717)
juliusmarminge Jul 28, 2026
d25b157
Fix mobile showcase workflow without Clerk (#4718)
juliusmarminge Jul 28, 2026
e00781a
Fix relay credential lookup for unlinked environments (#4692)
juliusmarminge Jul 28, 2026
9cf9fc9
Settle merged PR threads immediately (#4704)
t3dotgg Jul 28, 2026
362f127
feat(web): add maria's sidebar header artwork toggle (#4652)
maxktz Jul 28, 2026
4f584da
feat(web): add appearance settings category (#4715)
maxktz Jul 28, 2026
9ccfd9d
fix(desktop): allow updater-controlled relaunch (#4721)
0x4bs3nt Jul 28, 2026
3c50a64
fix(web): prevent diff panel scroll jumping (#4724)
0x4bs3nt Jul 28, 2026
55dd016
Link inline code file paths in chat markdown (#4726)
juliusmarminge Jul 28, 2026
f1a68ac
Fix Android showcase capture and rebuild v2 queued rows (#4730)
juliusmarminge Jul 28, 2026
887dd6e
perf(server): negotiate permessage-deflate on the websocket (#4705)
t3dotgg Jul 28, 2026
b64ae88
docs: overhaul agent guidance (#4782)
t3dotgg Jul 28, 2026
2deea7a
Prevent sidebar row labels from truncating (#4789)
juliusmarminge Jul 28, 2026
8829e2f
perf(server): gzip large thread snapshots (#4788)
t3dotgg Jul 28, 2026
f2d2fb2
fix(web): stashed prompts now survive switching providers (#4787)
t3dotgg Jul 28, 2026
38a6e3c
Fix Git ref refresh resource storms (#4727)
juliusmarminge Jul 28, 2026
5fcdefd
perf(server): trim stale context-window rows and drop dead replay RPC…
t3dotgg Jul 28, 2026
1ba3d01
fix(web): defer command palette filesystem navigation (#2109)
juliusmarminge Jul 28, 2026
2919147
fix(release): skip scripts during Vercel installs (#4796)
t3dotgg Jul 28, 2026
936593c
refactor(client): share filesystem browse navigation (#4797)
juliusmarminge Jul 28, 2026
8fe8f9a
fix(mobile): defer filesystem navigation (#4799)
juliusmarminge Jul 28, 2026
8650f05
refactor(server): use native HTTP compression streams (#4798)
juliusmarminge Jul 29, 2026
60af905
Remove Connect waitlist and add GA announcement tooling (#4691)
juliusmarminge Jul 29, 2026
1b61ce1
Fix Connect sign-in settings label (#4806)
juliusmarminge Jul 29, 2026
694f8d1
chore(release): prepare v0.0.30
t3-code[bot] Jul 29, 2026
1b4830f
fix(desktop): restore T3 Connect sign-in (#4809)
PixPMusic Jul 29, 2026
08e4932
Simplify files panel header (#4828)
juliusmarminge Jul 29, 2026
72b960f
build(desktop): reduce installed app size by ~300MB (#4824)
wukko Jul 29, 2026
c3e8fb6
Update model version from claude-opus-4-8 to claude-opus-5 (#4832)
juliusmarminge Jul 29, 2026
3137c2b
Preserve the thread shell while detail loads (#4830)
juliusmarminge Jul 29, 2026
49c0d96
Reduce idle work and disk churn with native resource diagnostics (#2679)
juliusmarminge Jul 29, 2026
d19039a
fix(server): detect repositories after initialization (#4848)
StiensWout Jul 29, 2026
faea70a
perf(server): merge separate staged/unstaged numstat calls into singl…
UtkarshUsername Jul 29, 2026
85a8986
fix(git): disable external diff for review diff previews (#4854)
ohbentos Jul 29, 2026
fc28abf
Fix editable file focus and live syntax highlighting (#3979)
jakeleventhal Jul 29, 2026
e698796
fix(web): remember the rendered-markdown choice across threads (#4853)
Sy-D Jul 29, 2026
a8e05cb
chore(release): prepare v0.0.31
t3-code[bot] Jul 29, 2026
9e3e9bb
fix(mobile): reduce thread feed scroll jank (#4874)
gabrielelpidio Jul 30, 2026
35a6840
fix(web): restore sidebar v2 thread actions and terminal icon (#4712)
Noojuno Jul 30, 2026
2d9066e
fix(web): settle button now works on hover, not just right-click (#4905)
t3dotgg Jul 30, 2026
758deca
fix(clients): disable add project while disconnected (#4834)
StiensWout Jul 30, 2026
b125b76
fix(composer): hide default Codex service tier (#4784)
maxktz Jul 30, 2026
748203e
docs: link iOS and Android app store downloads (#4902)
t3dotgg Jul 30, 2026
6efcf3e
fix(web): align remote server update action (#4731)
StiensWout Jul 30, 2026
6ab2f16
fix(connect): suggest a serve command that matches how you ran connec…
t3dotgg Jul 30, 2026
00da6b5
fix(mobile): stop shared content errors in Personal Team builds (#4943)
t3dotgg Jul 30, 2026
f0f16e4
perf(mobile): sends respond instantly, thread opens stop freezing (#4…
t3dotgg Jul 30, 2026
9146ed2
fix(web): show Codex fast mode as a bolt (#4947)
t3dotgg Jul 30, 2026
2f466ff
docs: seed worktrees with a copy of real userdata instead of banning …
t3dotgg Jul 30, 2026
2652fee
fix(mobile): support dragged images in the composer (#4953)
t3dotgg Jul 30, 2026
90f3913
fix(mobile): stop long iOS threads from jumping while scrolling up (#…
t3dotgg Jul 30, 2026
f0c6ba9
fix(web): keep worktree default when switching a draft's machine (#4964)
t3dotgg Jul 30, 2026
69a18ce
perf(mobile): reconnect environments immediately on resume (#4878)
t3dotgg Jul 30, 2026
cbe8052
feat(web): pasting a huge screenshot now compresses it instead of err…
t3dotgg Jul 30, 2026
5c9358a
feat(web): regenerate thread titles from sidebar (#4810)
t3dotgg Jul 30, 2026
197d348
fix(web): show server update progress through reconnect (#4903)
t3dotgg Jul 30, 2026
4b71a2a
feat(search): find threads by conversation content (#4959)
t3dotgg Jul 30, 2026
50871eb
fix: marketing site Vercel builds no longer die after ~100 deploys (#…
t3dotgg Jul 30, 2026
9dd425b
docs: split user and maintainer docs, fix 100+ stale claims (#4807)
t3dotgg Jul 30, 2026
e0513d2
fix(web): server updates no longer look like warnings (#4992)
t3dotgg Jul 30, 2026
1877237
fix(connect): reboots no longer strand the relay link, 403s now say w…
t3dotgg Jul 30, 2026
abc409c
Add project file picker (⌘P) and project content search (⇧⌘F) (#4855)
jakeleventhal Jul 30, 2026
6154b46
Check for mobile app updates on launch (#4958)
juliusmarminge Jul 30, 2026
323dc32
fix(mobile): support pre-Liquid-Glass iOS bottom toolbar (#4984)
gabrielelpidio Jul 30, 2026
edc503a
fix(server): restore PR detection without HOME (#4985)
StiensWout Jul 30, 2026
4ba4871
fix(web): fill fast mode icon (#5004)
maria-rcks Jul 30, 2026
1d77cec
fix: cache project favicons across web and mobile (#4767)
gabrielelpidio Jul 30, 2026
e482960
perf(ci): cut stale runs and redundant setup (#4802)
t3dotgg Jul 30, 2026
bc142f8
chore(mobile): bump app version to 1.0.1
juliusmarminge Jul 30, 2026
5b2577f
style(web): make scroll-to-end pill translucent (#5036)
maria-rcks Jul 30, 2026
4029b85
fix(ci): drop sparse-checkout from EAS workflows
juliusmarminge Jul 30, 2026
fbecb73
fix(desktop): bump Clerk Electron SDK to 0.0.24 and register t3code:/…
juliusmarminge Jul 30, 2026
34b15a9
perf(server): cache default branch name and origin existence across s…
UtkarshUsername Jul 30, 2026
063ed71
feat(shared): support shorthand (major-only) versions in the semver h…
arhxam Jul 30, 2026
162e774
fix(mobile): remove unnecessary photo library permission (#4929)
skjiisa Jul 30, 2026
32407df
fix(shared): lenient JSON parser deletes commas inside string values …
arhxam Jul 30, 2026
1d694dc
fix(mobile): default bare IP pairing to HTTP (#4990)
Lucenx9 Jul 30, 2026
cb293fe
fix(mobile): restore iOS Threads branding (#4862)
PixPMusic Jul 30, 2026
b0b2752
chore: add mobile issue template area (#4895)
MaxAnderson95 Jul 30, 2026
41124c7
fix(desktop): link release notes from the update downloaded toast (#4…
Sy-D Jul 30, 2026
cb11a71
fix(mobile): accept Android clipboard images in composer (#4836)
adityavardhansharma Jul 30, 2026
605c2bb
fix(mobile): show the correct build channel in Android's Threads page…
PixPMusic Jul 30, 2026
df78cda
fix(contracts): decode growing config unions forward-compatibly (#5055)
juliusmarminge Jul 30, 2026
e259dd2
fix(mobile): server model, worktree, and origin preferences now apply…
t3dotgg Jul 31, 2026
50a3d6b
fix(ci): repair the mobile showcase screenshots workflow (#5057)
juliusmarminge Jul 31, 2026
fccec9f
fix(ci): capture iPad App Store screenshots in landscape (#5065)
PixPMusic Jul 31, 2026
894d6d6
fix(oxlint-plugin): Resolve the oxlint bin without assuming a pnpm la…
mwolson Jul 31, 2026
61514c1
feat(cli): `npx t3 pair` - generate QR code from a running server (#4…
t3dotgg Jul 31, 2026
ef4ec2a
fix(server): self-update no longer rolls itself back on restart (#5095)
t3dotgg Jul 31, 2026
ab8182c
fix(ci): rotate iPad showcase captures without Simulator UI scripting…
juliusmarminge Jul 31, 2026
acf761b
feat(web): render terminals with libghostty-vt (#4860)
StiensWout Jul 31, 2026
964cc27
refactor: move the canonical libghostty-vt vendor to the repository r…
StiensWout Jul 31, 2026
a041981
feat(mobile): add thread snoozing (#5053)
gabrielelpidio Jul 31, 2026
916cff7
feat(mobile): make settled threads collapsible (#5056)
PixPMusic Jul 31, 2026
03adf21
follow-up normalization after #4700. (#4498)
shivamhwp Jul 31, 2026
bfc3150
feat(web): search threads from the sidebar (#4769)
shivamhwp Jul 31, 2026
96dd1a0
feat(release): prepare Command Center desktop v1
atryan Jul 31, 2026
2ef0cb4
fix(ci): allow public release publisher identity
atryan Jul 31, 2026
2743988
fix(web): avoid Windows preview path collision
atryan Aug 1, 2026
581d86c
test(release): reject Windows module path collisions
atryan Aug 1, 2026
650e977
fix(release): bundle command center core
atryan Aug 1, 2026
ea38beb
feat: integrate t3 code upstream bfc31507f848
atryan Aug 1, 2026
87d15f3
fix: audit preserved upstream history safely
atryan Aug 1, 2026
3ba2c73
feat(providers): add Kimi, subagents, and usage analytics
atryan Aug 1, 2026
6c8879f
fix(ci): repair reconnects and PNG safety scanning
atryan Aug 1, 2026
ebfc3d2
test(desktop): update Clerk environment fixture
atryan Aug 1, 2026
4e7a488
fix(ci): align provider and server integration contracts
atryan Aug 1, 2026
2c8f3b6
perf(web): skip impossible image encodings
atryan Aug 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
21 changes: 21 additions & 0 deletions .agents/skills/ios-debugger-agent/LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) OpenAI

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
64 changes: 64 additions & 0 deletions .agents/skills/ios-debugger-agent/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
---
name: ios-debugger-agent
description: Build, launch, inspect, and drive iOS apps with the repository-configured XcodeBuildMCP server. Use on macOS for iOS Simulator builds, focused native test runs, semantic UI automation, screenshots, logs, or debugging, including T3 Code Mobile verification.
---

# iOS Debugger Agent

Use the repository-configured `xcodebuildmcp` tools instead of requiring a globally installed Codex plugin. Prefer MCP tools over raw `xcodebuild`, `xcrun`, or `simctl` when the client exposes them.

## Confirm availability

This workflow requires macOS 14.5 or newer, Xcode 16 or newer, and Node.js 18 or newer. The repository pins XcodeBuildMCP in both `.mcp.json` for Claude Code and `.codex/config.toml` for Codex. Project MCP servers may require one-time trust or approval followed by a new session.

If the tools are missing:

1. Confirm the repository is trusted and its project MCP server was approved.
2. Restart or recreate the agent session after approving configuration.
3. Run `npx --yes xcodebuildmcp@2.6.2 doctor` when the server starts but simulator or UI-automation tools are unavailable. Follow its actionable Xcode or AXe setup guidance.
4. Fall back to the pinned XcodeBuildMCP CLI or native Apple CLIs only when the current agent client cannot expose project MCP tools.

Do not ask contributors to install the OpenAI `build-ios-apps` plugin globally.

## Establish one simulator context

1. Call `session_show_defaults` before discovery, build, launch, or UI work.
2. Call `list_sims` and select one explicit simulator UDID. Prefer a simulator that is already booted; boot an installed simulator when verification requires it, but do not create or download runtimes without user authorization.
3. Call `session_set_defaults` with the project or workspace, scheme, Debug configuration, simulator ID, and bundle identifier when known.
4. Keep every subsequent build, launch, screenshot, log capture, and UI action pinned to that same UDID.

Avoid generic Mac window automation for switching among Simulator windows. Explicit device identity is more reliable.

## Choose build or launch

- Use `build_run_sim` when native source, native dependencies, entitlements, or project configuration changed.
- Use `test_sim` for the smallest relevant native test target or test cases; do not run an entire workspace test matrix routinely.
- Use `launch_app_sim` when a compatible app is already installed and no native rebuild is needed.
- To reuse an existing build artifact, use `get_sim_app_path` or `get_app_bundle_id`, install it with `install_app_sim` when necessary, and then launch it.
- Do not run a build-only action immediately before `build_run_sim` unless the task requires both artifacts.

After launch, call `snapshot_ui` or `screenshot` before interacting. An open Simulator window alone is not evidence that the intended app launched.

## Drive the UI semantically

1. Call `snapshot_ui` to obtain the current accessibility hierarchy and element references.
2. Use only current `elementRef` values whose snapshot entries list the intended action. XcodeBuildMCP `2.6.2` does not accept coordinates for `tap`; when the app exposes no actionable reference, prefer a registered deep link or another app-supported route and otherwise report the accessibility blocker.
3. Refresh with `snapshot_ui` after navigation or layout changes. Element references are snapshot-specific.
4. Use `wait_for_ui` for asynchronous transitions when available rather than fixed sleeps.
5. Capture a final `screenshot` for the state that proves the affected flow.

Use `gesture` or scoped swipe actions when needed. If a gesture is unreliable, return to a known route or relaunch rather than switching to generic desktop automation.

## Capture logs and debug

- Use `start_sim_log_cap` and `stop_sim_log_cap` with the exact bundle identifier for focused runtime logs.
- Use debugger tools only when the task requires runtime diagnosis; attach to the selected simulator and app rather than an ambiguous process.
- Summarize relevant errors instead of returning unbounded logs.

## Clean up

Stop only log captures, debugger sessions, apps, or simulators started for the current test. Leave pre-existing simulators and unrelated sessions alone.

## Upstream

Adapted from OpenAI's [`build-ios-apps`](https://github.com/openai/plugins/tree/main/plugins/build-ios-apps) plugin version `0.1.2` (`ios-debugger-agent`, MIT) and aligned with XcodeBuildMCP `2.6.2` tool names.
9 changes: 9 additions & 0 deletions .agents/skills/ios-debugger-agent/agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
interface:
display_name: "iOS Debugger Agent"
short_description: "Build and drive iOS Simulator apps"
default_prompt: "Use $ios-debugger-agent to build, launch, and inspect the current iOS app on Simulator."
dependencies:
tools:
- type: "mcp"
value: "xcodebuildmcp"
description: "Repository-configured Xcode build, simulator, logging, debugging, and semantic UI tools"
21 changes: 21 additions & 0 deletions .agents/skills/ios-simulator-browser/LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) OpenAI

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
51 changes: 51 additions & 0 deletions .agents/skills/ios-simulator-browser/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
---
name: ios-simulator-browser
description: Stream an explicit iOS Simulator through pinned serve-sim into the T3 Code in-app browser or another agent browser. Use on Apple Silicon macOS when the user should watch simulator verification live or when browser-visible simulator evidence is needed.
---

# iOS Simulator Browser

Use serve-sim as the shared visual feed for an iOS Simulator. Use `ios-debugger-agent` and XcodeBuildMCP semantic UI tools to drive the app; do not treat browser-canvas coordinates as a substitute for missing app accessibility.

## Confirm availability

serve-sim `0.1.45` requires Apple Silicon macOS, Xcode command-line tools, and Node.js 20 or newer. If the host is unsupported, continue with XcodeBuildMCP screenshots and report that live streaming was unavailable.

When running inside T3 Code, use its product-native browser MCP to open the stream. Other agent hosts may use their own browser or preview surface.

Keep serve-sim on its default `127.0.0.1` binding. Do not expose its preview to a LAN or tunnel unless the user explicitly requests that access and the network is trusted; the preview includes a token-gated shell-execution route.

## Start one owned stream

1. Obtain the exact simulator UDID from the iOS build or launch workflow.
2. Check whether an existing serve-sim stream for that UDID belongs to another task. Reuse it only when explicitly shared; never kill another task's stream.
3. Otherwise, clear only a stale stream for that UDID and start the pinned version with scoped cleanup:

```bash
SIMULATOR_ID=<simulator-udid>
cleanup_serve_sim() {
npx --yes serve-sim@0.1.45 --kill "$SIMULATOR_ID" >/dev/null 2>&1 || true
}
trap cleanup_serve_sim EXIT INT TERM HUP
cleanup_serve_sim
npx --yes serve-sim@0.1.45 "$SIMULATOR_ID"
```

4. Keep the terminal alive and open the exact local URL printed by serve-sim in the agent's browser.
5. Verify that a live simulator frame renders. A loaded wrapper page is not sufficient evidence.

## Observe while driving semantically

- Let the user watch the serve-sim stream while XcodeBuildMCP performs `snapshot_ui`, semantic taps, typing, gestures, and screenshots.
- Keep the browser and Xcode tooling pinned to the same simulator UDID.
- Do not switch to generic desktop automation or browser-canvas clicking merely because the stream is visible.

If the in-app browser explicitly reports that previews are unavailable, do not install unrelated browser automation. Continue through XcodeBuildMCP, capture a simulator screenshot, report the unavailable live stream, and clean up the owned serve-sim process.

## Finish

Stop the long-running terminal and wait for its cleanup trap to finish. If it disappeared without cleanup, run `npx --yes serve-sim@0.1.45 --kill <simulator-udid>` for that exact simulator. Never run an unscoped `--kill`.

## Upstream

Adapted from OpenAI's [`build-ios-apps`](https://github.com/openai/plugins/tree/main/plugins/build-ios-apps) plugin version `0.1.2` (`ios-simulator-browser`, MIT). It invokes serve-sim `0.1.45` under its Apache-2.0 license without vendoring the package.
4 changes: 4 additions & 0 deletions .agents/skills/ios-simulator-browser/agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
interface:
display_name: "iOS Simulator Browser"
short_description: "Stream iOS Simulator in the browser"
default_prompt: "Use $ios-simulator-browser to stream the selected iOS Simulator into the T3 Code in-app browser."
42 changes: 37 additions & 5 deletions .agents/skills/test-t3-app/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,47 @@
---
name: test-t3-app
description: Launch and test the T3 Code web app in isolated development environments, including first-try browser authentication with one-time pairing URLs, pairing-token recovery, worktree-safe state directories, dev server lifecycle, and direct SQLite inspection or fixture seeding. Use when an agent needs to run T3 locally, test UI behavior in a browser, recover from an expired or consumed pairing token, isolate dev state, or prepare test data in state.sqlite.
description: Launch, retain, and test the T3 Code web app in isolated development environments, including first-try browser authentication with one-time pairing URLs, pairing-token recovery, worktree-safe state directories, cross-turn dev server lifecycle, and direct SQLite inspection or fixture seeding. Use when an agent needs to run T3 locally, iteratively test UI behavior with a human, recover from an expired or consumed pairing token, isolate dev state, or prepare test data in state.sqlite.
---

# Test T3 App

Use this skill for the web client. For iOS Simulator, Android Emulator, or physical-device testing against an isolated T3 backend, use the sibling [`test-t3-mobile`](../test-t3-mobile/SKILL.md) skill.

## Start an isolated web environment

1. Run commands from the repository root.
2. Choose a base directory that belongs only to the current worktree or test:
- Use the repository's ignored `.t3` directory for reusable worktree-local state.
- Use `mktemp -d /tmp/t3code-test.XXXXXX` for disposable state and retain the printed absolute path.
3. Start the full web stack with `vp run dev --home-dir <base-dir>`.
3. Start the full web stack with `vp run dev`. Add `--share` when the user needs to open it from another tailnet device. In a linked worktree it defaults to that worktree's gitignored `.t3`; pass `--home-dir <base-dir>` only when the test needs a different isolated directory.
4. Keep the terminal session alive and read the selected server port, web port, base directory, and pairing URL from its output.

Treat a base directory as disposable only when it was created or deliberately selected for the current test. Never delete or directly seed the shared `~/.t3` directory. Prefer starting with a new temporary base directory over clearing state of uncertain ownership.

The worktree-local default deliberately outranks an ambient `T3CODE_HOME`; do not pass the shared home through to a worktree dev server.

Ports are derived from the worktree path but can shift when occupied. Always read the actual values from the `[dev-runner]` line.

Shared browser dev is single-origin: Vite proxies the backend paths, so never set `VITE_HTTP_URL` or `VITE_WS_URL` for `dev`/`dev:web`.

The dev runner disables browser auto-open by default. Do not pass `--browser` during automated testing: an automatically opened page can consume the one-time bootstrap token before the controlled browser uses it.

### Verify a shared environment before human handoff

When another person will use the printed pairing URL, first open the shared origin without the pairing path or fragment in the controlled browser and confirm the T3 Code app loads. This browser navigation is required even when curl succeeds because browsers block some otherwise reachable ports before making a network request.

Do not open the other person's complete pairing URL during this reachability check; doing so consumes its one-time token. If the agent also needs an authenticated browser, create and consume a separate pairing token, then leave a fresh token for the other person.

## Preserve the environment while iterating

Treat the overall testing or implementation loop—not an assistant turn or one verification pass—as the environment lifecycle boundary.

- Keep the dev process, base directory, selected ports, authenticated browser tab, registered projects, and seeded fixtures alive while the user may inspect the result or request follow-up changes.
- Do not stop the server merely because one verification pass completed or because you are yielding a response to the user.
- Before starting another environment, check whether the existing process and browser tab still serve the task. Reuse them when healthy instead of discarding useful state.
- On a later turn, verify that the existing process is alive and reuse its printed ports and base directory. If it exited, restart with the same base directory; create a new pairing token only when the browser session is no longer valid.
- Tell the user when a test environment remains available, including its non-secret web URL when useful. Never include a pairing token.

## Authenticate the browser on the first navigation

1. Wait for the server log that says authentication is required and includes a URL ending in `/pair#token=...`.
Expand All @@ -43,7 +67,7 @@ T3CODE_PORT=<server-port> node apps/server/src/bin.ts auth pairing create \

Use the `Pair URL` from this command once. Derive `<server-port>` and `<web-url>` from the current dev-runner output, including any automatically selected port offset. Setting `T3CODE_PORT` keeps the administrative CLI from probing for an unrelated free port.

Always pass `--dev-url` for a dev-runner environment so the generated pairing URL uses the current web origin. An explicit base directory stores runtime state in `<base-dir>/userdata`; the `<base-dir>/dev` fallback is only used by an implicit dev home. Use `auth pairing list` to inspect active token metadata; it intentionally cannot reveal token secrets.
Always pass `--dev-url` for a dev-runner environment so the generated pairing URL uses the current web origin. An explicit base directory stores runtime state in `<base-dir>/userdata`; the `<base-dir>/dev` fallback is only used by an implicit dev home. A worktree-local `.t3` counts as explicit, so its state lives in `<worktree>/.t3/userdata`. Use `auth pairing list` to inspect active token metadata; it intentionally cannot reveal token secrets.

## Inspect or seed SQLite state

Expand All @@ -56,9 +80,17 @@ Read [references/sqlite-fixtures.md](references/sqlite-fixtures.md) before chang

The helper refuses to write to the shared `~/.t3` directory by default and creates a database backup before each mutation.

## Finish the test
## Tear down only when the testing loop is finished

Tear down when the user explicitly asks, confirms the iteration is finished, or the overall task is genuinely complete with no pending human review. Do not infer completion from the end of an assistant turn.

When teardown is appropriate:

1. Stop the dev process with its terminal interrupt.
2. Preserve the isolated base directory when it contains useful reproduction evidence or state for a likely follow-up.
3. Otherwise remove only a path created for this test after resolving and verifying the exact target.

Stop the dev process with its terminal interrupt. Preserve the isolated base directory when it contains useful reproduction evidence; otherwise remove only a path that was created for this test after resolving and verifying the exact target. A fresh isolated base directory is the safest reset when authentication, migrations, or fixture state becomes ambiguous.
If completion is uncertain, keep the environment alive and mention that it is retained for further iteration. A fresh isolated base directory remains the safest reset when authentication, migrations, or fixture state becomes ambiguous.

## Troubleshoot predictably

Expand Down
4 changes: 2 additions & 2 deletions .agents/skills/test-t3-app/agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
interface:
display_name: "T3 App Testing"
short_description: "Launch and seed isolated T3 test environments"
default_prompt: "Use $test-t3-app to launch an isolated T3 development environment and test it in the browser."
short_description: "Launch and retain isolated T3 test environments"
default_prompt: "Use $test-t3-app to launch an isolated T3 environment and iteratively test it in the browser while preserving state."
Loading
Loading