OpenRouter Provider
Claude-mem supports OpenRouter as an alternative provider for observation extraction. OpenRouter provides a unified API to access 100+ models from different providers including Google, Meta, Mistral, DeepSeek, and many others.claude-mem observer: When you sign in during
npx claude-mem install and choose the claude-mem observer, claude-mem configures this provider for you automatically with a provisioned key — no manual setup needed. The rest of this page covers bringing your own OpenRouter key.Why Use OpenRouter?
- Runs off-plan: Observation extraction never shares your Claude plan usage
- Access to 100+ models: Choose from models across multiple providers through one API
- Free model options: Several high-quality models are available at no charge
- Errors throw clearly: 429s, 5xx, and network failures throw — leaving messages pending so they can be retried
- Hot-swappable: Switch providers without restarting the worker
- Multi-turn conversations: Full conversation history maintained across API calls
Free Models on OpenRouter
OpenRouter actively supports democratizing AI access by offering free models. These are production-ready models suitable for observation extraction.Featured Free Models
Default Model: Claude-mem uses
cohere/north-mini-code:free by default, a sparse mixture-of-experts coding model with a 256K context window.Free Model Considerations
- Rate limits: Free models may have stricter rate limits than paid models
- Availability: Free capacity depends on provider partnerships and demand
- Retirement: OpenRouter retires free model ids regularly. If the default is retired, claude-mem moves stored settings off it automatically. If a model you picked is retired, the observer reports “OpenRouter model unavailable” (see Troubleshooting)
- Queue times: During peak usage, requests may be queued briefly
- Max tokens: Most free models support 65,536 completion tokens
- Tool use and function calling
- Temperature and sampling controls
- Stop sequences
- Streaming responses
Getting an API Key
- Go to OpenRouter
- Sign in with Google, GitHub, or email
- Navigate to API Keys
- Click Create Key
- Copy and securely store your API key
Configuration
Settings
Using the Settings UI
- Open the worker URL printed on startup
- Click the gear icon to open Settings
- Under AI Provider, select OpenRouter
- Enter your OpenRouter API key
- Optionally select a different model
Manual Configuration
Edit~/.claude-mem/settings.json:
Model fallbacks
CLAUDE_MEM_OPENROUTER_MODEL also accepts a list of model ids. The first is
the one normally used; the rest are handed to OpenRouter’s native models
fallback array, which tries them in order when the one before it errors.
"vendor/a, vendor/b" means the same thing as the two-entry array.
Fallbacks are sent only to openrouter.ai. A custom
CLAUDE_MEM_OPENROUTER_BASE_URL gateway speaks plain OpenAI, which has no
models field, so it receives the first id and ignores the rest.
Alternatively, set the API key via environment variable:
Custom OpenAI-compatible gateways
The OpenRouter provider is a generic OpenAI-compatible client. SetCLAUDE_MEM_OPENROUTER_BASE_URL to any server that speaks /chat/completions, such as DeepSeek (https://api.deepseek.com), LM Studio (http://localhost:1234/v1) or IO Intelligence by io.net. The model id is sent as-is, and the first id of a fallback list is used (plain OpenAI has no models field). Use the key that endpoint issued: a claude-mem observer key (cm_pro_…) is only ever sent to the claude-mem observer.
For example, IO Intelligence:
deepseek-ai/DeepSeek-R1-0528 or zai-org/GLM-4.6. A trailing slash on the base URL is fine; /chat/completions is appended automatically.
Extra request fields
CLAUDE_MEM_OPENROUTER_EXTRA_BODY merges a JSON object into every request, for provider-specific fields claude-mem does not set itself. The common case is a reasoning model that spends the whole output budget thinking and answers with nothing. Turn its reasoning off:
CLAUDE_MEM_OPENROUTER_EXTRA_BODY='{"reasoning":{"enabled":false}}'. A custom gateway may use its vendor’s own field instead, for example {"thinking":{"type":"disabled"}}.
- The value must be a JSON object. Anything else is ignored with a warning in the worker log.
- It cannot replace
model,models,messages,stream,max_tokensormax_completion_tokens. Those fields are dropped with a warning. Set the output cap withCLAUDE_MEM_OBSERVER_MAX_OUTPUT_TOKENS. - It is never sent to the claude-mem observer.
- When
CLAUDE_MEM_OPENROUTER_REASONING_EFFORTis set, it decidesreasoningand the extra body’sreasoningfield is ignored. - Set it in
~/.claude-mem/settings.jsonor the environment. The settings UI and API do not write it.
Model Selection Guide
Free Models
Recommended:cohere/north-mini-code:free (the default)
- 256K context window handles large observations
- 64K max completion tokens
- Sparse mixture-of-experts architecture (3B active parameters)
poolside/laguna-xs-2.1:free- Coding-agent model, 256K contextnvidia/nemotron-3-ultra-550b-a55b:free- 1M context, strong reasoning
Premium Models (Higher Quality/Speed)
Premium models draw on your OpenRouter credit — still off-plan, so they never touch your Claude plan usage.
Context Window Management
The full conversation history is sent to the model on each request. claude-mem does not apply any client-side truncation or message-count cap — the provider and model own their own context window. If you need to bound context for a specific model, choose a model with an appropriate context length or manage limits at the OpenRouter/provider level.Usage Tracking
Logs include detailed usage information:Provider Switching
You can switch between providers at any time:- No restart required: Changes take effect on the next observation
- Conversation history preserved: When switching mid-session, the new provider sees the full conversation context
- Seamless transition: All providers use the same observation format
Switching via UI
- Open Settings in the viewer
- Change the AI Provider dropdown
- The next observation will use the new provider
Switching via Settings File
Error Behavior
If OpenRouter errors, claude-mem logs the failure and re-throws so the message stays pending for later retry. There is no Claude SDK fallback — earlier docs claimed automatic Claude fallback, but the wiring was never actually engaged in production (#2087). To switch providers, changeCLAUDE_MEM_PROVIDER in settings.
Throwing conditions:
- Rate limiting (HTTP 429)
- Server errors (HTTP 500, 502, 503)
- Network issues (connection refused, timeout)
- 4xx errors other than 429
- Missing API key
Multi-Turn Conversation Support
OpenRouter agent maintains full conversation history across API calls:- Coherent multi-turn exchanges
- Context preservation across observations
- Seamless provider switching mid-session
Troubleshooting
”OpenRouter API key not configured”
Either:- Set
CLAUDE_MEM_OPENROUTER_API_KEYin~/.claude-mem/settings.json, or - Set the
OPENROUTER_API_KEYenvironment variable
Rate Limiting
Free models may have rate limits during peak usage. If you hit rate limits:- The agent throws and leaves the message pending — it will be retried later
- Consider switching to a different free model
- Add credits for premium model access
Model unavailable
The observer reportsOpenRouter model unavailable when OpenRouter says the configured model is retired (“This model has been deprecated”), unknown (“is not a valid model ID”), or has no endpoint left (“No endpoints found for …”). Retrying cannot fix that, so it is not retried; the worker log and the session-start warning tell you to change the model:
- Pick a model from OpenRouter Models and set it as
CLAUDE_MEM_OPENROUTER_MODELin~/.claude-mem/settings.json(or in the viewer’s Settings). The next observation uses it - Use the
:freesuffix for free model variants - Model IDs are case-sensitive
xiaomi/mimo-v2-flash:free default, claude-mem already moved you to cohere/north-mini-code:free the first time it loaded your settings.
High Token Usage
If a session accumulates a large conversation history, requests can grow. To keep per-request size down:- Choose a model suited to your usage volume
- Consider a model with a larger context window if you hit provider-side limits
Connection Errors
If you see connection errors:- Check your internet connection
- Verify OpenRouter service status at status.openrouter.ai
- The agent throws and leaves the message pending for later retry
API Details
OpenRouter uses an OpenAI-compatible REST API: Endpoint:https://openrouter.ai/api/v1/chat/completions
Headers:
Comparing Providers
Next Steps
- Configuration - Full settings reference
- Gemini Provider - Alternative free provider
- Getting Started - Basic usage guide
- Troubleshooting - Common issues
Multiple keys
CLAUDE_MEM_OPENROUTER_API_KEYS accepts additional keys (newline- or comma-separated) alongside
CLAUDE_MEM_OPENROUTER_API_KEY. When a key hits a rate limit, spends its quota, or is rejected as
invalid, OpenRouter requests rotate to the next key instead of failing for the
rest of the window. See Multi-Key Rotation.
