Coding

simmer-preflight

Try it

Pre-trade readiness check for autonomous agents. One call returns wallet identity, venue status, spendable balance, open exposure, and a structured ok_to_trade verdict. Run before every real-money trade to prevent cap overruns and catch config issues before they become P&L issues.

What it does

Run before every real-money trade. One call returns:

The skill document

Simmer Preflight

Run client.preflight() before every real-money trade. One call returns:

  • Who you are: agent ID, tier, venue resolved from your API key context
  • Which wallet will sign: execution wallet, deposit wallet, signer mode (OWS / external key / managed)
  • Spendable balance: venue-specific USDC or $SIM balance from the briefing
  • Open exposure: sum of current_value across your existing positions (real venues only for USD cap)
  • Cap check: whether planned_amount + open_exposure_total exceeds your exposure_cap_usd
  • Risk alerts: any briefing risk signals (concentration, expiry, reliability)
  • ok_to_trade: a single boolean — True if no blockers

When to use

Call preflight before every automated trade, especially:

  • Before the first real-money order of a run
  • Before scaling into a position beyond your initial size
  • When your heartbeat wakes up after a long sleep (state may have changed)

Do not call it on every polling tick — it makes 3 API calls. Once per trade intent is correct.

Call it

from simmer_sdk import SimmerClient

client = SimmerClient.from_env(venue="polymarket")

result = client.preflight(
    venue="polymarket",       # venue to check (defaults to client.venue)
    planned_amount=5.0,       # USDC you plan to spend on this trade
    exposure_cap_usd=100.0,   # your total cross-venue exposure limit
)

if not result.ok_to_trade:
    print(f"Preflight blocked: {result.blockers}")
    # e.g. ["EXPOSURE_CAP_EXCEEDED"]
    return

# Log for audit
ledger.record({
    "preflight_id": result.client_preflight_id,
    "ok": result.ok_to_trade,
    "exposure_before": result.open_exposure_total,
    "planned": result.planned_amount,
})

Result fields

FieldTypeDescription
client_preflight_idstrUUID for your trade ledger — log before every order
agent_idstr | NoneAgent UUID from /api/sdk/agents/me
tierstr | NoneAccount tier: "free" / "pro" / "elite"
resolved_venuestrNormalised venue: "sim" / "polymarket" / "kalshi"
execution_walletstr | NoneEOA that signs trades (per-agent OWS wallet for Elite per-agent callers)
deposit_walletstr | NoneDeposit wallet address (DW cohort only; None for Cohort A)
signer_statusstr"ows" / "external_key" / "managed"
spendable_balancefloat | NoneVenue balance: pUSD/USDC (real) or $SIM (sim)
gas_balancefloat | NonePOL / SOL for gas — None in v0 (deferred to v1)
open_exposure_totalfloatSum of current_value across open positions (real venues only when cap is USD)
exposure_cap_usdfloatThe cap you passed in
planned_amountfloatThe planned trade size you passed in
would_exceed_capboolTrue if open_exposure_total + planned_amount > exposure_cap_usd
pending_alertslist[dict]Risk alerts from briefing (normalised to {message: str})
ok_to_tradeboolTrue if no blockers
blockerslist[str]Blocker codes (see below)
warningslist[str]Non-blocking advisories (fetch failures, skipped checks)

Blocker codes (v0)

CodeMeaningFix
EXPOSURE_CAP_EXCEEDEDopen_exposure_total + planned_amount > exposure_cap_usdWait for existing positions to resolve, or raise your cap
WALLET_UNVERIFIEDReal venue requested but real_trading_enabled is False, or no wallet configuredClaim agent + link wallet in dashboard
VENUE_UNSUPPORTEDVenue string not recognisedUse "sim", "polymarket", or "kalshi"
INSUFFICIENT_GASGas signal detected in risk_alerts (proxy only in v0)Fund wallet with POL / SOL
EXPOSURE_UNKNOWNReal venue + active cap, but positions fetch failed — fail-closedCheck connectivity or set exposure_cap_usd=0 to disable cap temporarily

Blockers are additive — all blocking conditions are reported, not just the first.

Per-agent caller (Elite OWS)

For per-agent API keys, execution_wallet returns the per-agent OWS EOA — not the parent user's wallet. This is the SIM-2130 identity guarantee: the preflight returns the wallet that will actually sign the trade.

