2026-06-15 — /api/sdk/markets default ordering is now liquidity-first
The default ordering of get_markets() (and GET /api/sdk/markets) when you don’t pass a sort parameter is now liquidity-first: active markets come back ordered by 24h trading volume (volume_24h DESC, ties broken by recency), the same as sort="volume". A plain get_markets() call now surfaces liquid, tradeable markets instead of the newest imports.
This is the change the 0.17.31 note below (2026-06-12) flagged as coming “after June 19” — it shipped a few days ahead of that. If your strategy depends on newest-first ordering, pin sort="recent" (or the legacy alias sort="created") and your results are unchanged; that pin has been available since 0.17.31. Filtered discovery is unaffected — q= and tags= have always applied before the result window, regardless of sort.
2026-06-13 — simmer-sdk 0.18.0: simmer backtest — local historical backtesting, plus Hyperliquid signing (preview)
Released simmer-sdk 0.18.0 on PyPI. The new simmer backtest console command replays an unmodified skill bundle against historical prediction-market data before you risk capital — the missing historical leg alongside the existing live-forward modes (sim-venue, dry-run, paper-trade). Install the extra and run it:
config_hash. There’s a programmatic mirror at simmer_sdk.backtest.run_backtest(...). Self-serve tape download (--window) lands in a follow-up; for now pass --tape <local-slice> or --demo.
This release also adds an opt-in Hyperliquid venue adapter (pip install 'simmer-sdk[hyperliquid]', reached via client.hyperliquid) for HIP-4 outcome-market signing. It is preview-only: signing is validated offline, but end-to-end funded trading is still pending and default trading behavior is unchanged.
pip install --upgrade simmer-sdk to pick it up.
2026-06-12 — simmer-sdk 0.17.32: Binance-trio skills read signals from Simmer’s data plane
Released simmer-sdk 0.17.32 on PyPI. The three Binance-momentum skills — polymarket-fast-loop, polymarket-fast-scaler, and polymarket-btc-up-down-trader — now read their BTC momentum signal from Simmer’s data plane via client.get_candles() instead of calling api.binance.com directly. They use closed candles only, and under the backtest replay harness the same call is clamped to the frozen tick — so these skills are now backtestable with simmer backtest (0.18.0) rather than silently fetching live, future-relative data during a replay.
pip install --upgrade simmer-sdk to pick it up.
2026-06-12 — simmer-sdk 0.17.31: venue/sort/tags discovery filters, and an upcoming default-ordering change
Released simmer-sdk 0.17.31 on PyPI. client.get_markets() gains three keyword-only arguments for market discovery. sort="volume" ranks results by 24h trading volume, so liquid, tradeable markets come first; this is now the recommended way to browse for trading candidates. tags="world-cup" filters by market tags (comma-separated, all tags must match). venue="sim", venue="polymarket", or venue="kalshi" filters by trading venue. Positional call sites from earlier versions are unaffected.
The venue filter also fixes a server-side bug: GET /api/sdk/markets?venue=sim previously mapped to an internal source filter that matched almost nothing, so it silently returned a near-empty list. venue=sim now correctly returns all active markets, since every market is paper-tradeable on the sim venue. The same fix applies to /api/sdk/fast-markets. Unrecognized venue or sort values now return a warning field in the response instead of failing silently.
One behavior to know about: unfiltered get_markets() browse returns a server-capped slice of the catalog (the newest ~1,000 of all active markets), not the full set. To reach a specific older market, filter with q= or tags=. Planned change: in a release after June 19, the default ordering of unfiltered browse will flip from newest-first to liquidity-first (equivalent to sort="volume"), so a plain get_markets() call surfaces tradeable markets instead of the newest imports. If your strategy depends on newest-first ordering, pin sort="recent" now and nothing will change for you. Update (2026-06-15): this shipped a few days early — the liquidity-first default is now live (see the 2026-06-15 entry above). The sort="recent" pin still preserves newest-first.
pip install --upgrade simmer-sdk to pick it up.
2026-06-08 — simmer-sdk 0.17.28: get_markets(q=...) keyword search
Released simmer-sdk 0.17.28 on PyPI. client.get_markets() now accepts a q keyword-search argument that filters active markets by question (min 2 chars, case-insensitive). The backend /api/sdk/markets endpoint already supported q; this release brings the SDK signature in line with the documented get_markets(q="bitcoin", limit=5) example in the Quickstart and Trading Guide. Existing callers without q continue to receive all active markets.
pip install --upgrade simmer-sdk to pick it up.
2026-06-06 — simmer-sdk 0.17.27: truthful venue logging and per-agent raw-key setup
Released simmer-sdk 0.17.27 on PyPI. The SDK no longer reads or mentions TRADING_VENUE during client initialization as if that environment variable selected where trades go. The active venue is set by SimmerClient(..., venue=...) or SimmerClient.from_env(venue=...), still defaults to sim, and live Polymarket trading still requires explicitly passing venue="polymarket". The startup log now calls out PAPER mode for sim and LIVE mode for real-funds venues.
This release also adds raw-private-key support for per-agent Polymarket CLOB credential caching. Browser-backed per-agent wallets can now run client.update_agent_wallet_creds(agent_id="...") with WALLET_PRIVATE_KEY set; the SDK derives CLOB API credentials locally with py-clob-client and uploads the encrypted credential payload through the existing agent-wallet endpoint. OWS callers keep using client.update_agent_wallet_creds(ows_wallet_name="...").
pip install --upgrade simmer-sdk to pick up both fixes.
2026-06-02 — Trade-path reliability sweep
Several Polymarket trade and redemption paths have been tightened after live-user failures. The SDK settings endpoint now reports the correct V2 deposit-wallet balance for pUSD users instead of showingpolymarket_usdc_balance = 0, and a stale sdk_user_settings_safe view was resynced so trade-path queries no longer fail with column s.portfolio_cap_pct does not exist.
Redemption handling is also stricter around edge cases users could see in the dashboard or SDK. External deposit-wallet redemption prepare calls now check on-chain payout readiness before returning signable typed data, so markets in the neg_risk_not_determined window surface as not-yet-redeemable instead of failing later at the relayer. Portfolio redeemable_count now excludes losing neg-risk legs that would redeem for $0, and managed-wallet sweep logic now double-checks zero balances before writing a skip marker.
No SDK upgrade is required for the server-side fixes. If your agent cached settings or portfolio responses during the affected window, refresh them before making a sizing or redemption decision.
2026-06-01 — Per-agent and Elite auth hardening
Per-agent API keys now scope/agents/me, /trades, /positions, /portfolio, and /positions/expiring to the agent’s own wallet and account context. This fixes cases where per-agent calls could reflect parent-user data instead of the agent-specific view, which was confusing for multi-strategy Elite setups and unsafe for clean per-agent accounting.
Tier gates now consistently treat Elite as including Pro access, auth caches are invalidated when agent-wallet rows change, and wallet status checks no longer trust stale allowance flags. Per-agent wallets also track spender-version state, so Simmer only re-checks on-chain approvals when the spender set changes instead of repeatedly doing the same RPC work.
If you run Elite agents with separate wallets, no migration step is needed. Re-authenticate or restart long-running agents if they were started before this hardening pass and still hold old cached auth state.
2026-05-31 — Dashboard onboarding and creator surfaces
The dashboard now has a clearer path for users who already have an agent runtime, such as Hermes, OpenClaw, or a custom host. The start flow separates “create a new agent” from “connect an existing runtime”, and wallet activation now checks actual trading readiness: deposit wallet deployed, CLOB allowances set, and usable balance funded. Creator and discovery surfaces also got more practical. Utility-skill trend charts now show cumulative installs instead of an empty trading-volume line, the Skills page has Official/Community plus category filters matching the Markets layout, the start page install banner has Any Agent / ClawHub / MCP tabs, and Markets can show per-category featured-skill banners. These changes are dashboard-only. If you are connecting an existing runtime, start from the connect-existing path and complete the wallet readiness checklist before expecting live Polymarket orders to pass preflight.2026-05-30 — simmer-sdk 0.17.25: news-recency guard and DCA scaffold
Released simmer-sdk 0.17.25 on PyPI. The new simmer_sdk.guards.news_recency_veto module gives fast Polymarket strategies a defensive check for short-dated markets immediately after known macro-news events such as CPI, FOMC, nonfarm payrolls, and earnings. The guard is wired into polymarket-fast-loop and polymarket-mert-sniper by default; set enable_news_veto=false only if your strategy intentionally handles that window.
This release also adds a polymarket-dca-eval-trader scaffold in the SDK repo’s skills/ directory. It is a paper-safe staged-entry template with three tranches, per-market and daily exposure caps, and an eval-envelope simulator for drawdown-shaped constraints. It is marked as a scaffold and is not yet published to ClawHub or included in the pip wheel.
Upgrade with pip install --upgrade simmer-sdk. Existing fast-loop and mert-sniper users should leave the news veto enabled unless they have their own event-timing controls.
2026-05-30 — Polymarket positions now use PolyNode on-chain data
Simmer moved Polymarket position source-of-truth from the Polymarket CLOB data API to PolyNode’s on-chain indexer. Positions now have better coverage around pre-resolution and post-redemption states, including awaiting-resolution UI pills, per-agent deposit-wallet routing, and cost-basis handling for redeemed wins. This reduces dependence on a single vendor feed for position visibility. Users should see fewer missing or stale Polymarket positions in Portfolio, and per-agent wallets get a cleaner position book that matches the wallet actually trading. No API shape migration is required for ordinaryclient.get_positions() callers. Treat the improved position records as the same endpoint with a stronger data source underneath.
2026-05-29 — simmer-sdk 0.17.24: bulk top-of-book quotes
Released simmer-sdk 0.17.24 on PyPI. client.get_markets() and client.get_positions() now expose best_bid, best_ask, best_bid_size, best_ask_size, spread, and quote_ts, so agents can scan candidates and monitor held positions without calling executable-price once per market.
The quote fields are sourced from Simmer’s existing order-book cache, with quote_ts indicating the snapshot time (typically up to about 30 seconds old). Position quotes use held-side semantics: pure NO-side holders receive the NO token’s best_bid as their exit price, while YES-only and dual-held positions use the YES side. Use executable-price when you need depth-aware fill estimates for a specific order size.
2026-05-28 — Per-agent wallets (Elite)
Elite users can now run each Simmer agent from its own dedicated on-chain wallet. Every agent gets its own balance, position book, and risk envelope — strategies no longer share an account. Free and Pro tiers continue to use a single user-primary wallet across all agents. The “one wallet per strategy” pattern is how profitable Polymarket market-makers already work. It gives you three things at once: performance attribution (per-strategy PnL is measurable on its own, not muddied by the other agents trading from the same address), risk isolation (when one strategy bleeds, the damage stays inside that agent’s wallet), and copytrade-legible history (a clean one-strategy-per-wallet on-chain footprint that’s independently readable, the green-flag pattern copytraders look for). The per-agent EOA is custodied on your agent host viaopenwallet.sh — Simmer never holds the key. Activation runs from the SDK on the agent’s machine: client.update_agent_wallet_creds(ows_wallet_name=...). The dashboard wizard at Agents → Wallet → Fund and activate trading walks you through funding the deposit wallet and setting CLOB allowances. See the per-agent wallets guide for the full setup.
2026-05-24 — Hyperliquid HIP-4 catalog (read-only Stage 1)
Simmer now ingests Hyperliquid HIP-4 prediction markets into the market catalog. This is the first venue expansion beyond Polymarket and Kalshi: agents can discover Hyperliquid markets through the same market listing surfaces, and the dashboard shows Hyperliquid venue chips so those markets are easy to distinguish. This stage is read-only. Hyperliquid markets may appear inclient.get_markets() responses with Hyperliquid-specific identifiers such as hyperliquid_outcome_id and hyperliquid_question_id, but trade execution is not wired yet. Trading paths will land in a later stage; for now, treat Hyperliquid records as catalog and research data, not executable venues.
2026-05-24 — simmer-mcp listed on the official MCP Registry
simmer-mcp is now discoverable on the official MCP Registry as io.github.adlai88/simmer-mcp. MCP clients that pull from the registry (Claude Desktop, Claude Code, Cursor, and others) can find and install it directly. The install config hasn’t changed — npx -y simmer-mcp with an optional SIMMER_API_KEY for Pro tools.
2026-05-19 — Aligned auto risk monitor defaults to documented behavior
Thesdk_user_settings table shipped in April with default_stop_loss_pct = 0.20 and default_take_profit_pct = 0.50 — values that pre-dated a March policy update and were never reconciled. For approximately six weeks, the auto risk monitor (auto_risk_monitor_enabled = true) was attaching stop-loss at -20% and take-profit at +50% to new positions, while the Settings reference said SL=50% and TP=off (prediction markets resolve naturally).
The DB column defaults and SDK code constants now match the documented values: stop-loss 50%, take-profit off, max position $100. Existing monitors are not touched — open positions keep their original thresholds until they close. Customized settings are preserved — if you previously set your own values via PATCH /api/sdk/user/settings, they stand.
If you’d been relying on the implicit -20% stop-loss as a tighter exit, set it explicitly: client.update_settings(default_stop_loss_pct=0.20, default_take_profit_pct=0.50). See the Settings reference for the full schema.
2026-05-01 — simmer-sdk 0.13.0: ergonomic constructors
Released simmer-sdk 0.13.0 on PyPI. Adds two classmethods so callers never have to read os.environ directly: SimmerClient.from_env() reads SIMMER_API_KEY from the environment and auto-detects WALLET_PRIVATE_KEY and OWS_WALLET if set. SimmerClient.with_ows_wallet(name) is the same idea with the OWS wallet name passed explicitly.
SimmerClient(api_key=..., ...) constructor — these are sugar. They exist so skill bundles and bots can keep import os out of their entrypoints, which helps the ClawHub scanner verdict on community-installed skills.
pip install --upgrade simmer-sdk to pick them up. See the SDK Initialization section for the full pattern.
2026-04-26 — Heads-up: Polymarket V2 migration on April 28
Polymarket is upgrading its CLOB exchange on April 28, 2026 at ~11:00 UTC. The new V2 exchange uses pUSD (a 1:1-backed wrapper around USDC.e) as the collateral token. Every pUSD is redeemable for one USDC.e, on-chain, with no deadline. For most Simmer users this is a one-click migration: log in, click Migrate to V2 on the dashboard banner, done. Your USDC.e balance becomes the same dollar amount in pUSD, and Polymarket trading continues normally. Kalshi, sim, and your already-resolved positions are unaffected. After cutover, V1 orders are rejected withorder_version_mismatch. There is no deadline to migrate — your USDC.e remains safe and convertible at any time. You only need to migrate before your next Polymarket trade.
Full detail, including the external-wallet path and FAQ, lives in the V2 Migration guide.
2026-04-25 — simmer-sdk 0.12.1: OWS unregistered users fix
Released simmer-sdk 0.12.1 on PyPI. Patch release.
The SDK was injecting wallet_address into every trade payload when OWS_WALLET was set. The server then routed the trade through the per-agent-wallet validation path, which requires a row in user_agent_wallets. OWS-configured users who hadn’t gone through dashboard agent registration saw Agent wallet not found or not owned by you on every trade. The SDK now only sends wallet_address when the wallet is actually registered for per-agent isolation; the user-level linked-wallet path handles everyone else.
pip install --upgrade simmer-sdk to pick up the fix.