Free Claude via Kiro: the Kiro + Cursor stack
Funnel Kiro's free Sonnet credits into any OpenAI-compatible client through a local proxy. Cursor, Aider, OpenCode — same workflow, zero Anthropic bill.
Who this is for
You are cost-sensitive or just cost-allergic. You already use Kiro for one project and wonder why you are also paying $20/mo for Cursor Pro. You want Sonnet 4.5 inside your existing editor without touching the Anthropic billing console.
Respect the usage terms of whatever service you funnel — this pattern is explicitly for your own individual coding, not for proxying requests to other humans or reselling access. Kiro’s free tier is generous, not infinite.
The shape of the stack
Cursor / Aider / OpenCode
│ OpenAI-compatible HTTP
▼
LiteLLM proxy ←──── this file is the point
│
┌────┴────────────┐
▼ ▼
Kiro endpoint OVTH Gateway (paid fallback)
Your editor speaks OpenAI. LiteLLM speaks everything. We map claude-sonnet-4.5 to Kiro when the quota is healthy, and to a paid backend when it is not. Your editor never knows.
Tools and versions
- Kiro latest, authenticated on the machine
- Cursor 0.50+ (or Aider 0.80+, OpenCode 1.5+, Continue 1.0+)
- LiteLLM 1.55+ (
pip install litellm[proxy]) - direnv for per-project key scoping
- OVTH Gateway (managed or self-hosted) as the paid fallback
Setup in five steps
01. Confirm Kiro is wired and the session cookie is fresh
kiro whoami
# → signed in as you@example.com · plan: free · credits: ample If Kiro authenticates via a session file (path varies by platform), note where it is. LiteLLM’s Kiro adapter reads from it.
02. Install and configure LiteLLM
pip install 'litellm[proxy]'
mkdir -p ~/.config/litellm && cd ~/.config/litellm # ~/.config/litellm/config.yaml
model_list:
- model_name: claude-sonnet-4.5
litellm_params:
model: kiro/claude-sonnet-4.5
api_base: http://localhost:0 # kiro adapter handles auth
- model_name: claude-sonnet-4.5-paid
litellm_params:
model: openai/claude-sonnet-4.5
api_base: https://gateway.ovth.dev/v1
api_key: os.environ/OVTH_KEY
router_settings:
routing_strategy: usage-based-routing-v2
fallbacks:
- claude-sonnet-4.5: [claude-sonnet-4.5-paid]
general_settings:
master_key: sk-local-stub
port: 4000 LiteLLM’s fallbacks block is the insurance. When Kiro returns a quota error, traffic flips to the OVTH Gateway automatically. Your editor sees no interruption.
03. Launch the proxy and verify
litellm --config ~/.config/litellm/config.yaml &
curl http://localhost:4000/v1/chat/completions \
-H "Authorization: Bearer sk-local-stub" \
-d '{"model":"claude-sonnet-4.5","messages":[{"role":"user","content":"hi"}]}' If that returns a Claude response, your local proxy is live.
04. Point Cursor at the proxy
Cursor 0.50 accepts custom OpenAI endpoints in settings.
{
"cursor.openAI.apiKey": "sk-local-stub",
"cursor.openAI.baseURL": "http://localhost:4000/v1",
"cursor.chat.defaultModel": "claude-sonnet-4.5",
"cursor.composer.defaultModel": "claude-sonnet-4.5"
} Restart Cursor. Open chat. You are now using Kiro-sourced Sonnet inside Cursor.
05. Add the same config to Aider and OpenCode
# aider
cat >> ~/.aider.conf.yml <<EOF
openai-api-base: http://localhost:4000/v1
openai-api-key: sk-local-stub
model: openai/claude-sonnet-4.5
EOF
# opencode — same pattern
opencode config set providers.openai.api_base http://localhost:4000/v1
opencode config set providers.openai.api_key sk-local-stub One proxy, three clients, one model name. When you change the routing strategy, every client gets it.
Cost, privacy, performance
Related flash tutorials
- Kiro as an OpenAI endpoint — the minimal version without a router
- OVTH Gateway onboarding — the paid-side fallback in 60 seconds
- Cursor + Claude Code dual — the editor this stack targets
The stack is embarrassingly effective until a provider tightens a term of service or closes a quota. Build it for now, keep it swappable for later. That is the overthinking part: free is a strategy, not a conclusion.