radioactive-ralph is provider-agnostic. The runtime dispatches
claimed tasks to whichever provider CLI the variant’s config binds
to. All three shipped providers — claude, codex, gemini — are
external CLIs that must be installed and authenticated separately.
Claude (Anthropic)¶
Install¶
# macOS / Linux / WSL2
curl -fsSL https://anthropic.com/install.sh | sh
# Or via npm
npm install -g @anthropic-ai/claude-code
Authenticate¶
claude
First run prompts you to sign in at console.anthropic.com. Session
tokens are cached in your user config under ~/.claude/.
Verify¶
claude --version
claude -p --input-format stream-json < /dev/null
The second command should print a stream-json init frame, then exit cleanly. If it prompts for auth, the session cache is missing.
radioactive-ralph stateful binding¶
Claude supports session resume, so the provider binding for claude
is stateful — internal/provider/claudesession holds the session
lifecycle across task boundaries.
Codex (OpenAI)¶
Install¶
# npm install -g @openai/codex-cli
# (tracking — verify the current package name on the OpenAI docs)
Authenticate¶
export OPENAI_API_KEY=sk-proj-...
codex --version
radioactive-ralph stateless binding¶
Codex is bound stateless in v1 — each turn is independent. If the OpenAI CLI grows session-resume, the binding can promote to stateful in a later release.
Gemini (Google)¶
Install¶
# Install the Google CLI (tracking — verify current name)
gemini --version
Authenticate¶
export GOOGLE_API_KEY=AIza...
gemini --version
radioactive-ralph stateless binding¶
Same as Codex — stateless binding in v1.
Choosing a provider per variant¶
Provider selection is per-variant, configured in
.radioactive-ralph/config.toml:
[variants.fixit]
provider = "claude"
plan_model = "claude-opus-4-5"
plan_effort = "high"
[variants.grey]
provider = "codex"
[variants.red]
provider = "gemini"
If no provider is set, the runtime falls back to claude. Passing an
unknown provider fails loudly at service start.
Verify end-to-end¶
After all three are installed and authenticated:
radioactive_ralph doctor
Expected:
[OK] claude — claude X.Y.Z
[OK] codex — codex X.Y.Z
[OK] gemini — gemini X.Y.Z
If any provider is missing but you don’t plan to use it, that’s fine
— only the providers that appear in your config.toml need to
authenticate.