tarek.kharsa

home / lessons / t3 code · tips

Tips5 min read

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

T3 Code

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

  1. Decide, commit, then act: the pure orchestrator with a transactional outbox.
  2. Performance budgets as unit tests: payload ratios asserted in vp test.
  3. Mock the boundary, not the logic: replayed provider transcripts and drainable workers.
  4. A PR process for the AI era: evidence-first templates and injection-proof triage.
  5. Taste as lint rules: 14 custom oxlint rules.
  6. A dev setup for parallel agents: hashed ports, per-worktree state, single origin.
  7. Lying spinners and one-way doors: honest status in a multi-device app.
  8. 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

  1. 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.
  2. 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.
  3. 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.
  4. Reopen anything with mod+Shift+T. Files, diffs, PRs, browser tabs and devices reopen in the order you closed them.
  5. Go back and forward with mod+[ and mod+], like a browser.
  6. 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.
  7. Give "stop" a shortcut. thread.stop has no default binding. Add one in Settings → Keybindings.
  8. Edit ~/.t3/userdata/keybindings.json directly and use when conditions such as terminalFocus, turnRunning, composerFocus or isDesktop, combined with &&, || and !. The last matching rule wins.
    [
      { "key": "mod+j", "command": "terminal.toggle", "when": "terminalOpen && !terminalFocus" },
      { "key": "mod+.", "command": "thread.stop", "when": "turnRunning" }
    ]
  9. Want mod+1…9 thread jumps in the browser too? They're limited to isDesktop by default so they don't steal tab switching. Remove that condition.

Talking to agents

  1. Queue vs. steer. Pick a default in Settings → General → Follow-up behavior. mod+Enter does the opposite for one message.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. Drop files on a sidebar row. Drag files onto any thread in the sidebar: it opens with the files attached.
  7. 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.
  8. 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.
  9. 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

  1. Scratch threads. mod+Alt+N starts a thread with no project, in its own folder under ~/.t3/scratch. Good for "convert these PNGs".
  2. 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.
  3. Reclaim disk on settle. Add "runOnSettle": true to a t3.json script (for example cargo clean) and it runs in a thread's worktree whenever that thread settles.
  4. 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.
  5. Rate-limited? Choose Resume at reset, Snooze until reset, or turn on Auto-resume limited threads so work continues while you sleep.
  6. 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

  1. 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.)
  2. Load-balance across machines. Settings → Connections → Load balancing picks a machine for each new thread. Mark machines Prefer, Less often or Manual only.
  3. Let outside agents drive T3. Copy the MCP URL from Settings → Connections, then:
    claude mcp add --transport http t3 https://<environment-address>/mcp
    claude mcp login t3
    Access is read-only by default. Grant a permission ceiling only when you want the agent to start threads.
  4. 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

  1. 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.
  2. 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.