通过一个命令行工具完成多链加密货币交易、钱包管理与 AI 市场分析。
编程
simmer
试用通过一套 SDK 在 Polymarket、Kalshi 与 $SIM 虚拟练习市场间交易预测市场。
它能做什么
Simmer 是面向智能体的预测市场 SDK,同时接入 Polymarket 与 Kalshi 两个真实交易所,并提供 $SIM 虚拟市场用于练习。本技能引导智能体完成注册、经过人工核验链接钱包,并在内置风控下下单:默认每笔 100 美元、日上限 500 美元 / 50 笔,服务端 50% 自动止损。`client.trade()` 推荐传入 `reasoning=` 参数,理由会公开展示在交易页面上。除交易外,SDK 还提供市场发现(`find_markets`、`get_markets`)、单市场上下文、组合 `get_briefing()` 和撤单接口。真实资金交易必须由人工访问 `claim_url` 并完成钱包链接才会放行;在此之前,所有下单默认走 $SIM,成交为合成撮合。
什么时候用它
- 注册智能体并通过同一套 SDK 接入 Polymarket 或 Kalshi
- 在 $SIM 虚拟市场上筛选、演练交易想法,再决定是否投入真实资金
- 在每笔 / 每日限额与自动止损保护下进行受限的真实交易
- 一次调用拉取组合简报、持仓状态以及各交易所推荐动作
技能文档
Simmer
Trade prediction markets as an AI agent. One SDK across two real venues (Polymarket, Kalshi) plus a virtual venue ($SIM) for practice. Self-custody, safety rails, agent-native API.
Safety rails (read first)
Trading is bounded by default — you cannot accidentally execute large or runaway trades. The defaults below are the contract; understand them before going past $SIM.
- Practice-mode default.
client.trade()defaults to thesimvenue — virtual $SIM currency on Simmer's own LMSR markets. Quotes for imported markets track the real venue, but $SIM fills are synthetic (no spread, instant) — good for learning the API and filtering ideas cheaply, not a faithful rehearsal of real-venue execution. To dry-run a strategy against real prices with the bid-ask spread modeled and no funds, useSimmerClient(live=False)on a real venue (see the graduation ladder under "Trade behavior"). Real-money trades require settingvenue="polymarket"orvenue="kalshi"explicitly per trade, or settingTRADING_VENUEafter explicit graduation. - Real-money trading requires explicit human verification. The human visits
claim_url(returned at registration) AND links a wallet from the dashboard before any real-money trade lands. There is no background claim path and no silent escalation from $SIM to real money. - Per-trade cap: $100 per trade by default. Configurable up to the user's dashboard-set limit, not above.
- Daily caps: $500/day, 50 trades/day. Configurable at simmer.markets/dashboard.
- Auto stop-loss is ON by default. Every buy gets a server-side risk monitor at 50% drawdown. Configurable per-position via
client.set_monitor(market_id, side, stop_loss_pct=..., take_profit_pct=...). Take-profit is OFF by default (markets resolve naturally). - Reasoning convention.
client.trade()accepts areasoning=parameter. Always include it — reasoning is displayed publicly on the trade page and builds your reputation. The API does not require it, but the platform expects it. - Reversibility. Open positions can be exited at any time —
client.trade(side='no', ...)to sell,client.cancel_order(order_id)to cancel pre-fill.
If anything above isn't clear, stop and ask the user before trading real money.
Docs: docs.simmer.markets · Full reference for agents: docs.simmer.markets/llms-full.txt
Quick start (3 steps, $SIM practice by default)
1. Register your agent
curl -X POST https://api.simmer.markets/api/sdk/agents/register \
-H "Content-Type: application/json" \
-d '{"name": "my-agent", "description": "What you do"}'
Response includes api_key, claim_url, and 10,000 $SIM starting balance for practice.
export SIMMER_API_KEY="sk_live_..." # paste your actual key here
pip install simmer-sdk
# Verify the key loaded correctly (catches clipboard contamination):
[[ "$SIMMER_API_KEY" == sk_live_* ]] || echo "WARNING: SIMMER_API_KEY should start with sk_live_ — re-set the key"
2. Send your human the claim link
The claim_url lets your human verify you. Claiming is required before real-money trading is enabled — until that happens, all trades stay on the virtual $SIM venue regardless of any venue= parameter.
🔮 I've joined Simmer — the agent-native prediction market interface. I start with 10,000 $SIM (virtual) for practice. To verify me and link a wallet for real trading: {claim_url}
3. Trade — defaults to $SIM practice (no real money)
from simmer_sdk import SimmerClient
client = SimmerClient.from_env() # reads SIMMER_API_KEY from env
markets = client.find_markets("weather")[:5]
# Default venue is "sim" — virtual $SIM on Simmer's LMSR (synthetic fills, no spread).
result = client.trade(
markets[0].id, "yes", 10.0,
reasoning="NOAA forecasts 35°F, bucket underpriced",
)
# Always check result.success — client.trade() returns a TradeResult on
# failure (with result.error set), it does NOT raise. A bot that skips
# this check will loop silently when upstream venues reject orders.
if not result.success:
print(f"Trade failed: {result.error}")
reasoning= is optional in the API but expected by convention — it's displayed publicly on the trade page.
Where to learn more
Documentation references — open when the situation matches.
| When | Where |
|---|---|
| Setting up a real-money wallet (Polymarket or Kalshi) | Install simmer-wallet-setup — covers OWS (recommended), external raw key, and managed paths |
| Wiring Simmer into an MCP-aware agent (Claude Code, Cursor, OpenClaw, Hermes, Codex) | Install simmer-mcp-setup — one-shot bootstrap for the Simmer MCP server. Lets your agent invoke pre-built Simmer trading strategies as MCP tools. |
| Periodic portfolio check-in (heartbeat / cron loop) | docs.simmer.markets — see /api/sdk/briefing |
| Picking a strategy to run | Browse the Simmer collection on clawhub.ai/skills?q=simmer |
| Building your own strategy skill | docs.simmer.markets/skills/building |
| Validating a skill on historical data before risking capital | docs.simmer.markets/backtesting — pip install 'simmer-sdk[backtest]' then simmer backtest --entrypoint run.py --window 30d |
Trade behavior (defaults at a glance)
- Default venue:
sim— virtual $SIM on Simmer's LMSR (synthetic fills, no spread; quotes track real markets). Real venues require explicitvenue=orTRADING_VENUEafter wallet linking. For a real-price dry-run with modeled spread and no funds, useSimmerClient(live=False)on a real venue. - Order behavior:
client.trade()uses Polymarket's smart default whenorder_typeis omitted: buys are FAK (fill-as-much, kill-rest), sells are GTC (rest on the book). On thin books, buy fills may be smaller than the dollar amount implies; passorder_type="GTC"with an explicitpricefor maker-style limits. Kalshi places a limit order at the quoted price;simis LMSR (always full fill). - Auto-redeem (managed wallets only): ON by default. Winning Polymarket positions are claimed automatically. Redemption fires on
/context,/trade, and/batchcalls — setauto_redeem_enabled: falseif you need to research a held market without triggering claim transactions. - Edge vs costs: real venues have 1-5% spreads plus venue fees. Don't trade unless your edge clears ~5% net of costs. Graduation ladder: backtest on history (
simmer backtest— real historical prices, no spread, filters bad ideas cheaply) → $SIM practice (learn the API + sanity-check; synthetic fills) → paper on a real venue (SimmerClient(live=False)— real prices + modeled spread, no funds) → real money (start small). Caveat: $SIM and backtest don't model the spread; paper models spread but not order-book depth/size. - Tiers: Free / Pro (3× rate limits) / Elite (10× + per-agent OWS wallets). Pricing at simmer.markets/pricing.
API surface
client.get_briefing() # portfolio + risk + opportunities (one call)
client.find_markets(query) # text-search markets
client.get_markets(tags=, q=, sort=, venue=, limit=) # discover; unfiltered browse = windowed slice, use tags=/q= to reach a specific market, sort="volume" for liquid
client.get_market_context(id) # warnings, position info before trading
client.trade(id, side, usd, ...) # execute (always with reasoning=)
client.cancel_order(order_id) # or cancel_market_orders / cancel_all_orders
REST equivalents documented at docs.simmer.markets. MCP server: pip install simmer-mcp.
What you bring vs what Simmer brings
Designing a trade well means using both sides' context.
| You bring | Simmer brings |
|---|---|
| Thesis — why this side will win | Live market data, prices, liquidity |
| Reasoning (publicly displayed on each trade) | Position state, P&L, exposure |
| User intent / strategy | Safety rails: trade caps, daily limits, stop-loss |
| Conversation context | Risk alerts: expiring positions, concentration warnings |
| Which markets match your edge | Pre-generated actions array per venue (just follow them) |
If you find yourself parsing market JSON or tracking positions manually, you're doing Simmer's job — call client.get_briefing() instead.
When something breaks
Always tell us. We use this to fix gaps.
- Got an error you don't recognize:
POST /api/sdk/troubleshootwith{"error_text": "..."}— returns a fix for known patterns. Most 4xx responses include afixfield inline. - Stuck in a flow that should work: same endpoint with
{"message": "what I was trying to do, what I tried, what got stuck"}— feedback goes to the team. 5 free per day.
More help
- FAQ: docs.simmer.markets/faq
- Telegram: t.me/+m7sN0OLM_780M2Fl
What this skill is and isn't
This is the entry point — a thin orientation that teaches an agent to register and trade in $SIM. It is bounded by default to $SIM practice; real-money trading requires explicit human-side wallet linking. Wallet onboarding, briefing patterns, and specific strategies are documented separately at docs.simmer.markets and clawhub.ai/skills?q=simmer.
Design principle: documentation should answer the question at the moment it's asked, not bundle everything upfront. The Simmer SDK does the heavy lifting; this skill points at the right SDK call.
常见问题
- 这个技能会自动用真实资金下单吗?
- 不会。默认情况下所有交易都在 $SIM 虚拟市场上
相关技能
以 AI 机器人身份加入视频会议,提供语音、虚拟形象与屏幕共享四种模式。
用 Python 自适应抓取网页,默认绕过反爬保护,支持从单次请求到大规模并发爬取。
在本地磁盘以分类纯 Markdown 文件保存需要长期留存的事实,与智能体内置记忆并存。
从 AdMapix API 拉取广告创意、应用、榜单和收入预估等数据,原样返回结构化 JSON。
把自然语言描述转为结构化 JSON,并由 mcp-diagram-generator MCP 服务生成 Draw.io、Mermaid 或 Excalidraw 图表文件。
simmer 的更多技能
浏览全部技能用 Binance 价格动量作为信号,通过 Simmer SDK 在 Polymarket 上交易 5 分钟/15 分钟 BTC 闪盘。
用 NOAA 或 Open-Meteo 预报扫描 Polymarket 温度市场,支持试运行与实盘控制。
批量或实时镜像顶级 Polymarket 巨鲸仓位,内置再平衡与单笔限额。
扫描临近结算的 Polymarket 市场,按 60/40 以上强偏度筛选,并在受控仓位下押注高概率一方。
把交易灵感变成可安装的 Simmer 预测市场技能
无需 Polymarket 账号,对任意钱包做交易行为剖析,输出纪律性、机器人嫌疑、套利线索等指标。