Skip to content
Join the waitlistWaitlist

Quickstart in paper mode

Install Guard, load your rules, and point a bot at it in paper mode. Paper mode uses Hyperliquid's real prices and sends no orders.

Paper mode is where every Guard starts. It reads Hyperliquid’s real prices and your real account, judges every order with the same rules, and records what it would have done. It sends nothing to Hyperliquid’s /exchange endpoint.

Pick where Guard runs. The setup carries the rules you set on this site (Backtest, Watch or the homepage), stored in your browser as a rules code that starts with zr1_; otherwise the defaults. It starts in paper mode.

stored only in this browser · ·

Your settings from this site

The default rules. Set your own on the playground, or paste a rules code.

  • 5× max
  • 2.0% at stop
  • no stop: Guard sets one
  • liq. ≥ 10%
  • size ≤ 200%
  • open ≤ 6%
  • daily 6%
  • drawdown 25%
  • 5/5 markets
  • paper mode
Start Guard in
Paper: real prices, no orders, no key. Mainnet is never preset from a web page: you type it on the server, and the account again.

Where Guard runs

Next to your bot. If your bot runs on a server, Guard runs on the same server.

Other ways to run it: Docker · One-click · Packages.

Secrets: typed on the server, never here

This page never asks for a key, and no command it makes contains one. Shell history, screen sharing and this browser would all keep it.

API wallet private key

For testnet and mainnet. Create an API wallet in the Hyperliquid app: it can trade, it cannot withdraw. Guard asks for its key with hidden input on the server and stores it encrypted for the service. API wallets

Alert webhook, optional

A webhook URL is a bearer secret too. Add it on the server, in Guard's config, after the setup. Configuration

Public values: safe to enter here, checked in this browser

your machine · what the setup asks
$ brew install zunderlabs/tap/zunder-guard✓ zunder-guard 1.0.0 installed (checksum from the signed release) Your rules from zunderlabs.com  max leverage 5× · loss at stop 2% · no stop: Guard sets one 2% away  liquidation ≥ 10% · size ≤ 200% · open risk ≤ 6%  daily loss stop 6% · drawdown halt 25% · markets: allKeep these rules? [Y/edit] › YHyperliquid account address › 0x8c41…a90fMode [paper/testnet/mainnet] › paper✓ paper mode: real prices, no orders, no key needed ✓ Guard is running · 127.0.0.1:8547 · paperClient key for your bot (shown once): zc_7Hq2…Lm9xNext: point your bot at http://127.0.0.1:8547

Run this from your computer

One command with your rules. It connects to your server, installs Guard after checking its signature, and asks you the rest there.

terminal
brew install zunderlabs/tap/zunder-guardzunder-guard init --interactive --rules zr1_eyJ2IjoxLCJt…siKiJdfQbrew services start zunder-guard

Hover or focus a part of the command to see what it does.

Prefer to read first? curl -fsSLO https://zunderlabs.com/i && less i, then sh i --rules …. Or verify by hand: Verify a release.

Check it, then point your bot at it

On the machine where Guard runs:

curl -fsS http://127.0.0.1:8547/healthz# 200 and "ok": Guard is upzunder-guard status# mode, rules, risk state, the last decisions

The default rules are: 5x leverage, 2% loss at the stop, no stop: Guard sets one 2% away, liquidation at least 10% away, a position at most 200% of equity, 6% open risk, 6% daily loss stop, 25% drawdown halt, all markets. The format is on Rules codes.

The setup prints a client key for your bot. The client key is not your API wallet key. Hyperliquid does not accept it. Only your Guard does. Guard listens on http://127.0.0.1:8547, on your machine only.

One setting changes: the API URL. The private key becomes the client key the setup printed.

from eth_account import Account
from hyperliquid.exchange import Exchange
client_key = Account.from_key("0x...") # the client key Guard printed
exchange = Exchange(client_key, base_url="http://127.0.0.1:8547",
account_address="0xYourAccountAddress")

Guides for ccxt, Freqtrade, the TypeScript SDK, MCP and TradingView are under Integrations.

Send one order your bot would normally send. Then:

Terminal window
zunder-guard status

You see the decision (allow, resize or veto), the rule that decided, and the journal entry. Nothing reached Hyperliquid, because this is paper mode.

  • Testnet sends real orders to Hyperliquid testnet with test money. Use it to see stops rest on the venue and fire.
  • Mainnet needs you to type the network and confirm the account. Guard never moves there by itself.

Details: Paper, testnet and mainnet.

This page as plain Markdown, for people and LLMs: /docs/start/quickstart.md