Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
924 commits
Select commit Hold shift + click to select a range
e5c6362
fix(server): queued-input index no longer rejects user messages with …
juliusmarminge Nov 14, 2026
0035cb5
fix(server): filter scheduled tasks without exposing webhook URLs (#2…
shivamhwp Nov 14, 2026
2afee52
fix(web): distinguish media Back from window close (#33125)
shivamhwp Nov 14, 2026
2c607ad
fix(mobile): VoiceOver names the iOS message box (#34658)
MarcoDotIO Nov 14, 2026
ea05ea5
fix(server): PR sync backs off links on hosts it cannot read (#36901)
juliusmarminge Nov 14, 2026
d380556
perf(web): skip oversized TAR preview payload copies (#34301)
voltcrash Nov 14, 2026
a20c4db
fix(server): voice cleanup pinned to an ACP provider uses the text mo…
juliusmarminge Nov 14, 2026
3a5d7f3
fix(server): Swift TestFlight clients can read settings again (#26455)
shivamhwp Nov 14, 2026
3f92b48
fix(github): Load more no longer stalls on a full page of equal updat…
juliusmarminge Nov 14, 2026
34db335
fix(desktop): preserve recordings saved in the same millisecond (#34314)
romil-bijarnia Nov 14, 2026
9888694
fix(client): refresh open archive when threads are archived elsewhere…
StiensWout Nov 14, 2026
f56f27e
fix(server): keep files when submodule checks retain a worktree (#34196)
romil-bijarnia Nov 14, 2026
093c317
fix(web): copying from a later list item keeps its numbers (#36915)
StiensWout Nov 14, 2026
c76ba84
fix(server): a failed turn start no longer leaves the thread stuck st…
saphid Nov 14, 2026
756545a
fix(web): successive custom model saves keep earlier edits (#36906)
StiensWout Nov 14, 2026
5f80af6
fix(web): restore word selection in inline code (#36936)
Yash-Singh1 Nov 14, 2026
74f02db
fix(server): recognize Windows Volta provider installs (#36917)
StiensWout Nov 14, 2026
37c266d
fix(web): showing a composer banner no longer makes the page restyle …
amv146 Nov 14, 2026
7f7a1a4
fix(install): launch t3 by absolute path (#13794)
t3dotgg Nov 14, 2026
b60abf3
perf(server): Windows process launches no longer block the RPC thread…
SunkenInTime Nov 14, 2026
62a51e2
fix(web): more GitLab merge request links open their file, line or co…
TonybynMp4 Nov 14, 2026
e68d4f0
fix(opencode): show background replies after a turn settles (#36887)
StiensWout Nov 14, 2026
9ab1d22
fix(server): conventional commit subjects start lowercase (#36938)
juliusmarminge Nov 14, 2026
42bfd1f
fix(shared): stop rescanning unclosed TeX math (#34398)
voltcrash Nov 14, 2026
fa64759
fix(web): Arabic and Hebrew artifact template cards read right to lef…
newer97 Nov 14, 2026
52074e9
fix(server): stop leaving Codex plan items running after their run (#…
grey-tsosie Nov 14, 2026
6fae3c9
perf(gitlab): MR watches check a one-query fingerprint before full re…
TonybynMp4 Nov 14, 2026
20ee041
fix(web): font picker scrolls to every font in short windows (#22795)
Byntham Nov 14, 2026
b9a68e0
fix(source-control): repository paths match however their names are p…
Tabonx Nov 14, 2026
5393882
fix(mcp): return delegated task handles before client timeouts (#15622)
maria-rcks Nov 14, 2026
7873016
fix(web): allow tooltip text to wrap naturally (#36948)
Yash-Singh1 Nov 14, 2026
ed101ef
fix(preview): unload desktop pages before removing their tabs (#35135)
Kirat0201 Nov 14, 2026
0f79b40
fix(web): remove redundant status info icon (#36947)
Yash-Singh1 Nov 14, 2026
ff17cd3
fix(desktop): agent snapshots keep full detail in narrow and mini pre…
juliusmarminge Nov 14, 2026
7f81aa8
test(web): pin the minute clock in the sidebar jump-hint render test …
juliusmarminge Nov 14, 2026
632802c
fix(acp-registry): models show the reasoning levels the agent adverti…
juliusmarminge Nov 14, 2026
cbdf35f
fix(web): enable Send when the composer holds only a thread context (…
only21mil Nov 14, 2026
d080e4e
fix(web): thread details card no longer jumps mid panel animation (#2…
Yuruzuu Nov 14, 2026
2dd810d
fix(web,mobile): /btw and /side drafts show the send arrow while a tu…
juliusmarminge Nov 14, 2026
ab2bf94
fix(server): migrated databases can return freed space to disk (#30066)
advaitpaliwal Nov 14, 2026
88c42f4
fix(devices): rename EAS Simulator to Expo Simulators (#36951)
hirbod Nov 14, 2026
3530805
fix(server): find the EAS project of variant app configs (#29466)
krystofwoldrich Nov 14, 2026
852f53b
fix(server): include untracked files when Git config hides them (#23134)
only21mil Nov 14, 2026
c041761
fix(web,server): picking the previous branch after an agent's checkou…
Yuruzuu Nov 14, 2026
35e65e6
fix(server): t3_thread_list leaves out tasks delegated from a linked …
juliusmarminge Nov 14, 2026
733a200
fix(server): prune checkpoint refs owned by deleted threads (#24140)
Zheruel Nov 14, 2026
854b61b
fix(mobile): screen readers hear a thread row's status and time (#34636)
MarcoDotIO Nov 14, 2026
92595ab
fix(server): isolate Linux process launches from the RPC event loop (…
voltcrash Nov 14, 2026
1483e97
perf(server): Pull no longer waits behind other repositories' fetches…
Yuruzuu Nov 14, 2026
4d6ebbd
fix(wsl): label WSL environments with their Windows host on every cli…
RJWadley Nov 14, 2026
2dfc4a9
fix(azure-devops): derive CLI scope from checkout remotes (#21838)
juliusmarminge Nov 14, 2026
c6aea18
fix(server): subagent threads no longer show the remote parent their …
spoukyii Nov 14, 2026
dfd2187
fix(server): t3_thread_launch worktrees honor the new-worktree settin…
LymanBE Nov 14, 2026
5c85e93
perf(server): text-only browser snapshots skip the PNG encode (66 ms …
Yuruzuu Nov 14, 2026
19c9df2
fix(web): diff Copy path uses Windows separators in a Windows workspa…
spoukyii Nov 14, 2026
fed0f74
fix(opencode): usage totals include what OpenCode 2 spends on compact…
MarcoDotIO Nov 14, 2026
304dc13
fix(web): opening a project or deleting the open thread skips delegat…
spoukyii Nov 14, 2026
ee2cddf
chore(web): upgrade @pierre/diffs to 1.7.0-beta.4 and drop patched fi…
juliusmarminge Nov 14, 2026
c62c764
fix(server): keep Vietnamese words readable in scratch folder names (…
epistex-dev Nov 14, 2026
3808e2d
fix(client-runtime): a line of inline triple-backtick code no longer …
MarcoDotIO Nov 14, 2026
62405fc
fix(web): preserve thread identity across composer pastes (#30583)
ElliotDrel Nov 14, 2026
fb915ca
fix(opencode): pages a Code Mode script publishes now show inline (#3…
DavidPerezA12 Nov 14, 2026
77c9e70
fix(cursor): preserve recognized transport failure diagnostics (#30631)
trevoedwards Nov 14, 2026
26bf047
fix(client-runtime): a disconnected machine's scratch folder no longe…
tiliakoos Nov 14, 2026
635ea82
fix(mobile): iOS tab bar no longer covers a thread opened from the Us…
juliusmarminge Nov 14, 2026
1c01db0
fix(cursor): stream Task subagent work into child threads live (#30539)
humbertogontijo Nov 14, 2026
9ca6622
fix(web): app loads in browsers without URL.canParse or URL.parse (#3…
juliusmarminge Nov 14, 2026
a68c367
fix(server): preserve the crash recovery budget across restarts (#25603)
maria-rcks Nov 14, 2026
fa864bf
fix(server): Claude goals no longer re-prompt while a delegated task …
georgenijo Nov 14, 2026
6b9d90f
fix(codex): preserve terminal connection failure categories (#30639)
trevoedwards Nov 14, 2026
5bd2d0c
fix(client-runtime): derive MCP download names before URI suffixes (#…
Jo2234 Nov 14, 2026
abc0fde
fix(desktop): providers are found after a failed shell probe without …
nabettu Nov 14, 2026
e82050b
feat(themes): theme CSS can hold 50,000 characters (#36656)
pouyarezvani Nov 15, 2026
2b6c14b
fix(web): diff file Open and Reveal reach a file whose name has a bac…
only21mil Nov 15, 2026
b64eebb
fix(release): enforce packaged Linux glibc requirements (#30827)
voltcrash Nov 15, 2026
3a87ca8
fix(client-runtime): tool output no longer rounds integers beyond 2^5…
geezoria Nov 15, 2026
1d4765b
fix(gitlab): remove reactions beyond the first award page (#30700)
Jo2234 Nov 15, 2026
0bdf566
fix(server): let Expo decide EAS Simulator access (#29490)
hirbod Nov 15, 2026
3883ed5
perf(azure-devops): opening a pull request no longer reads it twice (…
amv146 Nov 15, 2026
c0561c5
fix(shared): the SQLite reader pool comes back after a failed start (…
navidnadali Nov 15, 2026
33f8c5d
fix(web): keep history-placed guest messages out of the footer (#30718)
Jo2234 Nov 15, 2026
1ba9347
fix(shared): keep Windows path separators beside ampersands (#36977)
tanav29 Nov 15, 2026
ca29ff1
fix(cli): keep log warnings out of JSON output (#30898)
voltcrash Nov 15, 2026
6c7a87c
fix(web,mobile): a late MCP app teardown no longer closes the app tha…
seth-dixon Nov 15, 2026
47e24f6
fix(server): Grok usage counts turns from resumed sessions (#30694)
saphid Nov 15, 2026
2b7ea1b
test(desktop): wait for the published PATH after a fallback-shell ret…
juliusmarminge Nov 15, 2026
6e0cbb3
fix(server): checkpoint restore reverts edits inside submodules (#30829)
muhammad-auon-marham Nov 15, 2026
3e17618
perf(server): delegated tasks start and finish without reading the wh…
t3dotgg Nov 15, 2026
b732f64
fix(pi): resume attached sessions without reloading extensions (#21512)
juliusmarminge Nov 15, 2026
5f29d87
fix(provider-acp): a cancel no longer overtakes the prompt it cancels…
navidnadali Nov 15, 2026
f5ca0f9
fix(server): wake GitLab MR watches when a rebase is required (#30312)
tcrapts Nov 15, 2026
910d459
fix(server): drain queued native child continuations (#21461)
juliusmarminge Nov 15, 2026
2b7fc89
fix(web): a send that finishes after you leave its thread no longer b…
Isaac-b-ux Nov 15, 2026
dae8d6f
fix(mobile): Android menus opened over the keyboard close when it hid…
Onkarj012 Nov 15, 2026
ec844a3
fix(client-runtime): omit machine labels from relay spans (#30940)
Mr-Neutr0n Nov 15, 2026
f7b0b3c
fix(server): MCP list tools clamp an oversized limit instead of faili…
MarcoDotIO Nov 15, 2026
a6d7695
perf(web): collapse all no longer remounts the diff viewer (#36995)
juliusmarminge Nov 15, 2026
92605bf
fix(server): skip Codex page context in imported titles (#31090)
flexi767 Nov 15, 2026
fe59fa4
fix(web): renaming a sidebar thread no longer shifts the row or cover…
shlokkhemani Nov 15, 2026
5b818b3
perf(server): resolve model aliases in one memoized traversal (#31197)
hieu-lee Nov 15, 2026
4cb8da6
perf(relay): reconcile multiline env values without rescanning prefix…
hieu-lee Nov 15, 2026
f6fd89b
fix(server): terminals start a $SHELL whose path contains a space (#3…
MarcoDotIO Nov 15, 2026
2cc4b48
fix(desktop): a waiting update is no longer re-announced on every pol…
onlydole Nov 15, 2026
bbda0c1
fix(acp): replace and remove identified plans across turns (#36978)
tanav29 Nov 15, 2026
96ffe45
fix(server): streamed replies keep updating after a line that starts …
MarcoDotIO Nov 15, 2026
d3217c7
fix(provider-cursor): advertise manual compaction (#31203)
defyrlt Nov 15, 2026
01c8e59
fix(web): preserve published theme IDs during alias lookup (#31318)
Jo2234 Nov 15, 2026
d022d3b
fix(mobile): iOS image viewer pages and dismisses after slow opens (#…
juliusmarminge Nov 15, 2026
bb33fc3
test(server): stop Git auto-maintenance racing the shared repo templa…
juliusmarminge Nov 15, 2026
703810f
fix(server): Open in and Reveal open ~/ file links from projects outs…
MarcoDotIO Nov 15, 2026
6a8f022
perf(server): Windows terminals report exit 0.9 s sooner (PowerShell …
Pyseph Nov 15, 2026
3c8f3f2
fix(web): up-arrow recall keeps thread and machine mentions (#31314)
carlosricojr Nov 15, 2026
0983ab3
fix(web): choosing a provider in the model picker no longer raises th…
vytorrennan Nov 15, 2026
0b30831
fix(cursor): resume stopped turns with Cursor's native resume action …
Yash-Singh1 Nov 15, 2026
9cd5733
fix(web): an unreachable environment no longer hides pull requests fr…
johns1x Nov 15, 2026
4dec8cf
fix(web): honor right panel state in custom shortcuts (#34081)
cesarbahena Nov 15, 2026
cef95b6
fix(shared): decode URI paths in ghq clone folders (#37004)
Lucenx9 Nov 15, 2026
6f8144b
fix(web): overlapping image pastes keep their prompt order (#37010)
StiensWout Nov 15, 2026
48a383c
fix(web): show failed desktop downloads in retry tooltips (#31324)
Jo2234 Nov 15, 2026
a96bb81
perf(right panel): normalize pr tab target once (#37002)
rgodha24 Nov 15, 2026
989c1b5
fix(marketing): prevent harness-grid content overflow on mobile devic…
SimonDdungu Nov 15, 2026
f5dd9c1
fix(mobile): diagonal thread-row swipes open on Android instead of sc…
juliusmarminge Nov 15, 2026
a31fab9
fix(web): focus side-chat composer when selecting its tab (#31360)
joeyvandijk Nov 15, 2026
4adb946
fix(claude): show monitor commands in background work details (#37019)
Yash-Singh1 Nov 15, 2026
617c6c7
fix(web): thread chips in the composer can no longer be dragged out a…
NawfalAhmed Nov 15, 2026
d6c1d17
fix(web): show drag preview inside sidebar search results (#37022)
Yash-Singh1 Nov 15, 2026
1c8143c
perf(desktop): the remote editor list appears in 62 ms instead of 2.5…
Pyseph Nov 15, 2026
252b2c7
fix(codex): crashed handlers and transport workers no longer hang sil…
iXab3r Nov 15, 2026
fbdfe2e
fix(mobile): an answered question no longer shows its raw item JSON (…
Jacksondr5 Nov 15, 2026
a62bc81
perf(server): message ordinals are read through an index, not a scan …
navidnadali Nov 15, 2026
47f2e91
perf(web): batch middle truncate fits (#37001)
rgodha24 Nov 15, 2026
dd3d4a4
fix(web): prevent stray highlights when selecting shell commands (#37…
Yash-Singh1 Nov 15, 2026
c1a7ce3
fix(desktop): Check for Updates says when an update is available (#31…
juliusmarminge Nov 15, 2026
d23f479
fix(web): right panel shortcuts work while a side chat has focus (#32…
juliusmarminge Nov 15, 2026
88621ac
feat(github): issues and PRs from denounced authors close when opened…
maria-rcks Nov 15, 2026
2c5013d
fix(server): threads show the new branch's pull request after a branc…
juliusmarminge Nov 15, 2026
8be0e6c
fix(server): preserve run start time when steering restarts a turn (#…
flamboh Nov 15, 2026
fece893
fix(cli): t3 project add brings back an archived project instead of r…
MarcoDotIO Nov 15, 2026
e1458f2
fix(web): track switch no longer blocked when Local environment is of…
juliusmarminge Nov 15, 2026
ed6cb97
fix(web): reopened composer drafts keep quote spacing and show the ca…
juliusmarminge Nov 15, 2026
dd86dd6
fix(server): SSH device host probe failures say what ssh refused (#31…
ahalekelly Nov 15, 2026
7f6e403
fix(provider-acp): Grok runs complete when a background dev server ke…
juliusmarminge Nov 15, 2026
df15bd4
fix(server): parallel worktree launches no longer leave all but one b…
MarcoDotIO Nov 15, 2026
eb8b1f5
fix(client): avoid worktree setup flash after editing first message (…
aminevg Nov 15, 2026
240fc69
fix(codex): an app-server that exits before initialize reports its ex…
juliusmarminge Nov 15, 2026
bc91203
fix(server): count only newly imported agent threads (#37025)
juliusmarminge Nov 15, 2026
fd985e0
fix(usage): a Claude hub account with an unmeasured window keeps its …
MarcoDotIO Nov 15, 2026
e49d058
fix(server): thread_not_found points agents at linked environments (#…
juliusmarminge Nov 15, 2026
1c86881
perf(web): Expand all folders in the diff file tree no longer rescans…
Pyseph Nov 15, 2026
7a72fe3
fix(server): a send to an idle thread with a queue now waits behind i…
juliusmarminge Nov 15, 2026
bee9eb5
fix(shared): recognize SSH remotes with a single path component (#31781)
darshmahadevia Nov 15, 2026
d93b225
fix(mobile): grouped projects show their own monogram in the picker a…
johns1x Nov 15, 2026
1cec104
fix(shared): file mentions of __init__.py keep their name as the labe…
matyasrathonyi Nov 15, 2026
35b8863
fix(server): delegate_task model refusals name slugs to retry with (#…
juliusmarminge Nov 15, 2026
828200f
fix(server): clearing a terminal that keeps printing no longer hangs …
MarcoDotIO Nov 15, 2026
6615615
fix(shared): preserve Git remote headers after comments (#31788)
darshmahadevia Nov 15, 2026
031ee2d
fix(server): dictionary spellings apply next to Chinese and Japanese …
zedong-peng Nov 15, 2026
9504f65
fix(server): MCP tools no longer advertise non-string enums that Gemi…
juliusmarminge Nov 15, 2026
fb74969
fix(server): re-base worktree launches whose recorded base ref does n…
sgoley Nov 15, 2026
3ee4262
fix(web): expand viewed checkbox click area (#37033)
Yash-Singh1 Nov 15, 2026
def3722
fix(web): Shift+F6 moves from a side chat back to the main chat (#31931)
muunkk Nov 15, 2026
5c9e5c1
fix(server): check out cloned submodules when one submodule clone fai…
juliusmarminge Nov 15, 2026
fa6ecb1
fix(server): MCP send errors say how to continue a finished thread (#…
juliusmarminge Nov 15, 2026
bdf6c6e
fix(server): open WSL-mounted Windows drives directly in File Explore…
spoonkuh Nov 15, 2026
5b5f1bc
fix(server): PR watch wakes quote a bot comment's text, not its HTML …
juliusmarminge Nov 15, 2026
81df733
fix(web): opening a project from the command palette skips settled an…
spoukyii Nov 15, 2026
8ab40cc
fix(web): the PDF preview says "1 / 1 page" for a one-page PDF (#31885)
spoukyii Nov 15, 2026
62ee103
fix(server): setup script output no longer shows stray bytes of escap…
spoukyii Nov 15, 2026
2370e33
fix(web): the SQLite, archive and notebook previews say "1 row", "1 e…
spoukyii Nov 15, 2026
dde53b1
fix(web): notebook error previews no longer show terminal color codes…
geezoria Nov 15, 2026
e8d5c12
perf(server): skip non-image results in project icon searches (#32089)
voltcrash Nov 15, 2026
4a3be94
fix(server): retain scheduled dispatch refusal reasons (#32115)
macodev00 Nov 15, 2026
6f06f26
fix(codex): settle unfinished web searches when turns end (#32177)
Sidreyas Nov 15, 2026
b39fc24
fix(pi): Pi agents get T3CODE_THREAD_ID like Claude, Codex and ACP se…
spoukyii Nov 15, 2026
c910b1b
fix(cli): t3 connect and t3 service hints keep --base-dir (#31906)
spoukyii Nov 15, 2026
2e0353d
fix(shared): compare prerelease versions without locale or precision …
luke2x Nov 15, 2026
b9bbfda
fix(server): NixOS container and systemd-nspawn veths are no longer a…
repparw Nov 15, 2026
0fa8e5a
fix(relay): slow APNs requests no longer delay other devices (#32183)
Sidreyas Nov 15, 2026
4afa6f0
fix(server): proxied Codex usage limits keep their reset time (#32188)
EhsanulHaqueSiam Nov 15, 2026
39fcae5
fix(server): session cookies are Secure when the request arrived over…
juliusmarminge Nov 15, 2026
14a60e8
fix(server): session import no longer counts unused sessions as failu…
mthsmb Nov 15, 2026
bbd8bc0
perf(server): reuse Find documents across query changes (#29310)
voltcrash Nov 15, 2026
6152fe3
fix(server): branch PRs stay matched when a remote has a second push …
saphid Nov 15, 2026
8516874
fix(server): Stop on a stalled run closes its approval and question c…
saphid Nov 15, 2026
1e38ebb
fix(pi): recognize OmO's builtin tool search (#32321)
wuhaoyujerry Nov 15, 2026
bf3549b
fix(server): boot-started linux servers offer and open the file manag…
Tiaxi Nov 15, 2026
f00afc6
fix(server): typing after a click by coordinates no longer hangs a pr…
Entrpi Nov 15, 2026
4aead9e
fix(server): Claude MCP elicitations T3 cannot show are cancelled, no…
buttjer Nov 15, 2026
c8c2102
fix(server): log canceled relay requests at debug level (#32215)
Sidreyas Nov 15, 2026
3f1b132
fix(acp): give Command Code T3's MCP endpoint over HTTP (#34004)
ajinkyajacob Nov 15, 2026
1e60d60
Fix #29433: Restore Codex MCP apps after thread unload (#29498)
amr807 Nov 15, 2026
0bd581b
fix(server): regenerate an empty persisted secret instead of failing …
juliusmarminge Nov 15, 2026
f283973
fix(server): Gemini Spark can register its six MCP OAuth redirect URI…
juliusmarminge Nov 15, 2026
5f6b5a8
fix(cli): the already-running error names the t3 pair command that co…
juliusmarminge Nov 15, 2026
2a66bf2
fix(server): read_pull_request_guide reads no-checkout hosts through …
juliusmarminge Nov 15, 2026
467ec62
fix(server): Codex calls delegate_task directly instead of from Code …
juliusmarminge Nov 15, 2026
c6a120a
fix(forgejo): review guides work for checkouts whose SSH remote is no…
juliusmarminge Nov 15, 2026
9791bce
fix(effect-acp): reject elicitation modes the client did not advertis…
juliusmarminge Nov 15, 2026
6c0032d
fix(server): MCP refuses disallowed browser origins with 403 before a…
juliusmarminge Nov 15, 2026
2e9418a
fix(mcp): explain cross-thread permission rejections (#36934)
07rjain Nov 15, 2026
1672b51
fix(web): Add Environment drops the old tab's error when switching mo…
kvapca Nov 15, 2026
3e29748
fix(server): malformed MCP client registration returns an RFC 7591 er…
juliusmarminge Nov 15, 2026
e57041a
fix(server): pairing codes typed in hyphen- or space-separated groups…
juliusmarminge Nov 15, 2026
137a869
fix(shared): use HTTP for schemeless loopback previews (#29710)
JoaoMarcos44 Nov 15, 2026
166cb00
fix(opencode): Full access subagents start without approval prompts (…
juliusmarminge Nov 15, 2026
9dbb802
fix(desktop): saving keeps a connection catalog this build cannot rea…
juliusmarminge Nov 15, 2026
dcd39b4
fix(pi): model list loads when the server's folder has a project MCP …
chaitanyaprem Nov 15, 2026
5a31f17
fix(server): Git LFS images in pull request descriptions load the obj…
juliusmarminge Nov 15, 2026
98f885a
fix(server): desktop preview uploads accept files over 50 MB (#30299)
juliusmarminge Nov 15, 2026
d430dff
fix(usage): keep default-home history after the default account moves…
juliusmarminge Nov 15, 2026
1dfc746
fix(provider-acp): approving a Devin plan never picks its bypass-perm…
juliusmarminge Nov 15, 2026
1b9121b
fix(server): guests of a forked thread can expand the commands it inh…
saphid Nov 15, 2026
355adf2
docs(user): Tailscale HTTPS lists what the tailnet needs (#23759)
WesleySmits Nov 15, 2026
e6344be
fix(client-runtime): MCP app results with images reach the app instea…
juliusmarminge Nov 15, 2026
a9386ac
fix(gitlab): a pasted repository URL is looked up by its project path…
Dkm0315 Nov 15, 2026
e9d8ac5
fix(server): skip user hooks in Codex text generation (#35203)
thelogicmatrix Nov 15, 2026
808dae1
fix(server): worktrees of git-annex repositories can be removed (#34065)
cardoso-neto Nov 15, 2026
46fff79
fix(server): Codex model changes no longer restart a shared session f…
juliusmarminge Nov 15, 2026
4c9a873
fix(cursor): an aborted Cursor SDK stall no longer stops the server (…
Gourav224 Nov 15, 2026
9b38039
fix(forgejo): prefer the deepest-mounted login when a root login also…
juliusmarminge Nov 15, 2026
2123168
fix(opencode): Go-key-only instances keep OpenCode Go usage on OpenCo…
juliusmarminge Nov 15, 2026
25a1afe
fix(client-runtime): opening an old search result keeps messages in o…
juliusmarminge Nov 15, 2026
6a510c4
fix(server): MCP OAuth rejects a resource with an empty fragment (#35…
juliusmarminge Nov 15, 2026
5de10b9
fix(provider-core): branch-name generation no longer starts the user'…
juliusmarminge Nov 15, 2026
32a6a7f
fix(web): desktop window recovers when its backend restarts during a …
juliusmarminge Nov 15, 2026
8bc7a08
fix(server): an explicit Tailscale IPv6 bind is advertised as a tailn…
juliusmarminge Nov 15, 2026
9bea6f7
fix(server): agent slice memory limits follow live memory changes (#3…
OmarAlex24 Nov 15, 2026
d6795ea
fix(grok): background text generation no longer inherits Grok always-…
saphid Nov 15, 2026
17db708
fix(server): preview port discovery stops polling while no client is …
juliusmarminge Nov 15, 2026
da95a04
fix(web): right-panel shortcuts work on a new, unsent thread (#35189)
juliusmarminge Nov 15, 2026
e3c7c08
fix(desktop): a backend busy right after startup no longer ends in a …
juliusmarminge Nov 15, 2026
3cd8b05
fix(onepassword): a failed batch read no longer outlasts the 45-secon…
juliusmarminge Nov 15, 2026
d5726cb
fix(server): agents get no device tools or instructions while the Dev…
juliusmarminge Nov 15, 2026
fa5fde4
fix(server): clients paired over Tailscale Serve keep their own addre…
juliusmarminge Nov 15, 2026
3947e22
fix(server): HTML previews load relative video and audio files (#36199)
juliusmarminge Nov 15, 2026
dc7ea2c
fix(server): a linked launch above the link's access names the link, …
juliusmarminge Nov 15, 2026
bf8fd41
fix(server): Claude append launch text may start with two hyphens (#3…
juliusmarminge Nov 15, 2026
64a481c
fix(cursor): text generation retries without the sandbox when send re…
juliusmarminge Nov 15, 2026
5ee4fd4
fix(server): resolve Claude WinGet launchers on Windows (#32138)
Sidreyas Nov 15, 2026
365a62a
fix(server): Claude knows decline feedback is the user's message (#27…
juliusmarminge Nov 15, 2026
ea4e7c1
fix(acp): permission answers send the agent's option id unchanged (#3…
juliusmarminge Nov 15, 2026
3466f9e
fix(server): forwarded calls to a linked environment no longer wait o…
juliusmarminge Nov 15, 2026
2c2a286
fix(server): Claude sessions no longer log a canUseTool shadowing war…
mahirozdin Nov 15, 2026
85a81b7
fix(server): Claude text generation honors --settings launch args (#3…
juliusmarminge Nov 15, 2026
12042ff
docs: align delegation guide with current MCP contract (#31045)
jacobcorbett Nov 15, 2026
23ba9b3
fix(server): fx threads load the user's profile MCP servers (#29538)
juliusmarminge Nov 15, 2026
93cd25a
fix(acp-registry): executables named like ..agent count as inside the…
juliusmarminge Nov 15, 2026
0f0c1ca
fix(server): usage mapped onto a Pi, Cursor or Antigravity model pric…
MarcoDotIO Nov 15, 2026
3209fa9
fix(server): resuming a queue no longer bypasses failed worktree setu…
StiensWout Nov 15, 2026
b1fb6fa
merge: bring current main into responsive wait follow-ups
maria-rcks Nov 15, 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
  •  
  •  
  •  
13 changes: 9 additions & 4 deletions .agents/skills/test-t3-mobile/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,15 @@ prints one JSON line; on failure it names the next command. Mobile verification
includes that step unless the user prohibits it.

For a device you opened in an agent-device session elsewhere (a device pool,
cloud, or remote host), run `vp run mobile:install <ios|android> --session <s>`
from the directory you opened the session in. It installs the cached build into
that session (`--abi arm64-v8a` for an ARM Android device; `--metro <url>` also
opens it against Metro) and never builds.
cloud, or remote host), run `vp run mobile:install <ios|android> --session <s>
--config <file>` from the directory you opened the session in, passing the
`--config` file from `device_open`'s `targetArgs`. Without it, a device pool's
gateway refuses the install, wrongly saying agent-device is too old. It installs
the cached build into that session (`--abi arm64-v8a` for an ARM Android device;
pool Android emulators are x86_64, the default; `--metro <url>` also opens it
against Metro). Without a cached build for this checkout it builds first, which can
outlast the lease, so run `vp run mobile:install <ios|android> --prepare` (with
the same `--abi`) before you open the device.

Start `vp run dev:client` from `apps/mobile`, or reuse a healthy Metro belonging
to this checkout. Open its printed development-client URL with AgentDevice
Expand Down
1 change: 1 addition & 0 deletions .github/VOUCHED.td
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ github:btsouth
github:cestercian
github:chrisdeeming
github:chuks-qua
-github:coygeek Filed over 270 automated issues, about 50 a day at peak, far past what maintainers can triage
github:cursoragent
github:D3OXY
github:dbalders
Expand Down
38 changes: 31 additions & 7 deletions .github/scripts/pr-limits.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -100,14 +100,22 @@ function parseExemptions(text) {
}

// VOUCHED.td: one `github:login` per line, `#` comments, and `-github:login reason` to denounce.
function vouchedLogins(text) {
const logins = new Set();
// A login listed both ways is an error: pr-vouch.yml's action reads its first line and
// issue-vouch.yml its last, so no answer here would agree with both labels.
function parseVouchList(text) {
const vouched = new Set();
const denounced = new Set();
for (const raw of text.split("\n")) {
const entry = raw.trim().split(/\s+/)[0];
if (entry.startsWith("github:")) logins.add(entry.slice("github:".length).toLowerCase());
const match = /^(-?)github:(\S+)/.exec(raw.trim());
if (!match) continue;
const login = match[2].toLowerCase();
const [listed, other] = match[1] ? [denounced, vouched] : [vouched, denounced];
if (other.has(login))
throw new Error(`${VOUCHED_PATH}: ${login} is both vouched and denounced`);
listed.add(login);
}
if (logins.size === 0) throw new Error(`${VOUCHED_PATH}: no entries`);
return logins;
if (vouched.size === 0) throw new Error(`${VOUCHED_PATH}: no entries`);
return { vouched, denounced };
}

function labeledAt(pr, name) {
Expand Down Expand Up @@ -278,7 +286,8 @@ async function enforceOpenLimit({ github, context, core, dryRun }) {
// lookups as "not vouched". Every read below throws on failure, and a throw closes nothing.
if (pr.user.type === "Bot") return;
if (parseExemptions(fs.readFileSync(EXEMPTIONS_PATH, "utf8")).has(author.toLowerCase())) return;
if (vouchedLogins(fs.readFileSync(VOUCHED_PATH, "utf8")).has(author.toLowerCase())) return;
const { vouched, denounced } = parseVouchList(fs.readFileSync(VOUCHED_PATH, "utf8"));
if (vouched.has(author.toLowerCase())) return;
const { data: access } = await github.rest.repos.getCollaboratorPermissionLevel({
...context.repo,
username: author,
Expand All @@ -289,6 +298,21 @@ async function enforceOpenLimit({ github, context, core, dryRun }) {
const reopened = context.payload.action === "reopened";
if (reopened && context.payload.sender.login.toLowerCase() !== author.toLowerCase()) return;

if (denounced.has(author.toLowerCase())) {
if (dryRun) {
core.notice(`Dry run. PR #${pr.number} would close: ${author} is denounced.`);
return;
}
await closeWithComment(
github,
context,
pr.number,
`Closing: ${author} is banned from contributing here, so this PR will not be reviewed. See [bans](${guideLink(context, "bans")}).`,
);
core.info(`PR #${pr.number}: closed, ${author} is denounced.`);
return;
}

const q = `repo:${context.repo.owner}/${context.repo.repo} is:pr is:open author:${author} sort:created-asc`;
const { search } = await read(github, AUTHOR_OPEN_PRS_QUERY, { q });
// A new PR counts only the older ones, so two opened together cannot close each other.
Expand Down
5 changes: 1 addition & 4 deletions .github/workflows/agent-context-budget.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,7 @@ on:
permissions:
contents: read

concurrency:
group: agent-context-budget-${{ github.event.pull_request.number }}
cancel-in-progress: true

# No concurrency group: label events arrive in bursts, and a cancelled run reports as a failed check.
jobs:
budget:
name: Agent context budget
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -591,7 +591,7 @@ jobs:
name: Mobile Native Static Analysis
needs: changes
if: ${{ !cancelled() && needs.changes.outputs.mobile_native != 'false' }}
runs-on: blacksmith-6vcpu-macos-26
runs-on: blacksmith-6vcpu-macos-27
timeout-minutes: 10
steps:
- name: Checkout
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/desktop-macos-preview-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -316,6 +316,7 @@ jobs:
rust_target: aarch64-apple-darwin
resource_key: darwin-arm64
cli_archive: false
untrusted_bundle: true

# Release assets download without a GitHub account, unlike workflow
# artifacts. All preview DMGs live on one rolling prerelease tagged
Expand Down
110 changes: 110 additions & 0 deletions .github/workflows/issue-vouch.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
name: Issue Vouch

on:
issues:
types: [opened, reopened]
push:
branches:
- main
paths:
- .github/VOUCHED.td
- .github/workflows/issue-vouch.yml
workflow_dispatch:

permissions:
contents: read
issues: write

concurrency:
group: issue-vouch-${{ github.event.issue.number || 'all' }}
cancel-in-progress: true

jobs:
label:
name: Label issues by author trust
runs-on: ubuntu-24.04
steps:
- uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
with:
script: |
const { owner, repo } = context.repo;
// Only listed authors get a label; open issues number in the thousands,
// so unvouched is the default and stays unlabelled.
const labelByStatus = { vouched: "vouch:trusted", denounced: "vouch:denounced" };
const managedLabelNames = new Set(["vouch:trusted", "vouch:unvouched", "vouch:denounced"]);
const { data: file } = await github.rest.repos.getContent({
owner,
repo,
path: ".github/VOUCHED.td",
ref: context.payload.repository.default_branch,
});
const statusByUser = new Map();
const listedBothWays = new Set();
for (const raw of Buffer.from(file.content, "base64").toString("utf8").split("\n")) {
const match = /^(-?)github:(\S+)/.exec(raw.trim());
if (!match) continue;
const login = match[2].toLowerCase();
const status = match[1] ? "denounced" : "vouched";
if (statusByUser.has(login) && statusByUser.get(login) !== status) listedBothWays.add(login);
statusByUser.set(login, status);
}
const issues =
context.eventName === "issues"
? [context.payload.issue]
: (
await github.paginate(github.rest.issues.listForRepo, {
owner,
repo,
state: "open",
per_page: 100,
})
).filter((issue) => !issue.pull_request);
for (const issue of issues) {
const status = statusByUser.get(issue.user.login.toLowerCase());
const next = labelByStatus[status];
const current = issue.labels.map((label) => label.name).filter((name) => managedLabelNames.has(name));
for (const name of current) {
if (name === next) continue;
try {
await github.rest.issues.removeLabel({ owner, repo, issue_number: issue.number, name });
} catch (error) {
if (error.status !== 404) throw error;
}
}
if (next && !current.includes(next)) {
await github.rest.issues.addLabels({ owner, repo, issue_number: issue.number, labels: [next] });
core.info(`Issue #${issue.number} (${issue.user.login}): ${status} -> ${next}`);
}
// Only a newly opened issue is closed. One filed before its author was denounced
// may already have a fix on the way, so the sweep leaves those to maintainers.
// Someone else reopening it is a maintainer keeping it open.
const reopenedByOther =
context.payload.action === "reopened" &&
context.payload.sender.login.toLowerCase() !== issue.user.login.toLowerCase();
// The PR rules refuse a list that names a login both ways, so nothing closes for one here.
const trusted =
issue.user.type === "Bot" ||
["OWNER", "MEMBER", "COLLABORATOR"].includes(issue.author_association) ||
listedBothWays.has(issue.user.login.toLowerCase());
if (status === "denounced" && context.eventName === "issues" && !reopenedByOther && !trusted) {
await github.rest.issues.createComment({
owner,
repo,
issue_number: issue.number,
body: `Closing: ${issue.user.login} is banned from contributing here, so this issue will not be triaged. See [bans](https://github.com/${owner}/${repo}/blob/main/CONTRIBUTING.md#bans).`,
});
await github.rest.issues.update({
owner,
repo,
issue_number: issue.number,
state: "closed",
state_reason: "not_planned",
});
core.info(`Issue #${issue.number}: closed, ${issue.user.login} is denounced.`);
}
}
2 changes: 1 addition & 1 deletion .github/workflows/mobile-dev-client.yml
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ jobs:
ios:
name: iOS simulator
if: github.repository == 'pingdotgg/t3code' && (github.event_name != 'workflow_dispatch' || inputs.platform == 'ios')
runs-on: blacksmith-12vcpu-macos-26
runs-on: blacksmith-12vcpu-macos-27
timeout-minutes: 60
concurrency:
group: mobile-dev-client-ios-${{ github.event_name == 'pull_request' && github.event.pull_request.number || inputs.fingerprint || github.sha }}
Expand Down
10 changes: 3 additions & 7 deletions .github/workflows/mobile-eas-production.yml
Original file line number Diff line number Diff line change
Expand Up @@ -680,8 +680,8 @@ jobs:
echo ":rocket: android: submitted and recorded \`$BUILD_TAG\`" >> "$GITHUB_STEP_SUMMARY"

# Off unless the MOBILE_IOS_LOCAL_BUILDS repository variable is `true`; the
# production job only sets ios_build then. Store binaries need the final
# Xcode 27.1; MOBILE_IOS_ALLOW_XCODE_RC=true accepts the release candidate.
# production job only sets ios_build then. Xcode 27.1 matches the EAS build
# image in eas.json.
# No sticky disk: it mounts ext4 and only works on Linux runners.
ios:
name: iOS store build
Expand All @@ -701,7 +701,6 @@ jobs:
EXPO_TOKEN: ${{ secrets.EXPO_PRODUCTION_TOKEN }}
PROFILE: ${{ needs.production.outputs.ios_profile }}
BUILD_TAG: mobile-ios-build/${{ needs.production.outputs.ios_profile }}/${{ needs.production.outputs.ios_version }}/${{ needs.production.outputs.ios_fingerprint }}
ALLOW_XCODE_RC: ${{ vars.MOBILE_IOS_ALLOW_XCODE_RC == 'true' }}
steps:
- name: Checkout
uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0
Expand Down Expand Up @@ -739,12 +738,9 @@ jobs:
if: steps.record.outputs.built != 'true'
run: |
xcode=/Applications/Xcode_27.1.app
if [ ! -d "$xcode" ] && [ "$ALLOW_XCODE_RC" = "true" ]; then
xcode=/Applications/Xcode_27.1_Release_Candidate.app
fi
if [ ! -d "$xcode" ]; then
ls -d /Applications/Xcode*.app
echo "::error::Xcode 27.1 (final) is not on this runner. Set the MOBILE_IOS_ALLOW_XCODE_RC repository variable to true to build store binaries with the release candidate."
echo "::error::Xcode 27.1 is not on this runner."
exit 1
fi
sudo xcode-select -s "$xcode/Contents/Developer"
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/mobile-showcase-screenshots.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ jobs:
ios:
name: iPhone, iPhone Duo, and iPad 13
if: inputs.platform == 'all' || inputs.platform == 'ios'
runs-on: blacksmith-12vcpu-macos-26
runs-on: blacksmith-12vcpu-macos-27
# Capturing every palette multiplies the device matrix by six, and only the
# one native build is shared between them.
timeout-minutes: ${{ inputs.theme == 'all' && 300 || 60 }}
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/pr-vouch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -101,17 +101,17 @@ jobs:
{
name: "vouch:trusted",
color: "1f883d",
description: "PR author is trusted by repo permissions or the VOUCHED list.",
description: "Author is trusted by repo permissions or the VOUCHED list.",
},
{
name: "vouch:unvouched",
color: "fbca04",
description: "PR author is not yet trusted in the VOUCHED list.",
description: "Author is not yet trusted in the VOUCHED list.",
},
{
name: "vouch:denounced",
color: "d1242f",
description: "PR author is explicitly blocked by the VOUCHED list.",
description: "Author is explicitly blocked by the VOUCHED list.",
},
];

Expand Down
15 changes: 15 additions & 0 deletions .github/workflows/release-desktop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,12 @@ on:
required: false
default: false
type: boolean
# Whether the JS bundle came from a pull request. This job holds the
# signing secrets, so packaging then skips every step that runs the bundle.
untrusted_bundle:
required: false
default: false
type: boolean
# A runner of the target's own platform and architecture, for a `runner`
# that cannot execute the target. The build job skips everything that
# runs the packaged binaries, and a second job runs it there.
Expand Down Expand Up @@ -134,6 +140,14 @@ jobs:
T3CODE_CLERK_CLI_OAUTH_CLIENT_ID: ${{ inputs.clerk_cli_oauth_client_id }}
T3CODE_RELAY_URL: ${{ inputs.relay_url }}
steps:
# The launch check and the CLI archive smoke test both run the bundle.
- name: Reject running an untrusted bundle
if: inputs.untrusted_bundle && (inputs.launch_check || inputs.cli_archive)
shell: bash
run: |
echo "::error::untrusted_bundle cannot be combined with launch_check or cli_archive, which run the bundle."
exit 1

# This repository is public, so Git needs no credentials. checkout's
# credential cleanup runs submodule foreach even with submodules disabled,
# which fails on the orphaned gitlinks in our vendored .repos tree.
Expand Down Expand Up @@ -573,6 +587,7 @@ jobs:
pnpm_config_prefer_offline: "true"
T3CODE_DESKTOP_REUSE_RESOURCE_MONITOR: true
T3CODE_DESKTOP_REUSE_LINUX_CAPTURE_HELPERS: ${{ steps.capture_helper_cache.outputs.cache-hit == 'true' }}
T3CODE_DESKTOP_UNTRUSTED_BUNDLE: ${{ inputs.untrusted_bundle }}
CSC_LINK: ${{ secrets.CSC_LINK }}
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
APPLE_API_KEY: ${{ secrets.APPLE_API_KEY }}
Expand Down
32 changes: 5 additions & 27 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -903,34 +903,12 @@ jobs:
fi

# electron-updater reads one manifest per platform and channel and picks
# the file entry whose name carries the running arch, so the per-arch
# manifests the build jobs wrote are merged back into that one file.
- name: Merge macOS updater manifests
# the file entry whose name carries the running arch. Require every
# platform's two build jobs to have produced matching metadata before
# merging it, so a successful release can never strand one architecture.
- name: Merge desktop updater manifests
if: needs.preflight.outputs.release_channel != 'preview'
run: |
shopt -s nullglob
for x64_manifest in release-assets/*-mac-x64.yml; do
arm64_manifest="${x64_manifest%-x64.yml}.yml"
if [[ -f "$arm64_manifest" ]]; then
node scripts/merge-update-manifests.ts --platform mac "$arm64_manifest" "$x64_manifest"
rm -f "$x64_manifest"
fi
done

- name: Merge Windows updater manifests
if: needs.preflight.outputs.release_channel != 'preview'
run: |
shopt -s nullglob
for x64_manifest in release-assets/*-win-x64.yml; do
arm64_manifest="${x64_manifest%-x64.yml}-arm64.yml"
merged_manifest="${x64_manifest%-win-x64.yml}.yml"
if [[ -f "$arm64_manifest" ]]; then
node scripts/merge-update-manifests.ts --platform win "$x64_manifest" "$arm64_manifest" "$merged_manifest"
rm -f "$x64_manifest" "$arm64_manifest"
else
mv "$x64_manifest" "$merged_manifest"
fi
done
run: node scripts/merge-release-update-manifests.ts release-assets

# Updater manifests and blockmaps are what electron-updater consumes.
# They are only listed for channels an updater is meant to follow.
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,5 @@ node_modules/

# pnpm content-addressable store; never belongs in the repo.
.pnpm-store/

/packages/ssh/.ssh-launcher-test-*/
Loading
Loading