{"id":"25f12604-da58-4ee6-9789-4f2e758a095f","entityType":"agent","slug":"clawhub-simmer-simmer-preflight","name":"simmer-preflight","canonicalUrl":"https://www.xpersona.co/agent/clawhub-simmer-simmer-preflight","canonicalPath":"/agent/clawhub-simmer-simmer-preflight","generatedAt":"2026-10-14T13:57:22.770Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T23:29:45.924Z","emptyReason":null},"description":"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. Live real-venue trades auto-run this check and refuse when ok_to_trade is False. Skill: simmer-preflight Owner: simmer Summary: 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. Live real-venue trades auto-run this check and refuse when ok_to_trade is False. Tags: latest:0.3.6 Version history: v0.3.6 | 2026-09-22T04:14:01.101Z | user Refuses live trades without a preflight ok_to_","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 976 downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17eez0vajry6hjb97y9mbtv2s85wekv:simmer-preflight","sourceUrl":"https://clawhub.ai/simmer/simmer-preflight","homepage":"https://clawhub.ai/simmer/skills/simmer-preflight","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/simmer/simmer-preflight","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/simmer/skills/simmer-preflight","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Pre-trade readiness check for autonomous agents. One call returns wallet identity, venue status, spendable balance, open exposure, and a structured ok_to_trade "},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T23:29:45.924Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T23:29:45.924Z","emptyReason":null},"stars":null,"forks":null,"downloads":976,"likes":null,"task":null,"library":null,"packageName":null,"latestVersion":"0.3.6","tractionLabel":"976 downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T23:29:45.862Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T23:29:45.924Z","lastCrawledAt":"2026-10-11T23:29:45.862Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T23:29:45.862Z","lastVerifiedAt":null,"highlights":[{"version":"0.3.6","createdAt":"2026-09-22T04:14:01.101Z","changelog":"Refuses live trades without a preflight ok_to_trade; exits 2 with an install hint when simmer-sdk is below the floor; EXPOSURE_CAP copy aligned.","fileCount":5,"zipByteSize":8572},{"version":"0.3.2","createdAt":"2026-09-04T23:43:14.465Z","changelog":"- Version bump to 0.3.2. - Marked skill as read-only in metadata. - Updated internal version fields in SKILL.md. - Removed redundant skill-card.md file.","fileCount":7,"zipByteSize":13610},{"version":"0.3.1","createdAt":"2026-05-24T14:59:25.680Z","changelog":"Rename from preflight → simmer-preflight (follows simmer-<tool> naming convention). Fix displayName to Simmer Preflight.","fileCount":7,"zipByteSize":13590},{"version":"0.3.0","createdAt":"2026-05-24T07:35:17.995Z","changelog":"- 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.","fileCount":6,"zipByteSize":12373}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17eez0vajry6hjb97y9mbtv2s85wekv:simmer-preflight","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-simmer-simmer-preflight/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-simmer-simmer-preflight/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-simmer-simmer-preflight/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-simmer-simmer-preflight/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-simmer-simmer-preflight/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-simmer-simmer-preflight/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-14T13:57:22.769Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-simmer-simmer-preflight/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-simmer-simmer-preflight/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-simmer-simmer-preflight/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-simmer-simmer-preflight/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T23:29:45.924Z","emptyReason":null},"readme":"Skill: simmer-preflight\n\nOwner: simmer\n\nSummary: 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. Live real-venue trades auto-run this check and refuse when ok_to_trade is False.\n\nTags: latest:0.3.6\n\nVersion history:\n\nv0.3.6 | 2026-09-22T04:14:01.101Z | user\n\nRefuses live trades without a preflight ok_to_trade; exits 2 with an install hint when simmer-sdk is below the floor; EXPOSURE_CAP copy aligned.\n\nv0.3.2 | 2026-09-04T23:43:14.465Z | auto\n\n- Version bump to 0.3.2.\n- Marked skill as read-only in metadata.\n- Updated internal version fields in SKILL.md.\n- Removed redundant skill-card.md file.\n\nv0.3.1 | 2026-05-24T14:59:25.680Z | user\n\nRename from preflight → simmer-preflight (follows simmer-<tool> naming convention). Fix displayName to Simmer Preflight.\n\nv0.3.0 | 2026-05-24T07:35:17.995Z | auto\n\n- New version 0.3.0 adds detailed documentation outlining how to use the simmer-preflight readiness check before trades.\n- Describes the single-call API, returning wallet identity, venue status, spendable balance, open exposure, and an ok_to_trade verdict.\n- Clarifies when and how often to use preflight, including examples and use cases for safe automated trading.\n- Documents all fields returned in the result, possible blocker codes, and distinctions between warnings and blockers.\n- Explains preflight’s read-only nature, API usage cadence, and current limitations (e.g., gas balance is not returned).\n- Provides links to API reference and wallet guide for further details.\n\nArchive index:\n\nArchive v0.3.6: 5 files, 8572 bytes\n\nFiles: clawhub.json (930b), preflight.py (6175b), skill-card.md (2197b), SKILL.md (9484b), _meta.json (135b)\n\nFile v0.3.6:SKILL.md\n\n---\nname: simmer-preflight\nversion: \"0.3.6\"\npublished: true\nread_only: true\ndescription: 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. Live real-venue trades auto-run this check and refuse when ok_to_trade is False.\nmetadata:\n  author: \"Simmer (@simmer_markets)\"\n  version: \"0.3.6\"\n  displayName: Simmer Preflight\n  difficulty: beginner\n  primaryEnv: SIMMER_API_KEY\n  envVars:\n    - name: SIMMER_API_KEY\n      required: true\n      description: \"Your Simmer SDK API key.\"\n---\n\n# Simmer Preflight\n\nLive real-money trades now **enforce** this check. `client.trade(..., dry_run=False)` and `client.place_combo(..., dry_run=False)` on a `live=True` client against a real venue (`polymarket` / `kalshi`) auto-run `preflight()` and refuse if `ok_to_trade` is False, surfacing the blocker codes. The auto-gate's exposure cap is opt-in (`EXPOSURE_CAP_USD` set → enforced; unset → cap disabled) and sells are exempt from cap math so an over-cap book can still reduce exposure. Wallet / venue / gas blockers still run. Paper, `venue=\"sim\"`, and `dry_run=True` are unchanged. One-release migrate valve: `skip_preflight=True` or `SIMMER_SKIP_PREFLIGHT=1` (deprecation warning). MCP `simmer_trade` uses the same live gate; `SIMMER_MCP_ALLOW_LIVE` is still required and is not a replacement.\n\nCall `client.preflight()` yourself when you want the full result (wallet, exposure, `client_preflight_id`) before you size or submit. One call returns:\n\n- **Who you are**: agent ID, tier, venue resolved from your API key context\n- **Which wallet will sign**: execution wallet, deposit wallet, signer mode (OWS / external key / managed)\n- **Spendable balance**: venue-specific USDC or $SIM balance from the briefing\n- **Open exposure**: sum of `current_value` across your existing positions (real venues only for USD cap)\n- **Cap check**: whether `planned_amount + open_exposure_total` exceeds your `exposure_cap_usd`\n- **Risk alerts**: any briefing risk signals (concentration, expiry, reliability)\n- **ok_to_trade**: a single boolean — True if no blockers\n\n## When to use\n\nCall preflight before every automated trade, especially:\n\n- Before the first real-money order of a run\n- Before scaling into a position beyond your initial size\n- When your heartbeat wakes up after a long sleep (state may have changed)\n\nDo not call it on every polling tick — it makes 3 API calls. Once per trade intent is correct.\n\n## Call it\n\n```python\nfrom simmer_sdk import SimmerClient\n\nclient = SimmerClient.from_env(venue=\"polymarket\")\n\nresult = client.preflight(\n    venue=\"polymarket\",       # venue to check (defaults to client.venue)\n    planned_amount=5.0,       # USDC you plan to spend on this trade\n    exposure_cap_usd=100.0,   # your total cross-venue exposure limit\n)\n\nif not result.ok_to_trade:\n    print(f\"Preflight blocked: {result.blockers}\")\n    # e.g. [\"EXPOSURE_CAP_EXCEEDED\"]\n    return\n\n# Log for audit\nledger.record({\n    \"preflight_id\": result.client_preflight_id,\n    \"ok\": result.ok_to_trade,\n    \"exposure_before\": result.open_exposure_total,\n    \"planned\": result.planned_amount,\n})\n```\n\n## Result fields\n\n| Field | Type | Description |\n|---|---|---|\n| `client_preflight_id` | str | UUID for your trade ledger — log before every order |\n| `agent_id` | str \\| None | Agent UUID from `/api/sdk/agents/me` |\n| `tier` | str \\| None | Account tier: \"free\" / \"pro\" / \"elite\" |\n| `resolved_venue` | str | Normalised venue: \"sim\" / \"polymarket\" / \"kalshi\" |\n| `execution_wallet` | str \\| None | EOA that signs trades (per-agent OWS wallet for Elite per-agent callers) |\n| `deposit_wallet` | str \\| None | Deposit wallet address (DW cohort only; None for Cohort A) |\n| `signer_status` | str | \"ows\" / \"external_key\" / \"managed\" |\n| `spendable_balance` | float \\| None | Venue balance: pUSD/USDC (real) or $SIM (sim) |\n| `gas_balance` | float \\| None | POL / SOL for gas — None in v0 (deferred to v1) |\n| `open_exposure_total` | float | Sum of `current_value` across open positions (real venues only when cap is USD) |\n| `exposure_cap_usd` | float | The cap you passed in |\n| `planned_amount` | float | The planned trade size you passed in |\n| `would_exceed_cap` | bool | True if `open_exposure_total + planned_amount > exposure_cap_usd` |\n| `pending_alerts` | list[dict] | Risk alerts from briefing (normalised to `{message: str}`) |\n| `ok_to_trade` | bool | **True if no blockers** |\n| `blockers` | list[str] | Blocker codes (see below) |\n| `warnings` | list[str] | Non-blocking advisories (fetch failures, skipped checks) |\n\n## Blocker codes (v0)\n\n| Code | Meaning | Fix |\n|---|---|---|\n| `EXPOSURE_CAP_EXCEEDED` | `open_exposure_total + planned_amount > exposure_cap_usd` | Wait for existing positions to resolve, or raise your cap |\n| `WALLET_UNVERIFIED` | Real venue requested but `real_trading_enabled` is False, or no wallet configured | Claim agent + link wallet in dashboard |\n| `VENUE_UNSUPPORTED` | Venue string not recognised | Use \"sim\", \"polymarket\", or \"kalshi\" |\n| `INSUFFICIENT_GAS` | Structured risk_alert `code` is `INSUFFICIENT_GAS` (v0 proxy; no on-chain query) | Fund wallet with POL / SOL |\n| `EXPOSURE_UNKNOWN` | Real venue + active cap, but positions fetch failed — fail-closed | Check connectivity or set `exposure_cap_usd=0` to disable cap temporarily |\n\nBlockers are additive — all blocking conditions are reported, not just the first.\n\n## Per-agent caller (Elite OWS)\n\nFor 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.\n\n```python\nresult = client.preflight(venue=\"polymarket\", planned_amount=5, exposure_cap_usd=100)\nprint(result.execution_wallet)   # 0xYourAgentOWS... (not parent user's wallet)\nprint(result.deposit_wallet)     # 0xYourAgentDW... (per-agent DW if activated)\n```\n\n## Exposure calculation\n\n`open_exposure_total` sums `current_value` from `/api/sdk/positions`:\n\n- For **real venues** (polymarket, kalshi): sums non-sim positions in USDC.\n- For **sim venue**: sums sim positions in $SIM.\n- Positions with `venue: null` / missing venue count as sim (virtual), not real USDC.\n\nFor Kalshi, `real_trading_enabled` is a client-side claim check (`WALLET_UNVERIFIED` if false). The server gates only Polymarket on this flag — unclaimed Kalshi agents are blocked in the SDK/MCP preflight, not by the Kalshi place path.\n\n$SIM positions are never included in a USD cap check — they use virtual currency.\n\n## warnings[] vs blockers[]\n\n`blockers` stop trading. `warnings` are informational — common examples:\n\n- `briefing_fetch_failed: <error>` — balance / alerts unknown; check connectivity\n- `positions_fetch_failed: <error>` — exposure may be understated; check rate limits\n- `identity_fetch_failed: <error>` — agent ID / tier unknown; API key may be invalid\n\nIf you see warnings, log them. Fetch failures on individual endpoints are gracefully handled — preflight returns best-effort data rather than throwing.\n\n## Pre-trade pattern (cookbook)\n\n```python\nimport os\nfrom simmer_sdk import SimmerClient\n\nclient = SimmerClient.from_env(venue=\"polymarket\")\n\ndef safe_trade(market_id: str, side: str, amount: float):\n    # Live auto-gate: EXPOSURE_CAP_USD is opt-in (unset = no cap, no $100 default).\n    # Manual preflight() still accepts an explicit exposure_cap_usd.\n    cap_raw = os.environ.get(\"EXPOSURE_CAP_USD\")\n    if cap_raw:\n        pf = client.preflight(\n            venue=\"polymarket\",\n            planned_amount=amount,\n            exposure_cap_usd=float(cap_raw),\n        )\n    else:\n        # No env cap: live trade() will not enforce one. This explicit\n        # preflight() call still uses the method default (exposure_cap_usd=100).\n        pf = client.preflight(\n            venue=\"polymarket\",\n            planned_amount=amount,\n        )\n    if not pf.ok_to_trade:\n        print(f\"Preflight blocked ({pf.blockers}), skipping trade\")\n        return None\n    if pf.warnings:\n        print(f\"Preflight warnings: {pf.warnings}\")\n\n    # Log preflight before order submission\n    print(f\"Preflight OK — id={pf.client_preflight_id} \"\n          f\"exposure={pf.open_exposure_total:.2f}+{amount:.2f}/{pf.exposure_cap_usd}\")\n\n    return client.trade(market_id=market_id, side=side, amount=amount)\n```\n\n## Cadence\n\nCall 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.\n\n## Scope\n\nPreflight 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).\n\n## v0 limitations\n\n- `gas_balance` is always `None` — on-chain RPC not available in the SDK client. Use the dashboard to verify POL / SOL balance.\n- `INSUFFICIENT_GAS` is only detected from a structured risk_alert `code` of `INSUFFICIENT_GAS` — not from free-text `gas` / `pol` substrings, and not from an on-chain query.\n- Server-side `preflight_id` (stable, storable) deferred to v1.\n- MCP `simmer_preflight` is available; live `simmer_trade` now enforces the same `ok_to_trade` gate.\n\n## Links\n\n- API reference: [docs.simmer.markets/api/preflight](https://docs.simmer.markets)\n- Wallet cohort guide: [docs.simmer.markets/wallets](https://docs.simmer.markets)\n\nFile v0.3.6:_meta.json\n\n{\n  \"ownerId\": \"kn7axnp7bzqsf5fkx0z8px7han7zyq1x\",\n  \"slug\": \"simmer-preflight\",\n  \"version\": \"0.3.6\",\n  \"publishedAt\": 1790050441101\n}\n\nFile v0.3.6:skill-card.md\n\n## Description:\n\nPre-trade readiness check for autonomous agents that returns wallet identity, venue status, spendable balance, open exposure, and an ok_to_trade verdict before live real-venue trades proceed.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[simmer](https://clawhub.ai/user/simmer)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and autonomous-agent operators use this skill before automated trade submission to check account readiness, wallet identity, balance, exposure, and blocking conditions. It supports pre-trade audit logging and fail-closed handling when a real-venue trade is not ready to proceed.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill requires a Simmer API key and reports trading-account readiness data, including wallet, balance, exposure, blockers, and warnings.\n\nMitigation: Install only from a trusted publisher, provide the API key through the SIMMER_API_KEY environment variable, and avoid exposing JSON or terminal output where account details should remain private.\n\nRisk: Preflight checks depend on current account, venue, and position data, so stale or failed checks can affect trade readiness decisions.\n\nMitigation: Run the check once per trade intent, inspect blockers and warnings, and treat configuration or fetch failures as reasons to pause live trading until resolved.\n\n## Reference(s):\n\n- [Simmer API and wallet documentation](https://docs.simmer.markets)\n- [ClawHub skill page](https://clawhub.ai/simmer/skills/simmer-preflight)\n\n## Skill Output:\n\n**Output Type(s):** [text, JSON, guidance]\n\n**Output Format:** [Human-readable terminal output or structured JSON]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Uses exit codes 0, 1, and 2 to indicate pass, blocked, or configuration error.]\n\n## Skill Version(s):\n\n0.3.6 (source: server release and skill frontmatter)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v0.3.6:clawhub.json\n\n{\n  \"emoji\": \"✅\",\n  \"primaryEnv\": \"SIMMER_API_KEY\",\n  \"requires\": {\n    \"env\": [\n      \"SIMMER_API_KEY\"\n    ],\n    \"pip\": [\n      \"simmer-sdk>=0.17.13\"\n    ]\n  },\n  \"envVars\": [\n    {\n      \"name\": \"SIMMER_API_KEY\",\n      \"required\": true,\n      \"description\": \"Your Simmer SDK API key — get from simmer.markets/dashboard\"\n    },\n    {\n      \"name\": \"TRADING_VENUE\",\n      \"required\": false,\n      \"description\": \"Default trading venue (sim / polymarket / kalshi). Overridden by the venue argument to client.preflight().\"\n    },\n    {\n      \"name\": \"EXPOSURE_CAP_USD\",\n      \"required\": false,\n      \"description\": \"Optional live auto-gate cap in USD across real venues. Set to enforce; unset disables the cap (no $100 default). Manual client.preflight() still accepts an explicit exposure_cap_usd.\"\n    }\n  ],\n  \"cron\": null,\n  \"autostart\": false,\n  \"automaton\": {\n    \"managed\": true,\n    \"entrypoint\": \"preflight.py\"\n  }\n}\n\nArchive v0.3.2: 7 files, 13610 bytes\n\nFiles: clawhub.json (832b), preflight.py (5368b), skill-card.md (2272b), SKILL.md (7727b), tests/__init__.py (0b), tests/test_preflight.py (32913b), _meta.json (135b)\n\nFile v0.3.2:SKILL.md\n\n---\nname: simmer-preflight\nversion: \"0.3.2\"\npublished: true\nread_only: true\ndescription: 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.\nmetadata:\n  author: \"Simmer (@simmer_markets)\"\n  version: \"0.3.2\"\n  displayName: Simmer Preflight\n  difficulty: beginner\n  primaryEnv: SIMMER_API_KEY\n  envVars:\n    - name: SIMMER_API_KEY\n      required: true\n      description: \"Your Simmer SDK API key.\"\n---\n\n# Simmer Preflight\n\nRun `client.preflight()` before every real-money trade. One call returns:\n\n- **Who you are**: agent ID, tier, venue resolved from your API key context\n- **Which wallet will sign**: execution wallet, deposit wallet, signer mode (OWS / external key / managed)\n- **Spendable balance**: venue-specific USDC or $SIM balance from the briefing\n- **Open exposure**: sum of `current_value` across your existing positions (real venues only for USD cap)\n- **Cap check**: whether `planned_amount + open_exposure_total` exceeds your `exposure_cap_usd`\n- **Risk alerts**: any briefing risk signals (concentration, expiry, reliability)\n- **ok_to_trade**: a single boolean — True if no blockers\n\n## When to use\n\nCall preflight before every automated trade, especially:\n\n- Before the first real-money order of a run\n- Before scaling into a position beyond your initial size\n- When your heartbeat wakes up after a long sleep (state may have changed)\n\nDo not call it on every polling tick — it makes 3 API calls. Once per trade intent is correct.\n\n## Call it\n\n```python\nfrom simmer_sdk import SimmerClient\n\nclient = SimmerClient.from_env(venue=\"polymarket\")\n\nresult = client.preflight(\n    venue=\"polymarket\",       # venue to check (defaults to client.venue)\n    planned_amount=5.0,       # USDC you plan to spend on this trade\n    exposure_cap_usd=100.0,   # your total cross-venue exposure limit\n)\n\nif not result.ok_to_trade:\n    print(f\"Preflight blocked: {result.blockers}\")\n    # e.g. [\"EXPOSURE_CAP_EXCEEDED\"]\n    return\n\n# Log for audit\nledger.record({\n    \"preflight_id\": result.client_preflight_id,\n    \"ok\": result.ok_to_trade,\n    \"exposure_before\": result.open_exposure_total,\n    \"planned\": result.planned_amount,\n})\n```\n\n## Result fields\n\n| Field | Type | Description |\n|---|---|---|\n| `client_preflight_id` | str | UUID for your trade ledger — log before every order |\n| `agent_id` | str \\| None | Agent UUID from `/api/sdk/agents/me` |\n| `tier` | str \\| None | Account tier: \"free\" / \"pro\" / \"elite\" |\n| `resolved_venue` | str | Normalised venue: \"sim\" / \"polymarket\" / \"kalshi\" |\n| `execution_wallet` | str \\| None | EOA that signs trades (per-agent OWS wallet for Elite per-agent callers) |\n| `deposit_wallet` | str \\| None | Deposit wallet address (DW cohort only; None for Cohort A) |\n| `signer_status` | str | \"ows\" / \"external_key\" / \"managed\" |\n| `spendable_balance` | float \\| None | Venue balance: pUSD/USDC (real) or $SIM (sim) |\n| `gas_balance` | float \\| None | POL / SOL for gas — None in v0 (deferred to v1) |\n| `open_exposure_total` | float | Sum of `current_value` across open positions (real venues only when cap is USD) |\n| `exposure_cap_usd` | float | The cap you passed in |\n| `planned_amount` | float | The planned trade size you passed in |\n| `would_exceed_cap` | bool | True if `open_exposure_total + planned_amount > exposure_cap_usd` |\n| `pending_alerts` | list[dict] | Risk alerts from briefing (normalised to `{message: str}`) |\n| `ok_to_trade` | bool | **True if no blockers** |\n| `blockers` | list[str] | Blocker codes (see below) |\n| `warnings` | list[str] | Non-blocking advisories (fetch failures, skipped checks) |\n\n## Blocker codes (v0)\n\n| Code | Meaning | Fix |\n|---|---|---|\n| `EXPOSURE_CAP_EXCEEDED` | `open_exposure_total + planned_amount > exposure_cap_usd` | Wait for existing positions to resolve, or raise your cap |\n| `WALLET_UNVERIFIED` | Real venue requested but `real_trading_enabled` is False, or no wallet configured | Claim agent + link wallet in dashboard |\n| `VENUE_UNSUPPORTED` | Venue string not recognised | Use \"sim\", \"polymarket\", or \"kalshi\" |\n| `INSUFFICIENT_GAS` | Gas signal detected in risk_alerts (proxy only in v0) | Fund wallet with POL / SOL |\n| `EXPOSURE_UNKNOWN` | Real venue + active cap, but positions fetch failed — fail-closed | Check connectivity or set `exposure_cap_usd=0` to disable cap temporarily |\n\nBlockers are additive — all blocking conditions are reported, not just the first.\n\n## Per-agent caller (Elite OWS)\n\nFor 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.\n\n```python\nresult = client.preflight(venue=\"polymarket\", planned_amount=5, exposure_cap_usd=100)\nprint(result.execution_wallet)   # 0xYourAgentOWS... (not parent user's wallet)\nprint(result.deposit_wallet)     # 0xYourAgentDW... (per-agent DW if activated)\n```\n\n## Exposure calculation\n\n`open_exposure_total` sums `current_value` from `/api/sdk/positions`:\n\n- For **real venues** (polymarket, kalshi): sums non-sim positions in USDC.\n- For **sim venue**: sums sim positions in $SIM.\n\n$SIM positions are never included in a USD cap check — they use virtual currency.\n\n## warnings[] vs blockers[]\n\n`blockers` stop trading. `warnings` are informational — common examples:\n\n- `briefing_fetch_failed: <error>` — balance / alerts unknown; check connectivity\n- `positions_fetch_failed: <error>` — exposure may be understated; check rate limits\n- `identity_fetch_failed: <error>` — agent ID / tier unknown; API key may be invalid\n\nIf you see warnings, log them. Fetch failures on individual endpoints are gracefully handled — preflight returns best-effort data rather than throwing.\n\n## Pre-trade pattern (cookbook)\n\n```python\nimport os\nfrom simmer_sdk import SimmerClient\n\nEXPOSURE_CAP = float(os.environ.get(\"EXPOSURE_CAP_USD\", \"100\"))\n\nclient = SimmerClient.from_env(venue=\"polymarket\")\n\ndef safe_trade(market_id: str, side: str, amount: float):\n    pf = client.preflight(\n        venue=\"polymarket\",\n        planned_amount=amount,\n        exposure_cap_usd=EXPOSURE_CAP,\n    )\n    if not pf.ok_to_trade:\n        print(f\"Preflight blocked ({pf.blockers}), skipping trade\")\n        return None\n    if pf.warnings:\n        print(f\"Preflight warnings: {pf.warnings}\")\n\n    # Log preflight before order submission\n    print(f\"Preflight OK — id={pf.client_preflight_id} \"\n          f\"exposure={pf.open_exposure_total:.2f}+{amount:.2f}/{EXPOSURE_CAP}\")\n\n    return client.trade(market_id=market_id, side=side, amount=amount)\n```\n\n## Cadence\n\nCall 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.\n\n## Scope\n\nPreflight 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).\n\n## v0 limitations\n\n- `gas_balance` is always `None` — on-chain RPC not available in the SDK client. Use the dashboard to verify POL / SOL balance.\n- `INSUFFICIENT_GAS` is only detected if the briefing risk_alerts mention gas explicitly — not from an on-chain query.\n- Server-side `preflight_id` (stable, storable) deferred to v1.\n- MCP tool exposure deferred to v1.\n\n## Links\n\n- API reference: [docs.simmer.markets/api/preflight](https://docs.simmer.markets)\n- Wallet cohort guide: [docs.simmer.markets/wallets](https://docs.simmer.markets)\n\nFile v0.3.2:_meta.json\n\n{\n  \"ownerId\": \"kn7axnp7bzqsf5fkx0z8px7han7zyq1x\",\n  \"slug\": \"simmer-preflight\",\n  \"version\": \"0.3.2\",\n  \"publishedAt\": 1788565394465\n}\n\nFile v0.3.2:skill-card.md\n\n## Description:\n\nPre-trade readiness check for autonomous agents. One call returns wallet identity, venue status, spendable balance, open exposure, and a structured ok_to_trade verdict.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[simmer](https://clawhub.ai/user/simmer)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and autonomous trading agents use this skill before real-money Simmer, Polymarket, or Kalshi trades to check wallet identity, venue readiness, spendable balance, open exposure, risk alerts, and blocker codes.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill requires a Simmer API key and reports account, wallet, balance, exposure, and position readiness information.\n\nMitigation: Install only from the server-resolved simmer publisher profile and use a read-only or least-privilege Simmer API key where available.\n\nRisk: The skill depends on the third-party simmer-sdk package with a lower-bound version requirement.\n\nMitigation: Pin and review the simmer-sdk version before use in a real-money trading workflow.\n\nRisk: Gas readiness is limited in v0 because gas_balance is not queried on-chain and insufficient gas is detected only through briefing risk alerts.\n\nMitigation: Verify POL or SOL gas balance in the Simmer dashboard before relying on the preflight result for live venue trading.\n\n## Reference(s):\n\n- [Simmer Preflight skill page](https://clawhub.ai/simmer/skills/simmer-preflight)\n- [Simmer API documentation](https://docs.simmer.markets)\n- [Simmer publisher profile](https://clawhub.ai/user/simmer)\n\n## Skill Output:\n\n**Output Type(s):** [text, JSON, shell commands, configuration, guidance]\n\n**Output Format:** [Human-readable CLI summary or JSON object]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Exit codes distinguish ok_to_trade, blocked, and configuration-error outcomes.]\n\n## Skill Version(s):\n\n0.3.2 (source: frontmatter and server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v0.3.2:clawhub.json\n\n{\n  \"emoji\": \"✅\",\n  \"primaryEnv\": \"SIMMER_API_KEY\",\n  \"requires\": {\n    \"env\": [\n      \"SIMMER_API_KEY\"\n    ],\n    \"pip\": [\n      \"simmer-sdk>=0.17.13\"\n    ]\n  },\n  \"envVars\": [\n    {\n      \"name\": \"SIMMER_API_KEY\",\n      \"required\": true,\n      \"description\": \"Your Simmer SDK API key — get from simmer.markets/dashboard\"\n    },\n    {\n      \"name\": \"TRADING_VENUE\",\n      \"required\": false,\n      \"description\": \"Default trading venue (sim / polymarket / kalshi). Overridden by the venue argument to client.preflight().\"\n    },\n    {\n      \"name\": \"EXPOSURE_CAP_USD\",\n      \"required\": false,\n      \"description\": \"Maximum total open exposure in USD across real venues. Defaults to 100.0 if not set.\"\n    }\n  ],\n  \"cron\": null,\n  \"autostart\": false,\n  \"automaton\": {\n    \"managed\": true,\n    \"entrypoint\": \"preflight.py\"\n  }\n}\n\nArchive v0.3.1: 7 files, 13590 bytes\n\nFiles: clawhub.json (832b), preflight.py (5359b), skill-card.md (2386b), SKILL.md (7711b), tests/__init__.py (0b), tests/test_preflight.py (32913b), _meta.json (135b)\n\nFile v0.3.1:SKILL.md\n\n---\nname: simmer-preflight\nversion: \"0.3.1\"\npublished: true\ndescription: 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.\nmetadata:\n  author: \"Simmer (@simmer_markets)\"\n  version: \"0.3.1\"\n  displayName: Simmer Preflight\n  difficulty: beginner\n  primaryEnv: SIMMER_API_KEY\n  envVars:\n    - name: SIMMER_API_KEY\n      required: true\n      description: \"Your Simmer SDK API key.\"\n---\n\n# Simmer Preflight\n\nRun `client.preflight()` before every real-money trade. One call returns:\n\n- **Who you are**: agent ID, tier, venue resolved from your API key context\n- **Which wallet will sign**: execution wallet, deposit wallet, signer mode (OWS / external key / managed)\n- **Spendable balance**: venue-specific USDC or $SIM balance from the briefing\n- **Open exposure**: sum of `current_value` across your existing positions (real venues only for USD cap)\n- **Cap check**: whether `planned_amount + open_exposure_total` exceeds your `exposure_cap_usd`\n- **Risk alerts**: any briefing risk signals (concentration, expiry, reliability)\n- **ok_to_trade**: a single boolean — True if no blockers\n\n## When to use\n\nCall preflight before every automated trade, especially:\n\n- Before the first real-money order of a run\n- Before scaling into a position beyond your initial size\n- When your heartbeat wakes up after a long sleep (state may have changed)\n\nDo not call it on every polling tick — it makes 3 API calls. Once per trade intent is correct.\n\n## Call it\n\n```python\nfrom simmer_sdk import SimmerClient\n\nclient = SimmerClient.from_env(venue=\"polymarket\")\n\nresult = client.preflight(\n    venue=\"polymarket\",       # venue to check (defaults to client.venue)\n    planned_amount=5.0,       # USDC you plan to spend on this trade\n    exposure_cap_usd=100.0,   # your total cross-venue exposure limit\n)\n\nif not result.ok_to_trade:\n    print(f\"Preflight blocked: {result.blockers}\")\n    # e.g. [\"EXPOSURE_CAP_EXCEEDED\"]\n    return\n\n# Log for audit\nledger.record({\n    \"preflight_id\": result.client_preflight_id,\n    \"ok\": result.ok_to_trade,\n    \"exposure_before\": result.open_exposure_total,\n    \"planned\": result.planned_amount,\n})\n```\n\n## Result fields\n\n| Field | Type | Description |\n|---|---|---|\n| `client_preflight_id` | str | UUID for your trade ledger — log before every order |\n| `agent_id` | str \\| None | Agent UUID from `/api/sdk/agents/me` |\n| `tier` | str \\| None | Account tier: \"free\" / \"pro\" / \"elite\" |\n| `resolved_venue` | str | Normalised venue: \"sim\" / \"polymarket\" / \"kalshi\" |\n| `execution_wallet` | str \\| None | EOA that signs trades (per-agent OWS wallet for Elite per-agent callers) |\n| `deposit_wallet` | str \\| None | Deposit wallet address (DW cohort only; None for Cohort A) |\n| `signer_status` | str | \"ows\" / \"external_key\" / \"managed\" |\n| `spendable_balance` | float \\| None | Venue balance: pUSD/USDC (real) or $SIM (sim) |\n| `gas_balance` | float \\| None | POL / SOL for gas — None in v0 (deferred to v1) |\n| `open_exposure_total` | float | Sum of `current_value` across open positions (real venues only when cap is USD) |\n| `exposure_cap_usd` | float | The cap you passed in |\n| `planned_amount` | float | The planned trade size you passed in |\n| `would_exceed_cap` | bool | True if `open_exposure_total + planned_amount > exposure_cap_usd` |\n| `pending_alerts` | list[dict] | Risk alerts from briefing (normalised to `{message: str}`) |\n| `ok_to_trade` | bool | **True if no blockers** |\n| `blockers` | list[str] | Blocker codes (see below) |\n| `warnings` | list[str] | Non-blocking advisories (fetch failures, skipped checks) |\n\n## Blocker codes (v0)\n\n| Code | Meaning | Fix |\n|---|---|---|\n| `EXPOSURE_CAP_EXCEEDED` | `open_exposure_total + planned_amount > exposure_cap_usd` | Wait for existing positions to resolve, or raise your cap |\n| `WALLET_UNVERIFIED` | Real venue requested but `real_trading_enabled` is False, or no wallet configured | Claim agent + link wallet in dashboard |\n| `VENUE_UNSUPPORTED` | Venue string not recognised | Use \"sim\", \"polymarket\", or \"kalshi\" |\n| `INSUFFICIENT_GAS` | Gas signal detected in risk_alerts (proxy only in v0) | Fund wallet with POL / SOL |\n| `EXPOSURE_UNKNOWN` | Real venue + active cap, but positions fetch failed — fail-closed | Check connectivity or set `exposure_cap_usd=0` to disable cap temporarily |\n\nBlockers are additive — all blocking conditions are reported, not just the first.\n\n## Per-agent caller (Elite OWS)\n\nFor 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.\n\n```python\nresult = client.preflight(venue=\"polymarket\", planned_amount=5, exposure_cap_usd=100)\nprint(result.execution_wallet)   # 0xYourAgentOWS... (not parent user's wallet)\nprint(result.deposit_wallet)     # 0xYourAgentDW... (per-agent DW if activated)\n```\n\n## Exposure calculation\n\n`open_exposure_total` sums `current_value` from `/api/sdk/positions`:\n\n- For **real venues** (polymarket, kalshi): sums non-sim positions in USDC.\n- For **sim venue**: sums sim positions in $SIM.\n\n$SIM positions are never included in a USD cap check — they use virtual currency.\n\n## warnings[] vs blockers[]\n\n`blockers` stop trading. `warnings` are informational — common examples:\n\n- `briefing_fetch_failed: <error>` — balance / alerts unknown; check connectivity\n- `positions_fetch_failed: <error>` — exposure may be understated; check rate limits\n- `identity_fetch_failed: <error>` — agent ID / tier unknown; API key may be invalid\n\nIf you see warnings, log them. Fetch failures on individual endpoints are gracefully handled — preflight returns best-effort data rather than throwing.\n\n## Pre-trade pattern (cookbook)\n\n```python\nimport os\nfrom simmer_sdk import SimmerClient\n\nEXPOSURE_CAP = float(os.environ.get(\"EXPOSURE_CAP_USD\", \"100\"))\n\nclient = SimmerClient.from_env(venue=\"polymarket\")\n\ndef safe_trade(market_id: str, side: str, amount: float):\n    pf = client.preflight(\n        venue=\"polymarket\",\n        planned_amount=amount,\n        exposure_cap_usd=EXPOSURE_CAP,\n    )\n    if not pf.ok_to_trade:\n        print(f\"Preflight blocked ({pf.blockers}), skipping trade\")\n        return None\n    if pf.warnings:\n        print(f\"Preflight warnings: {pf.warnings}\")\n\n    # Log preflight before order submission\n    print(f\"Preflight OK — id={pf.client_preflight_id} \"\n          f\"exposure={pf.open_exposure_total:.2f}+{amount:.2f}/{EXPOSURE_CAP}\")\n\n    return client.trade(market_id=market_id, side=side, amount=amount)\n```\n\n## Cadence\n\nCall 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.\n\n## Scope\n\nPreflight 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).\n\n## v0 limitations\n\n- `gas_balance` is always `None` — on-chain RPC not available in the SDK client. Use the dashboard to verify POL / SOL balance.\n- `INSUFFICIENT_GAS` is only detected if the briefing risk_alerts mention gas explicitly — not from an on-chain query.\n- Server-side `preflight_id` (stable, storable) deferred to v1.\n- MCP tool exposure deferred to v1.\n\n## Links\n\n- API reference: [docs.simmer.markets/api/preflight](https://docs.simmer.markets)\n- Wallet cohort guide: [docs.simmer.markets/wallets](https://docs.simmer.markets)\n\nFile v0.3.1:_meta.json\n\n{\n  \"ownerId\": \"kn7axnp7bzqsf5fkx0z8px7han7zyq1x\",\n  \"slug\": \"simmer-preflight\",\n  \"version\": \"0.3.1\",\n  \"publishedAt\": 1779634765680\n}\n\nFile v0.3.1:skill-card.md\n\n## Description: <br>\nPre-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. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[simmer](https://clawhub.ai/user/simmer) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and autonomous trading agents use this skill before trade execution to check wallet identity, venue status, spendable balance, open exposure, and risk blockers. It is intended to prevent cap overruns and configuration mistakes before real-money orders are submitted. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill uses a Simmer API key and can expose wallet identity, balances, positions, and risk alerts in local agent output. <br>\nMitigation: Install only when connecting a Simmer account is intended, keep SIMMER_API_KEY scoped and secret, and avoid sharing logs or JSON output that contain trading readiness data. <br>\nRisk: The preflight verdict is read-only but is designed to inform real-money trading decisions. <br>\nMitigation: Run it once per trade intent, review blockers and warnings before order submission, and keep exposure caps configured for the account's risk limits. <br>\n\n\n## Reference(s): <br>\n- [Simmer API and preflight documentation](https://docs.simmer.markets) <br>\n- [Simmer skill page](https://clawhub.ai/simmer/simmer-preflight) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, JSON, Shell commands, Guidance] <br>\n**Output Format:** [Human-readable CLI summary or structured JSON] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires SIMMER_API_KEY and may include wallet identity, balances, positions, blockers, warnings, and risk alerts in local agent output.] <br>\n\n## Skill Version(s): <br>\n0.3.1 (source: SKILL.md frontmatter and server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v0.3.1:clawhub.json\n\n{\n  \"emoji\": \"✅\",\n  \"primaryEnv\": \"SIMMER_API_KEY\",\n  \"requires\": {\n    \"env\": [\n      \"SIMMER_API_KEY\"\n    ],\n    \"pip\": [\n      \"simmer-sdk>=0.17.13\"\n    ]\n  },\n  \"envVars\": [\n    {\n      \"name\": \"SIMMER_API_KEY\",\n      \"required\": true,\n      \"description\": \"Your Simmer SDK API key — get from simmer.markets/dashboard\"\n    },\n    {\n      \"name\": \"TRADING_VENUE\",\n      \"required\": false,\n      \"description\": \"Default trading venue (sim / polymarket / kalshi). Overridden by the venue argument to client.preflight().\"\n    },\n    {\n      \"name\": \"EXPOSURE_CAP_USD\",\n      \"required\": false,\n      \"description\": \"Maximum total open exposure in USD across real venues. Defaults to 100.0 if not set.\"\n    }\n  ],\n  \"cron\": null,\n  \"autostart\": false,\n  \"automaton\": {\n    \"managed\": true,\n    \"entrypoint\": \"preflight.py\"\n  }\n}\n\nArchive v0.3.0: 6 files, 12373 bytes\n\nFiles: clawhub.json (832b), preflight.py (5359b), SKILL.md (7713b), tests/__init__.py (0b), tests/test_preflight.py (32913b), _meta.json (135b)\n\nFile v0.3.0:SKILL.md\n\n---\nname: simmer-preflight\nversion: \"0.3.0\"\npublished: true\ndescription: 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.\nmetadata:\n  author: \"Simmer (@simmer_markets)\"\n  version: \"0.2.0\"\n  displayName: Simmer Trade Check\n  difficulty: beginner\n  primaryEnv: SIMMER_API_KEY\n  envVars:\n    - name: SIMMER_API_KEY\n      required: true\n      description: \"Your Simmer SDK API key.\"\n---\n\n# Simmer Preflight\n\nRun `client.preflight()` before every real-money trade. One call returns:\n\n- **Who you are**: agent ID, tier, venue resolved from your API key context\n- **Which wallet will sign**: execution wallet, deposit wallet, signer mode (OWS / external key / managed)\n- **Spendable balance**: venue-specific USDC or $SIM balance from the briefing\n- **Open exposure**: sum of `current_value` across your existing positions (real venues only for USD cap)\n- **Cap check**: whether `planned_amount + open_exposure_total` exceeds your `exposure_cap_usd`\n- **Risk alerts**: any briefing risk signals (concentration, expiry, reliability)\n- **ok_to_trade**: a single boolean — True if no blockers\n\n## When to use\n\nCall preflight before every automated trade, especially:\n\n- Before the first real-money order of a run\n- Before scaling into a position beyond your initial size\n- When your heartbeat wakes up after a long sleep (state may have changed)\n\nDo not call it on every polling tick — it makes 3 API calls. Once per trade intent is correct.\n\n## Call it\n\n```python\nfrom simmer_sdk import SimmerClient\n\nclient = SimmerClient.from_env(venue=\"polymarket\")\n\nresult = client.preflight(\n    venue=\"polymarket\",       # venue to check (defaults to client.venue)\n    planned_amount=5.0,       # USDC you plan to spend on this trade\n    exposure_cap_usd=100.0,   # your total cross-venue exposure limit\n)\n\nif not result.ok_to_trade:\n    print(f\"Preflight blocked: {result.blockers}\")\n    # e.g. [\"EXPOSURE_CAP_EXCEEDED\"]\n    return\n\n# Log for audit\nledger.record({\n    \"preflight_id\": result.client_preflight_id,\n    \"ok\": result.ok_to_trade,\n    \"exposure_before\": result.open_exposure_total,\n    \"planned\": result.planned_amount,\n})\n```\n\n## Result fields\n\n| Field | Type | Description |\n|---|---|---|\n| `client_preflight_id` | str | UUID for your trade ledger — log before every order |\n| `agent_id` | str \\| None | Agent UUID from `/api/sdk/agents/me` |\n| `tier` | str \\| None | Account tier: \"free\" / \"pro\" / \"elite\" |\n| `resolved_venue` | str | Normalised venue: \"sim\" / \"polymarket\" / \"kalshi\" |\n| `execution_wallet` | str \\| None | EOA that signs trades (per-agent OWS wallet for Elite per-agent callers) |\n| `deposit_wallet` | str \\| None | Deposit wallet address (DW cohort only; None for Cohort A) |\n| `signer_status` | str | \"ows\" / \"external_key\" / \"managed\" |\n| `spendable_balance` | float \\| None | Venue balance: pUSD/USDC (real) or $SIM (sim) |\n| `gas_balance` | float \\| None | POL / SOL for gas — None in v0 (deferred to v1) |\n| `open_exposure_total` | float | Sum of `current_value` across open positions (real venues only when cap is USD) |\n| `exposure_cap_usd` | float | The cap you passed in |\n| `planned_amount` | float | The planned trade size you passed in |\n| `would_exceed_cap` | bool | True if `open_exposure_total + planned_amount > exposure_cap_usd` |\n| `pending_alerts` | list[dict] | Risk alerts from briefing (normalised to `{message: str}`) |\n| `ok_to_trade` | bool | **True if no blockers** |\n| `blockers` | list[str] | Blocker codes (see below) |\n| `warnings` | list[str] | Non-blocking advisories (fetch failures, skipped checks) |\n\n## Blocker codes (v0)\n\n| Code | Meaning | Fix |\n|---|---|---|\n| `EXPOSURE_CAP_EXCEEDED` | `open_exposure_total + planned_amount > exposure_cap_usd` | Wait for existing positions to resolve, or raise your cap |\n| `WALLET_UNVERIFIED` | Real venue requested but `real_trading_enabled` is False, or no wallet configured | Claim agent + link wallet in dashboard |\n| `VENUE_UNSUPPORTED` | Venue string not recognised | Use \"sim\", \"polymarket\", or \"kalshi\" |\n| `INSUFFICIENT_GAS` | Gas signal detected in risk_alerts (proxy only in v0) | Fund wallet with POL / SOL |\n| `EXPOSURE_UNKNOWN` | Real venue + active cap, but positions fetch failed — fail-closed | Check connectivity or set `exposure_cap_usd=0` to disable cap temporarily |\n\nBlockers are additive — all blocking conditions are reported, not just the first.\n\n## Per-agent caller (Elite OWS)\n\nFor 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.\n\n```python\nresult = client.preflight(venue=\"polymarket\", planned_amount=5, exposure_cap_usd=100)\nprint(result.execution_wallet)   # 0xYourAgentOWS... (not parent user's wallet)\nprint(result.deposit_wallet)     # 0xYourAgentDW... (per-agent DW if activated)\n```\n\n## Exposure calculation\n\n`open_exposure_total` sums `current_value` from `/api/sdk/positions`:\n\n- For **real venues** (polymarket, kalshi): sums non-sim positions in USDC.\n- For **sim venue**: sums sim positions in $SIM.\n\n$SIM positions are never included in a USD cap check — they use virtual currency.\n\n## warnings[] vs blockers[]\n\n`blockers` stop trading. `warnings` are informational — common examples:\n\n- `briefing_fetch_failed: <error>` — balance / alerts unknown; check connectivity\n- `positions_fetch_failed: <error>` — exposure may be understated; check rate limits\n- `identity_fetch_failed: <error>` — agent ID / tier unknown; API key may be invalid\n\nIf you see warnings, log them. Fetch failures on individual endpoints are gracefully handled — preflight returns best-effort data rather than throwing.\n\n## Pre-trade pattern (cookbook)\n\n```python\nimport os\nfrom simmer_sdk import SimmerClient\n\nEXPOSURE_CAP = float(os.environ.get(\"EXPOSURE_CAP_USD\", \"100\"))\n\nclient = SimmerClient.from_env(venue=\"polymarket\")\n\ndef safe_trade(market_id: str, side: str, amount: float):\n    pf = client.preflight(\n        venue=\"polymarket\",\n        planned_amount=amount,\n        exposure_cap_usd=EXPOSURE_CAP,\n    )\n    if not pf.ok_to_trade:\n        print(f\"Preflight blocked ({pf.blockers}), skipping trade\")\n        return None\n    if pf.warnings:\n        print(f\"Preflight warnings: {pf.warnings}\")\n\n    # Log preflight before order submission\n    print(f\"Preflight OK — id={pf.client_preflight_id} \"\n          f\"exposure={pf.open_exposure_total:.2f}+{amount:.2f}/{EXPOSURE_CAP}\")\n\n    return client.trade(market_id=market_id, side=side, amount=amount)\n```\n\n## Cadence\n\nCall 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.\n\n## Scope\n\nPreflight 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).\n\n## v0 limitations\n\n- `gas_balance` is always `None` — on-chain RPC not available in the SDK client. Use the dashboard to verify POL / SOL balance.\n- `INSUFFICIENT_GAS` is only detected if the briefing risk_alerts mention gas explicitly — not from an on-chain query.\n- Server-side `preflight_id` (stable, storable) deferred to v1.\n- MCP tool exposure deferred to v1.\n\n## Links\n\n- API reference: [docs.simmer.markets/api/preflight](https://docs.simmer.markets)\n- Wallet cohort guide: [docs.simmer.markets/wallets](https://docs.simmer.markets)\n\nFile v0.3.0:_meta.json\n\n{\n  \"ownerId\": \"kn7axnp7bzqsf5fkx0z8px7han7zyq1x\",\n  \"slug\": \"simmer-preflight\",\n  \"version\": \"0.3.0\",\n  \"publishedAt\": 1779608117995\n}\n\nFile v0.3.0:clawhub.json\n\n{\n  \"emoji\": \"✅\",\n  \"primaryEnv\": \"SIMMER_API_KEY\",\n  \"requires\": {\n    \"env\": [\n      \"SIMMER_API_KEY\"\n    ],\n    \"pip\": [\n      \"simmer-sdk>=0.17.13\"\n    ]\n  },\n  \"envVars\": [\n    {\n      \"name\": \"SIMMER_API_KEY\",\n      \"required\": true,\n      \"description\": \"Your Simmer SDK API key — get from simmer.markets/dashboard\"\n    },\n    {\n      \"name\": \"TRADING_VENUE\",\n      \"required\": false,\n      \"description\": \"Default trading venue (sim / polymarket / kalshi). Overridden by the venue argument to client.preflight().\"\n    },\n    {\n      \"name\": \"EXPOSURE_CAP_USD\",\n      \"required\": false,\n      \"description\": \"Maximum total open exposure in USD across real venues. Defaults to 100.0 if not set.\"\n    }\n  ],\n  \"cron\": null,\n  \"autostart\": false,\n  \"automaton\": {\n    \"managed\": true,\n    \"entrypoint\": \"preflight.py\"\n  }\n}","readmeExcerpt":"Skill: simmer-preflight Owner: simmer Summary: 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. Live real-venue trades auto-run this check and refuse when ok_to_trade is False. Tags: latest:0.3.6 Version history: v0.3.6 | 2026-09-22T04:14:01.101Z | user Refuses live trades without a preflight ok_to_","codeSnippets":[],"executableExamples":[{"language":"python","snippet":"from simmer_sdk import SimmerClient\n\nclient = SimmerClient.from_env(venue=\"polymarket\")\n\nresult = client.preflight(\n    venue=\"polymarket\",       # venue to check (defaults to client.venue)\n    planned_amount=5.0,       # USDC you plan to spend on this trade\n    exposure_cap_usd=100.0,   # your total cross-venue exposure limit\n)\n\nif not result.ok_to_trade:\n    print(f\"Preflight blocked: {result.blockers}\")\n    # e.g. [\"EXPOSURE_CAP_EXCEEDED\"]\n    return\n\n# Log for audit\nledger.record({\n    \"preflight_id\": result.client_preflight_id,\n    \"ok\": result.ok_to_trade,\n    \"exposure_before\": result.open_exposure_total,\n    \"planned\": result.planned_amount,\n})"},{"language":"python","snippet":"result = client.preflight(venue=\"polymarket\", planned_amount=5, exposure_cap_usd=100)\nprint(result.execution_wallet)   # 0xYourAgentOWS... (not parent user's wallet)\nprint(result.deposit_wallet)     # 0xYourAgentDW... (per-agent DW if activated)"},{"language":"python","snippet":"import os\nfrom simmer_sdk import SimmerClient\n\nclient = SimmerClient.from_env(venue=\"polymarket\")\n\ndef safe_trade(market_id: str, side: str, amount: float):\n    # Live auto-gate: EXPOSURE_CAP_USD is opt-in (unset = no cap, no $100 default).\n    # Manual preflight() still accepts an explicit exposure_cap_usd.\n    cap_raw = os.environ.get(\"EXPOSURE_CAP_USD\")\n    if cap_raw:\n        pf = client.preflight(\n            venue=\"polymarket\",\n            planned_amount=amount,\n            exposure_cap_usd=float(cap_raw),\n        )\n    else:\n        # No env cap: live trade() will not enforce one. This explicit\n        # preflight() call still uses the method default (exposure_cap_usd=100).\n        pf = client.preflight(\n            venue=\"polymarket\",\n            planned_amount=amount,\n        )\n    if not pf.ok_to_trade:\n        print(f\"Preflight blocked ({pf.blockers}), skipping trade\")\n        return None\n    if pf.warnings:\n        print(f\"Preflight warnings: {pf.warnings}\")\n\n    # Log preflight before order submission\n    print(f\"Preflight OK — id={pf.client_preflight_id} \"\n          f\"exposure={pf.open_exposure_total:.2f}+{amount:.2f}/{pf.exposure_cap_usd}\")\n\n    return client.trade(market_id=market_id, side=side, amount=amount)"},{"language":"python","snippet":"from simmer_sdk import SimmerClient\n\nclient = SimmerClient.from_env(venue=\"polymarket\")\n\nresult = client.preflight(\n    venue=\"polymarket\",       # venue to check (defaults to client.venue)\n    planned_amount=5.0,       # USDC you plan to spend on this trade\n    exposure_cap_usd=100.0,   # your total cross-venue exposure limit\n)\n\nif not result.ok_to_trade:\n    print(f\"Preflight blocked: {result.blockers}\")\n    # e.g. [\"EXPOSURE_CAP_EXCEEDED\"]\n    return\n\n# Log for audit\nledger.record({\n    \"preflight_id\": result.client_preflight_id,\n    \"ok\": result.ok_to_trade,\n    \"exposure_before\": result.open_exposure_total,\n    \"planned\": result.planned_amount,\n})"},{"language":"python","snippet":"result = client.preflight(venue=\"polymarket\", planned_amount=5, exposure_cap_usd=100)\nprint(result.execution_wallet)   # 0xYourAgentOWS... (not parent user's wallet)\nprint(result.deposit_wallet)     # 0xYourAgentDW... (per-agent DW if activated)"},{"language":"python","snippet":"import os\nfrom simmer_sdk import SimmerClient\n\nEXPOSURE_CAP = float(os.environ.get(\"EXPOSURE_CAP_USD\", \"100\"))\n\nclient = SimmerClient.from_env(venue=\"polymarket\")\n\ndef safe_trade(market_id: str, side: str, amount: float):\n    pf = client.preflight(\n        venue=\"polymarket\",\n        planned_amount=amount,\n        exposure_cap_usd=EXPOSURE_CAP,\n    )\n    if not pf.ok_to_trade:\n        print(f\"Preflight blocked ({pf.blockers}), skipping trade\")\n        return None\n    if pf.warnings:\n        print(f\"Preflight warnings: {pf.warnings}\")\n\n    # Log preflight before order submission\n    print(f\"Preflight OK — id={pf.client_preflight_id} \"\n          f\"exposure={pf.open_exposure_total:.2f}+{amount:.2f}/{EXPOSURE_CAP}\")\n\n    return client.trade(market_id=market_id, side=side, amount=amount)"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: simmer-preflight\nversion: \"0.3.6\"\npublished: true\nread_only: true\ndescription: 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. Live real-venue trades auto-run this check and refuse when ok_to_trade is False.\nmetadata:\n  author: \"Simmer (@simmer_markets)\"\n  version: \"0.3.6\"\n  displayName: Simmer Preflight\n  difficulty: beginner\n  primaryEnv: SIMMER_API_KEY\n  envVars:\n    - name: SIMMER_API_KEY\n      required: true\n      description: \"Your Simmer SDK API key.\"\n---\n\n# Simmer Preflight\n\nLive real-money trades now **enforce** this check. `client.trade(..., dry_run=False)` and `client.place_combo(..., dry_run=False)` on a `live=True` client against a real venue (`polymarket` / `kalshi`) auto-run `preflight()` and refuse if `ok_to_trade` is False, surfacing the blocker codes. The auto-gate's exposure cap is opt-in (`EXPOSURE_CAP_USD` set → enforced; unset → cap disabled) and sells are exempt from cap math so an over-cap book can still reduce exposure. Wallet / venue / gas blockers still run. Paper, `venue=\"sim\"`, and `dry_run=True` are unchanged. One-release migrate valve: `skip_preflight=True` or `SIMMER_SKIP_PREFLIGHT=1` (deprecation warning). MCP `simmer_trade` uses the same live gate; `SIMMER_MCP_ALLOW_LIVE` is still required and is not a replacement.\n\nCall `client.preflight()` yourself when you want the full result (wallet, exposure, `client_preflight_id`) before you size or submit. One call returns:\n\n- **Who you are**: agent ID, tier, venue resolved from your API key context\n- **Which wallet will sign**: execution wallet, deposit wallet, signer mode (OWS / external key / managed)\n- **Spendable balance**: venue-specific USDC or $SIM balance from the briefing\n- **Open exposure**: sum of `current_value` across your existing positions (real venues only for USD cap)\n- **Cap check**: whether `planned_amount + open_exposure_total` exceeds your `exposure_cap_usd`\n- **Risk alerts**: any briefing risk signals (concentration, expiry, reliability)\n- **ok_to_trade**: a single boolean — True if no blockers\n\n## When to use\n\nCall preflight before every automated trade, especially:\n\n- Before the first real-money order of a run\n- Before scaling into a position beyond your initial size\n- When your heartbeat wakes up after a long sleep (state may have changed)\n\nDo not call it on every polling tick — it makes 3 API calls. Once per trade intent is correct.\n\n## Call it\n\n```python\nfrom simmer_sdk import SimmerClient\n\nclient = SimmerClient.from_env(venue=\"polymarket\")\n\nresult = client.preflight(\n    venue=\"polymarket\",       # venue to check (defaults to client.venue)\n    planned_amount=5.0,       # USDC you plan to spend on this trade\n    exposure_cap_usd=100.0,   # your total cross-venue exposure limit\n)\n\nif not result.ok_to_trade:\n    print(f\"Preflight blocked: {result.blockers}\")\n    # e.g. [\"EXPOSURE_CAP_EXCEEDED\"]\n    return\n\n# Log for a"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7axnp7bzqsf5fkx0z8px7han7zyq1x\",\n  \"slug\": \"simmer-preflight\",\n  \"version\": \"0.3.6\",\n  \"publishedAt\": 1790050441101\n}"},{"path":"skill-card.md","content":"## Description:\n\nPre-trade readiness check for autonomous agents that returns wallet identity, venue status, spendable balance, open exposure, and an ok_to_trade verdict before live real-venue trades proceed.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[simmer](https://clawhub.ai/user/simmer)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and autonomous-agent operators use this skill before automated trade submission to check account readiness, wallet identity, balance, exposure, and blocking conditions. It supports pre-trade audit logging and fail-closed handling when a real-venue trade is not ready to proceed.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill requires a Simmer API key and reports trading-account readiness data, including wallet, balance, exposure, blockers, and warnings.\n\nMitigation: Install only from a trusted publisher, provide the API key through the SIMMER_API_KEY environment variable, and avoid exposing JSON or terminal output where account details should remain private.\n\nRisk: Preflight checks depend on current account, venue, and position data, so stale or failed checks can affect trade readiness decisions.\n\nMitigation: Run the check once per trade intent, inspect blockers and warnings, and treat configuration or fetch failures as reasons to pause live trading until resolved.\n\n## Reference(s):\n\n- [Simmer API and wallet documentation](https://docs.simmer.markets)\n- [ClawHub skill page](https://clawhub.ai/simmer/skills/simmer-preflight)\n\n## Skill Output:\n\n**Output Type(s):** [text, JSON, guidance]\n\n**Output Format:** [Human-readable terminal output or structured JSON]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Uses exit codes 0, 1, and 2 to indicate pass, blocked, or configuration error.]\n\n## Skill Version(s):\n\n0.3.6 (source: server release and skill frontmatter)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."},{"path":"clawhub.json","content":"{\n  \"emoji\": \"✅\",\n  \"primaryEnv\": \"SIMMER_API_KEY\",\n  \"requires\": {\n    \"env\": [\n      \"SIMMER_API_KEY\"\n    ],\n    \"pip\": [\n      \"simmer-sdk>=0.17.13\"\n    ]\n  },\n  \"envVars\": [\n    {\n      \"name\": \"SIMMER_API_KEY\",\n      \"required\": true,\n      \"description\": \"Your Simmer SDK API key — get from simmer.markets/dashboard\"\n    },\n    {\n      \"name\": \"TRADING_VENUE\",\n      \"required\": false,\n      \"description\": \"Default trading venue (sim / polymarket / kalshi). Overridden by the venue argument to client.preflight().\"\n    },\n    {\n      \"name\": \"EXPOSURE_CAP_USD\",\n      \"required\": false,\n      \"description\": \"Optional live auto-gate cap in USD across real venues. Set to enforce; unset disables the cap (no $100 default). Manual client.preflight() still accepts an explicit exposure_cap_usd.\"\n    }\n  ],\n  \"cron\": null,\n  \"autostart\": false,\n  \"automaton\": {\n    \"managed\": true,\n    \"entrypoint\": \"preflight.py\"\n  }\n}"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"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. Live real-venue trades auto-run this check and refuse when ok_to_trade is False. Skill: simmer-preflight Owner: simmer Summary: 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. Live real-venue trades auto-run this check and refuse when ok_to_trade is False. Tags: latest:0.3.6 Version history: v0.3.6 | 2026-09-22T04:14:01.101Z | user Refuses live trades without a preflight ok_to_","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1387,"uniquenessScore":46,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T23:29:45.924Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T23:29:45.924Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-14T13:57:22.770Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}