t3-micro2
v0.1.1
Published
A Work Louder Creator Micro 2 for T3 Code: six keys show the state of your threads and open them, the rest run T3 Code actions.
Maintainers
Readme
🎛️ T3 Micro Bridge
Your T3 Code threads on a Work Louder Creator Micro 2.
Six keys light up with the state of your T3 Code threads and open them. The other keys, the knob and the joystick jump to the thread that waits on you, stop a run, take dictation, settle a thread and send. It does for T3 Code what the pad's ChatGPT layer does for Codex, on a layer of its own.
🚀 Quick start · ⌨️ Keys · 🚦 Lights · 🧰 Commands · 🛡️ Security · 💖 Support
With several agent threads running, the slow part is noticing which one needs you. The pad shows it without a window switch: a key pulses orange when a thread waits on your answer, and one press opens it. The bridge only takes the pad while it is on the T3 Code layer, so Codex keeps working on its own layer.
- 🚦 Thread lights: orange for waiting on you, red for failed, green for finished, blue for working, white for idle. The ring around the pad shows the most urgent state of every open thread.
- 🎯 The six keys follow urgency: what waits on you comes first, longest wait first. Or they follow the T3 Code sidebar, if you prefer its order.
- ⏭️ NEXT: one key opens the thread that has waited on you longest, then the one after it.
- ⌨️ One press per action: approve, stop the run, new thread, dictate, settle, send. The knob steps through threads and picks a model.
- 🎚️ Simple and advanced modes: start with one action per key. Advanced adds a second action on a hold and turns the joystick on.
- 🖥️ More than one T3 server: the keys can mix threads from the desktop app and from other T3 servers on the same Mac.
t3-micro2 spaceslists them. - 🤝 Your shortcuts: the bridge reads T3 Code's keybindings file, so shortcuts you changed still work.
- 🩺 One command:
t3-micro2 setupinstalls it,statusanddoctorcheck it,uninstallremoves it.
[!IMPORTANT] This is not a product of T3 Code, Work Louder or OpenAI. It uses interfaces none of them document: the pad's USB protocol and a local T3 Code endpoint. An update to the pad's firmware or to T3 Code can break it. It was built and tested on one pad (firmware 0.6.3) and one Mac. Setup changes the keymap file on the pad and keeps a copy of the old one. See 🛡️ Security and privacy.
🧰 What you need
| What | Details |
| --------------------------- | --------------------------------------------------------------------------------------------------------------- |
| 🍎 A Mac | macOS 13 or later. Tested on macOS 27 with Apple silicon. |
| 🎛️ The pad | A Work Louder Creator Micro 2 that has a ChatGPT layer, connected by USB. Tested with firmware 0.6.3. |
| 💬 T3 Code | The desktop app, opened at least once. |
| 🛠️ Apple's command line tools | For the Swift compiler. xcode-select --install installs them. Setup builds the app on your Mac. |
| 📦 Node.js 18 or later | To install with npm. |
| 🧩 A free layer on the pad | Setup turns an empty layer into the T3 layer. With none empty, you choose which layer to replace. |
Work Louder's Input app and the ChatGPT app are not needed. If you use them, they keep working.
🚀 Quick start
1. Install
Through your agent: open a session in your coding agent (Claude Code, Codex, T3 Code or similar) and paste this line:
Install T3 Micro Bridge from https://github.com/kdpa-llc/t3-micro2 by following the Quick start section of its README.By hand: run these two commands in a terminal.
npm install -g t3-micro2
t3-micro2 setupTo try the latest main before it's released, clone the repository and run ./t3-micro2 setup in it.
🤖 Agents doing the install:
- Check the machine:
sw_versshows macOS 13 or later,command -v swiftcfinds the compiler, andls ~/.t3/userdatashows T3 Code has run. If one is missing, tell the user what to install and stop.- Run
npm install -g t3-micro2. Check thatnpm view t3-micro2 repository.urlnameskdpa-llc/t3-micro2before you run anything from it.- Run
t3-micro2 setup. If it stops because the pad has no empty layer, show the user the layers it printed and ask which one to replace. Then runt3-micro2 setup --layer N.- Tell the user what setup printed. If it says Accessibility is not allowed, they must turn it on themselves in System Settings. You can't do it for them.
- Run
t3-micro2 doctorand report anything it marksFIX. If it notes more T3 servers on the Mac, ask the user whether the keys should show their threads too, and runt3-micro2 spaces add --allon a yes.
t3-micro2 setup is safe to run again. It:
- builds T3 Micro Bridge.app into
~/Applicationsand signs it with an identity made for this Mac; - gives the pad a T3 Code layer, a copy of its ChatGPT layer, after saving the pad's keymap as a backup;
- adds a shortcut for stopping a run to T3 Code (⌘⌥X), which has none;
- starts the bridge, and starts it again at every login.
2. Allow Accessibility
macOS asks once whether T3 Micro Bridge may control your computer. Turn it on in System Settings > Privacy & Security > Accessibility. The bridge uses it to press shortcuts and the Approve button in T3 Code. Without it, the six thread keys and NEW still work.
3. Switch the pad to the T3 Code layer
Press the pad's small round button until the keys light up for your threads. t3-micro2 status shows which layer the pad is on.
4. Learn the keys
t3-micro2 keymap opens the key map in your browser. It shows the pad in 3D with every key labeled, in simple and advanced mode, and a way to learn it in four short sittings.
⌨️ The keys
The pad has four rows. Row 1 is the knob, thread keys 1 and 2, and the joystick. Row 2 is thread keys 3 to 6.
| Control | Tap | Hold (advanced mode) | | ---------------------------- | ------------------------------------------------------------------- | ------------------------------------------ | | Thread keys 1 to 6 | Open that thread | Open it, then settle it | | NEXT (row 3, first) | Open the thread that has waited on you longest; again for the next | | | APPROVE (row 3, second) | Approve the request in the open thread | Decline it | | STOP (row 3, third) | Stop the run | | | NEW (row 3, fourth) | New thread | New thread without a project | | MIC (row 4, second) | Hold and talk, let go to finish. A short press starts or ends dictation | Same | | SETTLE (row 4, third) | Settle the open thread | Pin or unpin it | | SEND (row 4, fourth) | Return | ⌘Return | | Knob | Turn: previous or next thread. Press: model picker, turn to move, press to choose | Hold for a second, in either mode: switch between simple and advanced | | Joystick | Off in simple mode | Left back, right forward, up effort picker, down sidebar |
- T3 Code doesn't have to be in front. A key press brings it forward, then acts.
- Simple mode acts the moment a key goes down. Advanced mode waits for the release, to tell a tap from a hold.
- Switch modes by holding the knob for a second. The ring shows white for simple and violet for advanced. The mode is kept across restarts.
- The small round button, first in row 4, is the pad's own. It switches layers.
🚦 The lights
| Color | The thread | | ------------------- | ---------------------------------------- | | 🟠 Orange, pulsing | Waits on you: a question or an approval | | 🔴 Red | Its last run failed | | 🟢 Green | Finished since you last opened it | | 🔵 Blue | Is working | | ⚪ White | Is idle | | ⚫ Off | No thread on that key |
These are the colors the ChatGPT app uses for Codex threads.
The ring around the pad looks at every open thread, not only the six on the keys. It pulses orange when something waits on you, moves in blue while work runs, and stays red or green for a failure or a finished thread. A short green blink after NEXT means nothing is waiting.
Which thread is on which key. Settled, snoozed and child threads never take a key. slotOrder in the settings picks the order of the rest:
priority, the default: threads that wait on you (longest wait first), failed, finished, running threads you started, running scheduled threads, then idle threads with pinned ones ahead.sidebar: the T3 Code sidebar read top to bottom, so Pinned, then the main list, then the Working shelf.
🏗️ How it works
Creator Micro 2 ── USB ──► T3 Micro Bridge ──► T3 Code
(launch agent)
key presses ────────────► thread keys ────► t3code:// links
knob, joystick ─────────► action keys ────► shortcuts and buttons (Accessibility)
key colors, ring ◄─────── thread states ◄── local endpoint, read-only token- The pad talks JSON over a USB interface of its own. Keys on a ChatGPT-type layer don't type. They report to the computer, and the computer sets their colors.
- The T3 layer is a second layer of that type. The Input app can't make one, so setup writes it into the pad's
keymap.json, the same way the Input app saves a keymap. - Taking turns with Codex. Off the T3 layer, the bridge only asks the pad which layer is active, every second or two. On the T3 layer it opens the pad for itself, so the ChatGPT app doesn't also act on the same key presses. It lets go when you leave the layer, and while the Input app is in front so you can still edit the pad. Codex reconnects by itself a few seconds later.
- Thread states come from each T3 server's local endpoint, with a read-only token the bridge gets from that server's own
t3command. It asks every 2.5 seconds while the pad is on the T3 layer, and not at all otherwise. - Actions. Opening a thread and NEW use
t3code://links. Everything else presses a T3 Code shortcut or, for APPROVE, the button in the window.
| File | What it does |
| ---------------------------- | ------------------------------------------------------------------------ |
| t3-micro2 | The command: setup, status, doctor, uninstall |
| Sources/main.swift | Entry point, and the one-shot commands t3-micro2 uses |
| Sources/Bridge.swift | Layer watching, lights, and what each key does |
| Sources/Micro.swift | The pad: USB reports, calls, files |
| Sources/T3.swift | T3 Code: tokens, thread states, key order |
| Sources/Actions.swift | Key presses and button presses in the T3 Code window |
| Sources/Shortcuts.swift | Reads T3 Code's shortcuts; adds the one for stop |
| Sources/Keymap.swift | Works out the T3 layer from the pad's keymap |
| Sources/SetupTool.swift | Adds and restores the layer, with backups |
| Sources/OrderedJSON.swift | JSON that writes back exactly what it read |
| Sources/SelfTest.swift | Checks that need neither a pad nor T3 Code |
| Sources/Support.swift | Paths, log, settings |
| docs/keymap.html | The 3D key map |
| tests/smoke.sh | Builds into a temporary folder and runs the self-test |
🧰 CLI reference
| Command | What it does |
| -------------------------------------------------------- | --------------------------------------------------------------------------- |
| t3-micro2 setup [--layer N] [--no-layer] [--no-shortcut] | Build the app, add the pad's T3 layer, start the bridge at login |
| t3-micro2 status | What the bridge sees: pad, layer, T3 Code, permission, mode |
| t3-micro2 doctor | Check the setup and say how to fix what's wrong |
| t3-micro2 threads | The six threads the keys show now |
| t3-micro2 keymap | Open the 3D key map in your browser |
| t3-micro2 spaces | T3 servers on this Mac, and which ones the keys show |
| t3-micro2 spaces add <folder>\|--all | Show the threads of one more T3 server, or of all of them |
| t3-micro2 spaces remove <folder> | Stop showing a server's threads, and end the bridge's session on it |
| t3-micro2 logs [N\|-f] | The bridge's log |
| t3-micro2 start \| stop \| restart | Run or stop the bridge |
| t3-micro2 layer show | The pad's layers |
| t3-micro2 layer install [N] | Turn an empty layer, or layer N, into the T3 layer |
| t3-micro2 layer restore [file] | Put a saved keymap back on the pad; without a file, the newest backup |
| t3-micro2 build | Rebuild the app from this folder |
| t3-micro2 uninstall [--all] | Remove the app; --all also removes settings, tokens and the signing identity |
Settings are in ~/Library/Application Support/T3MicroBridge/config.json. Run t3-micro2 restart after you change one.
| Setting | Default | Meaning |
| ------------------- | -------------- | -------------------------------------------------------------------------- |
| slotOrder | "priority" | "priority" or "sidebar": which thread is on which key |
| t3Homes | ["~/.t3"] | T3 data folders to read threads from. t3-micro2 spaces changes it |
| t3LayerIndex | set by setup | The pad's T3 layer, counted from 1 as the Input app counts |
| brightness | 1 | 0 to 1, for the keys and the ring |
| keysBacklight | false | true adds a dim white light under the keys |
| holdSeconds | 0.45 | How long a press must last to count as a hold in advanced mode |
| actionKeys | true | false turns off the seven action keys and the joystick |
| t3PollSeconds | 2.5 | How often thread states are read while the pad is on the T3 layer |
🛡️ Security and privacy
- Accessibility lets an app press keys and buttons in any other app. The bridge uses it for T3 Code: a key press brings T3 Code to the front, and the bridge sends it only once T3 Code is the app in front. If T3 Code doesn't come forward within two seconds, or the screen is locked, nothing is sent. The app can't be made to press a key from the command line, and macOS refuses to load other code into it.
- APPROVE presses the newest Approve button in the T3 Code window. Look at the request before you press it. Decline is on a hold, in advanced mode, so a slip doesn't refuse a request.
- The tokens are read-only. The bridge asks each T3 server for a token with the scope
orchestration:read, and sends it only to a running server on this Mac. Tokens last 90 days, are stored in files only you can read, and are renewed by the bridge.t3-micro2 uninstall --allrevokes them. - Nothing leaves your Mac. The bridge talks to the pad and to the T3 servers on this Mac. It has no network listener and sends no usage data. The key map page is the one exception: when you open it, your browser loads three.js and its fonts from public CDNs.
- The log holds thread titles. It is at
~/Library/Logs/T3MicroBridge/bridge.logand is cut off at 2 MB. Take titles out before you paste it into an issue. - The signing identity is a self-signed certificate in a keychain of its own, with its password in a file next to it. Any program that can read your files can sign with it, and an app signed with it and given the bridge's identifier would inherit the Accessibility permission.
- The pad's keymap is changed by setup, once. The file from before is in
~/Library/Application Support/T3MicroBridge/backups, andt3-micro2 layer restorewrites it back. - While the pad is on the T3 layer, the ChatGPT app and the Input app can't reach it. Leave the layer, or bring the Input app to the front, and they can.
See SECURITY.md to report a vulnerability.
🩺 Troubleshooting
Start with t3-micro2 doctor. It checks the app, the launch agent, T3 Code, the pad, the permission and the stop shortcut, and prints how to fix each problem. Then:
t3-micro2 status
t3-micro2 logs- The keys stay dark: the pad is on another layer. Press its small round button until
t3-micro2 statussays it is on the T3 layer. - A thread key opens a thread, but the other keys do nothing: Accessibility is off. Turn on T3 Micro Bridge in System Settings > Privacy & Security > Accessibility.
- Setup says every layer has keys on it: run
t3-micro2 layer show, pick a layer you can give up, and runt3-micro2 setup --layer N. Its old keys are in the backup. - The T3 layer disappeared after you used the Input app: the Input app wrote its own copy of the keymap. Run
t3-micro2 layer install. - The lights show Codex's colors on the T3 layer: the bridge isn't running. Run
t3-micro2 start. - A key does nothing, and the log says T3 Code did not come to the front: the screen was locked, or a system dialog was in the way. The bridge sends nothing then, so a key press can't land in a password field.
- STOP does nothing: T3 Code has no stop shortcut, or yours is on a key the bridge can't press.
t3-micro2 doctorsays which. - A shortcut key does the wrong thing: the bridge presses keys by their position on a US keyboard. Other layouts can differ for
[and]. - The Input app can't see the pad: bring the Input app to the front. The bridge lets go of the pad while it is in front.
- The keys show threads you don't expect:
t3-micro2 threadsprints the six and their states. Settle a thread in T3 Code to take it off the pad.
🔄 Update and remove
Update: install the new version, then run setup again. Your settings, the pad's layer and the Accessibility permission stay.
npm install -g t3-micro2
t3-micro2 setupRemove:
t3-micro2 layer restore # optional: put the pad's old keymap back first
t3-micro2 uninstall # the app and its launch agent; keeps settings and backups
t3-micro2 uninstall --all # also settings, tokens, the signing identity, the log and the stop shortcut
npm rm -g t3-micro2uninstall --all keeps the keymap backups, and leaves the pad as it is.
🤝 Contributing
Found a bug 🐛, have an idea ✨, or own a pad with other firmware? Contributions are welcome. Read CONTRIBUTING.md, follow the Code of Conduct, and run the checks before opening a pull request:
npm install # dev tools and the commit-message hook
npm run lint # shellcheck
npm test # builds into a temporary folder and runs the self-testReleases are automatic: semantic-release publishes to npm from Conventional Commits after CI passes. See PUBLISHING.md.
🔗 Complementary projects
Agent Box
A Linux desktop with a real Chromium for your coding agents, which you watch and take over from your phone.
Peers
A notes vault where any folder can have its own AI agent, running on T3 Code.
MCP Compression Proxy
Use a large MCP toolset without loading every tool into every prompt.
Local Skills MCP
Serve the skills on your filesystem to any MCP client.
💖 Support the project
Open source grows through the people who try it, share it, and improve it. If T3 Micro Bridge saves you a window switch:
- ⭐ Star the repository so more people with a pad on their desk can find it.
- 🐛 Report a bug or suggest an idea to help shape what comes next.
- 📝 Contribute code or documentation. First-time contributors are welcome.
- 💖 Sponsor continued development using any of the options below.
Every star, issue, pull request, and contribution helps. Thank you! 🙌
📄 License
MIT © 2026 KDPA LLC.
🙏 Acknowledgments
Made for T3 Code and the Work Louder Creator Micro 2 • Inspired by the pad's Codex layer in the ChatGPT app • The 3D key map uses three.js
T3 Code, Work Louder, Creator Micro, ChatGPT and Codex are names of their owners. This project is not affiliated with them.
Made with ❤️ by KDPA
