OVTH / 2026 LIVE · V0.4.0
Ø Overthinking Gateway ↗

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.

Updated May 08, 2026 by xlrd · Fig. S05

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

bash
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

bash
pip install 'litellm[proxy]'
mkdir -p ~/.config/litellm && cd ~/.config/litellm
yaml
# ~/.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

bash
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.

json
{
"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

bash
# 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

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.