Skip to main content

Quickstart

From nothing to Claude Code running through Janus, then the first saving. About ten minutes, most of it LM Studio loading a model.

You need Claude Code working already, and for the second half, LM Studio with a model downloaded. Before you start says what each part needs and which settings differ from their defaults.

1. Install​

Download the archive for your machine from the releases page and unpack it, or build it with go install github.com/risadams/janus/cmd/janus@latest. Installing has the commands for each platform and how to check the download.

janus version

2. Check, then run​

janus doctor

doctor checks the config, the port, that Anthropic is reachable, LM Studio, and the log directory, and says what to fix. It changes nothing. Warnings about LM Studio, and about Claude Code not being pointed at Janus yet, do not matter now.

janus

On its first run Janus writes janus.config.json in the directory it was started from, and prints the address it is listening on and the command for the next step. Leave it running.

3. Point Claude Code at it​

In another terminal:

ANTHROPIC_BASE_URL=http://127.0.0.1:8787 ENABLE_TOOL_SEARCH=true claude

Use Claude Code as usual. Nothing is different: your login is passed through, and every request goes to Anthropic as before. Janus prints a line for each one.

janus claude does the same in fewer keystrokes, and checks first that Janus is running; installing says what it does when Janus isn't.

ENABLE_TOOL_SEARCH=true is there because Claude Code turns tool search off when it is pointed anywhere but Anthropic, and then sends every tool's definition with every request. Setting it keeps requests the size they would be without Janus.

4. See where the tokens go​

janus stats -since 24h

This is the first thing Janus is for: tokens, cache use, and cost at list price, split by the kind of request, the model, and the backend. Use it for a day before changing anything, so that you know what there is to save. The ledger explains the figures.

5. The first saving: subagents on the local model​

Claude Code's subagents, the helpers it starts to search and read, are the part of its work a local model does best. Sending them to LM Studio is the change that saved the most in testing.

Start LM Studio's server, load a model, and note its id. Then in janus.config.json:

"local": {
"baseUrl": "http://127.0.0.1:1234",
"models": { "janus-local": { "model": "qwen/qwen3.8-27b" } }
},
"routing": [
{ "name": "subagents", "class": "subagent", "route": "local-then-escalate", "local": "janus-local" }
],
"features": { "route": true, "escalate": false, "compress": false, "guard": false }

Set local.baseUrl to wherever your LM Studio runs; http://127.0.0.1:1234 is right when it is on this machine. The default, http://studio.local:1234, is the Janus developer's own machine and a placeholder only. Run janus doctor again: it now checks that LM Studio has the model and how much context it is loaded with. Restart Janus.

With local-then-escalate the local model answers each subagent request, Janus checks the answer, and anything broken goes to Claude instead. The main conversation stays with Claude throughout. Console lines for local answers name the model with (local), and janus stats shows them at no upstream cost.

Expect subagents to be slower: seconds per turn become tens of seconds. The recipe has what else to expect and how to try the local model in shadow first, without trusting it.

6. Keep secrets on your machine​

"features": { "route": true, "escalate": false, "compress": false, "guard": true },
"guard": {
"redact": true,
"localOnly": { "paths": [".env*", "secrets/**", "*.pem"] }
}

With this, credentials Janus recognises are replaced with placeholders before a request leaves and put back in the answer, and the files named are withheld from Anthropic whatever is in them. Then:

janus audit -verify

shows what went to Anthropic and re-reads what was sent to check it. The privacy recipe goes through it.

Where next​

ToRead
Run subagents locally, in detailRecipe: subagents
Try locally first with Claude as the netRecipe: local first
Keep working when Claude is downRecipe: outages
Keep secrets and files from leavingRecipe: privacy
Have Claude hand reading to the local modelRecipe: workers
Know exactly what Janus changesWhat Janus changes
Install, configure, and use Janus in detailUser guide
Fix somethingTroubleshooting
Look up a settingConfiguration