Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
219 commits
Select commit Hold shift + click to select a range
7778a1c
Use rounded depth logo for production splash screen (#3780)
juliusmarminge Jul 7, 2026
03ac1f0
fix(release): stage pnpm 11 allowBuilds for desktop installs (#3781)
juliusmarminge Jul 7, 2026
e775bc6
Upgrade Clerk toolchain to latest versions (#3785)
juliusmarminge Jul 8, 2026
0c66565
fix(release): bump electron-builder so pnpm 11 deduped deps land in t…
avocardow Jul 8, 2026
18a4138
Fix desktop native optional dependency packaging (#3816)
Prgm-code Jul 9, 2026
e912765
[codex] Upgrade Clerk stack (#3821)
juliusmarminge Jul 9, 2026
3201e00
[codex] Preserve worktree metadata during branch sync (#3822)
juliusmarminge Jul 9, 2026
2250e3e
feat(client): persist offline environment data and mobile preferences…
juliusmarminge Jul 9, 2026
ca1e08b
[codex] Label max and ultra reasoning (#3824)
juliusmarminge Jul 9, 2026
843cf17
fix(mobile): embed fonts and render project favicons reliably (#3823)
juliusmarminge Jul 9, 2026
8619ef2
Show compact PR number badges in mobile thread rows (#3827)
juliusmarminge Jul 9, 2026
f61fa94
Expose mobile PR indicator labels to accessibility (#3828)
juliusmarminge Jul 9, 2026
ef943a2
Fix truncated chat error alert layout (#3899)
jakeleventhal Jul 12, 2026
619b0ec
fix(marketing): show platform-appropriate commit shortcut on the webs…
VedankPurohit Jul 12, 2026
c1ec191
[codex] Add Android mobile support (#3579)
juliusmarminge Jul 12, 2026
8de254a
Use client-side fallbacks for missing project favicons (#3959)
juliusmarminge Jul 14, 2026
735240f
Skip stale working-task notifications (#3961)
juliusmarminge Jul 14, 2026
3513fa0
Prepare Android beta branding and review diff UI (#3967)
juliusmarminge Jul 14, 2026
2fdc704
perf(web): duty-cycle status animations and remove fixed noise overla…
t3dotgg Jul 15, 2026
7b928d5
fix(docs): correct CI task-runner commands in ci.md (#3990)
kridaydave Jul 15, 2026
c69120f
fix(docs): repair broken source links in architecture overview (#3991)
kridaydave Jul 15, 2026
4624426
fix(docs): replace stale codething-mvp absolute paths with repo-relat…
kridaydave Jul 15, 2026
d359789
docs: Add T3 Code Legal Docs (#3972)
juliusmarminge Jul 15, 2026
ecb35f7
Fix Legal modal header crash (#4000)
juliusmarminge Jul 15, 2026
b982337
[codex] Fix onboarding connection status (#4001)
juliusmarminge Jul 16, 2026
5e8b2c8
Isolate native diff highlight grammar state (#4029)
juliusmarminge Jul 16, 2026
0418301
Fix macOS fullscreen titlebar spacing (#4019)
D3OXY Jul 16, 2026
d114e27
Prevent duplicate project workspace roots (#3829)
juliusmarminge Jul 16, 2026
54f167e
Normalize over-indented markdown list items (#4020)
juliusmarminge Jul 16, 2026
bde0a4c
Resolve localhost preview URLs for remote environments (#4011)
juliusmarminge Jul 16, 2026
2a33a18
fix(mobile): Send composer images in upload wire format (#4035)
juliusmarminge Jul 16, 2026
5d68fca
Fix iOS terminal Enter input encoding (#4043)
juliusmarminge Jul 16, 2026
fdca154
Add native mobile share target support (#4021)
juliusmarminge Jul 16, 2026
8a02c71
[codex] Expand real-route app store screenshot harness (#4014)
juliusmarminge Jul 17, 2026
eb733c1
fix(server): use CLAUDE_CONFIG_DIR instead of HOME for Claude instanc…
dmstoykov Jul 17, 2026
c14a5ca
Fix dropped events during initial thread snapshot (#4079)
D3OXY Jul 17, 2026
1f27973
feat: show nightly update changelog tooltip (#3832)
HugoVizcainoSantana Jul 17, 2026
58302b2
fix(git): treat selected commit paths literally (#3998)
EricTsai83 Jul 17, 2026
8b54698
fix(server): stabilize non-repository Git diagnostics (#4077)
EricTsai83 Jul 17, 2026
6e9987c
Refresh app icons across release variants (#4080)
juliusmarminge Jul 17, 2026
0748134
Update marketing GitHub star count (#4088)
AmoonPod Jul 17, 2026
4804a98
fix(marketing): correct Cursor icon color (#4090)
AmoonPod Jul 17, 2026
c49d424
Normalize protocol-relative remote host input as https (#3971)
kridaydave Jul 17, 2026
7f1cb61
fix(cursor): default binary path to cursor-agent (avoid path conflict…
BunnyGamezsc Jul 17, 2026
f9a4f59
Fix documented task-runner commands (bun run -> vp) (#3965)
kridaydave Jul 17, 2026
a7f6d97
Allow preview panel to grow on wide displays (#4044)
olivoil Jul 17, 2026
e057e2e
fix: prevent initial right-click from selecting a context menu item (…
Fazalkadivar21 Jul 17, 2026
7dc7512
Fix duplicate keybinding rule when replacing with an existing rule (#…
kridaydave Jul 17, 2026
ed81c15
fix(server): image upload crashed dispatchCommand with a stack overfl…
t3dotgg Jul 17, 2026
b49a2e6
Remove unused code parameter from describePreviewError (#3970)
kridaydave Jul 17, 2026
bcd640b
[codex] prevent ACP assistant ID collisions after restarts (#3932)
maxwellyoung Jul 17, 2026
7b8d126
fix(web): inset Windows desktop scrollbars from resize edge (#4097)
nateEc Jul 17, 2026
6a17629
[codex] fix mobile composer Enter behavior (#3930)
maxwellyoung Jul 17, 2026
cf58cad
feat(server): include runtime model and effort in Codex developer ins…
t3dotgg Jul 17, 2026
143b9c9
fix(ux): spamming cmd + , no longer stack opening settings (#2757)
jamesx0416 Jul 17, 2026
1047dac
fix(terminal): strip AppImage runtime env from spawned terminals (#3108)
leorivastech Jul 17, 2026
4e3f2f0
fix(server): thread cwd through Claude capability probe (#2048) (#2124)
mvanhorn Jul 17, 2026
b655a9f
[codex] fix: guard invalid web timestamps (#3515)
StiensWout Jul 17, 2026
43e2aea
[codex] fix: tolerate invalid latest user message timestamps (#3521)
StiensWout Jul 17, 2026
73bf127
[codex] Fix provider update checks restore defaults (#3531)
StiensWout Jul 17, 2026
31ca9e5
fix(server): skip undecodable provider runtime rows when listing sess…
t3dotgg Jul 17, 2026
24f9c2a
Share MCP OAuth locks across Codex shadow homes (#4104)
juliusmarminge Jul 17, 2026
8b33799
Preserve T3 Code identity in macOS development launcher (#4102)
juliusmarminge Jul 17, 2026
5ca3266
fix(web): increase contrast of question option descriptions (#3867)
xxashxx-svg Jul 17, 2026
1bd2fa2
feat: draft hero landing on the index route (#4055)
yordis Jul 18, 2026
4cfec8c
feat: file explorer mention actions and zoom-aware context menus (#4054)
yordis Jul 18, 2026
2318e00
fix(web): avoid duplicate mention text on paste
juliusmarminge Jul 18, 2026
03e20c8
fix(mobile): restore iOS home screen branding (#4025)
PixPMusic Jul 18, 2026
765e1b5
perf(client): defer active thread cache writes (#4006)
Chrrxs Jul 18, 2026
38e0bb0
Default diffs to working changes (#3974)
jakeleventhal Jul 18, 2026
e350c0a
Add Grok to marketing site provider list (#3484)
Aditya190803 Jul 18, 2026
31caa56
Fix reopening existing Diff tab (#3973)
jakeleventhal Jul 18, 2026
d8b12ae
Fix sending messages during active turns (#3919)
jakeleventhal Jul 18, 2026
d0b9f8d
[codex] Route OpenCode missing-session errors through Effect (#3608)
StiensWout Jul 18, 2026
c0e161a
[fix/feat:ui] Show default option badge (#3232)
sandersonstabo Jul 18, 2026
e63403f
[fix/feat:ui] Preserve open-in editor brand colors (#3225)
sandersonstabo Jul 18, 2026
b859a57
fix(web): handle macOS Home and End in composer (#2508)
GuilhermeVieiraDev Jul 18, 2026
0506508
Allow failed remote environments to be removed (#4084)
zepi2509 Jul 18, 2026
da3c203
[codex] canonicalize client timestamps (#4112)
maxwellyoung Jul 18, 2026
5c66110
[fix/feat:ui] Make selected menu checks blue (#3234)
sandersonstabo Jul 18, 2026
bf76535
fix(desktop): Validate WSL node version against engine range after pr…
UtkarshUsername Jul 18, 2026
ebe8afb
Refresh splash screen and favicon branding (#4120)
juliusmarminge Jul 18, 2026
1735e27
Add terminal selection copy action (#2904)
tarik02 Jul 18, 2026
4f11740
Add isolated app testing workflow (#4121)
juliusmarminge Jul 19, 2026
53e3c98
feat(web): themed sidebar header art for nightly and dev builds (#4130)
maria-rcks Jul 19, 2026
7a820ab
feat: add headless `t3 connect` setup for SSH hosts (#3749)
t3dotgg Jul 19, 2026
2b180a2
Refine T3 Connect authorization surfaces (#4159)
juliusmarminge Jul 19, 2026
398140a
fix: increase OpenCode server startup timeout from 5s to 30s (#4132)
UtkarshUsername Jul 19, 2026
e8ff6bc
fix(shared): delete unused agentAwareness phase predicates (#4134)
kridaydave Jul 19, 2026
271454c
fix(mobile): Stabilize native stack option updates (#4037)
juliusmarminge Jul 19, 2026
69c8be2
Make test-t3-app skill discoverable by Claude Code (#4162)
juliusmarminge Jul 19, 2026
b511227
fix(web): improve dev sidebar backdrop contrast & remove version pill…
maria-rcks Jul 19, 2026
7e1a0d5
Fix draft banner stack overlap (#4164)
juliusmarminge Jul 19, 2026
e34250d
Add portable mobile app testing guidance (#4165)
juliusmarminge Jul 19, 2026
2640e6d
fix(client): use lightweight connection probe (#4137)
eeinarsson Jul 19, 2026
3795dbb
fix(server): resolve Claude SDK executable path on Windows npm instal…
nsxdavid Jul 20, 2026
63b6b44
Fix project action preview settings persistence (#3842)
keeperxy Jul 20, 2026
78485e6
fix(desktop): allow clipboard writes in the preview browser (#3889)
carlosricojr Jul 20, 2026
dfbda84
fix(web): handle sidebar shortcut before editors (#3921)
Bortlesboat Jul 20, 2026
68ea280
fix(server): recognize Bedrock-backed Claude as authenticated (#3931)
PieterVanZyl-Dev Jul 20, 2026
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
d963ff7
merge: upstream through 6f34ad3e8 (2026-07-21) — pre-Sidebar-v2 cut
DanielGGordon 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
7c1b9f6
chore(git): restore upstream ancestry lost to the #42 squash-merge
DanielGGordon Jul 27, 2026
db0ae20
merge: upstream through f4c394323 (2026-07-26) — Sidebar v2, glass re…
DanielGGordon Jul 27, 2026
598e0c0
docs(sync): divergence entry, no-squash rule, rollback runbook, prod …
DanielGGordon Jul 27, 2026
5c36ee8
test(migrations): guard the fork's id-33 offset against a high-water …
DanielGGordon Jul 27, 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
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .agents/skills/redeploy/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ Redeploys the self-hosted T3 Code server to the current `origin/main`. The logic

## CRITICAL — this session will drop

This chat runs *inside* `t3code.service`. When the service restarts, **this chat's own
This chat runs _inside_ `t3code.service`. When the service restarts, **this chat's own
session disconnects.** That is expected and unavoidable — the deploy still finishes in the
background. Reconnect and read the status log.

Expand Down
40 changes: 35 additions & 5 deletions .agents/skills/test-t3-app/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
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
Expand All @@ -13,13 +13,35 @@ Use this skill for the web client. For iOS Simulator, Android Emulator, or physi
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 @@ -45,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 @@ -58,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."
33 changes: 33 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,14 @@ If a tradeoff is required, choose correctness and robustness over short-term con

Long term maintainability is a core priority. If you add new functionality, first check if there is shared logic that can be extracted to a separate module. Duplicate logic across multiple files is a code smell and should be avoided. Don't be afraid to change existing code. Don't take shortcuts by just adding local logic to solve a problem.

## Dev Servers

- In a linked git worktree, dev state defaults to that worktree's gitignored `.t3`. This deliberately outranks an ambient `T3CODE_HOME`, which could otherwise select the installed app's live `~/.t3/userdata` database. An explicit `--home-dir` still wins.
- Start the web stack with `vp run dev`. Add `--share` when someone needs to open it from another device on the tailnet.
- Browser dev is single-origin: Vite proxies `/api`, `/ws`, `/oauth`, and `/.well-known` to the backend. Do not set `VITE_HTTP_URL` or `VITE_WS_URL` for `dev`/`dev:web`.
- Worktree paths supply stable preferred port offsets. Read the actual server and web ports from the `[dev-runner]` line because occupied ports can still shift them.
- Before handing off a `--share` URL, open its origin in a controlled browser and confirm the app loads. A successful curl is insufficient because browsers reject some otherwise reachable ports.

## Package Roles

- `apps/server`: Node.js WebSocket server. Wraps Codex app-server (JSON-RPC over stdio), serves the React web app, and manages provider sessions.
Expand All @@ -86,6 +94,31 @@ sessions T3 itself spawned are skipped (`skipped-owned` — session id found in
worktrees dir; `skipped-copy` — a forkSession copy whose message uuids largely already live on
another thread), and deleted imported threads stay deleted via the event-log tombstone.

## Upstream sync PRs: NEVER squash-merge

Sync PRs (`merge: upstream through <sha>`) must land as a **merge commit** or a
fast-forward push (`git push origin HEAD:refs/heads/main`). Never squash-merge,
never rebase-merge, never `git revert -m 1`.

Squash-merging discards the second parent, so git stops believing upstream is an
ancestor. PR #42 was squash-merged and the next sync's conflict set went from
18 files / 40 hunks to **76 files / 238 hunks** — a 4x tax paid for one wrong
click, plus an inflated 208-commit delta when only 79 commits were actually new.
Rebase-merge cannot replay merge commits at all. `git revert -m 1` is the same
class of trap: ancestry keeps claiming upstream is merged while the content is
gone, so a later `git merge upstream/main` never restores the reverted files.

If it happens anyway, it is repairable while the PR branch still exists on
GitHub (the repo has `delete_branch_on_merge:false`): re-merge that branch with
`git merge --no-ff origin/t3code/<branch>`. The tree is unchanged and the
upstream parent is restored.

After landing a sync, assert the repair held:

```
git merge-base origin/main upstream/main # must be the SHA you merged, not an older one
```

## Finishing a feature: MANDATORY test-deploy + PR flow

When a feature or bugfix is complete in a `t3code/*` worktree, do NOT merge to `main`. Follow **[docs/test-deployments.md](docs/test-deployments.md)**: open a PR, deploy the branch to a test port from the pool (`node scripts/test-deploy.ts --pr <url> --note "<desc>" --comment`), and comment the test URL on the PR so the user can jump straight into the running instance. Prod (external `7443` / loopback `3773` / unit `t3code.service`) is only redeployed from `main` after the user approves the PR — and `t3code.service` is never restarted without explicit user approval in the conversation. The scripts refuse all prod targets; never work around the guard.
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,8 @@ There's no public docs site yet, checkout the miscellaneous markdown files in [d
## Documentation

- [Getting started](./docs/getting-started/quick-start.md)
- [Remote access](./docs/user/remote-access.md)
- [Keeping T3 Code in sync](./docs/user/server-updates.md)
- [Architecture overview](./docs/architecture/overview.md)
- [Provider guides](./docs/providers/codex.md)
- [Operations](./docs/operations/ci.md)
Expand Down
Loading
Loading