Migrate from Self-Hosted OpenClaw
Migration takes one environment variable change. Your OpenClaw configuration, skills, prompts, and workflows stay exactly the same.
Before You Start
You’ll need:
- An existing OpenClaw installation (any version)
- A Curate-Me account (sign up free )
- Your Curate-Me API key (
cm_sk_xxx)
Step 1: Swap the Base URL
Replace your LLM provider’s base URL with the Curate-Me gateway:
# Before (direct to OpenAI):
OPENAI_BASE_URL=https://api.openai.com/v1
# After (through Curate-Me gateway):
OPENAI_BASE_URL=https://api.curate-me.ai/v1/openai
X-CM-API-Key=cm_sk_xxxFor other providers:
# Anthropic
ANTHROPIC_BASE_URL=https://api.curate-me.ai/v1/anthropic
# Google Gemini
GOOGLE_API_BASE_URL=https://api.curate-me.ai/v1/google
# DeepSeek
DEEPSEEK_BASE_URL=https://api.curate-me.ai/v1/deepseekStep 2: Store Your Provider Secrets
Your LLM provider API keys (OpenAI, Anthropic, etc.) need to be stored in Curate-Me:
Via Dashboard
- Go to
dashboard.curate-me.ai→ Settings → Provider Secrets - Add each provider key
- Keys are encrypted at rest with envelope encryption
Via API
curl -X POST https://api.curate-me.ai/v1/admin/secrets \
-H "X-CM-API-Key: cm_sk_xxx" \
-H "Content-Type: application/json" \
-d '{"provider": "openai", "secret": "sk-xxx"}'Via SDK
from curate_me import CurateMe
client = CurateMe(api_key="cm_sk_xxx")
client.gateway.admin().store_secret("openai", "sk-xxx")Step 3: Verify
Run a test request:
curl https://api.curate-me.ai/v1/openai/chat/completions \
-H "X-CM-API-Key: cm_sk_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-mini",
"messages": [{"role": "user", "content": "Hello!"}]
}'You should get a normal response with an additional x-cm-cost header showing the
estimated cost.
Step 4: Configure Governance
Now that traffic flows through the gateway, configure your policies:
- Cost controls — Set daily budget ($50/day is a good starting point)
- Model allowlists — Restrict expensive model usage
- PII scanning — Enable
blockmode for production - Rate limiting — Set RPM limits per org
All configurable in the dashboard → Gateway → Policies.
What Changes
| Aspect | Before | After |
|---|---|---|
| LLM requests | Direct to provider | Through Curate-Me gateway |
| Cost tracking | None | Real-time dashboard |
| Security | Self-managed | Auto-patching + scanning |
| Audit trail | None | Immutable log |
| Agent code | Unchanged | Unchanged |
| OpenClaw config | Unchanged | Unchanged |
| Skills | Unchanged | Unchanged (+ security scanning) |
| Prompts | Unchanged | Unchanged |
What Doesn’t Change
- Your OpenClaw version and configuration
- Your agent definitions and prompts
- Your skill installations
- Your MCP server connections
- Your workflow files
- Your channel configurations
The gateway is a transparent proxy. Your agents don’t know they’re being governed.
Rollback
If you ever want to stop using Curate-Me, swap the URL back:
OPENAI_BASE_URL=https://api.openai.com/v1Everything works as before. No lock-in.
Upgrading to Managed Hosting
If you want to stop self-hosting entirely, use the Setup Wizard to deploy a fully managed runner on Curate-Me infrastructure.
Troubleshooting
401 Unauthorized: Check your X-CM-API-Key header. Keys start with cm_sk_, cm_gw_, or cm_.
403 Governance Denied: Check your governance policies. The response body includes which check failed (rate_limit, cost_estimate, pii_scan, model_allowlist, or hitl_gate).
504 Gateway Timeout: The upstream provider is slow. Check provider status pages. Curate-Me retries automatically with exponential backoff.
Connection Refused: Verify the gateway URL is correct (https://api.curate-me.ai/v1/{provider}).