Skip to main content
a local proxy for claude code

Janus
looks both ways.

It sits on your machine between Claude Code and the Anthropic API, keeps the books on every request, and, when you switch them on, sends chosen work to a local model, keeps secrets in, and keeps you working when Claude is down.

Quick start
# Install with Go 1.27+, or download a release build
go install github.com/risadams/janus/cmd/janus@latest

# Check the setup, then start it
janus doctor
janus

# In another terminal, point Claude Code at it
ANTHROPIC_BASE_URL=http://127.0.0.1:8787 ENABLE_TOOL_SEARCH=true claude
what it does

Every request, accounted for.

Out of the box Janus only keeps the books. Everything else is a switch you turn on when you want it.

See what every request costs

A ledger line for each request, and janus stats to add them up by kind of request, model, and backend, with prompt-cache hits and cost at list price.

Untouched until you say so

With every feature off, what reaches Anthropic and what comes back match a direct connection. Your login passes through, and is never stored or logged.

Local first, Claude as the net

Send subagent turns to a model in LM Studio. Janus checks each answer before you see it, and hands the turn to Claude when it fails.

Keep working when Claude is down

At a usage limit or an outage, the local model stands in. Janus loads it if needed, queues requests, and fits a long conversation to its context.

Secrets stay on your machine

Credentials it recognises become placeholders before a request leaves, and are put back in the answer. Files you name never reach Anthropic at all.

Kind to the prompt cache

Anything already sent goes out in the same bytes on every later turn, so Claude Code keeps reading from its cache and nothing costs more than it should.