Local HTTP bridge: OpenClaw → oauth-coder → real claude CLI (OAuth tokens, no API key).
Upstream: codeninja/oauth-cli-coder
oauth-coder installed and authenticated ( claude login)OAUTH_CODER_BINbash
bash scripts/setup.sh # copies bridge, adds claude-cli provider to openclaw.json
python3 ~/.openclaw/scripts/oauth-coder-bridge.py &
# Or: systemctl --user enable --now oauth-coder-bridge
bash
curl http://127.0.0.1:8787/health # → {"status":"ok"}
openclaw models set claude # use alias
openclaw models set claude-cli/claude-opus-4-6 # or full path
Opus: claude-opus-4-6, claude-opus-4-5, claude-opus-4-1, claude-opus-4-0 Sonnet: claude-sonnet-4-6, claude-sonnet-4-5, claude-sonnet-4-0, claude-3-7-sonnet-latest, claude-3-5-sonnet-latest Haiku: claude-haiku-4-5, claude-3-5-haiku-latest
All prefixed with claude-cli/ (e.g. claude-cli/claude-opus-4-6).
text
OpenClaw → HTTP :8787 → oauth-coder-bridge → oauth-coder → claude CLI
Bridge translates Anthropic-messages JSON → oauth-coder ask claude ... subprocess calls.
VariableDefaultDescriptionOAUTH_CODER_BIN``$HOME/bin/oauth-coderPath to binaryOAUTH_CODER_BRIDGE_PORT8787Listen portOAUTH_CODER_BRIDGE_HOST127.0.0.1Bind addressOAUTH_CODER_BRIDGE_TIMEOUT300Request timeout (s)OAUTH_CODER_BRIDGE_MAX_PROMPT100000Max prompt lengthOAUTH_CODER_BRIDGE_LOG_FILE(empty)Log file (stderr only if unset)
claude CLI subprocessLOG_FILE is set, prompts/responses may be logged locallybash
curl http://127.0.0.1:8787/health # check bridge
which oauth-coder # check binary
claude login # re-auth
oauth-coder stop-all # clear stuck sessions
scripts/oauth-coder-bridge.py — bridge serverscripts/setup.sh — installerscripts/update-openclaw-config.py — config updaterreferences/oauth-coder-bridge.service — systemd templateMIT License