Notes /
Claude was the first row. Then the dashboard grew badges.
I didn't set out to support three agents. I set out to leave the desk.
AI Tether started as a remote for Claude Code because that's what was running on this Mac. The first version had no provider field. Every session was Claude, the way every file used to be a .doc.
Then I had a Grok Build session in one folder and a Codex rollout in another, and I was alt-tabbing between three TUIs to see which one was waiting on me. That's a stupid way to spend an afternoon, and it's exactly the problem this app is supposed to kill.
So the daemon grew three roots. ~/.claude/projects, ~/.codex/sessions, ~/.grok. Same transcript items on the wire — user text, assistant text, thinking, tool use — different parsers. The client just paints a badge.
The badges aren't decoration. Claude, Codex, and Grok do not have the same remote surface, and pretending they do would be a lie you notice on day two:
- Claude Code we can launch, resume, approve tools against, switch models, fork a terminal session into one we actually own.
- Grok Build is first-class the same way. We spawn it in a pty the daemon owns, so
/modeland/effortand image attachments work from the phone. - Codex we drive when we launched it (
app-server: prompts, approvals, interrupt, steer). A TUI you started yourself we still only find — rollouts on disk, live status, the transcript (reasoning is encrypted on their side, so you get a marker, not the thought).
One window. Three harnesses. The row that needs you floats to the top, whatever name is on the badge.