Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
213 commits
Select commit Hold shift + click to select a range
1b120f3
fix(ci): extend release publish timeout (#6034)
t3-code[bot] Aug 10, 2026
428d9f9
Allow Android tablets to rotate (#5613)
juliusmarminge Aug 10, 2026
a7b0366
fix(web): account for Windows window controls in PR page header (#6049)
UtkarshUsername Aug 10, 2026
9afef94
feat: add three-hour snooze option (#5914)
Noojuno Aug 10, 2026
e5c82d7
fix(mobile): keep chat composer above the Android gesture bar (#5988)
PollyGlot Aug 11, 2026
2ea51bd
fix(server): OpenCode model parsing drops models with a slash in the …
arhxam Aug 11, 2026
59d0c92
fix(web): persist sidebar shelf collapse state (#5136)
PixPMusic Aug 11, 2026
f973097
perf(web): skip base64 for oversized image candidates (#5220)
tarik02 Aug 11, 2026
1fa315e
fix(server): skip Linux libc detection on Windows/macOS (#5354)
bkntr Aug 11, 2026
c14bcca
fix(server): advertise 256-color TERM on Windows terminals (#5693)
yassiEmp Aug 11, 2026
9c7622d
fix(server): handle unborn HEAD in VCS status (#5944)
t3-code[bot] Aug 11, 2026
f5fce74
fix(pull-requests): route self-hosted GitLab remotes (#6061)
GuilhermeVieiraDev Aug 11, 2026
752acbf
feat: add ability to create a new thread in the current project with …
UtkarshUsername Aug 11, 2026
65b005f
feat(web): add Copy Thread ID to the sidebar and chat header thread c…
UtkarshUsername Aug 11, 2026
6676f9c
fix(mobile): stabilize thread composer and interactions (#5986)
juliusmarminge Aug 11, 2026
c842c6f
Add hourly past-24-hour usage view (#6170)
juliusmarminge Aug 11, 2026
3da7f9c
fix(mobile): guard App Store release versions (#6177)
juliusmarminge Aug 11, 2026
ac4780f
fix(web): restore typography font sizes to defaults (#6172)
StiensWout Aug 11, 2026
b30a9bc
feat(web): make environment artwork theme aware (#6183)
juliusmarminge Aug 11, 2026
6befe42
fix(shared): normalize a bare Windows drive root the same as C:\ / C:…
arhxam Aug 11, 2026
220e573
fix(shared): detect Azure DevOps SSH remotes (ssh.dev.azure.com) (#6187)
arhxam Aug 11, 2026
44621c3
feat(web): add back buttons for the pull requests and usage pages in …
UtkarshUsername Aug 11, 2026
1e355a2
fix(web): render dropdowns above toasts (#6165)
Brechard Aug 11, 2026
57b1052
fix(web): thread error banner dismiss survives reconnect and rerender…
myacoub91 Aug 11, 2026
3517201
fix(web): use a clearer pull action icon (#6194)
extoci Aug 11, 2026
083fa4a
feat(web): use OKLCH for theme palettes (#6036)
StiensWout Aug 11, 2026
2db0845
fix(web): use upload icon for disabled push action (#6207)
t3-code[bot] Aug 11, 2026
f0b57ca
feat(web): add Open VSX theme search (#5654)
t3-code[bot] Aug 11, 2026
c196f42
fix(web): clean up composer resize animation (#6209)
extoci Aug 11, 2026
52e5a75
feat(web): compact sidebar footer actions (#6210)
maria-rcks Aug 11, 2026
560d4a4
fix(web): keep sidebar wordmark visible at minimum width (#6246)
extoci Aug 11, 2026
d37a9b0
feat(mobile): add thread title regeneration (#6253)
chrisdeeming Aug 12, 2026
63e6fae
chore: add dara to vouched (#6259)
maria-rcks Aug 12, 2026
5a84614
fix(web): align the composer model picker (#6252)
t3-code[bot] Aug 12, 2026
e1378a1
fix(mobile): keep ordered lists inside user bubbles (#6154)
none23 Aug 12, 2026
b54bfc9
feat(web): a better right panel empty state (#6258)
StiensWout Aug 12, 2026
6fd088a
fix(web): align mobile onboarding header (#6293)
t3-code[bot] Aug 12, 2026
849bac8
fix(connect): preserve CLI OAuth parameters through browser sign-in (…
juliusmarminge Aug 12, 2026
e321667
fix(web): prevent changed files header overlap (#6314)
t3-code[bot] Aug 12, 2026
f131228
fix(web): theme Clerk surfaces (#6300)
StiensWout Aug 12, 2026
b73232b
feat(web): reset sidebar width on double click (#6320)
extoci Aug 12, 2026
8601797
fix(web): align update toast release notes link (#6322)
t3-code[bot] Aug 12, 2026
770946d
fix(web): render tooltips above dropdowns (#6241)
extoci Aug 12, 2026
8d24b51
fix(web): open modified PR clicks in browser (#6278)
t3-code[bot] Aug 12, 2026
18918d1
Fix mobile command popover glass rendering (#6370)
juliusmarminge Aug 12, 2026
e3a9c25
test(mobile): seed snoozed showcase threads (#5155)
PixPMusic Aug 12, 2026
9666b87
fix(web): preserve appearance mode when changing themes (#6343)
extoci Aug 12, 2026
d0b8d63
feat(connect): deregister account environments from any client (#4844)
StiensWout Aug 12, 2026
b28f9bf
feat(web): pull request surfaces — filters & qualifiers, all-server l…
Bil0000 Aug 12, 2026
2eb099f
fix(web): cmd+click sidebar PR numbers open in the browser (#6378)
t3dotgg Aug 12, 2026
ac1264e
feat(web): project favicon and workspace icons in command subtitles (…
gsimone Aug 12, 2026
da6253b
web/settings: fix source control scan on relay environments (#6230)
dominic-r Aug 12, 2026
33f9705
fix(web): make reset zoom hover visible (#6385)
t3-code[bot] Aug 12, 2026
1e59b4c
fix(web): keep the typed prompt when a draft changes repo (#6393)
t3dotgg Aug 12, 2026
6bc6cb6
fix(web): keep diff file lists scrollable past expanded files (#6423)
dominic-r Aug 13, 2026
df19f6c
fix(server): align Codex collaboration prompts (#6432)
none23 Aug 13, 2026
5015d7c
fix(web): keep turn minimap stable as composer grows (#6414)
extoci Aug 13, 2026
97db94c
fix(web): keep pull request panel within viewport (#6451)
Bil0000 Aug 13, 2026
9513e62
Add bil0000 to VOUCHED contributors list (#6462)
maria-rcks Aug 13, 2026
2ab188f
fix: ignore pull request actions in latency tracker (#6476)
t3-code[bot] Aug 13, 2026
9e20194
Remove rebase requirement before opening PR (#6479)
juliusmarminge Aug 13, 2026
fd51561
fix(mobile): extend blockquotes across wrapped lines (#6482)
chrisdeeming Aug 13, 2026
83ad26c
fix(mobile): prevent invalid HTML entities from crashing markdown (#6…
Lucenx9 Aug 13, 2026
1b16ed6
fix(web): avoid Clerk close button overlap (#6442)
t3-code[bot] Aug 13, 2026
2fab18e
fix(web): show unlinked icon when viewport aspect ratio is unlocked (…
UtkarshUsername Aug 13, 2026
92d4a2e
fix(web): scope pull request errors to their environment (#6490)
Adamulek123 Aug 13, 2026
bad1143
fix(mobile): show a real settings cog in the Android sidebar header (…
paul-vd Aug 13, 2026
23d45d9
fix(web): restore default stage artwork colors (#6535)
t3-code[bot] Aug 13, 2026
5ff3a03
fix(web): align sidebar wordmark label (#6086)
WarheadTaylor Aug 13, 2026
96bfa67
fix(web): align the snoozed thread wake icon (#6215)
RakshithBhat03 Aug 13, 2026
db1507e
feat: allow disabling auto-settle on merge (#5880)
t3dotgg Aug 13, 2026
85389b9
Nest mobile task settings in bottom sheets (#6224)
juliusmarminge Aug 13, 2026
5304f3e
chore(mobile): bump app version to 1.0.4
t3-code[bot] Aug 14, 2026
59be6f7
fix(web): simplify the desktop-managed server update banner copy (#6549)
t3dotgg Aug 14, 2026
e15f655
fix(web): show background policy tooltips sooner (#6506)
davidhu2000 Aug 14, 2026
710fd0e
feat(desktop): add favicons to the Browser panel (#5644)
chrisdeeming Aug 14, 2026
9fd788b
fix(preview): only show browser-ready local servers (#6021)
chrisdeeming Aug 14, 2026
7e01d33
perf(build): stop unpacking node_modules wholesale from the Windows a…
tsouth89 Aug 14, 2026
baaeda3
fix: avoid stale Live Activities when publishing is disabled (#6325)
juliusmarminge Aug 14, 2026
8f9ab08
fix(mobile): add breathing room between the git progress overlay and …
PollyGlot Aug 14, 2026
4a2f8b0
fix(web): keep thread rename open during IME composition (#6281)
MichaelCharles Aug 14, 2026
6ae44b4
refactor(mobile): name the iOS nav bar height fallback (#6589)
PollyGlot Aug 14, 2026
b3b4b57
fix(mobile): preserve keyboard suggestions while typing (#6323)
juliusmarminge Aug 14, 2026
21a3669
fix(mobile): prevent OTA update restart crashes (#6324)
juliusmarminge Aug 14, 2026
038560e
fix(web): align every titlebar control cluster on one shared inset (#…
juliusmarminge Aug 14, 2026
184d8ef
fix(mobile): steer active turns by default (#6543)
chrisdeeming Aug 14, 2026
1a65994
fix(web): clarify desktop update status (#6504)
StiensWout Aug 14, 2026
8099140
fix(server): terminal subprocess polling no longer floods the PID spa…
SunkenInTime Aug 14, 2026
1add47b
fix(web): add copying terminal selection with ctrl+c in the web app (…
UtkarshUsername Aug 14, 2026
c9063f0
perf(desktop): speed up Windows update installation (#6169)
StiensWout Aug 14, 2026
196c8ea
fix(web): style sidebar action tooltips (#6371)
t3-code[bot] Aug 14, 2026
9885a84
refactor(web): simplify global styling (#6381)
t3-code[bot] Aug 14, 2026
f071907
fix(server): handle files named HEAD in git status (#6397)
Lucenx9 Aug 14, 2026
e25021a
feat(packaging): maintain AUR packages in-repo (#4128)
maria-rcks Aug 14, 2026
74f7b43
fix(web): bound OKLCH gamut mapping (#6485)
Lucenx9 Aug 14, 2026
57a299a
feat(web): open remote environments in your local editor over SSH (#6…
t3dotgg Aug 15, 2026
d7abd7f
feat(web): refresh workspace layouts and tool activity
maria-rcks Aug 15, 2026
804cba4
revert: refresh workspace layouts and tool activity (#6657)
maria-rcks Aug 15, 2026
48ddb3d
feat(web): older chat timestamps show the date, not just the time (#6…
t3dotgg Aug 15, 2026
8c628f1
fix(web): align pull request action menu rows (#6534)
Bil0000 Aug 15, 2026
6ae9662
fix(web): restore selected themes in dark mode (#6665)
StiensWout Aug 15, 2026
f0ebc62
fix(web): improve Codex usage graph contrast (#6669)
StiensWout Aug 15, 2026
e9ae134
docs: route feature requests to Discussions
juliusmarminge Aug 15, 2026
d8a6dfd
fix(desktop): app zoom no longer zooms the preview browser (#6649)
juliusmarminge Aug 15, 2026
afca73d
fix(server): keep provider notification consumers alive past startSes…
tsouth89 Aug 15, 2026
7547280
fix(server): treat removed Bitbucket permissions endpoint as unknown,…
lnieuwenhuis Aug 15, 2026
672216d
fix(ssh): let cold remote servers finish starting (#6168)
gbarros-dev Aug 15, 2026
1e87029
fix(web): preserve Claude insight line breaks (#4344)
nateEc Aug 15, 2026
a6ac27e
feat(web): accept file drops across the chat workspace (#6636)
dbalders Aug 15, 2026
eaa6c47
fix(web): widen ordered-list marker gutter for 3+ digit item numbers …
lnieuwenhuis Aug 15, 2026
71c6f82
fix(server): bound thread activity hydration (#6153)
t3-code[bot] Aug 15, 2026
48cba7d
fix(web): restore the Archive action in the default sidebar thread me…
lnieuwenhuis Aug 15, 2026
9f26656
fix(web): open diff files from nested projects (#6174)
gbarros-dev Aug 15, 2026
b277cc6
fix(mobile): use tryOpenExternalUrl for markdown links in ThreadFeed …
mohamedmastouri-hue Aug 15, 2026
2cb1a26
fix(web): open the file a bare filename reference names (#6297)
Brechard Aug 15, 2026
ddee418
fix(server): stop the provider title mirror from overwriting real thr…
repparw Aug 15, 2026
178da6b
fix(shared): match source-control providers by DNS label (#6175)
gbarros-dev Aug 15, 2026
b7dbbba
feat(desktop): Chrome-style hold-to-quit (#5508)
Bil0000 Aug 15, 2026
d94fbda
fix(gitlab): submit review comments on context lines (#6348)
tarik02 Aug 15, 2026
db3278f
fix(marketing): keep Grok mark clear of mobile hero copy (#4542)
NicL9923 Aug 15, 2026
3bc4fdf
fix(mobile): recover the QR pairing scanner when camera access is den…
hey-jj Aug 15, 2026
a38cac8
fix(web): keep a long path from running under the folder picker butto…
Sy-D Aug 15, 2026
270489b
fix(terminal): right-click paste works in the terminal (#5240)
StiensWout Aug 15, 2026
4db5075
fix(mobile): explain iOS-only settings on Android (#4981)
danvernon Aug 15, 2026
9bdd912
fix(web): stop counting a workflow coordinator as a working agent (#6…
Rishet11 Aug 15, 2026
6e6d1b4
fix(web): keep floating preview anchored after panel closes (#6547)
AksharP5 Aug 15, 2026
a7c5ad5
fix(web): unstick /connect after in-modal sign-in by redirecting to t…
TorbenWetter Aug 15, 2026
7afa184
fix(web): keep send reachable while a turn is running on mobile (#4781)
AMohamedAakhil Aug 15, 2026
34a12bc
fix(web): reject unsupported composer image types at attach time (#6574)
mdshzb04 Aug 15, 2026
5ffbf3c
Make ClaudeTextGeneration tests hermetic on Windows (#4508)
mihneaptu Aug 15, 2026
143f713
fix(web): show command output in work log (#4083)
LikoKiko Aug 15, 2026
06dd999
fix(web): reserve sibling column width when resizing the right panel …
Lasdw6 Aug 15, 2026
9e61d0f
fix(web): replace whitespace in new ref names with dashes (#6270)
jorj-pineda Aug 15, 2026
c7b14a8
fix(client-runtime): branch list no longer resets while paging throug…
a20hek Aug 15, 2026
b0de385
fix(web): support Shift+Insert terminal paste (#5982)
aoright Aug 15, 2026
d79f975
fix(web): keep the composer glass aligned with the context strip at a…
Williawar Aug 15, 2026
135dc15
fix(codex): keep background memory out of chats (#5468)
AksharP5 Aug 15, 2026
51c6daa
fix(server): treat a missing Codex rollout as a recoverable resume er…
Rishet11 Aug 15, 2026
3cde99b
fix(web): hide provider Update toast action while an update is runnin…
mrmg Aug 15, 2026
e204f5a
fix(desktop): agent shells inherit a UTF-8 locale on macOS (#6236)
Linus-Boehm Aug 15, 2026
474cc5f
fix(server): ignore Claude command lifecycle messages (#6606)
naveed949 Aug 15, 2026
402c9e0
docs: mention Bitbucket user read scope needed by auth probe (#6291)
thamrx Aug 15, 2026
551f4c9
fix(server): return valid preview action results (#5966)
duncan-vc Aug 15, 2026
e9e4697
fix(claude): make "Always allow for session" stick, and only for the …
kakismash Aug 15, 2026
9d0f2fc
fix(ssh): surface a failed remote t3 install instead of a silent 0-by…
TorbenWetter Aug 15, 2026
f075a58
perf(server): persist the wire projection for streaming tool.updated …
mInrOz Aug 15, 2026
c4556ab
fix(web): stop wrapping partial code block selections in markdown fen…
JoeJoeflyn Aug 15, 2026
efe1773
fix(web): hide T3 Connect toggle in web app settings (#5068)
JoeJoeflyn Aug 15, 2026
a5d3532
fix(web): show provider account accent badge in sidebar rows and hove…
vitalyiegorov Aug 15, 2026
c0f9d91
fix(server): wait for concurrent SQLite writers instead of failing wi…
ostapondo Aug 15, 2026
7c55e86
fix(web): reject oversized prompts before provider turn start (#6602)
naveed949 Aug 15, 2026
40ab7bf
feat(web): collapse the question prompt from its header (#6773)
Jardo-51 Aug 15, 2026
684d703
fix(shared): degrade an unknown system time zone to UTC in usage wind…
Rishet11 Aug 15, 2026
ad47d23
fix(claude): discover repo-local .agents/skills in skill discovery (#…
RoshanMhatre Aug 15, 2026
d715c2e
fix(server): let slow provider CLIs raise their discovery probe budge…
CDVolvik Aug 15, 2026
d5465ae
fix(web): retain terminal PR badges after checkout switch (#4755)
sebbonit Aug 15, 2026
ca37b19
fix(web): show selected model in context window tooltip (#4772)
nqrwhal Aug 15, 2026
5e14737
fix(web): scale command details with code font (#6510)
Serendeep Aug 15, 2026
cf7bfd1
fix(web): preserve XML-like tags in user messages (#4133)
0utsights Aug 15, 2026
7c8848e
fix(desktop): route mouse thumb buttons to the in-app browser (#4459)
akosbalogh Aug 15, 2026
f915320
fix(web): keep the final segment of directory paths with a trailing s…
jorvarea Aug 15, 2026
7083bce
Keep block code plain when copying from rendered markdown (#4468)
yashranaway Aug 15, 2026
21b6fb5
fix(web): add web app manifest so installed app keeps its scope (#4306)
Albro3459 Aug 15, 2026
db02c6b
Skip user hooks during Claude capability probes (#4466)
yashranaway Aug 15, 2026
31d0fb6
fix(mobile): use Android monospace font family (#4609)
tastelessjolt Aug 15, 2026
b72d5d7
fix(desktop): timestamps follow the OS locale instead of en-US (#6190)
brzzdev Aug 15, 2026
1a5ff42
fix(web): keep multi-select questions open after the first click (#6646)
RaitP1 Aug 15, 2026
d550b82
fix(web): stop clipping the changed-files expand hover on Windows (#6…
mrmg Aug 15, 2026
86fb47a
fix(server): allow long-running git pushes (#6499)
devchaudhary24k Aug 15, 2026
160c76c
fix(desktop): keep probing backend readiness while the process is ali…
lgwacker Aug 15, 2026
dc0ff8f
fix(server): allow install scripts in npm-global provider updates (#5…
hey-jj Aug 15, 2026
7ce4194
fix: detect SSH remotes with non-git user prefixes (e.g. gitlab@) (#3…
JackatDJL Aug 15, 2026
39167eb
fix(web): describe what Ultracode does in the Reasoning picker (#6092)
delltrak Aug 15, 2026
3b54a2a
fix(server): settle pending user-input requests when a Claude session…
AaronAbuUsama Aug 15, 2026
4fc80fc
fix(server): stop replaying a command receipt for a different aggrega…
ostapondo Aug 15, 2026
07e668d
fix(server): settle snoozed threads immediately (#5379)
0bkevin Aug 15, 2026
277a7cb
fix(mobile): prevent crash on sign out in settings (#4899)
shubhu121 Aug 15, 2026
f8bb92b
fix(mobile): local-checkout threads record their branch so PR badges …
Zeus-Deus Aug 15, 2026
62bb974
fix(web): contain long approval commands (#6503)
Serendeep Aug 15, 2026
e17f244
feat(web): make right panel maximize bindable (#5091)
husseinraoouf Aug 15, 2026
61b2e74
fix(server): respect inherited OPENCODE_CONFIG_CONTENT (#4242)
jonocodes Aug 15, 2026
04f2309
fix(marketing): detect Mac chip on homepage download button (#4197)
mahdibm-dev Aug 15, 2026
931e915
Keep the server alive when a response write hits a dead socket (#4470)
yashranaway Aug 15, 2026
664499c
Limit physical key fallback to non-Latin layout output (#4469)
yashranaway Aug 15, 2026
2fc6762
fix: restore CLAUDE.md symlink target (#3929)
NgoQuocViet2001 Aug 15, 2026
ec141c1
fix(clients): default clone destination to folder plus repo name (#5989)
inayayousfi Aug 15, 2026
20a7042
fix(web): keep timestamp date and time in the same locale (#7081)
juliusmarminge Aug 15, 2026
ad11723
feat(desktop): add signal macOS DMG installer background (#6201)
Brechard Aug 15, 2026
a5e29ed
feat(web): send PR line requests to agent (#6597)
Bil0000 Aug 15, 2026
e58cbb9
fix(web): restore dark theme palette (#6663)
eddy-naboulet Aug 15, 2026
2f486ab
refactor(web): simplify advanced theme controls (#7107)
StiensWout Aug 15, 2026
d484735
fix(web): keep highlighted command menu items clear of the scroll fad…
PollyGlot Aug 15, 2026
2773229
test: remove redundant and stale tests (#6267)
t3-code[bot] Aug 16, 2026
3583cd2
test: favor behavior over implementation details (#7157)
t3-code[bot] Aug 16, 2026
d23b181
feat(mobile): add built-in themes (#6619)
chrisdeeming Aug 16, 2026
4cb676c
docs: point CLAUDE.md at AGENTS.md with an @import instead of a symli…
UtkarshUsername Aug 16, 2026
4c1d99d
fix(web): show filenames when commit dialog paths overflow (#6392)
frarredondo Aug 16, 2026
89c52a3
fix(mobile): keep sheet actions below status bar (#6635)
NitayRabi Aug 16, 2026
bab4b6f
fix(web): align Windows update confirmation copy (#7208)
StiensWout Aug 16, 2026
fee10de
feat(lint): ban native title tooltips and migrate to styled Tooltip (…
UtkarshUsername Aug 16, 2026
ba46f92
fix(pull-requests): protect provider API budgets (#6466)
Bil0000 Aug 16, 2026
949feb6
feat(web): configurable browser defaults in Settings → Integrations (…
juliusmarminge Aug 16, 2026
13458e6
fix(web): center the context usage meter (#7296)
StiensWout Aug 17, 2026
cd096b9
feat(server): let users withhold browser access from agents (#7083)
juliusmarminge Aug 17, 2026
c7e6d71
feat(web): make review verdicts legible in the pull request detail (#…
Bil0000 Aug 17, 2026
33a8b07
fix(mobile): rotate snoozed and settled shelf chevrons (#7276)
lnieuwenhuis Aug 17, 2026
a4cc136
fix(web): show all usage breakdown periods (#7219)
tris203 Aug 17, 2026
3723722
test(web): remove duplicate lookup assertion (#7364)
t3-code[bot] Aug 18, 2026
cebac35
fix(mobile): show structured input option descriptions (#7321)
none23 Aug 18, 2026
82b8a93
fix(orchestration): do not revive idle tasks from status-free progres…
maslinedwin Aug 18, 2026
508e89d
Merge remote-tracking branch 'upstream/main' into claude/sync-2026-08-18
NoahHendrickson Aug 18, 2026
be51c4f
chore(sync): absorb upstream main through 82b8a9380 (v0.0.33 cycle)
NoahHendrickson Aug 18, 2026
69246b0
chore(sync): address PR 96 review feedback
NoahHendrickson Aug 19, 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
  •  
  •  
  •  
32 changes: 16 additions & 16 deletions .agents/skills/test-t3-mobile/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -125,31 +125,29 @@ Do not start, stop, erase, or reconfigure an emulator owned by another task. Tra

## Pair each client once

Issue a fresh credential against the running backend's exact base directory:
Use the bundled helper from the repository root. It issues a fresh credential against the running backend's exact base directory, opens the existing Add Environment route with the credential in an encoded query parameter, and asks that route to connect once:

```bash
T3CODE_PORT=<server-port> node apps/server/src/bin.ts auth pairing create \
--base-dir <base-dir> \
--base-url <mobile-origin> \
--ttl 15m \
--label agent-mobile-<short-device-id>
.agents/skills/test-t3-mobile/scripts/pair-client.sh \
ios <simulator-udid> <server-port> <base-dir>

.agents/skills/test-t3-mobile/scripts/pair-client.sh \
android <emulator-serial> <server-port> <base-dir>
```

In PowerShell, set `$env:T3CODE_PORT = "<server-port>"` first and run the `node ... auth pairing create` command without the leading assignment.
Run only the command for the selected platform. The helper uses `http://127.0.0.1:<server-port>` for iOS and `http://10.0.2.2:<server-port>` for Android. Pass a fifth argument only when testing a non-development URL scheme.

If the visible Add Environment action is not exposed as a semantic target, open the app's registered route instead of guessing coordinates:
The helper opens this registered route:

```bash
xcrun simctl openurl <simulator-udid> 't3code-dev://connections/new'
adb -s <emulator-serial> shell am start -W \
-a android.intent.action.VIEW \
-d 't3code-dev://connections/new' \
com.t3tools.t3code.dev
```text
t3code-dev://connections/new?pairingUrl=<encoded-pairing-url>&autoConnect=1
```

Run only the command for the selected platform.
The Add Environment route owns the behavior: `pairingUrl` prefills its normal host and token inputs, while `autoConnect=1` submits once in development builds and returns to Home after success. Without `autoConnect`, the same route only prefills the form for manual inspection.

Do not enter pairing hosts or tokens through simulator keyboard automation. Xcode's semantic typer sends HID-style key events through the simulator's active keyboard state, which can corrupt uppercase tokens and punctuation even when the host Mac uses a U.S. input source. The one-shot route is the deterministic pairing path. Use the visible form only as a fallback, and paste credentials rather than typing them character by character.

In T3 Code Dev, open Add Environment and enter the complete `<mobile-origin>` and newly printed `Token`. Verify the expected seeded projects appear before exercising the affected flow.
Verify the expected seeded projects appear before exercising the affected flow.

Pairing credentials are secret, short-lived, and single-use. Create a different credential for every simulator, emulator, physical device, or browser. If an attempt fails, issue a new credential rather than retrying the old one. Do not expose tokens in screenshots, commits, or final responses.

Expand Down Expand Up @@ -183,6 +181,8 @@ Keep local verification focused. Do not turn this workflow into a full repositor
- **Old UI or an old error appears:** verify Metro's worktree, variant, URL, and port before diagnosing the app.
- **The environment remains empty:** verify the platform-specific HTTP origin, use a fresh token, and confirm project seeding used the identical base directory.
- **A second client cannot pair:** pairing tokens are single-use; issue another token.
- **The pairing form opens but does not connect:** confirm the deep link uses the existing `connections/new` route, includes `autoConnect=1`, and carries a freshly minted encoded `pairingUrl`.
- **Pairing text changes case or punctuation:** do not retry semantic typing. Use `scripts/pair-client.sh`; the simulator keyboard layout and HID input path are not reliable for credentials.
- **iOS semantic actions fail:** set explicit XcodeBuildMCP defaults and refresh with `snapshot_ui`.
- **Android cannot reach Metro:** verify `adb reverse` for the exact Metro port and relaunch the development-client URL.
- **Android cannot reach the backend:** use `10.0.2.2`, not `127.0.0.1`, for the Android Emulator.
72 changes: 72 additions & 0 deletions .agents/skills/test-t3-mobile/scripts/pair-client.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
#!/usr/bin/env bash

set -euo pipefail

usage() {
echo "Usage: $0 <ios|android> <device-id> <server-port> <base-dir> [url-scheme]" >&2
exit 2
}

[[ $# -ge 4 && $# -le 5 ]] || usage

platform="$1"
device_id="$2"
server_port="$3"
base_dir="$4"
url_scheme="${5:-t3code-dev}"

case "$platform" in
ios)
mobile_origin="http://127.0.0.1:${server_port}"
;;
android)
mobile_origin="http://10.0.2.2:${server_port}"
;;
*)
usage
;;
esac

repo_root="$(git rev-parse --show-toplevel)"
cd "$repo_root"

if ! pairing_output="$({
T3CODE_PORT="$server_port" node apps/server/src/bin.ts auth pairing create \
--base-dir "$base_dir" \
--base-url "$mobile_origin" \
--ttl 15m \
--label "agent-mobile-${device_id:0:8}"
} 2>&1)"; then
echo "Could not mint a mobile pairing credential." >&2
exit 1
fi

pairing_url="$(printf '%s\n' "$pairing_output" | sed -n 's/^Pair URL: //p' | tail -n 1)"
if [[ -z "$pairing_url" ]]; then
echo "Could not parse the mobile pairing URL." >&2
exit 1
fi

deep_link="$(PAIRING_URL="$pairing_url" URL_SCHEME="$url_scheme" node - <<'NODE'
const query = new URLSearchParams({
pairingUrl: process.env.PAIRING_URL,
autoConnect: "1",
});
process.stdout.write(`${process.env.URL_SCHEME}://connections/new?${query}`);
NODE
)"

case "$platform" in
ios)
xcrun simctl openurl "$device_id" "$deep_link"
;;
android)
# adb shell re-joins its arguments and evaluates them through the device
# shell, so the deep link's `?`/`&` must be quoted once more for that shell.
adb -s "$device_id" shell \
"am start -W -a android.intent.action.VIEW -d '$deep_link' com.t3tools.t3code.dev" \
>/dev/null
;;
esac

echo "Opened the existing Add Environment route with a fresh pairing credential."
118 changes: 65 additions & 53 deletions .fork/customizations.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -293,17 +293,23 @@
- apps/desktop/src/app/DesktopLinuxUrlHandler.ts
- apps/desktop/src/backend/DesktopBackendConfiguration.ts
- apps/desktop/scripts/electron-launcher.mjs
# Fenced icon-path assertions matching the launcher's fork art.
- apps/desktop/scripts/electron-launcher.test.mjs
- apps/server/src/config.ts
- apps/web/src/branding.ts
- apps/web/src/branding.test.ts
# Fenced wordmark-visibility assertions adapted to the fork brand lockup.
- apps/web/src/components/threadSidebarWidth.test.ts
- apps/web/src/components/sidebar/SidebarChrome.tsx
- apps/web/public/apple-touch-icon.png
- apps/web/public/favicon-16x16.png
- apps/web/public/favicon-32x32.png
- apps/web/public/favicon.ico
- apps/desktop/resources/icon.png
- apps/desktop/resources/icon.ico
- apps/desktop/resources/icon.icns
# Upstream retired the static desktop resource icons in the v0.0.33 cycle;
# source-tree icon resolution (incl. the darwin dev dock icon) moved into
# DesktopAssets, which the fork fences onto assets/fork.
- apps/desktop/src/app/DesktopAssets.ts
- apps/desktop/src/app/DesktopAssets.test.ts
- packages/shared/src/devHome.ts
- packages/shared/src/hostProcess.ts
- scripts/build-desktop-artifact.ts
Expand Down Expand Up @@ -2027,52 +2033,33 @@

- id: fork-chat-file-drop
intent: >
A file dragged in from outside the app can be released anywhere over the
chat column — the timeline as well as the composer docked under it — and
attaches to the composer, instead of having to be aimed at the composer
box the way upstream requires. Releasing it over the timeline used to hit
the browser default and navigate the app away to the dropped file, so a
missed drop cost the whole session. The zone is the chat column and
nothing else: the sidebar, the header, and the right panel do not attach,
leaving the right panel free to claim its own file drops later.

The window listens in the bubble phase and the customization is purely
additive: upstream's composer-scoped drag handlers stay, see every drop
aimed at them first, and a drop a nested target already claimed
(defaultPrevented) is left alone — which is also what keeps the file
tree's mention-drag channel untouched. Only drags carrying files are
claimed. Membership is hit-tested per event against the marker attribute
on ChatView's chat column, so the region survives layout changes as long
as the marker rides the column. No drag state accumulates: every handler
writes whether the pointer is over the chat right now, read off the
element the event names, with the leave reading relatedTarget — the
element being entered — because a drag leaving the window is the one
transition no enter or over reports.

Drags outside the zone are still preventDefault-ed on both dragover and
drop and then discarded, because a drop that is never handled is one the
browser opens — the dragover half is what makes the drop event fire at
all. Their dropEffect is "none" so the cursor does not promise an
attachment that will not happen. Because the window handlers run after
the composer's, the two share one drag-active state without fighting: the
composer keeps painting its drag-over tint for as long as the pointer is
over the chat, so where the file will land stays obvious. Files are handed
to the composer's existing attachment path unfiltered, so unsupported
types and the attachment limit keep reporting the same way a paste does.
Preview panes render in a webview and swallow their own drags; that is
upstream behaviour and out of scope here.
A file drop that nothing claimed cannot navigate the app away to the
dropped file. Upstream's v0.0.33 chat column
(data-chat-workspace-drop-target + makeWorkspaceFileDropHandlers) now
owns attaching drops over the whole column — which was this
customization's original job, so the fork's parallel drop system was
retired at that sync. What survives is the piece upstream still lacks: a
window-level guard, mounted from ChatView, that preventDefaults file
drags on dragover and drop when no nested target claimed them
(defaultPrevented), with dropEffect "none" so the cursor does not promise
an attachment. A missed drop over the sidebar, header, or right panel is
discarded instead of replacing the session with the file.

The guard listens in the bubble phase and stays purely additive: every
real target — upstream's column, the file tree's mention-drag channel,
any future surface — sees the event first, and only drags carrying files
are touched. It holds no drag state and paints nothing; highlighting
belongs to upstream's own column overlay and composer tint. Mounting from
ChatView is the enablement gate: no chat column on screen, no guard, so
drops elsewhere in the app keep their usual browser behaviour.
tier: 4
files:
- apps/web/src/custom/chatFileDrop.ts
- apps/web/src/custom/chatFileDrop.test.ts
shadows: []
watch:
# Carries the useChatFileDrop call and its import. Upstream's own composer
# drag handlers and isDragOverComposer state live here too — the hook
# shares that state, so a rename of it breaks the shared highlight.
- apps/web/src/components/chat/ChatComposer.tsx
# Carries data-fork-chat-drop-zone on the chat column. An upstream rework
# of that column drops the marker, and with it the whole drop region.
# Carries the fenced useStrayFileDropGuard mount and upstream's own column
# drop target the guard defers to.
- apps/web/src/components/ChatView.tsx
verify:
- apps/web/src/__fork_guards__/forkChatFileDrop.test.ts
Expand Down Expand Up @@ -2762,6 +2749,12 @@
on ChatComposer. Dark-only true-outline Previous (and shared outline
tokens with changed-files) keep Previous/Next at 24px; compact Previous
is pinned to a 24×24 square.
Upstream's v0.0.33 disclosure header (#6773, collapse the question prompt
from its header) is deliberately not ported: the fork card has its own
Questions header and no collapse affordance, and its tests assert the
shared outcome — question and options visible without interaction —
instead of upstream's toggle markup. Revisit if long prompts start
crowding the fork card.
tier: 2
files:
- apps/web/src/custom/useComposerPendingUserInputCard.ts
Expand All @@ -2772,6 +2765,10 @@
watch:
# data-fork-pending-user-input-strip on the muted vessel wrappers.
- apps/web/src/components/chat/ChatComposer.tsx
# Upstream's panel tests resolve through the alias to the shadow; fenced
# there to assert the fork card's contract (see the declined-disclosure
# note in intent).
- apps/web/src/components/chat/ComposerPendingUserInputPanel.test.tsx
# data-fork-pending-user-input-action on Previous and Next/Submit; the
# outline + 24px restyle hangs off those attributes.
- apps/web/src/components/chat/ComposerPrimaryActions.tsx
Expand Down Expand Up @@ -2822,20 +2819,35 @@

- id: mobile-current-checkout-branch
intent: >
A thread started from Mobile in Current checkout mode records the branch
currently checked out on the selected environment, even when the user did
not explicitly open the branch picker. Immediate and offline-outbox
creation must resolve that current ref so web and desktop thread rows can
render branch identity. Detached HEAD remains null rather than borrowing
the default-branch display fallback. New worktree mode still requires its
explicit base-branch flow.
A thread QUEUED OFFLINE from Mobile in Current checkout mode records the
branch checked out at compose time, so web and desktop thread rows can
render branch identity for outbox threads too.

Scope shrank in the v0.0.33 sync: upstream shipped the immediate-creation
half natively (resolveProjectThreadCreationBranch fed by
currentCheckoutBranchName from the live status stream), which also
retired the fork's own resolver — its availableBranches.find(current)
source was cache-served (listRefs lags an out-of-band git switch) and
paginated (a current branch off the loaded page silently resolved to no
branch), and passing its result into upstream's resolver short-circuited
the correct live source. The one surviving fence is the offline-outbox
path, which reuses upstream's resolver and live source verbatim.

Upstream deliberately leaves queued tasks unlabeled — a task drained days
later runs against whatever is checked out then, so a queue-time guess
can pin a stale label. The fork keeps the compose-time checkout anyway:
its users triage threads from sidebar rows where an unlabeled thread
costs more day-to-day than a rarely-stale label, and an explicit picker
choice (which upstream does record) is exactly as stale-prone. Detached
HEAD, non-repository projects, and an unarrived status stay null rather
than fabricating a branch. New worktree mode still requires its explicit
base-branch flow.
tier: 4
files:
- apps/mobile/src/custom/projectThreadBranch.ts
files: []
shadows: []
watch:
- apps/mobile/src/features/threads/new-task-flow-provider.tsx
- apps/mobile/src/features/threads/NewTaskDraftScreen.tsx
- apps/mobile/src/features/threads/projectThreadCreationValidation.ts
verify:
- apps/mobile/src/custom/projectThreadBranch.test.ts
- apps/web/src/__fork_guards__/mobileCurrentCheckoutBranch.test.ts
1 change: 1 addition & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ body:
attributes:
value: |
Use this form for broken behavior, regressions, crashes, or reliability problems.
Feature requests belong in [Discussions](https://github.com/pingdotgg/t3code/discussions/categories/ideas).
Search existing issues first and keep the report focused on one problem.
- type: checkboxes
Expand Down
5 changes: 5 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: Feature request
url: https://github.com/pingdotgg/t3code/discussions/categories/ideas
about: Suggest an improvement or new capability in Discussions.
Loading
Loading