<!-- https://zunder-design-preview.pages.dev/docs/tools/watch · Markdown version of the page -->

# Watch

Your bot's trades judged live in a browser tab. What Watch reads, how it judges, and why it can warn but never block.

Watch follows one Hyperliquid address in your browser and judges each new trade under your rules, as it happens. When a rule breaks, it tells you, with a browser notification if you allow one.

## Read the interface

[Open Watch](https://zunder-design-preview.pages.dev/connect#watch). These annotations follow the workspace’s reading order.

1. **Address.** Choose the single public account to follow. No API wallet key belongs in this field.
2. **Connection status.** Check that the public stream is connected before relying on new events. Keep the tab open and the computer awake.
3. **Rules and warnings.** Compare the active rules with the account warnings. A warning describes a filled trade or observed position; it cannot stop an order.
4. **Decision feed.** Read the reason for each judged entry. Stop watching to end the subscription.

## Watch warns. It cannot block.

A browser tab cannot receive your bot's orders: a web page has no listening socket. So Watch sees a trade only after Hyperliquid has filled it. To stop a trade before it happens, you need Guard in front of the bot.

## What it reads

All public, no wallet connection, no signature, no key:

| Source | What | How often |
|---|---|---|
| WebSocket `userFills` | the address's fills | live |
| WebSocket `orderUpdates` | its orders, including stops | live |
| WebSocket `clearinghouseState` | equity, positions, liquidation prices | live |
| `frontendOpenOrders` | open orders, when they changed and a fill needs judging | on demand |
| `portfolio` | PnL history, for the daily loss stop and drawdown halt | every 5 minutes |
| `meta` | lot sizes and minimums | once |

The address is held only while Watch runs, and dropped when you stop it. No event the page shows carries it.

## How it judges

- **Each new order's fills**, once a short grace has passed: a stop placed up to 5 s after the fill still counts as that entry's stop. Then the same nine rules as [Backtest](https://zunder-design-preview.pages.dev/docs/tools/backtest), with the same WebAssembly engine.
- **The account as a whole**, on every state update. A warning fires when:
  - the daily loss stop or the drawdown halt is reached (`halted_for_day`, `stopped`),
  - a position has no stop (`position_without_stop`),
  - open risk is over your cap (`open_risk_over_cap`),
  - leverage is over your cap (`leverage_over_cap`).

**Example.** Your bot opens 2 ETH and forgets its stop. Five seconds later Watch shows "would refuse · no stop", and the account-level warning "position without stop" stays until a stop appears.

## Limits

- **The tab must stay open** and the computer awake.
- **One address.** Hyperliquid lets one IP subscribe to user data of at most 10 different users; Watch uses one of them.
- **It reads state after the trade.** A second trade right after the first can blur which trade changed what.
- **Notifications** need your browser's permission.
