remoteagent init, and you can change it at any time by re-running init.
Comparison table
| Runner | Type | Status | Requires | Best for |
|---|---|---|---|---|
claude-sdk | In-process SDK | Stable | Anthropic API key | Best quality, default choice |
claude-code | CLI binary | Stable | claude CLI + API key | Same capability, external process |
gemini | CLI binary | Beta | Google account (free tier available) | No-cost option for Gemini models |
aider | CLI binary | Beta | Python, pip, model API key | Multi-model, open-source flexibility |
openclaw | HTTP gateway | Stable | OpenClaw running on localhost:18789 | Self-hosted AI gateway |
custom | CLI binary | Stable | Your binary on PATH | Any AI tool with stdin/stdout interface |
How to select a runner
Pass the--runner flag to remoteagent init:
Switching runners
To change the runner for an existing agent, runremoteagent init again in the same project directory. The wizard detects your existing configuration and lets you update the runner without regenerating a new pairing code (the agent is already paired).
Restart the agent after changing the runner:
Runner architecture
All runners implement the same interface internally. When the agent receives a command from the Redis channel, it calls the runner with the prompt and streams chunks back as they are produced. The runner is responsible for:- Receiving the prompt string
- Invoking the AI model (in-process, via subprocess, or via HTTP)
- Yielding output chunks as they arrive
- Signaling completion or error
Runners marked Beta are functional but may have edge cases in output
parsing or error handling. If you encounter issues, please open an issue on
the GitHub repository.