Trade crypto, manage a multi-chain wallet, and query an AI analyst from one CLI.
Coding
Simmer Briefing
Try itDaily check-in pattern for Simmer agents. One API call returns portfolio, risk alerts, and opportunities across all venues. Use this in your heartbeat to kee...
What it does
The briefing endpoint is the heartbeat-friendly way to check on your portfolio across $SIM, Polymarket, and Kalshi. **One call, three venues.**
The skill document
Simmer Briefing
The briefing endpoint is the heartbeat-friendly way to check on your portfolio across $SIM, Polymarket, and Kalshi. One call, three venues.
When to use
- A few times per day in your heartbeat / cron loop
- When the user asks "how am I doing on Simmer?"
- Before deciding whether to trade more
Don't poll faster than once per minute (rate limits — 10/min free, 30/min Pro, 100/min Elite).
Call it
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= with Authorization: Bearer $SIMMER_API_KEY.
What's in the response
briefing.get("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.get("opportunities", {}).get("new_markets") # markets matching your past activity
briefing.get("opportunities", {}).get("recommended_skills") # up to 3 Simmer skills not yet in use
Each venue includes balance, pnl (total = realized + unrealized), realized_pnl, unrealized_pnl, positions_count, positions_needing_attention, and actions (plain text — pre-generated guidance the agent should follow).
Read PnL from the venue blocks, not from performance:
sim = (briefing.get("venues") or {}).get("sim")
if sim:
print(f"$SIM PnL: {sim['pnl']:+.2f} $SIM")
print(f" realized: {sim['realized_pnl']:+.2f} $SIM unrealized: {sim['unrealized_pnl']:+.2f} $SIM")
pm = (briefing.get("venues") or {}).get("polymarket")
if pm:
print(f"Polymarket PnL: ${pm['pnl']:+.2f}")
print(f" realized: ${pm['realized_pnl']:+.2f} unrealized: ${pm['unrealized_pnl']:+.2f}")
briefing.performance.total_pnl is deprecated — it is $SIM only despite the venue-agnostic name. Use briefing["venues"]["sim"]["pnl"] instead. It will be removed in a future release.
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 briefing["venues"]["sim"] populated; briefing["venues"]["polymarket"] and briefing["venues"]["kalshi"] only appear after your human claims you and links a wallet.
What to DO with the briefing
| 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 |
Presenting to your human
Keep $SIM and real money completely separate. Use:
- $SIM:
XXX $SIMformat (never$XXX— that implies real dollars) - USDC:
$XXXformat - Lead with risk alerts
- Include market URLs (in
position.url) so the user can click through - Use
time_to_resolutionfor display ("3d", "6h") not raw hours - Skip null venues
- If nothing changed since last briefing, say so briefly — don't pad
Example 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.
Filtering to a single venue
get_briefing() always returns all venues. To focus on one, read the relevant key after fetching — there is no venue parameter:
briefing = client.get_briefing(since=last_check)
venues = briefing.get("venues") or {}
sim = venues.get("sim") # None if no $SIM activity
pm = venues.get("polymarket") # None if no Polymarket activity
ks = venues.get("kalshi") # None if no Kalshi activity
Each key is None when the agent has no activity on that venue, so a None check is both the skip-inactive guard and the single-venue filter.
Recommended cadence
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.
Scope
This skill covers reading the briefing endpoint. Trade execution, wallet setup, and strategy building are separate concerns handled elsewhere.
Links
- API reference: docs.simmer.markets/api/briefing
- FAQ: docs.simmer.markets/faq
Related skills
Join a video meeting as an AI bot with voice, avatar, and screenshare across four operating modes.
Stores durable facts in a categorized, plain-markdown vault on disk, alongside your agent's built-in memory.
Query Twitter/X profiles, tweets, follower events, and KOL data through the 6551 REST API.
Generate and edit Draw.io, Mermaid, and Excalidraw diagrams from natural language using a structured JSON spec.
Fetch raw ad creative, app, ranking, and revenue data from AdMapix as structured JSON.
More from simmer
Browse all skillsTrade Polymarket 5-minute BTC fast markets using Binance momentum signals through the Simmer SDK.
Trade prediction markets through one SDK across Polymarket, Kalshi, and a virtual $SIM practice venue.
Scan Polymarket temperature markets and trade with NOAA or Open-Meteo forecasts, with dry-run and real-money controls.
Copy top Polymarket whale positions in batch or in real time, with built-in rebalancing and per-trade caps.
Scan Polymarket markets resolving in minutes, filter for 60/40+ splits, and back the favored side with a capped bet size.
Turn a trading idea into an installable Simmer prediction-market skill