Codey can be the agent behind somebody else's UI. It speaks the Agent Client Protocol — JSON-RPC over stdin and stdout — so a control plane that drives Codex, Claude Code or Cursor can drive this instead:
codey agent stdio
Nothing but protocol frames goes to stdout in that mode; diagnostics go to stderr. The connection ends when stdin does.
T3 Code compiles its providers in, so there is no Codey
entry to select. There is, however, a binary path on every provider, and its
Grok provider is a plain ACP agent — which means Codey can take that slot with
no change to their source. In Settings → Providers, enable Grok, set
Binary path to your codey, and rename the instance:
"providerInstances": {
"codey": {
"driver": "grok",
"displayName": "Codey",
"enabled": true,
"config": { "binaryPath": "/path/to/codey" },
"environment": [
{ "name": "ANTHROPIC_API_KEY", "value": "sk-ant-...", "sensitive": true }
]
}
}
That file is ~/.t3/userdata/settings.json; the settings panel writes the same
thing. The per-instance environment is how Codey gets a credential without
inheriting whatever the desktop app was launched with — and without it, the
provider card will say Codey is installed and not logged in, which is true.
Threads stream text and reasoning, fill a tool row in as the command talks, raise an approval prompt you answer in T3 Code's own panel, and stop when you press stop. The model picker is filled from the endpoint Codey is pointed at.
Subagents work too. Each one gets a row of its own that opens
when the child starts, fills in as it works, and closes with its report, and
the reports reach the parent as messages exactly as they do in the TUI. A turn
stays open while its children are still working — their output belongs inside
the turn that started them, and a thread that looked finished while four agents
were still running would be lying. -no-agents in the launch arguments turns
them off.
What does not work is resuming a thread after a restart: Codey does not advertise session loading, so T3 Code will not offer it.
The card will say Grok and show the xAI glyph. The display name and accent colour are yours to set; the icon is not. That is the price of occupying a slot instead of adding one.
Two invocations exist only for that provider card: codey --version, and
codey models, which prints whether there is a credential and what the
endpoint serves. Both are shaped for the regular expressions on the other end
rather than for a person. The probe follows the same opt-in as everything else:
a Claude Code login counts as logged in only when the config says
"claude_code_auth": "on" — the probe is run with no flags, so
-claude-code-auth in the launch arguments reaches the agent but not the card.
The T3 Code provider design is the research this is built on: what every T3 Code provider requires of a binary, and why the Grok slot is the one that fits.