The Provider interface
Every LLM backend implements agent.Provider:
type Provider interface {
Name() string
Complete(ctx context.Context, req Request) (Response, error)
}
A StreamingProvider variant adds CompleteStream for token-by-token delivery. Adding a sixth backend is a single Complete implementation plus wiring in internal/cli/provider.go.
Supported families
| Provider | Auth model | Endpoint | Streaming | Prompt caching | Recommended for |
|---|---|---|---|---|---|
| claudecli | Inherits claude CLI auth |
Local subprocess | Yes | via subprocess | Individual operators, subscription-tier Claude Code |
| Anthropic | ANTHROPIC_API_KEY |
api.anthropic.com |
Yes | ephemeral markers | Teams on the Anthropic API |
| AWS Bedrock | AWS credential chain | bedrock-runtime.<region>.amazonaws.com |
Yes | via SDK | Enterprises on AWS |
| Google Vertex AI | Service account or ADC | <region>-aiplatform.googleapis.com |
Yes | via SDK | Enterprises on GCP |
| OpenAI-compatible | Bearer token | api.openai.com or override |
Yes | provider-dependent | OpenAI, OpenRouter, Ollama, vLLM, LM Studio |
Selecting a provider
Set the provider key at the top of ~/.config/rousseau/config.yaml:
provider: anthropic
anthropic:
api_key: sk-ant-...
model: claude-sonnet-4-6
Or override at the shell:
ROUSSEAU_PROVIDER=bedrock rousseau chat
ANTHROPIC_API_KEY is bound to anthropic.api_key at load time, so passing it in the environment is equivalent.
Where each provider tool-uses
The claudecli provider runs its own tool-use loop inside the claude subprocess. Tools registered on the rousseau Registry are not invoked for this provider; the Response is always a single end-of-turn text message with claude's final answer.
Every other provider (anthropic, bedrock, vertex, openai) uses rousseau's Registry. Tool definitions are converted to the provider's expected JSON shape by each provider package.