Audit it. Watch it. Then guard it.
Start in your browser with nothing installed: replay your bot’s past, then watch its trades live against your rules. When you want Guard to block, not just warn, run it in front of your bot.
Step 1: backtest your bot
We started you off with a public vault that has traded on Hyperliquid since January 2025. Paste your own bot’s address: its public trade history is replayed right here, once as it happened and once behind your rules.
- runs entirely in your browser
- no wallet connection · no signature · no keys
- nothing to approve, nothing that can move funds
- we never see the address
The sample replay runs in your browser, from Hyperliquid’s public data (it needs JavaScript).
Equity, 30 days
The replay runs in your browser.
The trades that mattered
| WHEN | TRADE | LEV. | STOP | RESULT · YOURS → GUARDED | GUARD |
|---|---|---|---|---|---|
| The trades appear here once the replay has run. | |||||
How honest is this? A replay is a what-if, not a promise. Skipping or shrinking a trade can change what your bot would have done next, and prices, fees and funding after a skipped trade are taken from your real history. Losses are capped at your stop only where your bot actually had one. Results include fees and funding as Hyperliquid recorded them.
Watch your bot live
Enter its address. Every new trade is judged against your rules the moment it happens, right in this tab.
- read-only · public data · no keys, no signature
- runs while this tab is open
- warns, cannot block: blocking needs Guard (step 3)
Your bot, judged live
not watching- EQUITY
- —
- TODAY
- —
- OPEN RISK
- —
- WOULD REFUSE
- —
| Time | Order | Detail | Guard |
|---|---|---|---|
| Not watching yet. Enter an address to see its new trades judged here. | |||
Streams your address’s public trades from Hyperliquid and judges them with Guard’s engine in your browser.
Step 3: put Guard in front of your bot
$ docker run -d --name zunder-guard -p 127.0.0.1:8547:8547 \ -v ~/.zunder:/data ghcr.io/zunderlabs/guard:latest# paper mode · pairing code: K7F-29Q# point your bot at http://127.0.0.1:8547
$ brew install zunderlabs/tap/guard$ zunder-guard init # rules, API wallet, paper mode$ zunder-guard run# pairing code: K7F-29Q · listening on 127.0.0.1:8547
$ curl -fsSLO https://zunderlabs.com/guard/latest/guard-linux.tar.gz$ zunder-verify guard-linux.tar.gz # signature + checksum$ ./zunder-guard init && ./zunder-guard run# pairing code: K7F-29Q · listening on 127.0.0.1:8547
> winget install ZunderLabs.Guard> zunder-guard init> zunder-guard run# pairing code: K7F-29Q · listening on 127.0.0.1:8547
One click, your own server, your account: Railway · Fly.io · Hetzner · AWS Tokyo (closest to Hyperliquid)# your key is generated on the server, never by us# the monitor connects through an SSH tunnel you open
Point your bot at Guard planned
One line changes. Your bot keeps its own logic.
exchange = ccxt.hyperliquid({- "privateKey": API_WALLET_KEY,+ "privateKey": GUARD_CLIENT_KEY,+ "urls": {"api": {"public": GUARD, "private": GUARD}}, })
"exchange": { "name": "hyperliquid",- "secret": "<api wallet key>",+ "secret": "<guard client key>",+ "ccxt_config": {"urls": {"api": "http://127.0.0.1:8547"}} }
from hyperliquid.exchange import Exchange- ex = Exchange(wallet, constants.MAINNET_API_URL)+ ex = Exchange(guard_client, "http://127.0.0.1:8547")
// claude_desktop_config.json+ "mcpServers": { "zunder-guard": {+ "command": "zunder-guard", "args": ["mcp"] } } // the agent can trade, never loosen a limit
Your bot gets a key issued by Guard. The real trading key stays inside Guard, so a compromised bot can never trade past your limits.
Then pair this page with your Guard planned
Type the code Guard printed. The monitor from step 2 then shows real decisions, and gains a kill switch.
Guard 1.0 is not out yet.
Join the waitlist and we will tell you when the commands above work.