macOS · local control plane
Own the wire between Claude and your models.
Native app on the boundary: clients to loopback; you keep routes, provider secrets, and logs on disk.
Claude Desktop / Code → loopback → your Anthropic-compatible upstream
Local first. Precise by design.
Gateway is a single choke point: it preserves the Anthropic client experience while you swap upstreams and model aliases without touching every machine twice.
- 01
Any upstream that speaks the shape
Point at Anthropic-compatible message APIs. Keep per-provider URLs, headers, and auth modes in one importable config.
- 02
Model names you control
Expose stable client-visible IDs; translate each alias to the provider and upstream model in your route table.
- 03
Secrets stay out of Claude config
Clients authenticate with a local bearer key. Provider keys never get copied into Claude Desktop or Claude Code config files.
Traffic shape
One hop. No mystery.
Every request is authorized locally, matched to a route, then forwarded over HTTPS to the upstream you picked.
Claude clients
Desktop · Code
Gateway
Keys · routes · logs
127.0.0.1:4000
Upstream
Your API
Single hop · local auth · TLS upstream
Install
Four beats. Running service.
- 01
Download
Grab the latest macOS DMG from Releases.
- 02
Install
Drag into Applications and open once to seed prefs.
- 03
Wire providers
Paste credentials and confirm model aliases in the app.
- 04
Sync & run
Save, let the LaunchAgent come up, point clients at loopback.
$ export ANTHROPIC_BASE_URL=http://127.0.0.1:4000$ export ANTHROPIC_AUTH_TOKEN=local-gateway-key$ claude# point clients here, then ship.
Ship traffic you can explain.
Install, route once, and keep Claude on the tools you already pay for and audit.
Questions
Do I need an Anthropic API key in Claude?+
No. Clients use a local gateway token. Only the upstream call carries your provider credential.
Which providers qualify?+
Anything that correctly implements an Anthropic-compatible messages endpoint—you set base URL, headers, and auth mode per provider.
Is this a replacement for Claude Desktop?+
It sits beside Desktop and Code: they stay as-is while their traffic exits through your gateway instead of directly to a vendor URL.
How do model aliases work?+
Clients send familiar model IDs; the gateway rewrites each to the provider + model string you configured for that alias.
Where do I start debugging?+
Use the in-app log stream and the bundled doctor script; deeper notes live in the repo docs.