result = client.preflight(venue="polymarket", planned_amount=5, exposure_cap_usd=100)
print(result.execution_wallet)   # 0xYourAgentOWS... (not parent user's wallet)
print(result.deposit_wallet)     # 0xYourAgentDW... (per-agent DW if activated)

Exposure calculation

open_exposure_total sums current_value from /api/sdk/positions:

  • For real venues (polymarket, kalshi): sums non-sim positions in USDC.
  • For sim venue: sums sim positions in $SIM.

$SIM positions are never included in a USD cap check — they use virtual currency.

warnings[] vs blockers[]

blockers stop trading. warnings are informational — common examples:

  • briefing_fetch_failed: — balance / alerts unknown; check connectivity
  • positions_fetch_failed: — exposure may be understated; check rate limits
  • identity_fetch_failed: — agent ID / tier unknown; API key may be invalid

If you see warnings, log them. Fetch failures on individual endpoints are gracefully handled — preflight returns best-effort data rather than throwing.

Pre-trade pattern (cookbook)

import os
from simmer_sdk import SimmerClient

EXPOSURE_CAP = float(os.environ.get("EXPOSURE_CAP_USD", "100"))

client = SimmerClient.from_env(venue="polymarket")

def safe_trade(market_id: str, side: str, amount: float):
    pf = client.preflight(
        venue="polymarket",
        planned_amount=amount,
        exposure_cap_usd=EXPOSURE_CAP,
    )
    if not pf.ok_to_trade:
        print(f"Preflight blocked ({pf.blockers}), skipping trade")
        return None
    if pf.warnings:
        print(f"Preflight warnings: {pf.warnings}")

    # Log preflight before order submission
    print(f"Preflight OK — id={pf.client_preflight_id} "
          f"exposure={pf.open_exposure_total:.2f}+{amount:.2f}/{EXPOSURE_CAP}")

    return client.trade(market_id=market_id, side=side, amount=amount)

Cadence

Call once per trade intent — not on every poll cycle. The preflight makes 3 API calls (/agents/me, /briefing, /positions), each counting toward your rate limits.

Scope

Preflight is read-only. It never signs, trades, redeems, or mutates settings. It is safe to call in any context including paper-trading mode (positions will reflect simulated holdings).

v0 limitations

  • gas_balance is always None — on-chain RPC not available in the SDK client. Use the dashboard to verify POL / SOL balance.
  • INSUFFICIENT_GAS is only detected if the briefing risk_alerts mention gas explicitly — not from an on-chain query.
  • Server-side preflight_id (stable, storable) deferred to v1.
  • MCP tool exposure deferred to v1.

Related skills

Trade crypto, manage a multi-chain wallet, and query an AI analyst from one CLI.

by lowesyang162 installs109 stars

Join a video meeting as an AI bot with voice, avatar, and screenshare across four operating modes.

by johnpatternai21 installs8 stars

Query Twitter/X profiles, tweets, follower events, and KOL data through the 6551 REST API.

by infra403840 installs27 stars

Stores durable facts in a categorized, plain-markdown vault on disk, alongside your agent's built-in memory.

by Iván555 installs18 stars

Fetch raw ad creative, app, ranking, and revenue data from AdMapix as structured JSON.

by fly0pants4.3k installs296 stars

Manage Stripe customers, subscriptions, invoices, products, prices, and payments through OAuth-authenticated API calls.

by byungkyu720 installs29 stars

More from simmer

Browse all skills

Trade Polymarket 5-minute BTC fast markets using Binance momentum signals through the Simmer SDK.

by simmer263 installs50 stars

Trade prediction markets through one SDK across Polymarket, Kalshi, and a virtual $SIM practice venue.

by simmer312 installs23 stars

Scan Polymarket temperature markets and trade with NOAA or Open-Meteo forecasts, with dry-run and real-money controls.

by Simmer.Markets215 installs5 stars

Copy top Polymarket whale positions in batch or in real time, with built-in rebalancing and per-trade caps.

by simmer123 installs4 stars

Scan Polymarket markets resolving in minutes, filter for 60/40+ splits, and back the favored side with a capped bet size.

by simmer92 installs

Turn a trading idea into an installable Simmer prediction-market skill

by simmer58 installs