Channel-mode auth failures¶
The experimental channel transport routes messages directly through MCP instead of tmux injection. It only works on Claude Code, and only with specific prerequisites.
Hard requirements¶
- Claude Code v2.1.80 or newer. Run
claude --versionto check. - claude.ai login. Channel transport does not work with API key or Console key auth. Sign in with
claude /loginagainst your claude.ai account. - bun on
PATH. The channel server is a Bun-runtime TypeScript program. Install from bun.sh.
If any of these are missing, repowire setup --experimental-channels refuses to install and reports which one. Re-run after fixing.
"Failed to authenticate"¶
The channel server starts but immediately exits with an auth error.
- Run
claude /statusand confirm you're signed in via claude.ai, not via API key. If it shows an API key, sign out and back in withclaude /login. - Tokens can rotate. Re-running
claude /loginrefreshes them; the channel server picks up the new token on next start. - If the daemon is configured with
daemon.auth_token, re-runrepowire setup --experimental-channelsso therepowire-channelentry includesREPOWIRE_AUTH_TOKEN.
Messages not arriving¶
The channel server is running but messages never reach Claude:
- Confirm the
repowire-channelMCP server entry in~/.claude.jsonpoints at the channel server. The normalrepowireMCP server should still be present separately for tools such asack,ask, andnotify_peer. - Restart the Claude Code session. The channel server connects once at session start; if it disconnected, a restart re-establishes the WebSocket.
Switching back to default transport¶
Re-running without --experimental-channels restores the default hooks transport. The channel server is left in place but unused; remove it explicitly with repowire uninstall if you want a clean slate.
See also¶
- Claude Code setup — what gets installed in channel vs default mode.
- Daemon unreachable — if the daemon is down, the channel server has nothing to talk to.