Things I’ve built Deck for T3 Code

Deck for T3 Code

A Stream Deck plugin for macOS that puts every T3 Code thread on a key. It’s how I keep an eye on a dozen coding agents without staring at their windows. This is why I built it and how it works.

ProjectDeck for T3 Code
PlatformmacOS + Stream Deck
Statusv1.2.0 / latest
LicenseGPL-3.0-or-later
PriceFree
Notes
  1. Not affiliated with or endorsed by T3 Tools Inc. T3 Code is a trademark of its respective owner.
  2. Stream Deck is a trademark of its respective owner. Not affiliated with or endorsed by Elgato or Corsair.

Want to see it move? The project site has a one-minute demo on a Stream Deck XL, screenshots of every key and the install guide.

The itch

Why I built it

I run a lot of coding agents at once in T3 Code. Most of the time they’re busy. Then one stops to ask me something, and it sits there until I notice.

So I kept checking. Switch to T3 Code, scan the sidebar, switch back. Over and over. And I still missed the one that was waiting on me.

I wanted to know where every thread stood without going to look. A Stream Deck is a grid of little screens that sits next to the keyboard. One thread per key seemed like the obvious fit, so that’s what I built.

Line drawing of a Stream Deck XL with 32 keys, each an AI coding-agent thread: keys marked ! need attention, keys with a check are done, keys with a spinner are working, a dashed key is paused at a usage limit. 8 KEYS 4 KEYS
Fig. 1: Stream Deck XL, one key per threadExample data

One key for every state

Colour, glyph, motion
Key outlined in amber and marked with an exclamation mark: Add retry to checkout flow, project acme-web. Add retry to checkout flowacme-web
Key with a heavy outline, marked with a cross: Cache build artifacts in CI, project acme-infra. Cache build artifacts in CIacme-infra
Key marked with a check: Fix flaky login test, project acme-web. Fix flaky login testacme-web
Key with a spinner in the corner: Paginate the orders endpoint, project acme-api, context 23 percent. Paginate the orders endpointacme-api23%
Key with a dashed spinner and a badge reading PR #42 CI: Upgrade to Node 24. Upgrade to Node 24 PR #42 CI
Key with a dashed outline and a clock: Rotate staging secrets, labelled USAGE LIMIT, back in 2h 10m. Rotate staging secrets USAGE LIMITback in 2h 10m
Plain key: Document the release process, project acme-docs, context 12 percent. Document the release processacme-docs12%
Fig. 2: Thread keys, one in each stateExample data

Every state gets its own colour, a glyph and a way of moving. You can read a key out of the corner of your eye, before you read its title. The glyph means colour is never the only clue.

Only two states blink: needs you and failed. Those are the two where nothing happens until I do something. Done is good news, but it can wait, so it stays solid green. Working just spins in the corner. If everything blinked, nothing would stand out.

Done and failed clear as soon as I open the thread, from the key or in T3 Code itself. With animation turned off, the blinking keys become a steady tint with a ring.

Local only

Privacy and security

Deck talks to one thing: the T3 Code server on the same Mac. It has no server of its own and no account. It doesn’t send anything anywhere, so there’s no analytics, crash reporting or telemetry to turn off.

There’s nothing to pair either. On first run the plugin asks your local t3 command-line tool for its own tokens, each scoped to what it needs. The two it always has are read-only, so they can’t change anything in T3 Code.

Actions like stopping a thread or sending it a message need a third token. It’s off until you turn it on, lasts a day, and is revoked when you turn actions off. The risky keys also need a 0.8 second hold, so a stray tap does nothing.

  1. T3 CodeYour threads
  2. Deck for T3 CodeLocal tokens
  3. Stream DeckOn your desk
Tokens the plugin mints
TokenScopeLifetime
ThreadsThe thread listRead-only30 days, renewed once less than half is left
Live and usageLive status, context size, usage limitsRead-only30 days, renewed the same way
ActionsSend a message, snooze, settle, stopRead and operate. Off by default24 hours. Revoked when you turn actions off
What the plugin checks
  1. Tokens only go to a loopback address (127.0.0.1, localhost or ::1). Anything else is refused before a token is minted.
  2. Requests that carry a token refuse redirects, so a local server can’t bounce one elsewhere.
  3. Before the t3 tool runs, it must be a regular file owned by you or root that nobody else can write to.
  4. Token files are readable only by you, and log lines are scrubbed of anything that looks like a token.
  5. Uninstalling doesn’t revoke the tokens. Press Sign out in the settings first.

The full security policy is in SECURITY.md (opens in a new tab)

How it was made

Process

AI coding agents did a lot of the typing. I decided what it should do, read every change, and ran each release on my own Stream Deck XL before it went out.

Code that touches tokens and files got an extra review before merging. Every release ships with SHA-256 checksums and a build provenance attestation, so you can check that a download came from the repo’s own release workflow.

Numbers

As of Nov 9, 2026
First public commit to v1.2.0
3 days
Nov 3 to Nov 6, 2026
Stable releases
3
Plus a nightly, rebuilt when plugin code lands on main
Latest release
v1.2.0
GPL-3.0-or-later
Merged pull requests
19
16 mine, 3 from Dependabot
Unit tests at v1.2.0
195
Run in CI on every pull request

Stars, releases and the latest version come from the GitHub API, as of Nov 9, 2026. The other figures were counted on Nov 7, 2026. Days are counted from the first public commit; work before it isn’t in the public history.

Keep it going

Deck for T3 Code is free and will stay free. If it saves you a few window switches a day, you can sponsor it. It helps me keep fixing bugs and adding keys. A star or a good bug report helps too.

Let’s talk

Running a lot of agents at once, or putting them on hardware of your own? I’d like to hear how you do it. Write to me.