I hate reading agent yap in a terminal. T3 Code fixes that. Love it.
I am also particular about how my workstation is laid out.
One app window holding every project feels like opening VS Code at /.
Visual workspaces already solve that separation.
Upstream T3 Code is one window.
hyprws allows for multiple windows, and you can set them up however you like!
Select one (or more) projects in each window; Hyprland decides where it lives.
They are not separate instances: every window shares one Electron process, backend, auth, providers, and state.
┌─ Virtual desktop 1 ──────────┐ ┌─ Virtual desktop 2 ──────────┐
│ T3 Code · Project A │ │ T3 Code · Projects B, C │
│ editor + zmux · browsers │ │ editor + zmux · browsers │
└──────────────────────────────┘ └──────────────────────────────┘
└──────── one backend, one state ────────┘
My setup around it is opinionated: Hyprland, dual-monitor virtual desktops, zmux, and Worktrunk.
The fork encodes none of that policy.
| Key | Does |
|---|---|
mod+shift+w |
New window on all projects |
mod+alt+f |
Choose this window's projects |
mod+alt+o |
Reuse a window showing this project, else open |
Choose Only selected to show specific projects, or All except selected to hide selected projects and include new ones automatically. With no selection, both modes show all projects. The filter narrows lists without closing open threads.
- Same thread: Open in New Window, both live
- Update: back on their Hyprland workspaces
- Old links:
#/project/...links still open
windows-launch.mp4
More clips
Choose projects, exclude them, or reset to all
chooser-69eb05f7-vmon.mp4
One thread in two windows, streaming in both
windows-same.mp4
Relaunch: windows return to their workspaces
windows-restore.mp4
Every fork commit belongs to one domain, and each domain retires when upstream covers it. The fork delta owns the full list and boundaries.
- Discover: native Claude and Codex agents
- Select: one as the main thread
- Persist: across new and resumed sessions
agents-pirate.mp4
More clips
The project agent behind it: .claude/agents/pirate.md
agents-file.mp4
- Speak: record into an editable draft
- Live: Meta words appear while you speak
- Finish: commit, review, then send
- Cancel: keep the original draft
- Guide
live-meta-rebased-demo.mp4
- Modes: Rich and Source for Markdown files
- Save: CommonMark, GFM, frontmatter intact
- MDX: stays a read-only preview
- Guide
markdown-authoring.mp4
More clips
Rich and Source views of an existing file
markdown.mp4
- Attach: terminals join the checkout session
- Worktrees: new ones join the same session
- Shared: visible from T3 Code and the CLI
- Enable: Terminal session in Appearance
- Guide
zmux.mp4
More clips
Open a plain shell alongside managed zmux
plain-shell-final.mp4
- Mode: New worktrunk for a thread
- Hooks:
wthooks on create and remove - Proof:
pre-startwrites.env.local - Fallback: plain worktrees without
wt
worktrunk-create.mp4
More clips
Removal runs pre-remove
worktrunk-remove.mp4
- Browse: issues on web and desktop
- Detail: filters, comments, and tabs
- Hand off: one issue to a new thread as a draft
- Link: issues and threads in both directions
issues.mp4
- Group: related active threads in the sidebar
- Fork: continue a copy on the same provider
threads.mp4
- Continue: the same child keeps its context
- Return: each round wakes the parent
- Control: track or cancel the current round
Two rounds, one child: typing 8×, work 6×
retained-rounds-proof.mp4
- Collections: global and per project
- Star: save, move, or remove a page
- New tab: bookmarks listed first
- Guide
bookmarks.mp4
- Reveal: gitignored agent artifacts on demand
- Default: hidden, remembered per device
- Safety: containment holds unless trusted
- Guide
files.mp4
- Grant: RFC 8628-style device flow
- Approve: on the host,
t3 auth device approve - Token: never passes through a person
- MCP: outside agents create and steer threads
- Limit: selected projects, revocable access
A client on another machine starts a T3 thread
02-create.mp4
More clips
An external MCP client answers an agent's question
pr1654-external-mcp-answer-terminal-live.mp4
- Attach: desktop joins a running backend
- Pair: automatically, once per launch
- State: one writer on
state.sqlite, not two
- Builds: Linux AppImage releases
- Nightly: cut on every trunk push
- Fixes: focused, dropped once upstream lands
- Guide
Upstream has no multi-window concept at all. A browser on a self-hosted backend comes close, but still trails Electron for terminals and nested browser windows. At parity, the window domains retire; the others stand on their own.
| Doc | Read it for |
|---|---|
| Fork development | Changing fork behavior or Git topology |
| Fork delta | Every fork change and why |
| Fork sync | Rebase, verify, publish, release |
T3 Code is an "agent harness control surface". It lets you control agents through mobile, web, and Electron desktop apps.
Clients: iOS · Android · web · desktop.
Works with your subscriptions on Claude Code, Codex, Cursor, Grok Build, OpenCode, and Google Antigravity. If they're set up on your computer, T3 Code can control them.
Nothing. We built T3 Code because we wanted the best possible development experience with agents. We were inspired by existing solutions like the Codex desktop app, Conductor, Claude Desktop and Cursor Glass, but none met our bar.
We wanted something performant, remote-ready, and truly open. If we ever go the wrong direction, we want you to have everything you need to fork and build the editor that you want.
Warning
T3 Code currently supports Codex, Claude, Cursor, Grok Build, OpenCode, and Antigravity. Install and authenticate at least one provider before use:
- Codex: install Codex CLI and run
codex login - Claude: install Claude Code and run
claude auth login - Cursor: install Cursor CLI and run
agent login - Grok Build: install Grok Build CLI and run
grok login - OpenCode: install OpenCode and run
opencode auth login - Antigravity: enable it in Settings, then use Install Antigravity and Sign in with Google. No CLI is required.
curl -fsSL https://t3.codes/install.sh | shOn Windows, in PowerShell:
irm https://t3.codes/install.ps1 | iexThen run t3 to start the server and open the local web app. t3 service install keeps it running in the background, t3 update moves to a newer release, and t3 --help has the full reference.
To try it once without installing, run npx t3@latest instead.
Install the latest version of the desktop app from GitHub Releases, or from your favorite package registry:
winget install T3Tools.T3Codescoop install extras/t3codebrew install --cask t3-codeDownload the .deb from GitHub Releases, then:
sudo apt install ./T3-Code-*.debStable:
yay -S t3code-binNightly:
yay -S t3code-nightly-binThe AUR packaging is maintained in this repository under packaging/aur.
We are very very early in this project. Expect bugs.
We are (mostly) not accepting contributions yet. Small fixes may be considered. Big features will not be.
Full docs live in docs/. There's no docs site yet.
- Install and first run
- Permission modes
- Keyboard shortcuts
- Browser bookmarks
- Project settings
- Appearance preferences
- Desktop dictation
- Remote access from a phone or another machine
- Connect Claude Code, Codex, ChatGPT and other agents over MCP
- Keeping app and server in sync
- Source control integrations
- Multiple accounts: Codex · Claude
- Run T3 Code as a background service
Building from source? Start at docs/internals/overview.md.
T3 Code uses Vite+ so you'll need to install the global vp command-line tool.
curl -fsSL https://vite.plus | bashirm https://vite.plus/ps1 | iexCheckout their getting started guide for more information: https://viteplus.dev/guide/
vp iRead CONTRIBUTING.md before reporting a bug or opening a PR.
Have a feature request? Start an Ideas discussion.
Need support? Join the Discord.

