Install Calto
Works with your existing Claude Code setup. Claude usage is billed by your provider as usual.
Local evaluation build
Before you start
- A working Claude Code installation with your own provider access.
- Node.js 24.21.0 — the version this evaluation is built and tested with — and npm on your PATH.
- A Calto API key from your dashboard — create one before you install.
- The Calto API origin (CALTO_API_ORIGIN) supplied by your evaluation contact — routing stays offline without it.
- No payment or balance: this evaluation is operator-funded.
- 1
Requirements
Node.js 24.21.0 (the version this evaluation is built and tested with), npm on your PATH, and a working Claude Code installation with your own provider access.
shell# Node.js 24.21.0 is required for this evaluation node --version # should print v24.21.0 - 2
Install the CLI from the local package
The @calto/cli package is not on a public registry. Evaluation participants receive a local tarball; install that file by path. Your organization may already provide it — ask your evaluation contact if you have not received the file.
shellnpm install -g "/path/to/calto-cli-VERSION.tgz" - 3
Connect to the Calto API
The CLI never guesses where the Calto API is: routing engages only when you set CALTO_API_ORIGIN explicitly. Use the origin supplied by your evaluation contact — shown below from this website’s configured API. Until it is set (or if the value is invalid), calto claude stays in offline keep mode and sends nothing. Production origins are https; a plain-http loopback origin is a local testing fixture that additionally requires CALTO_ALLOW_FIXTURE_HTTP=1.
shell# Use this website’s configured Calto API: export CALTO_API_ORIGIN=https://calto-api.onrender.com # Local fixture testing only (loopback http requires an explicit opt-in): # export CALTO_API_ORIGIN=http://127.0.0.1:4321 CALTO_ALLOW_FIXTURE_HTTP=1 - 4
Sign in with your API key
Create a key in the dashboard, then paste it at the hidden prompt. The key is never passed as a command argument or URL. You can check the stored key anytime with calto auth status, or remove it with calto auth logout.
shellcalto auth login # Paste your Calto API key at the hidden prompt. calto auth status - 5
Check and run
calto doctor runs offline diagnostics (runtime, Claude discovery, credential presence, conflicts) — it does not contact the API, so a passing doctor alone does not prove a live connection; origin and key presence alone do not prove that either is usable. calto claude then starts the real Claude Code CLI through Calto routing. For measured test sessions use the per-invocation --model startup flag (next step), never the /model picker, which can write your saved default. If you ever need Claude Code without Calto routing, run calto claude --routing=off.
shellcalto doctor calto claude # without Calto routing: calto claude --routing=off - 6
Measured sessions: per-invocation model selection
The /model picker can change the SAVED Claude default, so it is never the test mechanism. A measured session starts Claude Code with exactly one --model startup flag: the verified concrete baseline model id for a manual session, or calto-auto for a Calto-routed session with the same explicit concrete fallback in CALTO_TEST_FALLBACK_MODEL. Your saved defaults, auth and permissions are left untouched.
shell# After G05/G03 authorization: copy the provided finite-session instructions. # Replace VERIFIED_BASELINE_MODEL_ID with the exact verified model ID. export CALTO_TEST_REQUIRED_ROUTING=1 export CALTO_TEST_CATALOG_VERSION=catalog-002 export CALTO_TEST_FALLBACK_MODEL=VERIFIED_BASELINE_MODEL_ID # Manual arm — exactly one flag, the verified baseline model id: calto claude --model VERIFIED_BASELINE_MODEL_ID # Calto Auto arm — same explicit concrete fallback: export CALTO_TEST_FALLBACK_MODEL=VERIFIED_BASELINE_MODEL_ID calto claude --model calto-auto # Never select the test model with the /model picker: # it writes the saved default; --model is per-invocation only.
Supported platforms
Targeting macOS and Linux first, with Windows via WSL. Platform support will be confirmed when the package is published.
Troubleshooting
- The command is not found after installing
- Check that your global npm bin directory is on your PATH (npm prefix -g), then reopen the terminal.
- Sign-in says the key is invalid
- Open API keys in the dashboard and confirm the key is active and not expired or revoked. Create a new key if needed — the secret is only shown once at creation.
- Sessions always say the current model is kept
- Routing engages only with both a stored key and CALTO_API_ORIGIN set to the origin your evaluation contact supplied. Without a valid origin the CLI deliberately stays in offline keep mode and sends nothing — it never guesses an endpoint.
- Claude Code is not installed
- calto claude runs the real Claude Code CLI; install Claude Code first, then retry. calto doctor reports whether it was found.
- Why not pick the model with /model before starting?
- The /model picker can write the saved Claude default, which would leak the test selection into normal use. Measured sessions use the per-invocation --model startup flag instead: exactly one flag per launch — the concrete baseline (manual session) or calto-auto (Auto session) — with the same explicit fallback in CALTO_TEST_FALLBACK_MODEL.
- Never paste your key into a command or URL
- Enter it only at the hidden prompt. Calto will never ask for an Anthropic credential.