Skip to main content

Modes

Axon has three operating modes. Pick deliberately — each has a different risk profile.

ModeChainVenueRisk
DemoNone (synthetic)Simulated fillsNone — fake everything
TestnetArbitrum Sepolia (421614)Hyperliquid testnetFake money, real signing
LiveArbitrum One (42161)Hyperliquid mainnetReal money

Demo

The default on first run. No real chain calls, no venue connections, no API keys needed.

  • Synthetic positions and balances (state survives the daemon's lifetime, reset on restart)
  • Simulated fills with realistic slippage + fees
  • All ~35 MCP tools work end-to-end against the simulated state
  • Useful for: agent development, dashboard demos, testing strategy logic

Demo is the safest place to validate that your agent does what you expect before any money is involved.

Testnet

Real signing on Arbitrum Sepolia + Hyperliquid testnet. Fake money, real flow.

  • Real EIP-712 signing through the keystore
  • Real RPC calls to Arbitrum Sepolia
  • Real Hyperliquid testnet builder fees, agent keys, etc.
  • Bridge testnet USDC in via the dashboard

This is the rehearsal mode — proves your end-to-end setup works (RPC, builder approval, agent runtime, MCP tools) before you switch to mainnet.

Live

Real Arbitrum One + Hyperliquid mainnet. Real money. Read docs/security-model.md first.

  • Same flow as testnet, but on production chains
  • Builder fee + referral revenue accrue to the configured master account
  • Audit log captures every signed intent, fill, and policy change

Switching modes

Via the dashboard

Settings → Mode has three cards. Click "Switch to …" — the dashboard writes a mode latch to ~/.axon/mode.json and calls POST /v1/service/restart. The daemon:

  1. Stops cleanly (releases venue connections, flushes audit DB)
  2. Re-reads the latch on boot
  3. Starts in the new mode
  4. Dashboard reconnects via /v1/session/refresh and shows the new mode in the header

The whole flip takes ~3-5 seconds.

Via the CLI

axon --live        # boot in live mode (one-off; doesn't update latch)
axon --demo # explicit demo mode

Explicit CLI flags don't update the persistent latch — they're for one-off runs (CI, scripted demos). The dashboard's mode switcher is the canonical way to flip your default mode.

Latch precedence

The daemon resolves mode in this order on each boot:

  1. Explicit CLI flag (--live / --demo) wins
  2. Mode latch at ~/.axon/mode.json (set by the dashboard)
  3. Default: demo (safe fallback)

Mode switches are persistent

After switching to live via the dashboard, every subsequent axon (or desktop launch) starts in live mode automatically. To reset, switch back to demo via the dashboard or delete ~/.axon/mode.json.

Per-mode storage

Some state is mode-scoped, some isn't:

  • Keystore — single keystore, all modes
  • Audit log — single hash chain, all modes (each row tagged with mode)
  • Policy — single policy, applies to every mode
  • HL agent key — separate keys per testnet/mainnet (auto-managed)
  • Strategies — installed strategies are shared; their execution state is mode-scoped

So your live-mode positions are isolated from your testnet positions, but your audit log unifies everything for tamper-evidence.

Safety rails

Even in live mode, several rails protect you:

  • Policy engine — daily notional cap, max leverage, per-asset whitelist
  • Kill switch — hold-to-arm UI; armed switch blocks every signing path
  • Builder fee cap — hardcoded max at HL's 10 bps cap
  • Bearer token — only localhost can hit the daemon; tokens rotate per session

See Security Model for details on each.