Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
cd1e05e
test(relay): remove constant-restating database mode test (#13932)
t3-code[bot] Sep 27, 2026
000b7a7
fix(server): let agents use simctl and adb alongside device tools (#1…
juliusmarminge Sep 27, 2026
89ddc6b
feat(observability): honor OTEL_*_EXPORTER=none per signal (#13736)
yordis Sep 26, 2026
2d8caea
fix(clients): hide duplicate Cursor Keychain prompts (#13870)
Yash-Singh1 Sep 26, 2026
f95e767
fix(build): validate Linux node-pty prebuilds in Windows artifacts (#…
Yash-Singh1 Sep 26, 2026
572e988
test(usage): assert contract mismatch details (#13861)
Yash-Singh1 Sep 26, 2026
4fd28bf
fix(usage): identify client version mismatches (#8208)
tris203 Sep 26, 2026
8b2d85e
fix(usage): omit Cursor warning when no login is saved (#13820)
tris203 Sep 26, 2026
9e11e46
fix(usage): tolerate newer provider variants (#10076)
tris203 Sep 26, 2026
f02b071
fix(server): background git status fetches no longer fill the disk wi…
t3dotgg Sep 26, 2026
03c58cb
perf(server): cut idle wakeups from the Connect relay and session rea…
t3dotgg Sep 26, 2026
3d36aa5
perf(clients): saving the thread list cache no longer freezes the UI …
t3dotgg Sep 26, 2026
379c3ac
perf(server): background sweeps only read threads that can still sett…
t3dotgg Sep 26, 2026
80bfe60
fix(observability): the renderer trace proxy stops tracing itself (#1…
t3dotgg Sep 26, 2026
12f9847
perf(clients): sort projects and settled threads without re-parsing d…
t3dotgg Sep 26, 2026
23eb53e
perf(server): opening Diagnostics no longer loads the whole trace rin…
t3dotgg Sep 26, 2026
f5e27d0
perf(observability): stop writing empty spans on spawns, projected ev…
t3dotgg Sep 26, 2026
b5e8650
fix(server): let Antigravity inspect unsupported files by path (#13339)
Bil0000 Sep 26, 2026
dd18ab7
Show a focus ring on sidebar thread and draft rows (#13344)
ryanilano Sep 26, 2026
4352e00
fix(server): bump node-pty to 1.2.0-beta.15 for linux-arm64 prebuild …
Ephraim-9 Sep 26, 2026
a0ad98f
fix(server): prune expired replay-protection files from the secrets d…
t3dotgg Sep 26, 2026
614a775
fix(server): installed editors no longer vanish when discovery is slo…
bfowler Sep 26, 2026
c86cf45
fix(editors): stop treating the agy CLI as the Antigravity IDE (#7079)
ishaanko Sep 26, 2026
758b92d
fix(opencode): accept v2 serve ready line when spawning server (#13651)
shirishpothi Sep 26, 2026
1a8c430
fix(usage): hide the Cursor keychain prompt when Cursor isn't set up …
Gigioxx Sep 26, 2026
9cd9384
perf(server): stop re-running git for every project each minute (#13689)
t3dotgg Sep 26, 2026
e63cbe2
feat(observability): record event loop stalls in the server trace (#1…
t3dotgg Sep 26, 2026
9dd0596
perf(server): per-thread settlement and PR checks no longer rebuild t…
t3dotgg Sep 26, 2026
85f83ab
fix(client): slow servers finish loading the thread list instead of l…
t3dotgg Sep 26, 2026
c41e6b7
perf(server): build the thread list snapshot without decoding it twic…
t3dotgg Sep 26, 2026
50ca514
feat(observability): write a server heap snapshot on SIGUSR2 (#13694)
t3dotgg Sep 26, 2026
feec0a2
perf(server): pull request sync reads only threads with linked pull r…
t3dotgg Sep 26, 2026
26a3bc5
feat(cli): summarize the server trace file from the command line (#13…
t3dotgg Sep 26, 2026
aa5c07e
fix(server): the SQLite WAL file shrinks back after large writes (#13…
t3dotgg Sep 26, 2026
04cb655
fix(cli): t3 triage points agents at log files that exist (#13685)
t3dotgg Sep 26, 2026
c57e05a
feat(observability): name the command on subprocess spans (#13701)
t3dotgg Sep 26, 2026
98eb47f
perf(server): stop remapping every thread on each thread event (#13720)
t3dotgg Sep 26, 2026
1f056bc
refactor(observability): name each service after its application (#13…
yordis Sep 26, 2026
70b32a4
fix(usage): price Cursor cache savings by base model (#13731)
Yash-Singh1 Sep 26, 2026
99c533c
perf(server): avoid rereading unchanged files in review previews (#13…
shivamhwp Sep 25, 2026
7a2b207
fix(server): load Cursor keyring with createRequire (#13678)
Yash-Singh1 Sep 25, 2026
01c2f7b
fix(terminal): settling a thread closes its idle shells (#13673)
t3dotgg Sep 25, 2026
a5ec663
feat(observability): honor the standard OTLP endpoint, headers, and p…
yordis Sep 25, 2026
0e3ef4e
fix(sqlite): retry failed statement preparations (#10584)
yashranaway Sep 25, 2026
b2b6819
feat(usage): read cursor, opencode, and antigravity history (#10409)
maria-rcks Sep 25, 2026
464f190
fix(usage): price Claude fast-mode requests at the fast rate (#13599)
t3dotgg Sep 25, 2026
63dcc3d
fix(dev): one t3.json setup action that works on every OS (#13589)
t3dotgg Sep 25, 2026
cc619c8
feat(release): ship a Linux .deb that updates itself (#13575)
t3dotgg Sep 25, 2026
126b755
fix(clients): a preview app no longer knocks the desktop's own server…
t3dotgg Sep 25, 2026
6b56967
fix(mcp): preview errors tell agents what to do instead (#13559)
t3dotgg Sep 25, 2026
ec81d50
fix(mcp): preview snapshots fit in the agent's tool output again (#13…
t3dotgg Sep 25, 2026
aacb07d
fix(server): newer Codex models get T3 Code's instructions again (#13…
t3dotgg Sep 25, 2026
39c495c
fix(clients): sync status no longer flickers when opening running thr…
t3dotgg Sep 25, 2026
8ddbd83
ci(relay): add a forced manual relay deploy (#13550)
juliusmarminge Sep 25, 2026
8c51703
fix(server): report the Grok account email so usage limits merge acro…
jakeleventhal Sep 25, 2026
3f6b121
fix(server): Grok accounts with no usage yet no longer vanish from Li…
jakeleventhal Sep 25, 2026
2ce7975
fix(relay): export tunnel cleanup counters to Axiom (#13528)
juliusmarminge Sep 25, 2026
2134284
feat(grok): offer one-click updates through `grok update` (#13523)
juliusmarminge Sep 25, 2026
a7f4e27
fix(connect): remove tunnels after hosts go offline (#9386)
t3dotgg Sep 25, 2026
51e5497
feat(codex): require Codex 0.156 and regenerate its protocol (#13481)
juliusmarminge Sep 24, 2026
d355df3
fix(codex): the protocol generator runs again on Effect rc.115 (#13480)
juliusmarminge Sep 24, 2026
dad2c15
fix(antigravity): keep Windows runtime unpacking under MAX_PATH (#13389)
juliusmarminge Sep 24, 2026
981d1ac
fix(acp): keep one answer when a running tool reports progress (#13386)
juliusmarminge Sep 24, 2026
0760af0
fix(marketing): use the official OpenCode and Antigravity logos (#13365)
flamboh Sep 24, 2026
2ac2cd4
fix(observability): a malformed OTEL_RESOURCE_ATTRIBUTES no longer st…
yordis Sep 24, 2026
e08312c
feat(server): show and redeem Claude banked resets (#13118)
Bil0000 Sep 24, 2026
7d086c9
chore(ci): use GPT 6 Sol Max for check agents (#13473)
juliusmarminge Sep 24, 2026
f66abc6
fix(server): keep Codex's reset answer when the re-probe fails (#13363)
juliusmarminge Sep 24, 2026
d2b0faf
fix(server): preserve racy edits in review diff previews (#12613)
tris203 Sep 24, 2026
505b7fd
feat(observability): honor the OpenTelemetry kill switch (#13355)
juliusmarminge Sep 24, 2026
e3ff59d
fix(shared): preserve final quoted empty CSV records (#11425)
Lucenx9 Sep 24, 2026
90b0f84
fix(server): stop replaying old agent alerts on restart (#13340)
juliusmarminge Sep 24, 2026
ecfb5cc
fix(providers): restore compatibility ranges for every harness (#13328)
juliusmarminge Sep 24, 2026
a96f47e
fix(ci): shard release tests like pull request CI (#13321)
juliusmarminge Sep 23, 2026
fa4c6c8
fix(sync): resolve wave1 test/build fallout from upstream rebase
ZytriuNks Sep 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions .github/triage/PLAYBOOK.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,9 @@ different code depending on it:

Then work from evidence, not assumption. In rough order of value:

- The server log and the trace file (`server.trace.ndjson`) around the time of the
problem. Recent failures usually leave a trail here.
- The trace file (`server.trace.ndjson`) around the time of the problem, plus the
service log or desktop backend logs from the context file if they exist. Recent
failures usually leave a trail here.
- The provider event log, for problems with claude/codex/cursor sessions.
- The SQLite database. Read it freely, but only write when a write is necessary
to fix the problem the user described, and get their explicit permission
Expand Down
14 changes: 13 additions & 1 deletion .github/workflows/deploy-relay.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,15 @@ on:
push:
branches:
- main
# Alchemy does not redeploy the Worker when only a Config value read in its
# Init changes (alchemy-run/alchemy#1831), so a changed repository variable
# needs a forced deploy to reach production.
workflow_dispatch:
inputs:
force:
description: Redeploy every resource, including ones with no detected changes
type: boolean
default: true

permissions:
contents: read
Expand All @@ -17,6 +26,8 @@ concurrency:
jobs:
deploy_relay:
name: Deploy production relay
# A manual run from another branch would deploy that branch to production.
if: github.ref == 'refs/heads/main'
runs-on: blacksmith-8vcpu-ubuntu-2404
timeout-minutes: 15
environment:
Expand All @@ -28,6 +39,7 @@ jobs:
RELAY_DOMAIN: ${{ vars.RELAY_DOMAIN }}
RELAY_API_ZONE_NAME: ${{ vars.RELAY_API_ZONE_NAME }}
RELAY_TUNNEL_ZONE_NAME: ${{ vars.RELAY_TUNNEL_ZONE_NAME }}
RELAY_TUNNEL_CLEANUP_MODE: ${{ vars.RELAY_TUNNEL_CLEANUP_MODE }}
CLERK_PUBLISHABLE_KEY: ${{ vars.CLERK_PUBLISHABLE_KEY }}
CLERK_JWT_AUDIENCE: ${{ vars.CLERK_JWT_AUDIENCE }}
APNS_ENVIRONMENT: ${{ vars.APNS_ENVIRONMENT }}
Expand All @@ -54,7 +66,7 @@ jobs:
- --filter=t3code-relay...

- name: Deploy production relay stage
run: vp run --filter t3code-relay deploy --stage prod --yes --no-input
run: vp run --filter t3code-relay deploy --stage prod --yes --no-input ${{ inputs.force && '--force' || '' }}
env:
# The PublishClientConfig action writes the client env here instead
# of the repo-root .env; nothing on the runner reads it.
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/release-desktop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -510,6 +510,7 @@ jobs:
"release/*.dmg"
"release/*.zip"
"release/*.AppImage"
"release/*.deb"
"release/*.exe"
)
# Preview builds have no publish config, so electron-builder writes
Expand Down
74 changes: 70 additions & 4 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -259,13 +259,76 @@ jobs:
- name: Typecheck
run: vp run typecheck

# Keep tests on their own runners, using the same package split and server
# shards as CI, so the release check job does not spend its budget on tests.
test:
name: Release tests
needs: [preflight]
if: ${{ !failure() && !cancelled() && needs.preflight.result == 'success' }}
runs-on: blacksmith-8vcpu-ubuntu-2404
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@v6
with:
ref: ${{ needs.preflight.outputs.ref }}
sparse-checkout: |
/*
!/.repos/
sparse-checkout-cone-mode: false

- name: Setup Vite+
uses: voidzero-dev/setup-vp@v1
with:
node-version-file: package.json
cache: true
run-install: true

- name: Ensure Electron runtime is installed
run: vp run --filter @t3tools/desktop ensure:electron

- uses: ./.github/actions/setup-apt-mirrors

- name: Install browser secret helper build libraries
run: sudo apt-get update && sudo apt-get install -y libsecret-1-dev pkg-config
run: |
sudo sed -i 's|http://|https://|g' /etc/apt/blacksmith-ubuntu-mirrors.txt /etc/apt/sources.list.d/ubuntu.sources
sudo apt-get update && sudo apt-get install -y libsecret-1-dev pkg-config build-essential

- name: Test
run: vp run --parallel --concurrency-limit 4 --filter '!t3' --filter '!@t3tools/monorepo' test

test_server:
name: Release server tests ${{ matrix.shard }}
needs: [preflight]
if: ${{ !failure() && !cancelled() && needs.preflight.result == 'success' }}
runs-on: blacksmith-8vcpu-ubuntu-2404
timeout-minutes: 10
strategy:
fail-fast: false
matrix:
shard: [1, 2, 3]
steps:
- name: Checkout
uses: actions/checkout@v6
with:
ref: ${{ needs.preflight.outputs.ref }}
sparse-checkout: |
/*
!/.repos/
sparse-checkout-cone-mode: false

- name: Setup Vite+
uses: voidzero-dev/setup-vp@v1
with:
node-version-file: package.json
cache: true
run-install: true

# No Electron setup here: `t3` (apps/server) has no Electron dependency
# and none of its tests touch the runtime. Only the non-server `test`
# job, which covers @t3tools/desktop, needs the download.
- name: Test
run: vp run test
run: vp run --filter t3 test --shard ${{ matrix.shard }}/${{ strategy.job-total }}

relay_public_config:
name: Resolve T3 Connect public config
Expand Down Expand Up @@ -562,7 +625,7 @@ jobs:
clerk_cli_oauth_client_id: ${{ needs.relay_public_config.outputs.clerk_cli_oauth_client_id }}
relay_url: ${{ needs.relay_public_config.outputs.relay_url }}
label: Linux arm64
runner: ubuntu-24.04-arm
runner: blacksmith-16vcpu-ubuntu-2404-arm
platform: linux
target: AppImage
arch: arm64
Expand Down Expand Up @@ -630,13 +693,15 @@ jobs:
preflight,
relay_public_config,
quality,
test,
test_server,
desktop_mac_arm64,
desktop_linux_x64,
desktop_linux_arm64,
desktop_win_x64,
desktop_win_arm64,
]
if: ${{ !failure() && !cancelled() && needs.preflight.result == 'success' && needs.relay_public_config.result == 'success' && needs.quality.result == 'success' && needs.desktop_mac_arm64.result == 'success' && needs.desktop_linux_x64.result == 'success' && needs.desktop_linux_arm64.result == 'success' && needs.desktop_win_x64.result == 'success' && needs.desktop_win_arm64.result == 'success' }}
if: ${{ !failure() && !cancelled() && needs.preflight.result == 'success' && needs.relay_public_config.result == 'success' && needs.quality.result == 'success' && needs.test.result == 'success' && needs.test_server.result == 'success' && needs.desktop_mac_arm64.result == 'success' && needs.desktop_linux_x64.result == 'success' && needs.desktop_linux_arm64.result == 'success' && needs.desktop_win_x64.result == 'success' && needs.desktop_win_arm64.result == 'success' }}
runs-on: ubuntu-24.04 # blacksmith-8vcpu-ubuntu-2404
timeout-minutes: 15
permissions:
Expand Down Expand Up @@ -810,6 +875,7 @@ jobs:
echo 'release-assets/*.dmg'
echo 'release-assets/*.zip'
echo 'release-assets/*.AppImage'
echo 'release-assets/*.deb'
echo 'release-assets/*.exe'
if [[ "${{ needs.preflight.outputs.release_channel }}" != "preview" ]]; then
echo 'release-assets/*.blockmap'
Expand Down
4 changes: 2 additions & 2 deletions .macroscope/check-run-agents/effect-service-conventions.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: Effect Service Conventions
model: gpt-5-6-sol
effort: medium
model: gpt-6-sol
effort: max
input: incremental
tools:
- browse_code
Expand Down
4 changes: 2 additions & 2 deletions .macroscope/check-run-agents/ui-consistency.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: UI Consistency
model: gpt-5-6-sol
effort: medium
model: gpt-6-sol
effort: max
input: incremental
tools:
- browse_code
Expand Down
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,14 @@ winget install T3Tools.T3Code
brew install --cask t3-code
```

#### Debian, Ubuntu (`.deb`)

Download the `.deb` from [GitHub Releases](https://github.com/pingdotgg/t3code/releases), then:

```bash
sudo apt install ./T3-Code-*.deb
```

#### Arch Linux (AUR)

Stable:
Expand Down
Loading
Loading