simmer-briefing
Skill56 starsChanged 10 days agoMITView on GitHub
Daily 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.
- Reads credentials
In this repository28 other files it gives its agents.
- AGENTS.mdAGENTS.md
- kalshi-weather-traderSkill
- nansen-copytrader-overlaySkill
- polymarket-ai-divergenceSkill
- polymarket-btc-up-down-traderSkill
- polymarket-combo-builderSkill
- polymarket-copytradingSkill
- polymarket-dca-eval-traderSkill
- polymarket-elon-tweetsSkill
- polymarket-fast-loopSkill
- polymarket-fast-scalerSkill
- polymarket-market-makerSkill
- polymarket-mert-sniperSkill
- polymarket-mil-aircraft-trackerSkill
- polymarket-nothing-ever-happensSkill
- polymarket-researchSkill
- polymarket-signal-sniperSkill
- polymarket-soccer-shock-ladderSkill
- polymarket-wallet-xraySkill
- polymarket-weather-traderSkill
- polymarket-worldcup-copytraderSkill
- prediction-trade-journalSkill
- simmer-preflightSkill
- simmer-mcp-setupSkill
- simmer-skill-builderSkill
- simmerSkill
- simmer-wallet-setupSkill
- simmer-x402Skill
The file
We split this skill into the rules it gives an agent
9 rules. About 0 are common, 6 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈6
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 23
When the user asks "how am I doing on Simmer?"
- Distinctive: line 24
Before deciding whether to trade more
- Distinctive: line 26
Don't poll faster than once per minute (rate limits — 10/min free, 30/min Pro, 100/min Elite).
- Very specific: line 52
Read PnL from the venue blocks, not from performance:
- Distinctive: line 81
Keep $SIM and real money completely separate.
- Very specific: line 87
Use time_to_resolution for display ("3d", "6h") not raw hours
- Distinctive: line 89
If nothing changed since last briefing, say so briefly — don't pad
- Distinctive: line 106
Don't dump raw JSON. Summarize.
- Very specific: line 125
Call client.get_briefing(since=last_check) a few times per day.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
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 checkREST: GET /api/sdk/briefing?since=<iso8601> 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 useEach 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.20Don'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 activityEach 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
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

