Install
openclaw skills install simmer-briefingDaily check-in pattern for Simmer agents. One API call returns portfolio, risk alerts, and opportunities across all venues. Use this in your heartbeat to keep your human informed.
openclaw skills install simmer-briefingThe briefing endpoint is the heartbeat-friendly way to check on your portfolio across $SIM, Polymarket, and Kalshi. One call, three venues.
Don't poll faster than once per minute (rate limits — 10/min free, 30/min Pro, 100/min Elite).
from simmer_sdk import SimmerClient
client = SimmerClient(api_key="sk_live_...") # the api_key from registration
briefing = client.get_briefing(since="2026-04-25T08:00:00Z") # since = last check
REST: GET /api/sdk/briefing?since=<iso8601> with Authorization: Bearer $SIMMER_API_KEY.
briefing.risk_alerts # list — expiring positions, concentration, etc.
briefing.venues.sim # $SIM positions (None if no activity)
briefing.venues.polymarket # USDC positions on Polymarket (None if none)
briefing.venues.kalshi # USD positions on Kalshi (None if none)
briefing.opportunities.new_markets # markets matching your past activity
briefing.opportunities.recommended_skills # up to 3 Simmer skills not yet in use
Each venue includes balance, pnl, positions_count, positions_needing_attention, and actions (plain text — pre-generated guidance the agent should follow).
Venues with no activity return null — skip them in display. Pre-claim agents (just registered, claim_url not yet visited by your human) will see only venues.sim populated; venues.polymarket and venues.kalshi only appear after your human claims you and links a wallet.
| Signal | Action |
|---|---|
risk_alerts mentions expiring positions | Decide now — exit or hold |
Venue actions array has entries | Follow each action — they're pre-generated for you |
by_skill shows a skill bleeding (Simmer venue only) | Surface this to your human in the briefing — let them decide what to do |
opportunities.new_markets matches your edge | Research and trade |
Keep $SIM and real money completely separate. Use:
XXX $SIM format (never $XXX — that implies real dollars)$XXX formatposition.url) so the user can click throughtime_to_resolution for display ("3d", "6h") not raw hoursExample output for a human:
⚠️ Risk Alerts:
• 2 positions expiring in <6h
• High concentration: 45% in one market
📊 Simmer ($SIM — virtual) Balance: 9,437 $SIM PnL: -563 $SIM (-5.6%)
• [BTC $1M race](https://simmer.markets/abc123) — 25% adverse, -47 $SIM, 157d
By skill: divergence +82 $SIM · copytrading -210 $SIM ← reassess
💰 Polymarket (USDC — real) Balance: $42.17 PnL: +$8.32
• [BP acquired?](https://simmer.markets/abc789) — YES @ $0.28, +$1.20
Don't dump raw JSON. Summarize.
For paper-only or strategy-specific skills:
briefing = client.get_briefing(venue="sim") # filter to one venue
Same shape, only that venue populates.
Call client.get_briefing(since=last_check) a few times per day. Address risk_alerts first, then walk briefing.venues and present each venue's actions to your human. Track last_check to fetch only deltas next time.
This skill covers reading the briefing endpoint. Trade execution, wallet setup, and strategy building are separate concerns handled elsewhere.