<!-- https://zunderlabs.com/docs/start/quickstart · Markdown version of the page -->

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

:::note[Planned]
Every command on this page is the plan for Guard 1.0. None of them exists yet. The names may still change; this page will be checked against the release before it goes live.
:::

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.

## 1. Install and set up, with your rules

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.

With the default rules (the page fills in your own, and asks where Guard runs):

```sh
brew install zunderlabs/tap/zunder-guard
zunder-guard init --interactive --rules zr1_eyJ2IjoxLCJtYXhMZXZlcmFnZSI6NSwibWF4TG9zc0F0U3RvcFBjdCI6Miwic3RvcFBvbGljeSI6ImF0dGFjaCIsImRlZmF1bHRTdG9wRGlzdGFuY2VQY3QiOjIsIm1pbkxpcURpc3RhbmNlUGN0IjoxMCwibWF4UG9zaXRpb25QY3QiOjIwMCwibWF4T3BlblJpc2tQY3QiOjYsImRhaWx5TG9zc1N0b3BQY3QiOjYsImRyYXdkb3duSGFsdFBjdCI6MjUsIm1hcmtldHMiOlsiKiJdfQ
brew services start zunder-guard
```

The API wallet key is typed on the server into Guard's hidden prompt; it is never part of a command.

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](https://zunderlabs.com/docs/reference/rules-schema).

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.

## 2. Point your bot at Guard

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

```python
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](https://zunderlabs.com/docs/integrations).

## 3. Send an order and read the answer

Send one order your bot would normally send. Then:

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

## Next: testnet, then mainnet

- **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](https://zunderlabs.com/docs/concepts/networks).
