← 返回 Skills 市场
simmer

Preflight

作者 Simmer.Markets · GitHub ↗ · v0.3.0 · MIT-0
cross-platform ✓ 安全检测通过
14
总下载
0
收藏
0
当前安装
1
版本数
在 OpenClaw 中安装
/install simmer-preflight
功能描述
Pre-trade readiness check for autonomous agents. One call returns wallet identity, venue status, spendable balance, open exposure, and a structured ok_to_tra...
使用说明 (SKILL.md)

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

Field Type Description
client_preflight_id str UUID for your trade ledger — log before every order
agent_id str | None Agent UUID from /api/sdk/agents/me
tier str | None Account tier: "free" / "pro" / "elite"
resolved_venue str Normalised venue: "sim" / "polymarket" / "kalshi"
execution_wallet str | None EOA that signs trades (per-agent OWS wallet for Elite per-agent callers)
deposit_wallet str | None Deposit wallet address (DW cohort only; None for Cohort A)
signer_status str "ows" / "external_key" / "managed"
spendable_balance float | None Venue balance: pUSD/USDC (real) or $SIM (sim)
gas_balance float | None POL / SOL for gas — None in v0 (deferred to v1)
open_exposure_total float Sum of current_value across open positions (real venues only when cap is USD)
exposure_cap_usd float The cap you passed in
planned_amount float The planned trade size you passed in
would_exceed_cap bool True if open_exposure_total + planned_amount > exposure_cap_usd
pending_alerts list[dict] Risk alerts from briefing (normalised to {message: str})
ok_to_trade bool True if no blockers
blockers list[str] Blocker codes (see below)
warnings list[str] Non-blocking advisories (fetch failures, skipped checks)

Blocker codes (v0)

Code Meaning Fix
EXPOSURE_CAP_EXCEEDED open_exposure_total + planned_amount > exposure_cap_usd Wait for existing positions to resolve, or raise your cap
WALLET_UNVERIFIED Real venue requested but real_trading_enabled is False, or no wallet configured Claim agent + link wallet in dashboard
VENUE_UNSUPPORTED Venue string not recognised Use "sim", "polymarket", or "kalshi"
INSUFFICIENT_GAS Gas signal detected in risk_alerts (proxy only in v0) Fund wallet with POL / SOL
EXPOSURE_UNKNOWN Real venue + active cap, but positions fetch failed — fail-closed Check 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: \x3Cerror> — balance / alerts unknown; check connectivity
  • positions_fetch_failed: \x3Cerror> — exposure may be understated; check rate limits
  • identity_fetch_failed: \x3Cerror> — 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.

Links

安全使用建议
Install only if you trust Simmer with the API key and account data needed for wallet, balance, and position checks. The skill itself is read-only, but it is meant to sit immediately before real-money trades, so verify venue, exposure cap, and any separate trading code before relying on ok_to_trade.
能力标签
cryptorequires-walletrequires-sensitive-credentials
能力评估
Purpose & Capability
The stated purpose is pre-trade readiness checking, and the artifacts consistently implement that by calling Simmer SDK preflight to gather identity, venue, balance, exposure, warnings, and blockers without placing trades.
Instruction Scope
The documentation includes example code that may proceed to client.trade after ok_to_trade, but the shipped runtime script only performs the preflight check; downstream trading remains the user's responsibility.
Install Mechanism
Installation requirements are disclosed as SIMMER_API_KEY and simmer-sdk>=0.17.13, with no hidden install hooks, cron schedule, or autostart behavior declared.
Credentials
The API key and wallet/account data access are sensitive, but they are clearly disclosed and proportionate to checking readiness for real-money trading.
Persistence & Privilege
clawhub.json sets cron to null and autostart to false; the script has no persistence, privilege escalation, file mutation, or background worker behavior beyond an explicit automaton entrypoint.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install simmer-preflight
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /simmer-preflight 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v0.3.0
- New version 0.3.0 adds detailed documentation outlining how to use the simmer-preflight readiness check before trades. - Describes the single-call API, returning wallet identity, venue status, spendable balance, open exposure, and an ok_to_trade verdict. - Clarifies when and how often to use preflight, including examples and use cases for safe automated trading. - Documents all fields returned in the result, possible blocker codes, and distinctions between warnings and blockers. - Explains preflight’s read-only nature, API usage cadence, and current limitations (e.g., gas balance is not returned). - Provides links to API reference and wallet guide for further details.
元数据
Slug simmer-preflight
版本 0.3.0
许可证 MIT-0
累计安装 0
当前安装数 0
历史版本数 1
常见问题

Preflight 是什么?

Pre-trade readiness check for autonomous agents. One call returns wallet identity, venue status, spendable balance, open exposure, and a structured ok_to_tra... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 14 次。

如何安装 Preflight?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install simmer-preflight」即可一键安装,无需额外配置。

Preflight 是免费的吗?

是的,Preflight 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。

Preflight 支持哪些平台?

Preflight 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 Preflight?

由 Simmer.Markets(@simmer)开发并维护,当前版本 v0.3.0。

💬 留言讨论