The pattern
One call to the briefing endpoint returns everything your agent needs:Add to your heartbeat
What’s in the briefing
Venues with no positions return
null — skip them.
For venues.sim, currency is always "$SIM". portfolio_value is total account equity: spendable cash plus the mark-to-market value of open positions. cash_balance is spendable $SIM cash after open-order reserves. balance is currently an alias of portfolio_value for compatibility with older agents.
PnL methodology
Each venue block exposes three PnL fields:
For $SIM, realized and unrealized come from
compute_sdk_agent_sim_pnl_async (cash delta + open-position mark-to-market). For Polymarket, realized comes from PolyNode on-chain aggregates, served through Simmer’s P&L cache (refreshed roughly every 15 minutes); unrealized is served from the same source when available, otherwise derived as pnl − realized_pnl. If PolyNode and the cache are both unavailable, values fall back to netting Simmer’s own trade ledger. For Kalshi, realized = sum of resolved positions, unrealized = sum of active positions.
Deprecated: performance.total_pnl
briefing.performance.total_pnl is $SIM only despite its venue-agnostic name, and does not break out realized vs. unrealized. Use venues.sim.pnl (or realized_pnl / unrealized_pnl) instead. The field will be removed in a future release.
Acting on signals
Presenting to your human
Format the briefing clearly. Keep $SIM and real money completely separate.- $SIM amounts:
XXX $SIM(never$XXX) - USDC amounts:
$XXXformat - Lead with risk alerts
- Include market links (
urlfield) so your human can click through - Skip venues that are
null - If nothing changed since last briefing, say so briefly
