Skip to main content
@axon402/init is a one-shot runtime bootstrap helper. It provisions a wallet, mints a wallet-scoped runtime key for that wallet, and wires Claude Code to AXON’s hosted runtime MCP surface. This page is the canonical reference for all flags and behaviors of the bootstrap command.
@axon402/init lives on the runtime side of the runtime / control-plane split. The credential it issues is a runtime key — it is for an agent to use a prepared wallet, not an operator or org-admin credential. For durable operator work (additional wallets, key rotation, deposits, vault allocations) use @axon402/cli (axon-op) or the dashboard; both are documented on the CLI installation page. This reference covers @axon402/init only.
@axon402/init writes ~/.claude.json; it does not configure Cursor, VSCode, OpenClaw, or raw REST clients for you. Those integrations should still use the generated wallet_id and api_key from ~/.axon/config.json with the manual hosted setup in IDE Setup, OpenClaw Plugin, or REST API Integration.

Synopsis

Options

Examples

Environment variables

Files written

Exit codes

JSON output mode

When invoked with --json, the CLI emits a single JSON object to stdout on success and exits 0. No interactive prompts; provide the email with --email or AXON_EMAIL.
config_backup_path is non-null only when --force replaced an existing ~/.axon/config.json. claude_backup_path is non-null only when ~/.claude.json already existed and was backed up before the merge.
The api_key is intentionally absent from the JSON output. It is written only to ~/.axon/config.json (chmod 0600). This avoids leaking the plaintext key into shell pipelines, CI logs, or terminal scrollback.

Troubleshooting

Mandate missing for wallet

You’re on a CLI build older than v0.1.0 where the API key was bound to the vault wallet by mistake. Vault wallets have no mandate by design, so every governed_fetch call against a vault-bound key fails with this error. Fix: upgrade to ≥ v0.1.0:
This generates a new wallet bound correctly to the agent (HD index 1).

409 CONFLICT — An account already exists for this email

Self-explanatory — @axon402/init is a one-shot runtime bootstrap and it has already run for this email. It is not for ongoing operations and it is not an operator CLI; to manage the existing account from the terminal, install @axon402/cli (axon-op) instead, or sign in to the dashboard via the printed dashboard_url.

429 RATE_LIMITED

The endpoint is limited to 10 requests per hour per IP to prevent spam signups. The CLI prints a retry_after_seconds value — wait that long and try again. If you’re hitting this in legitimate dev (e.g., scripted CI), use --endpoint to point at a local Decision API instead.

NETWORK_ERROR — Could not reach https://api.axon402.com

Outbound HTTPS to api.axon402.com is blocked or the public Decision API is down. Check:
  1. Status: curl -i https://api.axon402.com/ready should return a structured HTTP response if the service is reachable. 200 means ready; 503 still proves the network path works and the backend is just not ready.
  2. Network: corporate firewalls sometimes block npm-installed binaries from making HTTPS calls. Try from a different network.
  3. Local fallback: for development, run a Decision API locally and use --endpoint http://localhost:3030.

~/.claude.json already exists

The CLI merges new MCP entries into your existing ~/.claude.json — it does not overwrite. Before writing, it backs up the original to ~/.claude.json.bak-<unix-timestamp>. If something looks wrong after running the CLI, restore from the backup:

“I want to reset and start over”

Delete the CLI’s local state and re-run:
Note: this does NOT delete the Supabase auth user, the organization, or the wallets on the server. You’ll get a 409 CONFLICT next time unless you use a different email. The dashboard at https://axon402.com is the place to manage server-side state.

What gets written to Claude Code

@axon402/init does not write a local stdio launch command. It merges a hosted HTTP MCP entry into ~/.claude.json that points Claude Code at the Decision API directly:
If you want to run the local MCP server over stdio instead, use the advanced self-hosted patterns in IDE Setup and MCP Server. Those are separate from the hosted HTTP config that @axon402/init writes automatically.

See also

  • Install the CLI — side-by-side overview of @axon402/init (runtime bootstrap) and @axon402/cli (control-plane operator CLI)
  • @axon402/cli — the durable operator CLI for wallets, keys, deposits, and vault allocations (control plane)
  • MCP Server — the runtime-plane surface the issued runtime key is for
  • POST /v1/cli/init — the underlying server endpoint for @axon402/init
  • POST /v1/api-keys — mint org-wide operator keys for @axon402/cli
  • GET /v1/me — the auth introspection endpoint @axon402/cli uses at login
  • Quickstart — the higher-level get-started page