Point your own API key at Prune
Claude Code, Cline, and Cursor bring-your-own-key. The provider key never sits in the agent. A daily cap stops a stuck session. Cache helps when a call repeats.
Save
Exact and semantic cache plus cheaper-model routing when the prompt is unique, not only on repeats.
Shield
Real OpenAI / Anthropic / OpenRouter keys stay in Prune. Optional spend caps reject over-budget calls before the provider.
Prove
Each response includes signed prune_metadata. Check it at /verify.
Do this in Cline
- Join at withprune.com, vault a provider key, copy your
prune_…key. - Cline → Settings → API Provider → OpenAI Compatible.
- Paste these three fields. Change only Model ID for another vaulted provider.
Base URL: https://api.withprune.com/v1
API Key: prune_your_key
Model ID: gpt-4o-miniDo not paste provider sk-… keys into Cline. If Cline loops on Plan Created, switch Plan → Act and ask a concrete task.
Claude Code
This is the API-key path. Claude Pro and the included Claude Code plan never send a base URL. Close Claude Code, then save this as ~/.claude/settings.json. The host has no /v1. Claude Code adds /v1/messages itself. In /status, Anthropic base URL must be https://api.withprune.com.
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.withprune.com",
"ANTHROPIC_API_KEY": "prune_your_key",
"ANTHROPIC_MODEL": "claude-sonnet-4-6"
}
}A base URL that already ends in /v1 makes Claude Code call /v1/v1/messages and report a missing model. Set model routing to Off in Optimize so a short prompt stays on Sonnet. Full walkthrough: reduce Claude Code cost.
Cursor, your own key
Settings, then Models. Paste the prune_ key in the OpenAI API key field, turn on Override OpenAI Base URL, and add the model id you vaulted. Turn the built-in model names off before Verify, or Verify calls a model the gateway is not serving.
Override OpenAI Base URL: https://api.withprune.com/v1
OpenAI API Key: prune_your_key
Model: gpt-4o-miniThis covers chat and inline edit on that key. Cursor's subscription, Tab, and indexing stay on Cursor. Some requests still pass through Cursor before they reach the base URL.
Prove it without opening Cline
One request. Look for prune_metadata and receipt_signature in the response.
curl https://api.withprune.com/v1/chat/completions \
-H "Authorization: Bearer prune_your_key" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"ping"}],"max_tokens":16}'Same three fields
Kilo Code and Zoo Code: API Provider → OpenAI Compatible, same paste. Use BYOK, not Kilo Gateway. If Zoo imported Roo settings, delete leftover sk-… keys.
OpenCode uses a config file plus auth, not a VS Code picker:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"prune": {
"npm": "@ai-sdk/openai-compatible",
"name": "Prune",
"options": {
"baseURL": "https://api.withprune.com/v1"
},
"models": {
"gpt-4o-mini": { "name": "GPT-4o mini (via Prune)" }
}
}
},
"model": "prune/gpt-4o-mini"
}opencode auth login
# Other → provider id: prune → paste prune_…
# Then select prune/gpt-4o-miniWhat this is not
Cursor's subscription, Copilot, and Claude Pro bill the vendor. Prune only sees traffic you send to api.withprune.com with your own API key. App code uses the same idea: LangChain and the Vercel AI SDK.
Copy-paste configs and a manual test plan: github.com/surenkotian/prune-coding-agents. Generic app setup: prune-quickstart.