Backtest it. Watch it. Then guard it.
Available now: replay and Watch, directly in your browser. Guard 1.0 will add order protection when it is released.
What would Guard have done with your bot?
Paste your bot’s public Hyperliquid address, or explore a sample below. Compare its real history with a replay behind your rules.
+39.5% in the 90 days to 6 Oct 2026, through a 14.6% drawdown. Guard takes 27 of its 68 entries as they were, resizes 34 and refuses 7: +30.4%, 7.0% drawdown.
·
- 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
Sample: a public Hyperliquid vault · its 90 days to 6 Oct 2026, 22:45 UTC, replayed when this page was built · 492 fills
Guard took about four fifths of this account’s entry size: less return, a far smaller drawdown.
Refused: 7 open-risk cap. Resized: 28 stop added, 3 a stop-out may lose at most 2% of equity, 2 stop added and sized down, 1 other.
With deposits or withdrawals in the window, return, worst drawdown and worst day are time-weighted: the flows cut the curve into stretches, and each stretch counts by its own change, so money moved in or out is never counted as gain or loss. A deposit moves both curves by its amount; a withdrawal takes the same share of each.
Equity, 90 days
Account equity · USDC · includes cash flows
No liquidations in this history.
Adjust your replay rules
Difference = Behind Guard − As traded, using the displayed values. pp = percentage points.
The trades that mattered
SELL BTC · Guard’s stop10 Sep 13hstop hit
- As traded
- —
- Behind Guard
- −$2.1k
- Leverage
- —
- Stop
- added
SELL HYPE · Guard’s stop13 Jul 04hstop hit
- As traded
- —
- Behind Guard
- −$841
- Leverage
- —
- Stop
- added
SELL ETH · Guard’s stop16 Sep 02hstop hit
- As traded
- —
- Behind Guard
- −$744
- Leverage
- —
- Stop
- added
SELL SOL · Guard’s stop01 Aug 07hstop hit
- As traded
- —
- Behind Guard
- −$436
- Leverage
- —
- Stop
- added
SELL LIT · Guard’s stop21 Jul 07hstop hit
- As traded
- —
- Behind Guard
- −$150
- Leverage
- —
- Stop
- added
SELL HYPE · Guard’s stop17 Jul 05hstop hit
- As traded
- —
- Behind Guard
- −$100
- Leverage
- —
- Stop
- added
SELL LIT · Guard’s stop03 Aug 05hstop hit
- As traded
- —
- Behind Guard
- −$36
- Leverage
- —
- Stop
- added
BUY ETH19 Aug 14hrefused · open-risk cap
- As traded
- −$4
- Behind Guard
- +$0
- Leverage
- —
- Stop
- none
| WHEN | TRADE | LEV. | STOP | RESULT · AS TRADED → BEHIND GUARD | GUARD |
|---|---|---|---|---|---|
| 10 Sep 13h | SELL BTC · Guard’s stop | — | added | — → −$2.1k | stop hit |
| 13 Jul 04h | SELL HYPE · Guard’s stop | — | added | — → −$841 | stop hit |
| 16 Sep 02h | SELL ETH · Guard’s stop | — | added | — → −$744 | stop hit |
| 01 Aug 07h | SELL SOL · Guard’s stop | — | added | — → −$436 | stop hit |
| 21 Jul 07h | SELL LIT · Guard’s stop | — | added | — → −$150 | stop hit |
| 17 Jul 05h | SELL HYPE · Guard’s stop | — | added | — → −$100 | stop hit |
| 03 Aug 05h | SELL LIT · Guard’s stop | — | added | — → −$36 | stop hit |
| 19 Aug 14h | BUY ETH | — | none | −$4 → +$0 | refused · open-risk cap |
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.
Public sample addresses are never saved as your account.
·
- 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 |
|---|---|---|---|
| Your next trade appears here. Enter your bot’s public address, or try a public vault. You will see its equity, new trades and which rules would refuse them. Watch can warn you; it cannot block a trade. | |||
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
Your bot. Full Guard. Zero builder fee.
Get Pro for up to 3 accounts. Guard 1.0 is pre-release; your licence term starts when we send the key. Explore the setup below, ready for release.
Other installation options
$ curl -fsSL https://zunder-design-preview.pages.dev/i | sh -s -- \ --rules zr1_eyJ2IjoxLCJt…siKiJdfQ# checks the release’s signature, installs, asks the rest here# then start it: zunder-guard run --network paper# paper mode · listening on 127.0.0.1:8547 · v1.0.0
$ curl -fsSL https://zunder-design-preview.pages.dev/i | sh -s -- \ --rules zr1_eyJ2IjoxLCJt…siKiJdfQ# checks the release’s signature, installs, asks the rest here# paper mode · listening on 127.0.0.1:8547 · v1.0.0
$ & ([scriptblock]::Create((irm https://zunder-design-preview.pages.dev/i.ps1))) ` -Rules zr1_eyJ2IjoxLCJt…siKiJdfQ# checks the release’s signature, installs, asks the rest here# paper mode · listening on 127.0.0.1:8547 · v1.0.0
# 1. guided setup: rules, account, mode and (testnet) the key, with hidden input$ docker run -it --rm \ -v zunder-guard:/data ghcr.io/zunderlabs/zunder-guard:v1.0.0 \ init --interactive --rules zr1_eyJ2IjoxLCJt…siKiJdfQ# 2. run it, reachable from this machine only$ docker run -d --name zunder-guard --init --restart unless-stopped \ -v zunder-guard:/data -e ZUNDER_GUARD_LISTEN=0.0.0.0:8547 \ -p 127.0.0.1:8547:8547 ghcr.io/zunderlabs/zunder-guard:v1.0.0# paper mode; testnet: add -e ZUNDER_GUARD_NETWORK=testnet to the second command# paper mode · listening on 127.0.0.1:8547 · v1.0.0
$ ssh -t you@your-server "curl -fsSL https://zunder-design-preview.pages.dev/i \ | sh -s -- --rules zr1_eyJ2IjoxLCJt…siKiJdfQ"# checks the release’s signature, installs, asks the rest on the server# paper mode · listening on 127.0.0.1:8547 · v1.0.0
$ brew install zunderlabs/tap/zunder-guard$ ZUNDER_GUARD_HOME="$(brew --prefix)/var/zunder-guard" \ zunder-guard init --interactive \ --rules zr1_eyJ2IjoxLCJt…siKiJdfQ$ brew services start zunder-guard# paper mode · listening on 127.0.0.1:8547 · v1.0.0
Your own server, your own account: Fly.io · Render · Hetzner · DigitalOcean · AWS Tokyo# your key is typed on your server, never sent to us# settings and templates: the deploy wizard, “One-click”
Point your bot at Guard planned
A few settings change: the URL, the key Guard gives your bot, isolated margin. Your bot keeps its own logic.
exchange = ccxt.hyperliquid({- "privateKey": API_WALLET_KEY,+ "walletAddress": "0xYourAccount",+ "privateKey": GUARD_CLIENT_KEY, # from zunder-guard init+ "sandbox": True, # Guard accepts either signature+ "urls": {"test": {"public": GUARD, "private": GUARD}},+ "options": {"builderFee": False, "refSet": True}, }) # isolated margin; a stop on each entry, or Guard attaches one
"exchange": { "name": "hyperliquid",- "privateKey": "<api wallet key>",+ "walletAddress": "0xYourAccount",+ "privateKey": "<guard client key>",+ "ccxt_config": { "sandbox": true,+ "options": { "builderFee": false, "refSet": true },+ "urls": { "test": { "public": "http://127.0.0.1:8547",+ "private": "http://127.0.0.1:8547" } } } },+ "margin_mode": "isolated", "trading_mode": "futures"
from hyperliquid.exchange import Exchange- ex = Exchange(wallet, constants.MAINNET_API_URL)+ ex = Exchange(guard_client, "http://127.0.0.1:8547",+ account_address="0xYourAccount") # no trailing slash on the URL
// claude_desktop_config.json+ "mcpServers": { "zunder-guard": {+ "command": "zunder-guard",+ "args": ["mcp", "--key-file", "/path/to/mcp-client.key"] } } // key from: zunder-guard client add --out …; 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.
Illustrative pairing code · not active
Later: 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.