T3 Code: 30 power-user tips
Keyboard shortcuts, remote environments and workflow tricks, from using it every day.
I studied T3 Code's source for eight lessons, and I use it every day. This page is the short version of both:
The codebase
An open-source GUI for coding agents (Codex, Claude Code, Cursor, Grok, OpenCode, Antigravity and more), with web, desktop and mobile clients that all talk to a server you run yourself. Built in the open by Theo, Julius and contributors.
The eight lessons
- Decide, commit, then act: the pure orchestrator with a transactional outbox.
- Performance budgets as unit tests: payload ratios asserted in
vp test. - Mock the boundary, not the logic: replayed provider transcripts and drainable workers.
- A PR process for the AI era: evidence-first templates and injection-proof triage.
- Taste as lint rules: 14 custom oxlint rules.
- A dev setup for parallel agents: hashed ports, per-worktree state, single origin.
- Lying spinners and one-way doors: honest status in a multi-device app.
- Docs for your most frequent contributor: an AGENTS.md that onboards.
Studying the repo taught me how it's built. Using it every day taught me the tricks below. mod means Cmd on macOS and Ctrl everywhere else.
30 power-user tips
Keyboard first
- Search everything with mod+K. The command palette searches threads across all connected machines, including message text after two characters. Start with
>to show only actions. - Drive the composer without the mouse. mod+Shift+M model · H host · E effort · A access mode · X workspace · G git branch · L reuse the previous worktree.
- Undo sidebar actions with mod+Z. Unpin, settle, snooze, archive or a discarded draft can be undone for five seconds while no text field is focused.
- Reopen anything with mod+Shift+T. Files, diffs, PRs, browser tabs and devices reopen in the order you closed them.
- Go back and forward with mod+[ and mod+], like a browser.
- Search a whole diff with mod+F inside the Diff panel, including folded files and hidden unchanged lines. In a thread, the same key searches the full conversation history.
- Give "stop" a shortcut.
thread.stophas no default binding. Add one in Settings → Keybindings. - Edit
~/.t3/userdata/keybindings.jsondirectly and usewhenconditions such asterminalFocus,turnRunning,composerFocusorisDesktop, combined with&&,||and!. The last matching rule wins.[ { "key": "mod+j", "command": "terminal.toggle", "when": "terminalOpen && !terminalFocus" }, { "key": "mod+.", "command": "thread.stop", "when": "turnRunning" } ] - Want mod+1…9 thread jumps in the browser too? They're limited to
isDesktopby default so they don't steal tab switching. Remove that condition.
Talking to agents
- Queue vs. steer. Pick a default in Settings → General → Follow-up behavior. mod+Enter does the opposite for one message.
- Promote the queue. mod+Shift+Enter sends the oldest queued message as a steer. Alt+↑ at the start of the composer edits the last queued one.
- Fire and forget. mod+Alt+Enter sends, leaves the thread running in the background, and opens a fresh composer. In a new thread, mod+Enter does the same.
- Race models against each other. Shift-click several models in a new thread's model picker. Each one gets its own thread and worktree from the same prompt.
- Paste huge logs freely. A paste of 32 KiB or more becomes a text-file attachment instead of flooding the context. Use mod+Shift+V to keep it inline.
- Drop files on a sidebar row. Drag files onto any thread in the sidebar: it opens with the files attached.
- Ask for a picture. "Show this as a chart" or "make a collage of these screenshots" gets you a sandboxed, theme-aware HTML page in the thread, on every provider.
- SnapShots (desktop). Turn it on in Settings → SnapShots, then press both Shift keys to capture the window you're in, with its accessibility tree, straight into your draft.
- Switch providers mid-thread. The context handoff carries recent turns, the original request and command outcomes, and the agent can fetch omitted history itself.
Managing many threads
- Scratch threads. mod+Alt+N starts a thread with no project, in its own folder under
~/.t3/scratch. Good for "convert these PNGs". - Let finished work tidy itself. Threads auto-settle after three idle days or when their PR merges. Opt a thread out with Auto-settle behavior → Disabled.
- Reclaim disk on settle. Add
"runOnSettle": trueto at3.jsonscript (for examplecargo clean) and it runs in a thread's worktree whenever that thread settles. - Settle in bulk. Press a thread's Settle button and drag up or down to settle every thread in between. Wake and Un-settle work the same way.
- Rate-limited? Choose Resume at reset, Snooze until reset, or turn on Auto-resume limited threads so work continues while you sleep.
- Fold busy threads. Settings → General → Working section (beta) tucks running threads away, and they come back to the top when they need you.
Machines, agents and automation
- One machine, many routes. Add LAN, Tailscale, SSH and T3 Connect routes to the same machine. The app uses the first one that answers and moves back to a faster route when it works again. (My home-server setup uses this.)
- Load-balance across machines. Settings → Connections → Load balancing picks a machine for each new thread. Mark machines Prefer, Less often or Manual only.
- Let outside agents drive T3. Copy the MCP URL from Settings → Connections, then:
Access is read-only by default. Grant a permission ceiling only when you want the agent to start threads.claude mcp add --transport http t3 https://<environment-address>/mcp claude mcp login t3 - Webhook automations. Create a scheduled task with the On webhook schedule and template the prompt:
Review this PR: {{body.pull_request.html_url}}. A public URL needs T3 Connect.
Git and review
- Viewed marks that sync. Ticking a file as viewed in the PR Code tab uses GitHub's own viewed marks, so your review state matches github.com. mod+Shift+C copies the PR URL and mod+Shift+K copies
#number. - Smarter branch names. Settings → Source Control → Worktree branch naming can use a model-picked semantic prefix (
feat/,fix/) or custom instructions such as "include the Linear issue ID".
Bonus for mobile developers: the Device panel streams a live iOS Simulator or Android Emulator next to the thread, and agents can drive it through device_* tools. Float device over chat keeps it visible while you review diffs.
What's next
Next up: lessons from Pi and OpenCode, two very different coding agents. New codebases land on X first: follow @tarekkh1997, or subscribe via RSS.