?

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.

Type to search 150+ pages. Ranking: BM25 with title/description boost.