{"slug":"desk-monitoring","title":"desk-monitoring","summary":"How the desk watches markets and the account between trades using Grok Bot routines and WebSocket or polling watches - the desk brief, book checks, funding and price watches, alert conditions and what a watch may and may not do. Use when the user asks for briefings, alerts, \"watc","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-09-16T14:53:10.067009Z","repo":{"url":"https://github.com/galleonlabs/hypergrok-trading-desk","stars":68,"forks":15,"license":"MIT","updatedAt":"2026-09-21T17:53:35Z"},"bodyHtml":"<hr>\n<h2>name: desk-monitoring\ndescription: How the desk watches markets and the account between trades using Grok Bot routines and WebSocket or polling watches - the desk brief, book checks, funding and price watches, alert conditions and what a watch may and may not do. Use when the user asks for briefings, alerts, \"watch X\" or scheduled checks.\nlicense: MIT\nmetadata:\nversion: \"1.1.1\"\nauthor: Galleon Labs\ncategory: desk</h2>\n<h1>Monitoring, briefs and watches</h1>\n<p>Monitoring is read-only. A watch may fetch, compute, save and alert. It may never send to the exchange. If a watch condition implies action (\"stop got hit, re-enter\"), the alert opens a proposal; the lifecycle does the rest.</p>\n<h2>Grok Bot routines</h2>\n<p>Each Bot can own routines (schedules or event triggers). Ask the owning Bot to create one with: schedule and time zone, input source, expected result, approval boundary. Keep routines few and specific; the app keeps only recent run records, so a routine that produces something durable should also write to <code>/workspace/trading-desk</code>.</p>\n<p>Recommended starting set (the user picks; none is on by default):</p>\n<table>\n<thead>\n<tr>\n<th>Routine</th>\n<th>Owner</th>\n<th>Schedule</th>\n<th>Output</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Desk brief</td>\n<td>Desk Lead</td>\n<td>once a day at the user's chosen time</td>\n<td><code>briefs/YYYY-MM-DD-desk.md</code> and a short post</td>\n</tr>\n<tr>\n<td>Book check</td>\n<td>Risk Manager</td>\n<td>every 4-8 hours while positions are open</td>\n<td>alert only if something changed or a limit is near</td>\n</tr>\n<tr>\n<td>Funding snapshot</td>\n<td>Market Analyst</td>\n<td>daily, or before the user's usual trading time</td>\n<td>table of funding, OI, volume for the allowed markets</td>\n</tr>\n<tr>\n<td>Catalyst calendar refresh</td>\n<td>Research Analyst</td>\n<td>weekly</td>\n<td><code>research/calendar.md</code></td>\n</tr>\n<tr>\n<td>Weekly review</td>\n<td>Trade Reviewer</td>\n<td>weekly</td>\n<td>review posted by DM</td>\n</tr>\n</tbody>\n</table>\n<h2>The desk brief</h2>\n<p>Assembled by the Desk Lead from specialists' inputs, or generated by the Desk Lead directly if it is the only Bot awake:</p>\n<pre><code>DESK BRIEF | 2026-08-17 07:00 UTC | mainnet | account 0xabc...def\nmarkets (Market Analyst, allMids + metaAndAssetCtxs 06:58 UTC):\n  BTC 97,120 (+0.8% 24h) | funding 0.0010%/h | OI $4.1B\n  ETH 3,004 (+0.2%) | funding 0.0012%/h | OI $1.2B\n  SOL 151.2 (-1.1%) | funding -0.0004%/h | OI $610M\nbook (Risk Manager, clearinghouseState 06:59 UTC): 1 position, ETH long 0.4827 @ 3,000, uPnL +$1.9, margin ratio 4.6%, stop resting 2,900; open risk 0.5%; day PnL 0.0%\nresearch (Research Analyst): ETH client release scheduled 2026-08-19 [link]; nothing breaking on held markets\nopen items: HG-20260816-01 live; no pending tickets\n</code></pre>\n<p>Facts with sources; interpretation, if any, on one clearly labelled line. No trade suggestions.</p>\n<h2>Watches</h2>\n<p>A watch is a condition plus an alert. Two ways to run one on the desk computer:</p>\n<ul>\n<li><strong>Polling</strong> with <code>/info</code> calls on a short loop from a script under <code>/workspace/trading-desk/watch/</code> (respect rate limits: <code>/info</code> requests carry weight; a poll every 5-15 seconds per market is plenty for a desk).</li>\n<li><strong>WebSocket</strong> subscriptions (<code>allMids</code>, <code>l2Book</code>, <code>trades</code>, <code>candle</code>, <code>userFills</code>, <code>orderUpdates</code>, <code>userEvents</code>) per <code>hyperliquid-websocket</code>. Better for fills and order updates. Keep the process supervised (a routine can restart it) and log to a file.</li>\n</ul>\n<p>Common watch conditions:</p>\n<table>\n<thead>\n<tr>\n<th>Watch</th>\n<th>Data</th>\n<th>Alert to</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Price crosses a level</td>\n<td><code>allMids</code> or <code>candle</code></td>\n<td>user, Desk Lead</td>\n</tr>\n<tr>\n<td>Funding flips sign or exceeds a threshold</td>\n<td><code>metaAndAssetCtxs</code> <code>funding</code> / <code>predictedFundings</code></td>\n<td>user, Desk Lead</td>\n</tr>\n<tr>\n<td>Order filled or cancelled</td>\n<td><code>orderUpdates</code>, <code>userFills</code></td>\n<td>Execution Trader, Trade Reviewer</td>\n</tr>\n<tr>\n<td>Margin ratio above X or liquidation distance below Y</td>\n<td><code>clearinghouseState</code></td>\n<td>user, Risk Manager, Desk Lead</td>\n</tr>\n<tr>\n<td>Position without a resting stop</td>\n<td><code>clearinghouseState</code> + <code>frontendOpenOrders</code></td>\n<td>Risk Manager, Desk Lead (incident)</td>\n</tr>\n<tr>\n<td>Daily loss stop approached (80%) or hit</td>\n<td><code>clearinghouseState</code> vs start-of-day equity</td>\n<td>user, Risk Manager</td>\n</tr>\n<tr>\n<td>Exchange unreachable for more than N minutes</td>\n<td>any <code>/info</code> call failing</td>\n<td>Desk Lead</td>\n</tr>\n</tbody>\n</table>\n<p>An alert message carries: what fired, the value and the threshold, the source and UTC time, and the proposal id if related. Alerts do not include instructions to trade.</p>\n<p><strong>Silence is not an all-clear.</strong> A watch has three outcomes, never two: the condition fired, the condition did not fire, or the watch could not tell. A failed request, an empty response, a socket that reconnected and skipped messages, a candle that never closed, or data older than the watch's own interval is <strong>unavailable</strong>, and it must alert as such. A watch that quietly reports \"not crossed\" on a dead feed is the most dangerous thing on the desk, because it looks exactly like a calm market.</p>\n<p>Give every watch a staleness bound (a small multiple of its interval) and check the age of each result against it. On unavailable: say which read failed, how old the last good value was, and how long the gap has run. Escalate a gap that outlives the bound, rather than waiting for the feed to come back.</p>\n<h2>Hygiene</h2>\n<ul>\n<li>Every watch script logs to <code>/workspace/trading-desk/watch/&lt;name&gt;.log</code> with UTC timestamps.</li>\n<li>A watch that fails silently is worse than none: routines that own a watch check its heartbeat.</li>\n<li>Do not run more than a few watches at once; each is a process on the shared computer.</li>\n<li>When the desk goes flat and the user is done for the day, stop the watches that only make sense with positions.</li>\n</ul>\n<h2>Never</h2>\n<ul>\n<li>Never let a watch place, modify or cancel an order, or change leverage. Even a \"protective\" one. It alerts; the desk acts through a ticket.</li>\n<li>Never alert with unsourced numbers.</li>\n<li>Never report a stale or failed read as a condition that did not fire. That is an <code>unavailable</code> alert, not silence.</li>\n<li>Never poll faster than the desk needs; a rate-limited desk is a blind desk.</li>\n</ul>\n","files":[{"path":"ATTRIBUTION.md","sizeBytes":2205,"isText":true},{"path":"LICENSE","sizeBytes":1069,"isText":false},{"path":"SKILL.md","sizeBytes":5691,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-16T15:00:19.740254Z","sha256":"F5DD89EA78D6E5A927C3C08797E93D8CFF93E0C61F080D4523E2856642C62BD4","sizeBytes":4751},"review":null,"source":{"repositoryUrl":"https://github.com/galleonlabs/hypergrok-trading-desk","path":"skills/desk-monitoring","license":"MIT","commit":"bae4c70c6c5e123fb6897789ebe10d6358bdbac8","subtreeSha":"CB8895092EF36D86C204295A3D347CCD3EEEDD3C220D866C3BB267E9E3F0E5C0","lastSyncedAt":"2026-09-23T13:50:22.030878Z"},"reviewedAt":"2026-09-16T15:23:28.406261Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/galleonlabs/hypergrok-trading-desk/tree/main/skills/desk-monitoring"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install galleonlabs-hypergrok-trading-desk@llmmart"},{"target":"git","command":"git clone https://github.com/galleonlabs/hypergrok-trading-desk.git"}]}