DEV Community

don
don

Posted on

Why I Use the Same LLM Key for Claude Code and My Character Chats

For a while I had two LLM setups. One key wired into my coding agent (Claude Code, Cline). A different key, different provider, for the character-chat client I mess with on weekends. Two dashboards, two top-ups, two model lists to keep straight.

That split is everywhere in this space, and once you notice it you can't unsee it.

Every AI gateway picks one lane

Look at the OpenAI-compatible gateways and they sort cleanly into two camps:

Developer gateways - MegaLLM, Portkey, LiteLLM, OpenRouter. The pitch is reliability, failover, cost, analytics. They are headless: you get an API, you bring your own interface. Great for shipping code, nothing to actually use without building a client first.

Roleplay / chat marketplaces - the nano-gpt-style services. The pitch is a big catalog of creative models and a chat UI for hobbyists. Good for character chat, but they are not where you point a coding agent, and the dev story is an afterthought.

So you end up with one tool for work and another for play, even though under the hood they are the exact same thing: an OpenAI-compatible endpoint in front of a pile of models.

The thing I actually wanted: one key for both

That is the gap UnoRouter fills, and it is the only reason I bring it up. It is one OpenAI-compatible key that works in:

  • Coding agents - OpenCode, Cline, Kilo Code, Codex, Claude Code. Same base URL, latency-based routing across 200+ models, automatic failover.
  • A built-in chat and character client - personas, lorebooks, presets, branch-editing, SillyTavern card v2/v3 import - and the same key drops into SillyTavern, Janitor.AI, RisuAI, or Chub if you prefer those.

Not an RP app with an API bolted on. Not a headless proxy with no face. The gateway and the client are the same product, sharing the same key, the same models, the same credits.

Switching is a base-URL change

Because it is OpenAI-compatible, moving an existing app over is one line:

from openai import OpenAI

client = OpenAI(
    base_url="https://api.unorouter.ai/v1",
    api_key="YOUR_KEY",
)

resp = client.chat.completions.create(
    model="gpt-5.5",            # or claude / gemini ids - format auto-detected
    messages=[{"role": "user", "content": "Hello"}],
)
print(resp.choices[0].message.content)
Enter fullscreen mode Exit fullscreen mode

The same key, pasted into a chat client's "custom OpenAI endpoint" field, reaches the same catalog. No second account.

Where it fits

You want Reach for
Lowest setup, widest catalog OpenRouter
Lowest markup at scale, self-hosted LiteLLM
Production observability/governance Portkey
One key for code and a chat/character client UnoRouter

If you only ever ship code, a pure dev gateway is fine. If you only ever do character chat, a chat marketplace is fine. I wanted to stop running both - that is the whole story.

What are you using, and do you keep your "work" and "play" LLM setups separate too?

Top comments (0)