Install Calto

Works with your existing Claude Code setup. Claude usage is billed by your provider as usual.

Local evaluation build

The @calto/cli package is not on a public registry. These commands install the tested local tarball provided for this evaluation — you receive the file directly; there is nothing to download from npm.

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. 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. 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.

    shell
    npm install -g "/path/to/calto-cli-VERSION.tgz"
  3. 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. 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.

    shell
    calto auth login
    # Paste your Calto API key at the hidden prompt.
    calto auth status
  5. 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.

    shell
    calto doctor
    calto claude
    # without Calto routing:
    calto claude --routing=off
  6. 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.