{"id":"c8df8172-7c9b-4138-8f9f-e80c8569076b","entityType":"agent","slug":"clawhub-simmer-polymarket-mert-sniper","name":"polymarket-mert-sniper","canonicalUrl":"https://www.xpersona.co/agent/clawhub-simmer-polymarket-mert-sniper","canonicalPath":"/agent/clawhub-simmer-polymarket-mert-sniper","generatedAt":"2026-10-09T22:17:47.314Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T07:22:37.618Z","emptyReason":null},"description":"Near-expiry conviction trading on Polymarket. The skill scans markets in their final minutes, filters for strongly-skewed splits (60/40+), and places bounded trades against the under-priced side. Defaults — $10 max per trade, 5 trades/run, 8-minute expiry window, dry-run unless `--live`.","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 3.6K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s17eez0vajry6hjb97y9mbtv2s85wekv:polymarket-mert-sniper","sourceUrl":"https://clawhub.ai/simmer/polymarket-mert-sniper","homepage":"https://clawhub.ai/simmer/skills/polymarket-mert-sniper","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/simmer/polymarket-mert-sniper","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/simmer/skills/polymarket-mert-sniper","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":71,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"polymarket-mert-sniper technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T07:22:37.618Z","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-09T07:22:37.618Z","emptyReason":null},"stars":null,"forks":null,"downloads":3641,"packageName":null,"latestVersion":"1.3.6","tractionLabel":"3.6K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T07:22:37.618Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T07:22:37.618Z","lastCrawledAt":"2026-10-09T07:22:37.618Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T07:22:37.618Z","lastVerifiedAt":null,"highlights":[{"version":"1.3.6","createdAt":"2026-09-06T01:14:42.815Z","changelog":"polymarket-mert-sniper v1.3.6 - Internal updates to Python scripts for improved logic and/or maintenance. - Documentation (SKILL.md) updated to reflect the latest commands, settings, and usage. - Removed obsolete skill-card.md file. - No user-facing feature or configuration changes.","fileCount":10,"zipByteSize":24331},{"version":"1.3.5","createdAt":"2026-08-09T06:23:30.373Z","changelog":"Fail closed when the order book cannot be fetched. Previously printed 'book unavailable (proceeding with caution)' and traded anyway, bypassing the MIN_BOOK_DEPTH_USD thin-book gate at exactly the moment it mattered most. Now skips the market.","fileCount":10,"zipByteSize":24213},{"version":"1.3.4","createdAt":"2026-08-09T05:00:22.520Z","changelog":"Fix inverted book read: sort the CLOB book before reading best bid/ask and before summing depth. The book returns bids LOW-HIGH and asks HIGH-LOW, so a raw [:5] slice summed the five levels FURTHEST from the touch - the MIN_BOOK_DEPTH_USD thin-book gate was measuring the back of the book.","fileCount":10,"zipByteSize":24014},{"version":"1.3.3","createdAt":"2026-06-12T14:41:12.342Z","changelog":"Version 1.3.3 - Default expiry window increased from 2 minutes to 8 minutes. - Optional news-recency veto guard added (off by default); skips trades on macro/news resolution markets within 30 seconds of key releases. - Documentation updated to describe new expiry default and news veto behavior. - Configuration table and usage instructions reflect new settings. - Obsolete skill-card.md file removed.","fileCount":9,"zipByteSize":21489},{"version":"1.3.2","createdAt":"2026-05-24T03:02:51.386Z","changelog":"SIM-2374: align tunable env-var names between clawhub.json and CONFIG_SCHEMA","fileCount":9,"zipByteSize":20217},{"version":"1.3.1","createdAt":"2026-05-23T14:47:00.615Z","changelog":"Reframe opening to lead with method instead of 'snipe' verb. Inline quantitative bounding ($10 max, 60/40 split, 2-min window, 5 trades/run, dry-run default) into disclaimer line. Catalog-reshape Tier 2 step 3.","fileCount":7,"zipByteSize":17044},{"version":"1.2.2","createdAt":"2026-04-24T10:06:50.149Z","changelog":"## polymarket-mert-sniper v1.2.2 - Updated metadata version to 1.2.2 in SKILL.md. - Internal code changes in mert_sniper.py and clawhub.json (details not listed). - No changes to user-facing command usage or configuration options.","fileCount":6,"zipByteSize":14459},{"version":"1.2.1","createdAt":"2026-04-23T05:56:45.499Z","changelog":"V2 migration (2026-04-28): updated troubleshooting copy to point users at the Wrap USDC.e → pUSD flow at simmer.markets/dashboard + docs.simmer.markets/v2-migration. Also refines clawhub.json envVars schema (WALLET_PRIVATE_KEY now correctly optional for managed-wallet users).","fileCount":6,"zipByteSize":14032}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17eez0vajry6hjb97y9mbtv2s85wekv:polymarket-mert-sniper","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s17eez0vajry6hjb97y9mbtv2s85wekv:polymarket-mert-sniper` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/simmer/polymarket-mert-sniper before using production credentials."],"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-polymarket-mert-sniper/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-simmer-polymarket-mert-sniper/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-simmer-polymarket-mert-sniper/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-simmer-polymarket-mert-sniper/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-simmer-polymarket-mert-sniper/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-simmer-polymarket-mert-sniper/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-09T22:17:47.310Z"}},"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-polymarket-mert-sniper/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-simmer-polymarket-mert-sniper/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-simmer-polymarket-mert-sniper/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-simmer-polymarket-mert-sniper/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":"medium","updatedAt":"2026-10-09T07:22:37.618Z","emptyReason":null},"readme":"Skill: polymarket-mert-sniper\n\nOwner: simmer\n\nSummary: Near-expiry conviction trading on Polymarket. The skill scans markets in their final minutes, filters for strongly-skewed splits (60/40+), and places bounded trades against the under-priced side. Defaults — $10 max per trade, 5 trades/run, 8-minute expiry window, dry-run unless `--live`.\n\nTags: latest:1.3.6\n\nVersion history:\n\nv1.3.6 | 2026-09-06T01:14:42.815Z | auto\n\npolymarket-mert-sniper v1.3.6\n\n- Internal updates to Python scripts for improved logic and/or maintenance.\n- Documentation (SKILL.md) updated to reflect the latest commands, settings, and usage.\n- Removed obsolete skill-card.md file.\n- No user-facing feature or configuration changes.\n\nv1.3.5 | 2026-08-09T06:23:30.373Z | user\n\nFail closed when the order book cannot be fetched. Previously printed 'book unavailable (proceeding with caution)' and traded anyway, bypassing the MIN_BOOK_DEPTH_USD thin-book gate at exactly the moment it mattered most. Now skips the market.\n\nv1.3.4 | 2026-08-09T05:00:22.520Z | user\n\nFix inverted book read: sort the CLOB book before reading best bid/ask and before summing depth. The book returns bids LOW-HIGH and asks HIGH-LOW, so a raw [:5] slice summed the five levels FURTHEST from the touch - the MIN_BOOK_DEPTH_USD thin-book gate was measuring the back of the book.\n\nv1.3.3 | 2026-06-12T14:41:12.342Z | auto\n\nVersion 1.3.3\n\n- Default expiry window increased from 2 minutes to 8 minutes.\n- Optional news-recency veto guard added (off by default); skips trades on macro/news resolution markets within 30 seconds of key releases.\n- Documentation updated to describe new expiry default and news veto behavior.\n- Configuration table and usage instructions reflect new settings.\n- Obsolete skill-card.md file removed.\n\nv1.3.2 | 2026-05-24T03:02:51.386Z | user\n\nSIM-2374: align tunable env-var names between clawhub.json and CONFIG_SCHEMA\n\nv1.3.1 | 2026-05-23T14:47:00.615Z | user\n\nReframe opening to lead with method instead of 'snipe' verb. Inline quantitative bounding ($10 max, 60/40 split, 2-min window, 5 trades/run, dry-run default) into disclaimer line. Catalog-reshape Tier 2 step 3.\n\nv1.2.2 | 2026-04-24T10:06:50.149Z | auto\n\n## polymarket-mert-sniper v1.2.2\n\n- Updated metadata version to 1.2.2 in SKILL.md.\n- Internal code changes in mert_sniper.py and clawhub.json (details not listed).\n- No changes to user-facing command usage or configuration options.\n\nv1.2.1 | 2026-04-23T05:56:45.499Z | user\n\nV2 migration (2026-04-28): updated troubleshooting copy to point users at the Wrap USDC.e → pUSD flow at simmer.markets/dashboard + docs.simmer.markets/v2-migration. Also refines clawhub.json envVars schema (WALLET_PRIVATE_KEY now correctly optional for managed-wallet users).\n\nv1.1.4 | 2026-04-22T09:15:32.627Z | user\n\nSchema fix: primaryEnv + envVars with required:false for optional credentials. Clears OpenClaw 'disproportionate requirements' verdict.\n\nv1.1.3 | 2026-04-22T08:25:26.547Z | user\n\nDeclare WALLET_PRIVATE_KEY in requires.env for OpenClaw moderation alignment.\n\nv1.1.2 | 2026-04-16T10:05:37.176Z | user\n\nAdd pip install simmer-sdk to setup flow\n\nv1.1.1 | 2026-04-03T02:47:10.058Z | user\n\nAdd auto_redeem() call at start of each cycle for external wallet support\n\nv1.1.0 | 2026-03-29T08:03:41.302Z | auto\n\nVersion 1.1.0\n\n- Bumped version to 1.1.0 in metadata and documentation.\n- Updated SKILL.md to reflect new version number.\n- No feature or logic changes described in the documentation.\n\nv1.0.14 | 2026-03-29T07:04:09.497Z | auto\n\npolymarket-mert-sniper 1.0.14 Changelog\n\n- Updated skill metadata version from 1.0.7 to 1.0.8 in SKILL.md.\n- No functional or user-facing changes documented beyond metadata update.\n\nv1.0.13 | 2026-03-03T02:53:08.863Z | user\n\nAgentSkills format — moved platform config to clawhub.json for cross-agent compatibility\n\nv1.0.12 | 2026-02-27T10:29:08.478Z | auto\n\nVersion 1.0.12\n\n- No file changes detected in this release.\n- No user-facing updates or modifications to documentation, logic, or features.\n\nv1.0.11 | 2026-02-27T10:14:48.412Z | auto\n\n- Added a \"difficulty: advanced\" field to SKILL.md for improved clarity on required user expertise.\n- No other user-facing changes; documentation and functionality remain the same.\n\nv1.0.10 | 2026-02-27T05:55:51.500Z | auto\n\n- Updated code in `mert_sniper.py` with internal changes.\n- No user-facing changes to documentation or configuration.\n- SKILL.md remains unchanged.\n\nv1.0.9 | 2026-02-27T03:59:07.420Z | user\n\nSync\n\nv1.0.8 | 2026-02-24T13:15:24.642Z | auto\n\n- Added automaton metadata for managed/autostart entrypoint in SKILL.md.\n- Updated version to 1.0.7 in SKILL.md.\n- No changes to user-facing features or functionality.\n\nv1.0.7 | 2026-02-17T13:02:46.246Z | auto\n\n- Updated to require only SIMMER_API_KEY in the environment for setup.\n- Removed WALLET_PRIVATE_KEY from required environment variables in metadata section.\n- Bumped version field from 1.0.5 to 1.0.6 in SKILL.md.\n- No functional or logic changes to documentation or described workflow.\n\nv1.0.6 | 2026-02-17T07:53:33.998Z | auto\n\nNo functional changes; documentation was updated and improved.\n\n- Added troubleshooting steps for USDC.e vs native USDC on Polygon.\n- Clarified which USDC token is required for trading on Polymarket.\n- No code or logic in the skill was changed.\n\nv1.0.5 | 2026-02-17T06:36:03.140Z | auto\n\nSummary: v1.0.5 adds required wallet private key environment variable for live trading, clarifies setup instructions, and updates troubleshooting.\n\n- Added requirement for `WALLET_PRIVATE_KEY` environment variable for live trading (auto-signs orders via SDK).\n- Updated setup instructions to include wallet private key and clarify how the SDK uses it.\n- Expanded troubleshooting: new section for external wallet signing issues, with guidance on `WALLET_PRIVATE_KEY`.\n- Minor wording adjustments throughout for clarity.\n\nv1.0.4 | 2026-02-17T04:01:26.418Z | auto\n\n- Added explicit dependency on simmer-sdk (pip) in metadata for easier installation.\n- Updated version to 1.0.4.\n- Clarified that the skill serves as a template for remixing logic with custom filters or timing.\n- No changes to core trading logic or configuration options.\n\nv1.0.3 | 2026-02-14T14:28:58.832Z | auto\n\n- Added detailed documentation in SKILL.md for setup, configuration, and usage of the Mert Sniper strategy on Polymarket.\n- Includes step-by-step setup flow, environment variables, command examples, API references, and troubleshooting guidance.\n- Describes how to filter markets, apply safeguards, and run automated conviction trading near market expiry.\n- Documents all configuration options and provides clear usage scenarios and output examples.\n- Attribution and strategy context now included for transparency.\n\nArchive index:\n\nArchive v1.3.6: 10 files, 24331 bytes\n\nFiles: clawhub.json (2205b), config.json (27b), DISCLAIMER.md (1925b), mert_sniper.py (33313b), scripts/status.py (5443b), skill-card.md (2537b), SKILL.md (8732b), tests/test_mertsniper_orderbook_summary.py (5034b), tests/test_mertsniper_preflight_gate.py (5628b), _meta.json (141b)\n\nFile v1.3.6:SKILL.md\n\n---\nname: polymarket-mert-sniper\ndescription: Near-expiry conviction trading on Polymarket. The skill scans markets in their final minutes, filters for strongly-skewed splits (60/40+), and places bounded trades against the under-priced side. Defaults — $10 max per trade, 5 trades/run, 8-minute expiry window, dry-run unless `--live`.\nmetadata:\n  author: Simmer (@simmer_markets)\n  version: \"1.3.6\"\n  displayName: Mert Sniper\n  difficulty: advanced\n  attribution: Strategy inspired by @mert — https://x.com/mert/status/2020216613279060433\n---\n# Mert Sniper\n\nNear-expiry conviction trading on Polymarket. The skill scans markets in their final minutes of pricing, filters for strongly-skewed splits, and places bounded trades against the under-priced side.\n\n> 🚨 **Framework, not a production trading system.** Read [DISCLAIMER.md](./DISCLAIMER.md) before connecting to a wallet with real funds. Dry-run is the default; `--live` is required for any real-USDC trade. Defaults: $10 max per trade, 60/40 split minimum, 8-minute expiry window, 5 trades per scan cycle — adjust deliberately before scaling.\n\n> **This is a template.** The default logic (expiry + split filter) is a starting point — remix it with your own filters, timing rules, or market selection criteria. The skill handles all the plumbing (market discovery, trade execution, safeguards). Your agent provides the alpha.\n\n> Strategy attribution: [@mert](https://x.com/mert/status/2020216613279060433) — see source thread for the original methodology (topic filter, near-expiry timing, strong-split entry).\n\n> **News-recency veto.** Optional guard that checks Simmer's macro-news schedule before order placement and skips matching news-resolution markets inside the first 30 seconds after CPI, BLS jobs/unemployment, FOMC, nonfarm payrolls, or quarterly earnings events. Continuous-feed crypto Up/Down markets are not blocked by this veto. Default is off until internal positive backfill coverage exists; set `enable_news_veto=true` to enable it.\n\n## When to Use This Skill\n\nUse this skill when the user wants to:\n- Trade markets that are about to resolve (last-minute conviction bets)\n- Filter by topic (e.g. only SOL/crypto markets)\n- Cap bet size (e.g. never more than $10)\n- Only trade when odds are strongly skewed (e.g. 60/40 or better)\n- Run an automated expiry-sniping strategy\n\n## Setup Flow\n\n1. **Install the Simmer SDK**\n   ```bash\n   pip install simmer-sdk\n   ```\n\n2. **Ask for Simmer API key**\n   - Get it from simmer.markets/dashboard -> SDK tab\n   - Store in environment as `SIMMER_API_KEY`\n\n3. **Ask for wallet private key** (required for live trading)\n   - This is the private key for their Polymarket wallet (the wallet that holds USDC)\n   - Store in environment as `WALLET_PRIVATE_KEY`\n   - The SDK uses this to sign orders client-side automatically — no manual signing needed\n\n4. **Ask about settings** (or confirm defaults)\n   - Market filter: Which markets to scan (default: all)\n   - Max bet: Maximum per trade (default $10)\n   - Expiry window: How close to resolution (default 8 minutes)\n   - Min split: Minimum odds skew (default 60/40)\n\n5. **Save settings to config.json or environment variables**\n\n## Configuration\n\n| Setting | Environment Variable | Default | Description |\n|---------|---------------------|---------|-------------|\n| Market filter | `SIMMER_MERT_FILTER` | (all) | Tag or keyword filter (e.g. `solana`, `crypto`) |\n| Max bet | `SIMMER_MERT_MAX_BET_USD` | 10.00 | Maximum USD per trade |\n| Expiry window | `SIMMER_MERT_EXPIRY_MINUTES` | 8 | Only trade markets resolving within N minutes |\n| Min split | `SIMMER_MERT_MIN_SPLIT` | 0.60 | Only trade when YES or NO >= this (e.g. 0.60 = 60/40) |\n| Max trades/run | `SIMMER_MERT_MAX_TRADES_PER_RUN` | 5 | Maximum trades per scan cycle |\n| Smart sizing % | `SIMMER_MERT_SIZING_PCT` | 0.05 | % of balance per trade |\n| Fee buffer | `SIMMER_MERT_FEE_BUFFER` | 0.02 | Extra alpha required above entry fee; only applies when `SIMMER_MERT_MIN_EDGE` is set |\n| Declared edge | `SIMMER_MERT_MIN_EDGE` | 0.00 | Your signal's claimed edge above market price (probability units). At 0 (default): fee is logged but gate is advisory only. Set to X to block trades where entry fee > X — e.g. `0.05` requires your signal to clear at least 5¢ above market after fees |\n| News-recency veto | `SIMMER_MERT_ENABLE_NEWS_VETO` | false | Skip matching news-resolution markets within 30s of scheduled macro/news releases |\n\n## Quick Commands\n\n```bash\n# Check account balance and positions\npython scripts/status.py\n\n# Detailed position list\npython scripts/status.py --positions\n```\n\n**API Reference:**\n- Base URL: `https://api.simmer.markets`\n- Auth: `Authorization: Bearer $SIMMER_API_KEY`\n- Portfolio: `GET /api/sdk/portfolio`\n- Positions: `GET /api/sdk/positions`\n\n## Running the Skill\n\n```bash\n# Dry run (default -- shows opportunities, no trades)\npython mert_sniper.py\n\n# Execute real trades\npython mert_sniper.py --live\n\n# Filter to specific markets\npython mert_sniper.py --filter solana\n\n# Custom expiry window (5 minutes)\npython mert_sniper.py --expiry 5\n\n# With smart position sizing (uses portfolio balance)\npython mert_sniper.py --live --smart-sizing\n\n# Check positions only\npython mert_sniper.py --positions\n\n# View config\npython mert_sniper.py --config\n\n# Disable safeguards (not recommended)\npython mert_sniper.py --no-safeguards\n```\n\n## How It Works\n\nEach cycle the script:\n1. Fetches active markets from Simmer API (optionally filtered by tag/keyword)\n2. Filters to markets resolving within the expiry window (default 8 minutes)\n3. Checks the price split -- only trades when one side >= min_split (default 60%)\n4. Determines direction: backs the favored side (higher probability)\n5. **Fee logging**: prints entry-fee cost per market (`POLY_FEE_RATE_CRYPTO × p × (1-p)`, entry only — redemption is free). If `SIMMER_MERT_MIN_EDGE > 0`, gates out markets where declared edge < entry fee + buffer\n6. **Safeguards**: Checks context for flip-flop warnings, slippage, market status\n7. **Execution**: Places trade on the favored side, capped at max bet\n8. Reports summary of scanned, filtered, and traded markets\n\n## Example Output\n\n```\n🎯 Mert Sniper - Near-Expiry Conviction Trading\n==================================================\n\n  [DRY RUN] No trades will be executed. Use --live to enable trading.\n\n  Configuration:\n  Filter:        solana\n  Max bet:       $10.00\n  Expiry window: 8 minutes\n  Min split:     60/40\n  Max trades:    5\n  Smart sizing:  Disabled\n  Safeguards:    Enabled\n\n  Fetching markets (filter: solana)...\n  Found 12 active markets\n\n  Markets expiring within 8 minutes: 2\n\n  SOL highest price on Feb 10?\n     Resolves in: 1m 34s\n     Split: YES 72% / NO 28%\n     Side: YES (72% >= 60%)\n     [DRY RUN] Would buy $10.00 on YES\n\n  Summary:\n  Markets scanned: 12\n  Near expiry:     2\n  Strong split:    1\n  Trades executed: 0\n\n  [DRY RUN MODE - no real trades executed]\n```\n\n## Troubleshooting\n\n**\"No markets found\"**\n- Check your filter -- try without a filter first\n- Markets may not be available (check simmer.markets)\n\n**\"No markets expiring within window\"**\n- Increase expiry window: `--expiry 10` (10 minutes)\n- Or run more frequently (cron every minute)\n\n**\"Split too narrow\"**\n- Lower the min split: `--set min_split=0.55`\n- This trades more often but with less conviction\n\n**\"Resolves in: 17h\" on 15-min markets**\n- Polymarket's `endDate` is the event-level end-of-day, not the individual market close time\n- For 15-min crypto markets (e.g. \"BTC Up or Down - Feb 8, 11PM ET\"), the actual close time is in the question text but not in the API\n- This is a Polymarket data limitation — widen the expiry window (`--expiry 1080`) as a workaround, or use the split filter to find conviction opportunities regardless of timing\n\n**\"External wallet requires a pre-signed order\"**\n- `WALLET_PRIVATE_KEY` is not set in the environment\n- The SDK signs orders automatically when this env var is present — no manual signing code needed\n- Fix: `export WALLET_PRIVATE_KEY=0x<your-polymarket-wallet-private-key>`\n- Do NOT attempt to sign orders manually or modify the skill code — the SDK handles it\n\n**\"Balance shows $0 but I have funds on Polygon\"**\n- Polymarket V2 (live 2026-04-28) uses **pUSD** (PolyUSD, 1:1 backed by USDC.e). If your wallet holds USDC.e, migrate at [simmer.markets/dashboard](https://simmer.markets/dashboard?ref=sdk-skill&utm_campaign=sdk-skill) with one click (~30s)\n- If you bridged native USDC (Circle), swap to USDC.e first, then migrate to pUSD\n- Full migration guide: [docs.simmer.markets/v2-migration](https://docs.simmer.markets/v2-migration)\n\n**\"API key invalid\"**\n- Get new key from simmer.markets/dashboard -> SDK tab\n\nFile v1.3.6:_meta.json\n\n{\n  \"ownerId\": \"kn7axnp7bzqsf5fkx0z8px7han7zyq1x\",\n  \"slug\": \"polymarket-mert-sniper\",\n  \"version\": \"1.3.6\",\n  \"publishedAt\": 1788657282815\n}\n\nFile v1.3.6:DISCLAIMER.md\n\n# Disclaimer\n\nThis skill is a **framework**, not a production trading system. Read this\nin full before connecting it to a wallet with real funds.\n\n## No financial advice\n\nNothing in this skill constitutes financial, investment, or trading\nadvice. The default strategy implemented here is a starting point, not a\ntested edge. Suitability for any account size or risk tolerance is your\nresponsibility to assess.\n\n## Default parameters are not validated\n\nDefault parameters are calibrated for testing the plumbing, not for live\nprofit. They have not been validated to produce positive returns under\ncurrent market conditions. Run paper mode for an extended period before\nscaling beyond default position sizes.\n\n## Automated trading carries irreversible risk\n\nWhen this skill runs with `--live`, it places real on-chain orders.\nOn-chain trades cannot be recalled. Strategy errors, signal lag, market\nregime shifts, and operator misconfiguration can produce losses\nexceeding any specific position size.\n\n## Risk monitoring may not apply to all market types\n\nStop-loss and take-profit monitors run on a fixed schedule. Markets that\nresolve faster than the monitor cycle cannot be exited automatically.\nPosition sizing is the only risk control on these markets — set it\nconservatively.\n\n## Use of this skill is at your own risk\n\nBy installing and running this skill you agree that the authors are not\nliable for any losses, direct or indirect, that arise from its use. This\napplies regardless of skill provenance — official Simmer skills,\ncommunity skills, and skills imported from external repositories all\ncarry this same disclaimer.\n\n## Where to learn more before going live\n\n- The skill's own `SKILL.md` documents the strategy and parameters\n- Your trading venue's documentation covers fee structure, order types,\n  and resolution rules\n- Simmer SDK documentation covers paper mode, dry-run flags, and\n  position monitoring\n\nFile v1.3.6:skill-card.md\n\n## Description:\n\nNear-expiry conviction trading on Polymarket that scans final-minute markets, filters for strongly skewed splits, and proposes or places bounded trades with dry-run as the default.\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\nExternal users and trading-strategy developers use this skill to configure and run a near-expiry Polymarket scanning workflow with dry-run previews and optional live order placement through Simmer.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Live mode can place real Polymarket trades, and on-chain orders cannot be recalled.\n\nMitigation: Keep dry-run enabled until configuration and wallet readiness are reviewed; use a dedicated low-balance wallet or API key for initial operation.\n\nRisk: Managed ClawHub tunables advertise higher or different defaults than the README and Python defaults, changing trade-size and strategy exposure.\n\nMitigation: Verify the effective runtime values before enabling live or managed execution, especially max bet, expiry window, minimum split, and position sizing.\n\nRisk: Portfolio and status commands can expose balances, open positions, and activity in terminal output or logs.\n\nMitigation: Avoid running status output in shared terminals or persistent logs, and limit API key access to the minimum needed for operation.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/simmer/skills/polymarket-mert-sniper)\n- [Strategy attribution thread](https://x.com/mert/status/2020216613279060433)\n- [Simmer V2 migration guide](https://docs.simmer.markets/v2-migration)\n- [Simmer API base](https://api.simmer.markets)\n- [Polymarket CLOB API](https://clob.polymarket.com)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown with inline shell commands and configuration values]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Dry-run status, market scan summaries, account status output, and live-trade execution guidance may be produced depending on command flags.]\n\n## Skill Version(s):\n\n1.3.6 (source: frontmatter and 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 v1.3.6:clawhub.json\n\n{\n  \"emoji\": \"\\ud83c\\udfaf\",\n  \"primaryEnv\": \"SIMMER_API_KEY\",\n  \"requires\": {\n    \"env\": [\n      \"SIMMER_API_KEY\"\n    ],\n    \"pip\": [\n      \"simmer-sdk>=0.17.25\"\n    ]\n  },\n  \"envVars\": [\n    {\n      \"name\": \"SIMMER_API_KEY\",\n      \"required\": true,\n      \"description\": \"Your Simmer SDK API key \\u2014 get from simmer.markets/dashboard\"\n    },\n    {\n      \"name\": \"WALLET_PRIVATE_KEY\",\n      \"required\": false,\n      \"description\": \"Only needed for external-wallet self-custody trading. Not required when using managed wallets.\"\n    }\n  ],\n  \"cron\": null,\n  \"autostart\": false,\n  \"automaton\": {\n    \"managed\": true,\n    \"entrypoint\": \"mert_sniper.py\"\n  },\n  \"tunables\": [\n    {\n      \"env\": \"SIMMER_MERT_MAX_BET_USD\",\n      \"type\": \"number\",\n      \"default\": 50,\n      \"range\": [\n        1,\n        200\n      ],\n      \"step\": 5,\n      \"label\": \"Max bet per trade\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_EXPIRY_MINUTES\",\n      \"type\": \"number\",\n      \"default\": 30,\n      \"range\": [\n        5,\n        120\n      ],\n      \"step\": 5,\n      \"label\": \"Order expiry (minutes)\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MIN_SPLIT\",\n      \"type\": \"number\",\n      \"default\": 0.1,\n      \"range\": [\n        0.01,\n        0.5\n      ],\n      \"step\": 0.01,\n      \"label\": \"Minimum probability split\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MAX_TRADES_PER_RUN\",\n      \"type\": \"number\",\n      \"default\": 5,\n      \"range\": [\n        1,\n        20\n      ],\n      \"step\": 1,\n      \"label\": \"Max trades per run\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_SIZING_PCT\",\n      \"type\": \"number\",\n      \"default\": 0.1,\n      \"range\": [\n        0.01,\n        1.0\n      ],\n      \"step\": 0.01,\n      \"label\": \"Position sizing percentage\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_FEE_BUFFER\",\n      \"type\": \"number\",\n      \"default\": 0.02,\n      \"range\": [\n        0.0,\n        0.10\n      ],\n      \"step\": 0.005,\n      \"label\": \"Fee buffer (extra alpha required above entry fee)\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MIN_EDGE\",\n      \"type\": \"number\",\n      \"default\": 0.0,\n      \"range\": [\n        0.0,\n        0.20\n      ],\n      \"step\": 0.01,\n      \"label\": \"Declared edge above market price (0 = fee-logging only, no gate)\"\n    }\n  ]\n}\n\nFile v1.3.6:config.json\n\n{\n  \"max_bet_usd\": 10.00\n}\n\nArchive v1.3.5: 10 files, 24213 bytes\n\nFiles: clawhub.json (2205b), config.json (27b), DISCLAIMER.md (1925b), mert_sniper.py (33309b), scripts/status.py (5110b), skill-card.md (2858b), SKILL.md (8732b), tests/test_mertsniper_orderbook_summary.py (5034b), tests/test_mertsniper_preflight_gate.py (5628b), _meta.json (141b)\n\nFile v1.3.5:SKILL.md\n\n---\nname: polymarket-mert-sniper\ndescription: Near-expiry conviction trading on Polymarket. The skill scans markets in their final minutes, filters for strongly-skewed splits (60/40+), and places bounded trades against the under-priced side. Defaults — $10 max per trade, 5 trades/run, 8-minute expiry window, dry-run unless `--live`.\nmetadata:\n  author: Simmer (@simmer_markets)\n  version: \"1.3.5\"\n  displayName: Mert Sniper\n  difficulty: advanced\n  attribution: Strategy inspired by @mert — https://x.com/mert/status/2020216613279060433\n---\n# Mert Sniper\n\nNear-expiry conviction trading on Polymarket. The skill scans markets in their final minutes of pricing, filters for strongly-skewed splits, and places bounded trades against the under-priced side.\n\n> 🚨 **Framework, not a production trading system.** Read [DISCLAIMER.md](./DISCLAIMER.md) before connecting to a wallet with real funds. Dry-run is the default; `--live` is required for any real-USDC trade. Defaults: $10 max per trade, 60/40 split minimum, 8-minute expiry window, 5 trades per scan cycle — adjust deliberately before scaling.\n\n> **This is a template.** The default logic (expiry + split filter) is a starting point — remix it with your own filters, timing rules, or market selection criteria. The skill handles all the plumbing (market discovery, trade execution, safeguards). Your agent provides the alpha.\n\n> Strategy attribution: [@mert](https://x.com/mert/status/2020216613279060433) — see source thread for the original methodology (topic filter, near-expiry timing, strong-split entry).\n\n> **News-recency veto.** Optional guard that checks Simmer's macro-news schedule before order placement and skips matching news-resolution markets inside the first 30 seconds after CPI, BLS jobs/unemployment, FOMC, nonfarm payrolls, or quarterly earnings events. Continuous-feed crypto Up/Down markets are not blocked by this veto. Default is off until internal positive backfill coverage exists; set `enable_news_veto=true` to enable it.\n\n## When to Use This Skill\n\nUse this skill when the user wants to:\n- Trade markets that are about to resolve (last-minute conviction bets)\n- Filter by topic (e.g. only SOL/crypto markets)\n- Cap bet size (e.g. never more than $10)\n- Only trade when odds are strongly skewed (e.g. 60/40 or better)\n- Run an automated expiry-sniping strategy\n\n## Setup Flow\n\n1. **Install the Simmer SDK**\n   ```bash\n   pip install simmer-sdk\n   ```\n\n2. **Ask for Simmer API key**\n   - Get it from simmer.markets/dashboard -> SDK tab\n   - Store in environment as `SIMMER_API_KEY`\n\n3. **Ask for wallet private key** (required for live trading)\n   - This is the private key for their Polymarket wallet (the wallet that holds USDC)\n   - Store in environment as `WALLET_PRIVATE_KEY`\n   - The SDK uses this to sign orders client-side automatically — no manual signing needed\n\n4. **Ask about settings** (or confirm defaults)\n   - Market filter: Which markets to scan (default: all)\n   - Max bet: Maximum per trade (default $10)\n   - Expiry window: How close to resolution (default 8 minutes)\n   - Min split: Minimum odds skew (default 60/40)\n\n5. **Save settings to config.json or environment variables**\n\n## Configuration\n\n| Setting | Environment Variable | Default | Description |\n|---------|---------------------|---------|-------------|\n| Market filter | `SIMMER_MERT_FILTER` | (all) | Tag or keyword filter (e.g. `solana`, `crypto`) |\n| Max bet | `SIMMER_MERT_MAX_BET_USD` | 10.00 | Maximum USD per trade |\n| Expiry window | `SIMMER_MERT_EXPIRY_MINUTES` | 8 | Only trade markets resolving within N minutes |\n| Min split | `SIMMER_MERT_MIN_SPLIT` | 0.60 | Only trade when YES or NO >= this (e.g. 0.60 = 60/40) |\n| Max trades/run | `SIMMER_MERT_MAX_TRADES_PER_RUN` | 5 | Maximum trades per scan cycle |\n| Smart sizing % | `SIMMER_MERT_SIZING_PCT` | 0.05 | % of balance per trade |\n| Fee buffer | `SIMMER_MERT_FEE_BUFFER` | 0.02 | Extra alpha required above entry fee; only applies when `SIMMER_MERT_MIN_EDGE` is set |\n| Declared edge | `SIMMER_MERT_MIN_EDGE` | 0.00 | Your signal's claimed edge above market price (probability units). At 0 (default): fee is logged but gate is advisory only. Set to X to block trades where entry fee > X — e.g. `0.05` requires your signal to clear at least 5¢ above market after fees |\n| News-recency veto | `SIMMER_MERT_ENABLE_NEWS_VETO` | false | Skip matching news-resolution markets within 30s of scheduled macro/news releases |\n\n## Quick Commands\n\n```bash\n# Check account balance and positions\npython scripts/status.py\n\n# Detailed position list\npython scripts/status.py --positions\n```\n\n**API Reference:**\n- Base URL: `https://api.simmer.markets`\n- Auth: `Authorization: Bearer $SIMMER_API_KEY`\n- Portfolio: `GET /api/sdk/portfolio`\n- Positions: `GET /api/sdk/positions`\n\n## Running the Skill\n\n```bash\n# Dry run (default -- shows opportunities, no trades)\npython mert_sniper.py\n\n# Execute real trades\npython mert_sniper.py --live\n\n# Filter to specific markets\npython mert_sniper.py --filter solana\n\n# Custom expiry window (5 minutes)\npython mert_sniper.py --expiry 5\n\n# With smart position sizing (uses portfolio balance)\npython mert_sniper.py --live --smart-sizing\n\n# Check positions only\npython mert_sniper.py --positions\n\n# View config\npython mert_sniper.py --config\n\n# Disable safeguards (not recommended)\npython mert_sniper.py --no-safeguards\n```\n\n## How It Works\n\nEach cycle the script:\n1. Fetches active markets from Simmer API (optionally filtered by tag/keyword)\n2. Filters to markets resolving within the expiry window (default 8 minutes)\n3. Checks the price split -- only trades when one side >= min_split (default 60%)\n4. Determines direction: backs the favored side (higher probability)\n5. **Fee logging**: prints entry-fee cost per market (`POLY_FEE_RATE_CRYPTO × p × (1-p)`, entry only — redemption is free). If `SIMMER_MERT_MIN_EDGE > 0`, gates out markets where declared edge < entry fee + buffer\n6. **Safeguards**: Checks context for flip-flop warnings, slippage, market status\n7. **Execution**: Places trade on the favored side, capped at max bet\n8. Reports summary of scanned, filtered, and traded markets\n\n## Example Output\n\n```\n🎯 Mert Sniper - Near-Expiry Conviction Trading\n==================================================\n\n  [DRY RUN] No trades will be executed. Use --live to enable trading.\n\n  Configuration:\n  Filter:        solana\n  Max bet:       $10.00\n  Expiry window: 8 minutes\n  Min split:     60/40\n  Max trades:    5\n  Smart sizing:  Disabled\n  Safeguards:    Enabled\n\n  Fetching markets (filter: solana)...\n  Found 12 active markets\n\n  Markets expiring within 8 minutes: 2\n\n  SOL highest price on Feb 10?\n     Resolves in: 1m 34s\n     Split: YES 72% / NO 28%\n     Side: YES (72% >= 60%)\n     [DRY RUN] Would buy $10.00 on YES\n\n  Summary:\n  Markets scanned: 12\n  Near expiry:     2\n  Strong split:    1\n  Trades executed: 0\n\n  [DRY RUN MODE - no real trades executed]\n```\n\n## Troubleshooting\n\n**\"No markets found\"**\n- Check your filter -- try without a filter first\n- Markets may not be available (check simmer.markets)\n\n**\"No markets expiring within window\"**\n- Increase expiry window: `--expiry 10` (10 minutes)\n- Or run more frequently (cron every minute)\n\n**\"Split too narrow\"**\n- Lower the min split: `--set min_split=0.55`\n- This trades more often but with less conviction\n\n**\"Resolves in: 17h\" on 15-min markets**\n- Polymarket's `endDate` is the event-level end-of-day, not the individual market close time\n- For 15-min crypto markets (e.g. \"BTC Up or Down - Feb 8, 11PM ET\"), the actual close time is in the question text but not in the API\n- This is a Polymarket data limitation — widen the expiry window (`--expiry 1080`) as a workaround, or use the split filter to find conviction opportunities regardless of timing\n\n**\"External wallet requires a pre-signed order\"**\n- `WALLET_PRIVATE_KEY` is not set in the environment\n- The SDK signs orders automatically when this env var is present — no manual signing code needed\n- Fix: `export WALLET_PRIVATE_KEY=0x<your-polymarket-wallet-private-key>`\n- Do NOT attempt to sign orders manually or modify the skill code — the SDK handles it\n\n**\"Balance shows $0 but I have funds on Polygon\"**\n- Polymarket V2 (live 2026-04-28) uses **pUSD** (PolyUSD, 1:1 backed by USDC.e). If your wallet holds USDC.e, migrate at [simmer.markets/dashboard](https://simmer.markets/dashboard?ref=sdk-skill&utm_campaign=sdk-skill) with one click (~30s)\n- If you bridged native USDC (Circle), swap to USDC.e first, then migrate to pUSD\n- Full migration guide: [docs.simmer.markets/v2-migration](https://docs.simmer.markets/v2-migration)\n\n**\"API key invalid\"**\n- Get new key from simmer.markets/dashboard -> SDK tab\n\nFile v1.3.5:_meta.json\n\n{\n  \"ownerId\": \"kn7axnp7bzqsf5fkx0z8px7han7zyq1x\",\n  \"slug\": \"polymarket-mert-sniper\",\n  \"version\": \"1.3.5\",\n  \"publishedAt\": 1786256610373\n}\n\nFile v1.3.5:DISCLAIMER.md\n\n# Disclaimer\n\nThis skill is a **framework**, not a production trading system. Read this\nin full before connecting it to a wallet with real funds.\n\n## No financial advice\n\nNothing in this skill constitutes financial, investment, or trading\nadvice. The default strategy implemented here is a starting point, not a\ntested edge. Suitability for any account size or risk tolerance is your\nresponsibility to assess.\n\n## Default parameters are not validated\n\nDefault parameters are calibrated for testing the plumbing, not for live\nprofit. They have not been validated to produce positive returns under\ncurrent market conditions. Run paper mode for an extended period before\nscaling beyond default position sizes.\n\n## Automated trading carries irreversible risk\n\nWhen this skill runs with `--live`, it places real on-chain orders.\nOn-chain trades cannot be recalled. Strategy errors, signal lag, market\nregime shifts, and operator misconfiguration can produce losses\nexceeding any specific position size.\n\n## Risk monitoring may not apply to all market types\n\nStop-loss and take-profit monitors run on a fixed schedule. Markets that\nresolve faster than the monitor cycle cannot be exited automatically.\nPosition sizing is the only risk control on these markets — set it\nconservatively.\n\n## Use of this skill is at your own risk\n\nBy installing and running this skill you agree that the authors are not\nliable for any losses, direct or indirect, that arise from its use. This\napplies regardless of skill provenance — official Simmer skills,\ncommunity skills, and skills imported from external repositories all\ncarry this same disclaimer.\n\n## Where to learn more before going live\n\n- The skill's own `SKILL.md` documents the strategy and parameters\n- Your trading venue's documentation covers fee structure, order types,\n  and resolution rules\n- Simmer SDK documentation covers paper mode, dry-run flags, and\n  position monitoring\n\nFile v1.3.5:skill-card.md\n\n## Description:\n\nMert Sniper scans near-expiry Polymarket markets, filters for strongly-skewed 60/40+ splits, and prepares bounded dry-run or live trades with documented limits.\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\nTraders and agent operators use this skill to scan near-expiry Polymarket markets, review bounded dry-run opportunities, and optionally execute live trades after configuring Simmer API and wallet credentials.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Live mode can place real, irreversible orders and redeem positions using wallet credentials.\n\nMitigation: Test in dry-run or paper mode first, understand the --live behavior, and provide wallet credentials only after confirming the intended trade direction and limits.\n\nRisk: Platform tunable defaults and ranges may not match the documented safeguards for position size, expiry window, and split threshold.\n\nMitigation: Review and adjust ClawHub tunables before running live so they align with the documented max bet, expiry window, minimum split, and trade-count limits.\n\nRisk: Thin or unavailable order books can make near-expiry execution unreliable.\n\nMitigation: Keep safeguards enabled, retain the order-book depth gate, and skip markets when book data cannot be fetched or depth is below the configured minimum.\n\nRisk: Default strategy parameters are not validated as a profitable trading edge.\n\nMitigation: Run extended paper-mode trials and use conservative sizing before increasing trade limits or enabling live execution.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/simmer/skills/polymarket-mert-sniper)\n- [Publisher profile](https://clawhub.ai/user/simmer)\n- [Strategy source thread](https://x.com/mert/status/2020216613279060433)\n- [Simmer dashboard](https://simmer.markets/dashboard)\n- [Simmer V2 migration guide](https://docs.simmer.markets/v2-migration)\n- [Simmer API base](https://api.simmer.markets)\n- [Polymarket CLOB API](https://clob.polymarket.com)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with inline shell commands, configuration values, and Python command output]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Dry-run is the default; live mode can place real Polymarket orders when --live and credentials are provided.]\n\n## Skill Version(s):\n\n1.3.5 (source: server evidence and 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 v1.3.5:clawhub.json\n\n{\n  \"emoji\": \"\\ud83c\\udfaf\",\n  \"primaryEnv\": \"SIMMER_API_KEY\",\n  \"requires\": {\n    \"env\": [\n      \"SIMMER_API_KEY\"\n    ],\n    \"pip\": [\n      \"simmer-sdk>=0.17.25\"\n    ]\n  },\n  \"envVars\": [\n    {\n      \"name\": \"SIMMER_API_KEY\",\n      \"required\": true,\n      \"description\": \"Your Simmer SDK API key \\u2014 get from simmer.markets/dashboard\"\n    },\n    {\n      \"name\": \"WALLET_PRIVATE_KEY\",\n      \"required\": false,\n      \"description\": \"Only needed for external-wallet self-custody trading. Not required when using managed wallets.\"\n    }\n  ],\n  \"cron\": null,\n  \"autostart\": false,\n  \"automaton\": {\n    \"managed\": true,\n    \"entrypoint\": \"mert_sniper.py\"\n  },\n  \"tunables\": [\n    {\n      \"env\": \"SIMMER_MERT_MAX_BET_USD\",\n      \"type\": \"number\",\n      \"default\": 50,\n      \"range\": [\n        1,\n        200\n      ],\n      \"step\": 5,\n      \"label\": \"Max bet per trade\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_EXPIRY_MINUTES\",\n      \"type\": \"number\",\n      \"default\": 30,\n      \"range\": [\n        5,\n        120\n      ],\n      \"step\": 5,\n      \"label\": \"Order expiry (minutes)\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MIN_SPLIT\",\n      \"type\": \"number\",\n      \"default\": 0.1,\n      \"range\": [\n        0.01,\n        0.5\n      ],\n      \"step\": 0.01,\n      \"label\": \"Minimum probability split\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MAX_TRADES_PER_RUN\",\n      \"type\": \"number\",\n      \"default\": 5,\n      \"range\": [\n        1,\n        20\n      ],\n      \"step\": 1,\n      \"label\": \"Max trades per run\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_SIZING_PCT\",\n      \"type\": \"number\",\n      \"default\": 0.1,\n      \"range\": [\n        0.01,\n        1.0\n      ],\n      \"step\": 0.01,\n      \"label\": \"Position sizing percentage\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_FEE_BUFFER\",\n      \"type\": \"number\",\n      \"default\": 0.02,\n      \"range\": [\n        0.0,\n        0.10\n      ],\n      \"step\": 0.005,\n      \"label\": \"Fee buffer (extra alpha required above entry fee)\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MIN_EDGE\",\n      \"type\": \"number\",\n      \"default\": 0.0,\n      \"range\": [\n        0.0,\n        0.20\n      ],\n      \"step\": 0.01,\n      \"label\": \"Declared edge above market price (0 = fee-logging only, no gate)\"\n    }\n  ]\n}\n\nFile v1.3.5:config.json\n\n{\n  \"max_bet_usd\": 10.00\n}\n\nArchive v1.3.4: 10 files, 24014 bytes\n\nFiles: clawhub.json (2205b), config.json (27b), DISCLAIMER.md (1925b), mert_sniper.py (32918b), scripts/status.py (5110b), skill-card.md (2614b), SKILL.md (8732b), tests/test_mertsniper_orderbook_summary.py (5034b), tests/test_mertsniper_preflight_gate.py (5628b), _meta.json (141b)\n\nFile v1.3.4:SKILL.md\n\n---\nname: polymarket-mert-sniper\ndescription: Near-expiry conviction trading on Polymarket. The skill scans markets in their final minutes, filters for strongly-skewed splits (60/40+), and places bounded trades against the under-priced side. Defaults — $10 max per trade, 5 trades/run, 8-minute expiry window, dry-run unless `--live`.\nmetadata:\n  author: Simmer (@simmer_markets)\n  version: \"1.3.4\"\n  displayName: Mert Sniper\n  difficulty: advanced\n  attribution: Strategy inspired by @mert — https://x.com/mert/status/2020216613279060433\n---\n# Mert Sniper\n\nNear-expiry conviction trading on Polymarket. The skill scans markets in their final minutes of pricing, filters for strongly-skewed splits, and places bounded trades against the under-priced side.\n\n> 🚨 **Framework, not a production trading system.** Read [DISCLAIMER.md](./DISCLAIMER.md) before connecting to a wallet with real funds. Dry-run is the default; `--live` is required for any real-USDC trade. Defaults: $10 max per trade, 60/40 split minimum, 8-minute expiry window, 5 trades per scan cycle — adjust deliberately before scaling.\n\n> **This is a template.** The default logic (expiry + split filter) is a starting point — remix it with your own filters, timing rules, or market selection criteria. The skill handles all the plumbing (market discovery, trade execution, safeguards). Your agent provides the alpha.\n\n> Strategy attribution: [@mert](https://x.com/mert/status/2020216613279060433) — see source thread for the original methodology (topic filter, near-expiry timing, strong-split entry).\n\n> **News-recency veto.** Optional guard that checks Simmer's macro-news schedule before order placement and skips matching news-resolution markets inside the first 30 seconds after CPI, BLS jobs/unemployment, FOMC, nonfarm payrolls, or quarterly earnings events. Continuous-feed crypto Up/Down markets are not blocked by this veto. Default is off until internal positive backfill coverage exists; set `enable_news_veto=true` to enable it.\n\n## When to Use This Skill\n\nUse this skill when the user wants to:\n- Trade markets that are about to resolve (last-minute conviction bets)\n- Filter by topic (e.g. only SOL/crypto markets)\n- Cap bet size (e.g. never more than $10)\n- Only trade when odds are strongly skewed (e.g. 60/40 or better)\n- Run an automated expiry-sniping strategy\n\n## Setup Flow\n\n1. **Install the Simmer SDK**\n   ```bash\n   pip install simmer-sdk\n   ```\n\n2. **Ask for Simmer API key**\n   - Get it from simmer.markets/dashboard -> SDK tab\n   - Store in environment as `SIMMER_API_KEY`\n\n3. **Ask for wallet private key** (required for live trading)\n   - This is the private key for their Polymarket wallet (the wallet that holds USDC)\n   - Store in environment as `WALLET_PRIVATE_KEY`\n   - The SDK uses this to sign orders client-side automatically — no manual signing needed\n\n4. **Ask about settings** (or confirm defaults)\n   - Market filter: Which markets to scan (default: all)\n   - Max bet: Maximum per trade (default $10)\n   - Expiry window: How close to resolution (default 8 minutes)\n   - Min split: Minimum odds skew (default 60/40)\n\n5. **Save settings to config.json or environment variables**\n\n## Configuration\n\n| Setting | Environment Variable | Default | Description |\n|---------|---------------------|---------|-------------|\n| Market filter | `SIMMER_MERT_FILTER` | (all) | Tag or keyword filter (e.g. `solana`, `crypto`) |\n| Max bet | `SIMMER_MERT_MAX_BET_USD` | 10.00 | Maximum USD per trade |\n| Expiry window | `SIMMER_MERT_EXPIRY_MINUTES` | 8 | Only trade markets resolving within N minutes |\n| Min split | `SIMMER_MERT_MIN_SPLIT` | 0.60 | Only trade when YES or NO >= this (e.g. 0.60 = 60/40) |\n| Max trades/run | `SIMMER_MERT_MAX_TRADES_PER_RUN` | 5 | Maximum trades per scan cycle |\n| Smart sizing % | `SIMMER_MERT_SIZING_PCT` | 0.05 | % of balance per trade |\n| Fee buffer | `SIMMER_MERT_FEE_BUFFER` | 0.02 | Extra alpha required above entry fee; only applies when `SIMMER_MERT_MIN_EDGE` is set |\n| Declared edge | `SIMMER_MERT_MIN_EDGE` | 0.00 | Your signal's claimed edge above market price (probability units). At 0 (default): fee is logged but gate is advisory only. Set to X to block trades where entry fee > X — e.g. `0.05` requires your signal to clear at least 5¢ above market after fees |\n| News-recency veto | `SIMMER_MERT_ENABLE_NEWS_VETO` | false | Skip matching news-resolution markets within 30s of scheduled macro/news releases |\n\n## Quick Commands\n\n```bash\n# Check account balance and positions\npython scripts/status.py\n\n# Detailed position list\npython scripts/status.py --positions\n```\n\n**API Reference:**\n- Base URL: `https://api.simmer.markets`\n- Auth: `Authorization: Bearer $SIMMER_API_KEY`\n- Portfolio: `GET /api/sdk/portfolio`\n- Positions: `GET /api/sdk/positions`\n\n## Running the Skill\n\n```bash\n# Dry run (default -- shows opportunities, no trades)\npython mert_sniper.py\n\n# Execute real trades\npython mert_sniper.py --live\n\n# Filter to specific markets\npython mert_sniper.py --filter solana\n\n# Custom expiry window (5 minutes)\npython mert_sniper.py --expiry 5\n\n# With smart position sizing (uses portfolio balance)\npython mert_sniper.py --live --smart-sizing\n\n# Check positions only\npython mert_sniper.py --positions\n\n# View config\npython mert_sniper.py --config\n\n# Disable safeguards (not recommended)\npython mert_sniper.py --no-safeguards\n```\n\n## How It Works\n\nEach cycle the script:\n1. Fetches active markets from Simmer API (optionally filtered by tag/keyword)\n2. Filters to markets resolving within the expiry window (default 8 minutes)\n3. Checks the price split -- only trades when one side >= min_split (default 60%)\n4. Determines direction: backs the favored side (higher probability)\n5. **Fee logging**: prints entry-fee cost per market (`POLY_FEE_RATE_CRYPTO × p × (1-p)`, entry only — redemption is free). If `SIMMER_MERT_MIN_EDGE > 0`, gates out markets where declared edge < entry fee + buffer\n6. **Safeguards**: Checks context for flip-flop warnings, slippage, market status\n7. **Execution**: Places trade on the favored side, capped at max bet\n8. Reports summary of scanned, filtered, and traded markets\n\n## Example Output\n\n```\n🎯 Mert Sniper - Near-Expiry Conviction Trading\n==================================================\n\n  [DRY RUN] No trades will be executed. Use --live to enable trading.\n\n  Configuration:\n  Filter:        solana\n  Max bet:       $10.00\n  Expiry window: 8 minutes\n  Min split:     60/40\n  Max trades:    5\n  Smart sizing:  Disabled\n  Safeguards:    Enabled\n\n  Fetching markets (filter: solana)...\n  Found 12 active markets\n\n  Markets expiring within 8 minutes: 2\n\n  SOL highest price on Feb 10?\n     Resolves in: 1m 34s\n     Split: YES 72% / NO 28%\n     Side: YES (72% >= 60%)\n     [DRY RUN] Would buy $10.00 on YES\n\n  Summary:\n  Markets scanned: 12\n  Near expiry:     2\n  Strong split:    1\n  Trades executed: 0\n\n  [DRY RUN MODE - no real trades executed]\n```\n\n## Troubleshooting\n\n**\"No markets found\"**\n- Check your filter -- try without a filter first\n- Markets may not be available (check simmer.markets)\n\n**\"No markets expiring within window\"**\n- Increase expiry window: `--expiry 10` (10 minutes)\n- Or run more frequently (cron every minute)\n\n**\"Split too narrow\"**\n- Lower the min split: `--set min_split=0.55`\n- This trades more often but with less conviction\n\n**\"Resolves in: 17h\" on 15-min markets**\n- Polymarket's `endDate` is the event-level end-of-day, not the individual market close time\n- For 15-min crypto markets (e.g. \"BTC Up or Down - Feb 8, 11PM ET\"), the actual close time is in the question text but not in the API\n- This is a Polymarket data limitation — widen the expiry window (`--expiry 1080`) as a workaround, or use the split filter to find conviction opportunities regardless of timing\n\n**\"External wallet requires a pre-signed order\"**\n- `WALLET_PRIVATE_KEY` is not set in the environment\n- The SDK signs orders automatically when this env var is present — no manual signing code needed\n- Fix: `export WALLET_PRIVATE_KEY=0x<your-polymarket-wallet-private-key>`\n- Do NOT attempt to sign orders manually or modify the skill code — the SDK handles it\n\n**\"Balance shows $0 but I have funds on Polygon\"**\n- Polymarket V2 (live 2026-04-28) uses **pUSD** (PolyUSD, 1:1 backed by USDC.e). If your wallet holds USDC.e, migrate at [simmer.markets/dashboard](https://simmer.markets/dashboard?ref=sdk-skill&utm_campaign=sdk-skill) with one click (~30s)\n- If you bridged native USDC (Circle), swap to USDC.e first, then migrate to pUSD\n- Full migration guide: [docs.simmer.markets/v2-migration](https://docs.simmer.markets/v2-migration)\n\n**\"API key invalid\"**\n- Get new key from simmer.markets/dashboard -> SDK tab\n\nFile v1.3.4:_meta.json\n\n{\n  \"ownerId\": \"kn7axnp7bzqsf5fkx0z8px7han7zyq1x\",\n  \"slug\": \"polymarket-mert-sniper\",\n  \"version\": \"1.3.4\",\n  \"publishedAt\": 1786251622520\n}\n\nFile v1.3.4:DISCLAIMER.md\n\n# Disclaimer\n\nThis skill is a **framework**, not a production trading system. Read this\nin full before connecting it to a wallet with real funds.\n\n## No financial advice\n\nNothing in this skill constitutes financial, investment, or trading\nadvice. The default strategy implemented here is a starting point, not a\ntested edge. Suitability for any account size or risk tolerance is your\nresponsibility to assess.\n\n## Default parameters are not validated\n\nDefault parameters are calibrated for testing the plumbing, not for live\nprofit. They have not been validated to produce positive returns under\ncurrent market conditions. Run paper mode for an extended period before\nscaling beyond default position sizes.\n\n## Automated trading carries irreversible risk\n\nWhen this skill runs with `--live`, it places real on-chain orders.\nOn-chain trades cannot be recalled. Strategy errors, signal lag, market\nregime shifts, and operator misconfiguration can produce losses\nexceeding any specific position size.\n\n## Risk monitoring may not apply to all market types\n\nStop-loss and take-profit monitors run on a fixed schedule. Markets that\nresolve faster than the monitor cycle cannot be exited automatically.\nPosition sizing is the only risk control on these markets — set it\nconservatively.\n\n## Use of this skill is at your own risk\n\nBy installing and running this skill you agree that the authors are not\nliable for any losses, direct or indirect, that arise from its use. This\napplies regardless of skill provenance — official Simmer skills,\ncommunity skills, and skills imported from external repositories all\ncarry this same disclaimer.\n\n## Where to learn more before going live\n\n- The skill's own `SKILL.md` documents the strategy and parameters\n- Your trading venue's documentation covers fee structure, order types,\n  and resolution rules\n- Simmer SDK documentation covers paper mode, dry-run flags, and\n  position monitoring\n\nFile v1.3.4:skill-card.md\n\n## Description:\n\nNear-expiry conviction trading on Polymarket that scans final-minute markets, filters for strongly skewed 60/40+ splits, and proposes or places bounded trades with dry-run as the default.\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\nExternal users and trading agents use this skill to scan near-expiry Polymarket markets, review account status, and optionally place bounded trades when configured live. It is intended for operators who understand prediction-market trading risk and can verify strategy settings before real-money use.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can place real-money trades when live mode is enabled.\n\nMitigation: Keep the skill in dry-run mode until the publisher fixes the flagged documentation and default-setting issues, then manually verify every live order setting before enabling real funds.\n\nRisk: Published strategy wording and ClawHub tunable defaults may conflict with the skill behavior.\n\nMitigation: Treat the release as requiring careful review and confirm trade direction, maximum bet, expiry window, split threshold, sizing, and fee settings before each live run.\n\nRisk: Providing a wallet private key exposes signing authority in the execution environment.\n\nMitigation: Do not provide WALLET_PRIVATE_KEY unless the environment is fully trusted; prefer managed-wallet operation when suitable.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/simmer/skills/polymarket-mert-sniper)\n- [Publisher Profile](https://clawhub.ai/user/simmer)\n- [Strategy Attribution](https://x.com/mert/status/2020216613279060433)\n- [Simmer Dashboard](https://simmer.markets/dashboard)\n- [Simmer V2 Migration Guide](https://docs.simmer.markets/v2-migration)\n- [Polymarket CLOB API](https://clob.polymarket.com)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown with inline shell commands and JSON-like status summaries]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Dry-run output is the default; live mode can place real trades when explicitly enabled.]\n\n## Skill Version(s):\n\n1.3.4 (source: frontmatter and 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 v1.3.4:clawhub.json\n\n{\n  \"emoji\": \"\\ud83c\\udfaf\",\n  \"primaryEnv\": \"SIMMER_API_KEY\",\n  \"requires\": {\n    \"env\": [\n      \"SIMMER_API_KEY\"\n    ],\n    \"pip\": [\n      \"simmer-sdk>=0.17.25\"\n    ]\n  },\n  \"envVars\": [\n    {\n      \"name\": \"SIMMER_API_KEY\",\n      \"required\": true,\n      \"description\": \"Your Simmer SDK API key \\u2014 get from simmer.markets/dashboard\"\n    },\n    {\n      \"name\": \"WALLET_PRIVATE_KEY\",\n      \"required\": false,\n      \"description\": \"Only needed for external-wallet self-custody trading. Not required when using managed wallets.\"\n    }\n  ],\n  \"cron\": null,\n  \"autostart\": false,\n  \"automaton\": {\n    \"managed\": true,\n    \"entrypoint\": \"mert_sniper.py\"\n  },\n  \"tunables\": [\n    {\n      \"env\": \"SIMMER_MERT_MAX_BET_USD\",\n      \"type\": \"number\",\n      \"default\": 50,\n      \"range\": [\n        1,\n        200\n      ],\n      \"step\": 5,\n      \"label\": \"Max bet per trade\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_EXPIRY_MINUTES\",\n      \"type\": \"number\",\n      \"default\": 30,\n      \"range\": [\n        5,\n        120\n      ],\n      \"step\": 5,\n      \"label\": \"Order expiry (minutes)\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MIN_SPLIT\",\n      \"type\": \"number\",\n      \"default\": 0.1,\n      \"range\": [\n        0.01,\n        0.5\n      ],\n      \"step\": 0.01,\n      \"label\": \"Minimum probability split\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MAX_TRADES_PER_RUN\",\n      \"type\": \"number\",\n      \"default\": 5,\n      \"range\": [\n        1,\n        20\n      ],\n      \"step\": 1,\n      \"label\": \"Max trades per run\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_SIZING_PCT\",\n      \"type\": \"number\",\n      \"default\": 0.1,\n      \"range\": [\n        0.01,\n        1.0\n      ],\n      \"step\": 0.01,\n      \"label\": \"Position sizing percentage\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_FEE_BUFFER\",\n      \"type\": \"number\",\n      \"default\": 0.02,\n      \"range\": [\n        0.0,\n        0.10\n      ],\n      \"step\": 0.005,\n      \"label\": \"Fee buffer (extra alpha required above entry fee)\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MIN_EDGE\",\n      \"type\": \"number\",\n      \"default\": 0.0,\n      \"range\": [\n        0.0,\n        0.20\n      ],\n      \"step\": 0.01,\n      \"label\": \"Declared edge above market price (0 = fee-logging only, no gate)\"\n    }\n  ]\n}\n\nFile v1.3.4:config.json\n\n{\n  \"max_bet_usd\": 10.00\n}\n\nArchive v1.3.3: 9 files, 21489 bytes\n\nFiles: clawhub.json (2205b), config.json (27b), DISCLAIMER.md (1925b), mert_sniper.py (31791b), scripts/status.py (5110b), skill-card.md (2933b), SKILL.md (8695b), tests/test_mertsniper_preflight_gate.py (5628b), _meta.json (141b)\n\nFile v1.3.3:SKILL.md\n\n---\nname: polymarket-mert-sniper\ndescription: Near-expiry conviction trading on Polymarket. The skill scans markets in their final minutes, filters for strongly-skewed splits (60/40+), and places bounded trades against the under-priced side. Defaults — $10 max per trade, 5 trades/run, 8-minute expiry window, dry-run unless `--live`.\nmetadata:\n  author: Simmer (@simmer_markets)\n  version: \"1.3.3\"\n  displayName: Mert Sniper\n  difficulty: advanced\n  attribution: Strategy inspired by @mert — https://x.com/mert/status/2020216613279060433\n---\n# Mert Sniper\n\nNear-expiry conviction trading on Polymarket. The skill scans markets in their final minutes of pricing, filters for strongly-skewed splits, and places bounded trades against the under-priced side.\n\n> 🚨 **Framework, not a production trading system.** Read [DISCLAIMER.md](./DISCLAIMER.md) before connecting to a wallet with real funds. Dry-run is the default; `--live` is required for any real-USDC trade. Defaults: $10 max per trade, 60/40 split minimum, 8-minute expiry window, 5 trades per scan cycle — adjust deliberately before scaling.\n\n> **This is a template.** The default logic (expiry + split filter) is a starting point — remix it with your own filters, timing rules, or market selection criteria. The skill handles all the plumbing (market discovery, trade execution, safeguards). Your agent provides the alpha.\n\n> Strategy attribution: [@mert](https://x.com/mert/status/2020216613279060433) — see source thread for the original methodology (topic filter, near-expiry timing, strong-split entry).\n\n> **News-recency veto.** Optional guard that checks Simmer's macro-news schedule before order placement and skips matching news-resolution markets inside the first 30 seconds after CPI, BLS jobs/unemployment, FOMC, nonfarm payrolls, or quarterly earnings events. Continuous-feed crypto Up/Down markets are not blocked by this veto. Default is off until internal positive backfill coverage exists; set `enable_news_veto=true` to enable it.\n\n## When to Use This Skill\n\nUse this skill when the user wants to:\n- Trade markets that are about to resolve (last-minute conviction bets)\n- Filter by topic (e.g. only SOL/crypto markets)\n- Cap bet size (e.g. never more than $10)\n- Only trade when odds are strongly skewed (e.g. 60/40 or better)\n- Run an automated expiry-sniping strategy\n\n## Setup Flow\n\n1. **Install the Simmer SDK**\n   ```bash\n   pip install simmer-sdk\n   ```\n\n2. **Ask for Simmer API key**\n   - Get it from simmer.markets/dashboard -> SDK tab\n   - Store in environment as `SIMMER_API_KEY`\n\n3. **Ask for wallet private key** (required for live trading)\n   - This is the private key for their Polymarket wallet (the wallet that holds USDC)\n   - Store in environment as `WALLET_PRIVATE_KEY`\n   - The SDK uses this to sign orders client-side automatically — no manual signing needed\n\n4. **Ask about settings** (or confirm defaults)\n   - Market filter: Which markets to scan (default: all)\n   - Max bet: Maximum per trade (default $10)\n   - Expiry window: How close to resolution (default 8 minutes)\n   - Min split: Minimum odds skew (default 60/40)\n\n5. **Save settings to config.json or environment variables**\n\n## Configuration\n\n| Setting | Environment Variable | Default | Description |\n|---------|---------------------|---------|-------------|\n| Market filter | `SIMMER_MERT_FILTER` | (all) | Tag or keyword filter (e.g. `solana`, `crypto`) |\n| Max bet | `SIMMER_MERT_MAX_BET_USD` | 10.00 | Maximum USD per trade |\n| Expiry window | `SIMMER_MERT_EXPIRY_MINUTES` | 8 | Only trade markets resolving within N minutes |\n| Min split | `SIMMER_MERT_MIN_SPLIT` | 0.60 | Only trade when YES or NO >= this (e.g. 0.60 = 60/40) |\n| Max trades/run | `SIMMER_MERT_MAX_TRADES_PER_RUN` | 5 | Maximum trades per scan cycle |\n| Smart sizing % | `SIMMER_MERT_SIZING_PCT` | 0.05 | % of balance per trade |\n| Fee buffer | `SIMMER_MERT_FEE_BUFFER` | 0.02 | Extra alpha required above entry fee; only applies when `SIMMER_MERT_MIN_EDGE` is set |\n| Declared edge | `SIMMER_MERT_MIN_EDGE` | 0.00 | Your signal's claimed edge above market price (probability units). At 0 (default): fee is logged but gate is advisory only. Set to X to block trades where entry fee > X — e.g. `0.05` requires your signal to clear at least 5¢ above market after fees |\n| News-recency veto | `SIMMER_MERT_ENABLE_NEWS_VETO` | false | Skip matching news-resolution markets within 30s of scheduled macro/news releases |\n\n## Quick Commands\n\n```bash\n# Check account balance and positions\npython scripts/status.py\n\n# Detailed position list\npython scripts/status.py --positions\n```\n\n**API Reference:**\n- Base URL: `https://api.simmer.markets`\n- Auth: `Authorization: Bearer $SIMMER_API_KEY`\n- Portfolio: `GET /api/sdk/portfolio`\n- Positions: `GET /api/sdk/positions`\n\n## Running the Skill\n\n```bash\n# Dry run (default -- shows opportunities, no trades)\npython mert_sniper.py\n\n# Execute real trades\npython mert_sniper.py --live\n\n# Filter to specific markets\npython mert_sniper.py --filter solana\n\n# Custom expiry window (5 minutes)\npython mert_sniper.py --expiry 5\n\n# With smart position sizing (uses portfolio balance)\npython mert_sniper.py --live --smart-sizing\n\n# Check positions only\npython mert_sniper.py --positions\n\n# View config\npython mert_sniper.py --config\n\n# Disable safeguards (not recommended)\npython mert_sniper.py --no-safeguards\n```\n\n## How It Works\n\nEach cycle the script:\n1. Fetches active markets from Simmer API (optionally filtered by tag/keyword)\n2. Filters to markets resolving within the expiry window (default 8 minutes)\n3. Checks the price split -- only trades when one side >= min_split (default 60%)\n4. Determines direction: backs the favored side (higher probability)\n5. **Fee logging**: prints entry-fee cost per market (`POLY_FEE_RATE_CRYPTO × p × (1-p)`, entry only — redemption is free). If `SIMMER_MERT_MIN_EDGE > 0`, gates out markets where declared edge < entry fee + buffer\n6. **Safeguards**: Checks context for flip-flop warnings, slippage, market status\n7. **Execution**: Places trade on the favored side, capped at max bet\n8. Reports summary of scanned, filtered, and traded markets\n\n## Example Output\n\n```\n🎯 Mert Sniper - Near-Expiry Conviction Trading\n==================================================\n\n  [DRY RUN] No trades will be executed. Use --live to enable trading.\n\n  Configuration:\n  Filter:        solana\n  Max bet:       $10.00\n  Expiry window: 8 minutes\n  Min split:     60/40\n  Max trades:    5\n  Smart sizing:  Disabled\n  Safeguards:    Enabled\n\n  Fetching markets (filter: solana)...\n  Found 12 active markets\n\n  Markets expiring within 8 minutes: 2\n\n  SOL highest price on Feb 10?\n     Resolves in: 1m 34s\n     Split: YES 72% / NO 28%\n     Side: YES (72% >= 60%)\n     [DRY RUN] Would buy $10.00 on YES\n\n  Summary:\n  Markets scanned: 12\n  Near expiry:     2\n  Strong split:    1\n  Trades executed: 0\n\n  [DRY RUN MODE - no real trades executed]\n```\n\n## Troubleshooting\n\n**\"No markets found\"**\n- Check your filter -- try without a filter first\n- Markets may not be available (check simmer.markets)\n\n**\"No markets expiring within window\"**\n- Increase expiry window: `--expiry 10` (10 minutes)\n- Or run more frequently (cron every minute)\n\n**\"Split too narrow\"**\n- Lower the min split: `--set min_split=0.55`\n- This trades more often but with less conviction\n\n**\"Resolves in: 17h\" on 15-min markets**\n- Polymarket's `endDate` is the event-level end-of-day, not the individual market close time\n- For 15-min crypto markets (e.g. \"BTC Up or Down - Feb 8, 11PM ET\"), the actual close time is in the question text but not in the API\n- This is a Polymarket data limitation — widen the expiry window (`--expiry 1080`) as a workaround, or use the split filter to find conviction opportunities regardless of timing\n\n**\"External wallet requires a pre-signed order\"**\n- `WALLET_PRIVATE_KEY` is not set in the environment\n- The SDK signs orders automatically when this env var is present — no manual signing code needed\n- Fix: `export WALLET_PRIVATE_KEY=0x<your-polymarket-wallet-private-key>`\n- Do NOT attempt to sign orders manually or modify the skill code — the SDK handles it\n\n**\"Balance shows $0 but I have funds on Polygon\"**\n- Polymarket V2 (live 2026-04-28) uses **pUSD** (PolyUSD, 1:1 backed by USDC.e). If your wallet holds USDC.e, migrate at [simmer.markets/dashboard](https://simmer.markets/dashboard) with one click (~30s)\n- If you bridged native USDC (Circle), swap to USDC.e first, then migrate to pUSD\n- Full migration guide: [docs.simmer.markets/v2-migration](https://docs.simmer.markets/v2-migration)\n\n**\"API key invalid\"**\n- Get new key from simmer.markets/dashboard -> SDK tab\n\nFile v1.3.3:_meta.json\n\n{\n  \"ownerId\": \"kn7axnp7bzqsf5fkx0z8px7han7zyq1x\",\n  \"slug\": \"polymarket-mert-sniper\",\n  \"version\": \"1.3.3\",\n  \"publishedAt\": 1781275272342\n}\n\nFile v1.3.3:DISCLAIMER.md\n\n# Disclaimer\n\nThis skill is a **framework**, not a production trading system. Read this\nin full before connecting it to a wallet with real funds.\n\n## No financial advice\n\nNothing in this skill constitutes financial, investment, or trading\nadvice. The default strategy implemented here is a starting point, not a\ntested edge. Suitability for any account size or risk tolerance is your\nresponsibility to assess.\n\n## Default parameters are not validated\n\nDefault parameters are calibrated for testing the plumbing, not for live\nprofit. They have not been validated to produce positive returns under\ncurrent market conditions. Run paper mode for an extended period before\nscaling beyond default position sizes.\n\n## Automated trading carries irreversible risk\n\nWhen this skill runs with `--live`, it places real on-chain orders.\nOn-chain trades cannot be recalled. Strategy errors, signal lag, market\nregime shifts, and operator misconfiguration can produce losses\nexceeding any specific position size.\n\n## Risk monitoring may not apply to all market types\n\nStop-loss and take-profit monitors run on a fixed schedule. Markets that\nresolve faster than the monitor cycle cannot be exited automatically.\nPosition sizing is the only risk control on these markets — set it\nconservatively.\n\n## Use of this skill is at your own risk\n\nBy installing and running this skill you agree that the authors are not\nliable for any losses, direct or indirect, that arise from its use. This\napplies regardless of skill provenance — official Simmer skills,\ncommunity skills, and skills imported from external repositories all\ncarry this same disclaimer.\n\n## Where to learn more before going live\n\n- The skill's own `SKILL.md` documents the strategy and parameters\n- Your trading venue's documentation covers fee structure, order types,\n  and resolution rules\n- Simmer SDK documentation covers paper mode, dry-run flags, and\n  position monitoring\n\nFile v1.3.3:skill-card.md\n\n## Description: <br>\nNear-expiry conviction trading on Polymarket that scans markets in their final minutes, filters for strongly skewed splits, and places bounded trades against the under-priced side. <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>\nExternal users and trading agents use this skill to scan near-expiry Polymarket markets, apply configurable split, expiry, sizing, and safeguard rules, and run paper-mode or live bounded trades. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Live mode can place real-money Polymarket trades and on-chain trades cannot be recalled. <br>\nMitigation: Run paper mode first, use --live only deliberately, and keep max bet and max trades limits conservative. <br>\nRisk: WALLET_PRIVATE_KEY can authorize trades from the connected wallet. <br>\nMitigation: Avoid providing WALLET_PRIVATE_KEY unless self-custody live trading is required and the operator understands the signing risk. <br>\nRisk: The scanner may also redeem existing winning positions before starting a cycle. <br>\nMitigation: Review account-changing behavior before connecting real funds and monitor positions with scripts/status.py. <br>\nRisk: Smart sizing and platform-level limits may not match the user's intended exposure. <br>\nMitigation: Verify the effective configured limits, avoid broad smart sizing until tested, and keep platform controls aligned with config values. <br>\nRisk: Default strategy parameters are not validated as profitable and fast-resolving markets can outpace monitoring. <br>\nMitigation: Treat defaults as a starting point, test in dry run over time, and size positions conservatively. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/simmer/polymarket-mert-sniper) <br>\n- [Strategy attribution thread](https://x.com/mert/status/2020216613279060433) <br>\n- [Simmer dashboard](https://simmer.markets/dashboard) <br>\n- [Simmer V2 migration guide](https://docs.simmer.markets/v2-migration) <br>\n- [Polymarket CLOB API](https://clob.polymarket.com) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with inline shell commands and CLI text output] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May place live trades when run with --live and valid credentials; defaults to paper mode.] <br>\n\n## Skill Version(s): <br>\n1.3.3 (source: server evidence and SKILL.md frontmatter) <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 v1.3.3:clawhub.json\n\n{\n  \"emoji\": \"\\ud83c\\udfaf\",\n  \"primaryEnv\": \"SIMMER_API_KEY\",\n  \"requires\": {\n    \"env\": [\n      \"SIMMER_API_KEY\"\n    ],\n    \"pip\": [\n      \"simmer-sdk>=0.17.25\"\n    ]\n  },\n  \"envVars\": [\n    {\n      \"name\": \"SIMMER_API_KEY\",\n      \"required\": true,\n      \"description\": \"Your Simmer SDK API key \\u2014 get from simmer.markets/dashboard\"\n    },\n    {\n      \"name\": \"WALLET_PRIVATE_KEY\",\n      \"required\": false,\n      \"description\": \"Only needed for external-wallet self-custody trading. Not required when using managed wallets.\"\n    }\n  ],\n  \"cron\": null,\n  \"autostart\": false,\n  \"automaton\": {\n    \"managed\": true,\n    \"entrypoint\": \"mert_sniper.py\"\n  },\n  \"tunables\": [\n    {\n      \"env\": \"SIMMER_MERT_MAX_BET_USD\",\n      \"type\": \"number\",\n      \"default\": 50,\n      \"range\": [\n        1,\n        200\n      ],\n      \"step\": 5,\n      \"label\": \"Max bet per trade\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_EXPIRY_MINUTES\",\n      \"type\": \"number\",\n      \"default\": 30,\n      \"range\": [\n        5,\n        120\n      ],\n      \"step\": 5,\n      \"label\": \"Order expiry (minutes)\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MIN_SPLIT\",\n      \"type\": \"number\",\n      \"default\": 0.1,\n      \"range\": [\n        0.01,\n        0.5\n      ],\n      \"step\": 0.01,\n      \"label\": \"Minimum probability split\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MAX_TRADES_PER_RUN\",\n      \"type\": \"number\",\n      \"default\": 5,\n      \"range\": [\n        1,\n        20\n      ],\n      \"step\": 1,\n      \"label\": \"Max trades per run\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_SIZING_PCT\",\n      \"type\": \"number\",\n      \"default\": 0.1,\n      \"range\": [\n        0.01,\n        1.0\n      ],\n      \"step\": 0.01,\n      \"label\": \"Position sizing percentage\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_FEE_BUFFER\",\n      \"type\": \"number\",\n      \"default\": 0.02,\n      \"range\": [\n        0.0,\n        0.10\n      ],\n      \"step\": 0.005,\n      \"label\": \"Fee buffer (extra alpha required above entry fee)\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MIN_EDGE\",\n      \"type\": \"number\",\n      \"default\": 0.0,\n      \"range\": [\n        0.0,\n        0.20\n      ],\n      \"step\": 0.01,\n      \"label\": \"Declared edge above market price (0 = fee-logging only, no gate)\"\n    }\n  ]\n}\n\nFile v1.3.3:config.json\n\n{\n  \"max_bet_usd\": 10.00\n}\n\nArchive v1.3.2: 9 files, 20217 bytes\n\nFiles: clawhub.json (2204b), config.json (27b), DISCLAIMER.md (1925b), mert_sniper.py (29271b), scripts/status.py (5110b), skill-card.md (3115b), SKILL.md (8084b), tests/test_mertsniper_preflight_gate.py (4374b), _meta.json (141b)\n\nFile v1.3.2:SKILL.md\n\n---\nname: polymarket-mert-sniper\ndescription: Near-expiry conviction trading on Polymarket. The skill scans markets in their final minutes, filters for strongly-skewed splits (60/40+), and places bounded trades against the under-priced side. Defaults — $10 max per trade, 5 trades/run, dry-run unless `--live`.\nmetadata:\n  author: Simmer (@simmer_markets)\n  version: \"1.3.2\"\n  displayName: Mert Sniper\n  difficulty: advanced\n  attribution: Strategy inspired by @mert — https://x.com/mert/status/2020216613279060433\n---\n# Mert Sniper\n\nNear-expiry conviction trading on Polymarket. The skill scans markets in their final minutes of pricing, filters for strongly-skewed splits, and places bounded trades against the under-priced side.\n\n> 🚨 **Framework, not a production trading system.** Read [DISCLAIMER.md](./DISCLAIMER.md) before connecting to a wallet with real funds. Dry-run is the default; `--live` is required for any real-USDC trade. Defaults: $10 max per trade, 60/40 split minimum, 2-minute expiry window, 5 trades per scan cycle — adjust deliberately before scaling.\n\n> **This is a template.** The default logic (expiry + split filter) is a starting point — remix it with your own filters, timing rules, or market selection criteria. The skill handles all the plumbing (market discovery, trade execution, safeguards). Your agent provides the alpha.\n\n> Strategy attribution: [@mert](https://x.com/mert/status/2020216613279060433) — see source thread for the original methodology (topic filter, near-expiry timing, strong-split entry).\n\n## When to Use This Skill\n\nUse this skill when the user wants to:\n- Trade markets that are about to resolve (last-minute conviction bets)\n- Filter by topic (e.g. only SOL/crypto markets)\n- Cap bet size (e.g. never more than $10)\n- Only trade when odds are strongly skewed (e.g. 60/40 or better)\n- Run an automated expiry-sniping strategy\n\n## Setup Flow\n\n1. **Install the Simmer SDK**\n   ```bash\n   pip install simmer-sdk\n   ```\n\n2. **Ask for Simmer API key**\n   - Get it from simmer.markets/dashboard -> SDK tab\n   - Store in environment as `SIMMER_API_KEY`\n\n3. **Ask for wallet private key** (required for live trading)\n   - This is the private key for their Polymarket wallet (the wallet that holds USDC)\n   - Store in environment as `WALLET_PRIVATE_KEY`\n   - The SDK uses this to sign orders client-side automatically — no manual signing needed\n\n4. **Ask about settings** (or confirm defaults)\n   - Market filter: Which markets to scan (default: all)\n   - Max bet: Maximum per trade (default $10)\n   - Expiry window: How close to resolution (default 2 minutes)\n   - Min split: Minimum odds skew (default 60/40)\n\n5. **Save settings to config.json or environment variables**\n\n## Configuration\n\n| Setting | Environment Variable | Default | Description |\n|---------|---------------------|---------|-------------|\n| Market filter | `SIMMER_MERT_FILTER` | (all) | Tag or keyword filter (e.g. `solana`, `crypto`) |\n| Max bet | `SIMMER_MERT_MAX_BET_USD` | 10.00 | Maximum USD per trade |\n| Expiry window | `SIMMER_MERT_EXPIRY_MINUTES` | 2 | Only trade markets resolving within N minutes |\n| Min split | `SIMMER_MERT_MIN_SPLIT` | 0.60 | Only trade when YES or NO >= this (e.g. 0.60 = 60/40) |\n| Max trades/run | `SIMMER_MERT_MAX_TRADES_PER_RUN` | 5 | Maximum trades per scan cycle |\n| Smart sizing % | `SIMMER_MERT_SIZING_PCT` | 0.05 | % of balance per trade |\n| Fee buffer | `SIMMER_MERT_FEE_BUFFER` | 0.02 | Extra alpha required above entry fee; only applies when `SIMMER_MERT_MIN_EDGE` is set |\n| Declared edge | `SIMMER_MERT_MIN_EDGE` | 0.00 | Your signal's claimed edge above market price (probability units). At 0 (default): fee is logged but gate is advisory only. Set to X to block trades where entry fee > X — e.g. `0.05` requires your signal to clear at least 5¢ above market after fees |\n\n## Quick Commands\n\n```bash\n# Check account balance and positions\npython scripts/status.py\n\n# Detailed position list\npython scripts/status.py --positions\n```\n\n**API Reference:**\n- Base URL: `https://api.simmer.markets`\n- Auth: `Authorization: Bearer $SIMMER_API_KEY`\n- Portfolio: `GET /api/sdk/portfolio`\n- Positions: `GET /api/sdk/positions`\n\n## Running the Skill\n\n```bash\n# Dry run (default -- shows opportunities, no trades)\npython mert_sniper.py\n\n# Execute real trades\npython mert_sniper.py --live\n\n# Filter to specific markets\npython mert_sniper.py --filter solana\n\n# Custom expiry window (5 minutes)\npython mert_sniper.py --expiry 5\n\n# With smart position sizing (uses portfolio balance)\npython mert_sniper.py --live --smart-sizing\n\n# Check positions only\npython mert_sniper.py --positions\n\n# View config\npython mert_sniper.py --config\n\n# Disable safeguards (not recommended)\npython mert_sniper.py --no-safeguards\n```\n\n## How It Works\n\nEach cycle the script:\n1. Fetches active markets from Simmer API (optionally filtered by tag/keyword)\n2. Filters to markets resolving within the expiry window (default 2 minutes)\n3. Checks the price split -- only trades when one side >= min_split (default 60%)\n4. Determines direction: backs the favored side (higher probability)\n5. **Fee logging**: prints entry-fee cost per market (`POLY_FEE_RATE_CRYPTO × p × (1-p)`, entry only — redemption is free). If `SIMMER_MERT_MIN_EDGE > 0`, gates out markets where declared edge < entry fee + buffer\n6. **Safeguards**: Checks context for flip-flop warnings, slippage, market status\n7. **Execution**: Places trade on the favored side, capped at max bet\n8. Reports summary of scanned, filtered, and traded markets\n\n## Example Output\n\n```\n🎯 Mert Sniper - Near-Expiry Conviction Trading\n==================================================\n\n  [DRY RUN] No trades will be executed. Use --live to enable trading.\n\n  Configuration:\n  Filter:        solana\n  Max bet:       $10.00\n  Expiry window: 2 minutes\n  Min split:     60/40\n  Max trades:    5\n  Smart sizing:  Disabled\n  Safeguards:    Enabled\n\n  Fetching markets (filter: solana)...\n  Found 12 active markets\n\n  Markets expiring within 2 minutes: 2\n\n  SOL highest price on Feb 10?\n     Resolves in: 1m 34s\n     Split: YES 72% / NO 28%\n     Side: YES (72% >= 60%)\n     [DRY RUN] Would buy $10.00 on YES\n\n  Summary:\n  Markets scanned: 12\n  Near expiry:     2\n  Strong split:    1\n  Trades executed: 0\n\n  [DRY RUN MODE - no real trades executed]\n```\n\n## Troubleshooting\n\n**\"No markets found\"**\n- Check your filter -- try without a filter first\n- Markets may not be available (check simmer.markets)\n\n**\"No markets expiring within window\"**\n- Increase expiry window: `--expiry 10` (10 minutes)\n- Or run more frequently (cron every minute)\n\n**\"Split too narrow\"**\n- Lower the min split: `--set min_split=0.55`\n- This trades more often but with less conviction\n\n**\"Resolves in: 17h\" on 15-min markets**\n- Polymarket's `endDate` is the event-level end-of-day, not the individual market close time\n- For 15-min crypto markets (e.g. \"BTC Up or Down - Feb 8, 11PM ET\"), the actual close time is in the question text but not in the API\n- This is a Polymarket data limitation — widen the expiry window (`--expiry 1080`) as a workaround, or use the split filter to find conviction opportunities regardless of timing\n\n**\"External wallet requires a pre-signed order\"**\n- `WALLET_PRIVATE_KEY` is not set in the environment\n- The SDK signs orders automatically when this env var is present — no manual signing code needed\n- Fix: `export WALLET_PRIVATE_KEY=0x<your-polymarket-wallet-private-key>`\n- Do NOT attempt to sign orders manually or modify the skill code — the SDK handles it\n\n**\"Balance shows $0 but I have funds on Polygon\"**\n- Polymarket V2 (live 2026-04-28) uses **pUSD** (PolyUSD, 1:1 backed by USDC.e). If your wallet holds USDC.e, migrate at [simmer.markets/dashboard](https://simmer.markets/dashboard) with one click (~30s)\n- If you bridged native USDC (Circle), swap to USDC.e first, then migrate to pUSD\n- Full migration guide: [docs.simmer.markets/v2-migration](https://docs.simmer.markets/v2-migration)\n\n**\"API key invalid\"**\n- Get new key from simmer.markets/dashboard -> SDK tab\n\nFile v1.3.2:_meta.json\n\n{\n  \"ownerId\": \"kn7axnp7bzqsf5fkx0z8px7han7zyq1x\",\n  \"slug\": \"polymarket-mert-sniper\",\n  \"version\": \"1.3.2\",\n  \"publishedAt\": 1779591771386\n}\n\nFile v1.3.2:DISCLAIMER.md\n\n# Disclaimer\n\nThis skill is a **framework**, not a production trading system. Read this\nin full before connecting it to a wallet with real funds.\n\n## No financial advice\n\nNothing in this skill constitutes financial, investment, or trading\nadvice. The default strategy implemented here is a starting point, not a\ntested edge. Suitability for any account size or risk tolerance is your\nresponsibility to assess.\n\n## Default parameters are not validated\n\nDefault parameters are calibrated for testing the plumbing, not for live\nprofit. They have not been validated to produce positive returns under\ncurrent market conditions. Run paper mode for an extended period before\nscaling beyond default position sizes.\n\n## Automated trading carries irreversible risk\n\nWhen this skill runs with `--live`, it places real on-chain orders.\nOn-chain trades cannot be recalled. Strategy errors, signal lag, market\nregime shifts, and operator misconfiguration can produce losses\nexceeding any specific position size.\n\n## Risk monitoring may not apply to all market types\n\nStop-loss and take-profit monitors run on a fixed schedule. Markets that\nresolve faster than the monitor cycle cannot be exited automatically.\nPosition sizing is the only risk control on these markets — set it\nconservatively.\n\n## Use of this skill is at your own risk\n\nBy installing and running this skill you agree that the authors are not\nliable for any losses, direct or indirect, that arise from its use. This\napplies regardless of skill provenance — official Simmer skills,\ncommunity skills, and skills imported from external repositories all\ncarry this same disclaimer.\n\n## Where to learn more before going live\n\n- The skill's own `SKILL.md` documents the strategy and parameters\n- Your trading venue's documentation covers fee structure, order types,\n  and resolution rules\n- Simmer SDK documentation covers paper mode, dry-run flags, and\n  position monitoring\n\nFile v1.3.2:skill-card.md\n\n## Description: <br>\nNear-expiry conviction trading on Polymarket that scans final-minute markets, filters for strongly skewed splits, and places bounded dry-run-by-default trades unless live execution is enabled. <br>\n\nThis skill is for demonstration purposes and not for production usage. <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>\nExternal developers and traders use this skill to configure and run a dry-run-first Polymarket near-expiry market scanner with bounded trade execution through Simmer. It is intended as a strategy framework that requires user review, credentials, and deliberate live-trading opt-in before risking funds. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Live execution can place irreversible on-chain Polymarket trades and create financial losses. <br>\nMitigation: Use dry-run first, fund only a limited account, keep conservative spend caps, and do not run --live unless the trade direction and account-changing actions match the user's intent. <br>\nRisk: The skill requires sensitive Simmer and wallet credentials for account access and live trading. <br>\nMitigation: Store SIMMER_API_KEY and WALLET_PRIVATE_KEY only in an environment or secret store, review Simmer API permissions, and avoid sharing credentials in prompts, logs, or config files. <br>\nRisk: Default strategy parameters and side-selection behavior may not produce profitable or intended trades. <br>\nMitigation: Review the side-selection logic, startup redemption behavior, spend limits, split threshold, fee buffer, and edge settings before installing or enabling live trading. <br>\nRisk: Fast-resolving markets may close before monitoring or exit logic can respond. <br>\nMitigation: Treat position sizing as the primary risk control for these markets and test timing behavior in paper mode before increasing limits. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/simmer/polymarket-mert-sniper) <br>\n- [Strategy source thread](https://x.com/mert/status/2020216613279060433) <br>\n- [Simmer API base](https://api.simmer.markets) <br>\n- [Polymarket CLOB API](https://clob.polymarket.com) <br>\n- [Simmer V2 migration guide](https://docs.simmer.markets/v2-migration) <br>\n- [Disclaimer](DISCLAIMER.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Guidance] <br>\n**Output Format:** [Markdown with inline shell commands and JSON configuration snippets] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Dry-run output by default; live trading requires explicit --live and configured credentials.] <br>\n\n## Skill Version(s): <br>\n1.3.2 (source: server release metadata and skill frontmatter) <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 v1.3.2:clawhub.json\n\n{\n  \"emoji\": \"\\ud83c\\udfaf\",\n  \"primaryEnv\": \"SIMMER_API_KEY\",\n  \"requires\": {\n    \"env\": [\n      \"SIMMER_API_KEY\"\n    ],\n    \"pip\": [\n      \"simmer-sdk>=0.11.1\"\n    ]\n  },\n  \"envVars\": [\n    {\n      \"name\": \"SIMMER_API_KEY\",\n      \"required\": true,\n      \"description\": \"Your Simmer SDK API key \\u2014 get from simmer.markets/dashboard\"\n    },\n    {\n      \"name\": \"WALLET_PRIVATE_KEY\",\n      \"required\": false,\n      \"description\": \"Only needed for external-wallet self-custody trading. Not required when using managed wallets.\"\n    }\n  ],\n  \"cron\": null,\n  \"autostart\": false,\n  \"automaton\": {\n    \"managed\": true,\n    \"entrypoint\": \"mert_sniper.py\"\n  },\n  \"tunables\": [\n    {\n      \"env\": \"SIMMER_MERT_MAX_BET_USD\",\n      \"type\": \"number\",\n      \"default\": 50,\n      \"range\": [\n        1,\n        200\n      ],\n      \"step\": 5,\n      \"label\": \"Max bet per trade\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_EXPIRY_MINUTES\",\n      \"type\": \"number\",\n      \"default\": 30,\n      \"range\": [\n        5,\n        120\n      ],\n      \"step\": 5,\n      \"label\": \"Order expiry (minutes)\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MIN_SPLIT\",\n      \"type\": \"number\",\n      \"default\": 0.1,\n      \"range\": [\n        0.01,\n        0.5\n      ],\n      \"step\": 0.01,\n      \"label\": \"Minimum probability split\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MAX_TRADES_PER_RUN\",\n      \"type\": \"number\",\n      \"default\": 5,\n      \"range\": [\n        1,\n        20\n      ],\n      \"step\": 1,\n      \"label\": \"Max trades per run\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_SIZING_PCT\",\n      \"type\": \"number\",\n      \"default\": 0.1,\n      \"range\": [\n        0.01,\n        1.0\n      ],\n      \"step\": 0.01,\n      \"label\": \"Position sizing percentage\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_FEE_BUFFER\",\n      \"type\": \"number\",\n      \"default\": 0.02,\n      \"range\": [\n        0.0,\n        0.10\n      ],\n      \"step\": 0.005,\n      \"label\": \"Fee buffer (extra alpha required above entry fee)\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MIN_EDGE\",\n      \"type\": \"number\",\n      \"default\": 0.0,\n      \"range\": [\n        0.0,\n        0.20\n      ],\n      \"step\": 0.01,\n      \"label\": \"Declared edge above market price (0 = fee-logging only, no gate)\"\n    }\n  ]\n}\n\nFile v1.3.2:config.json\n\n{\n  \"max_bet_usd\": 10.00\n}\n\nArchive v1.3.1: 7 files, 17044 bytes\n\nFiles: clawhub.json (2204b), config.json (27b), DISCLAIMER.md (1925b), mert_sniper.py (28893b), scripts/status.py (5110b), SKILL.md (8069b), _meta.json (141b)\n\nFile v1.3.1:SKILL.md\n\n---\nname: polymarket-mert-sniper\ndescription: Near-expiry conviction trading on Polymarket. The skill scans markets in their final minutes, filters for strongly-skewed splits (60/40+), and places bounded trades against the under-priced side. Defaults — $10 max per trade, 5 trades/run, dry-run unless `--live`.\nmetadata:\n  author: Simmer (@simmer_markets)\n  version: \"1.3.1\"\n  displayName: Mert Sniper\n  difficulty: advanced\n  attribution: Strategy inspired by @mert — https://x.com/mert/status/2020216613279060433\n---\n# Mert Sniper\n\nNear-expiry conviction trading on Polymarket. The skill scans markets in their final minutes of pricing, filters for strongly-skewed splits, and places bounded trades against the under-priced side.\n\n> 🚨 **Framework, not a production trading system.** Read [DISCLAIMER.md](./DISCLAIMER.md) before connecting to a wallet with real funds. Dry-run is the default; `--live` is required for any real-USDC trade. Defaults: $10 max per trade, 60/40 split minimum, 2-minute expiry window, 5 trades per scan cycle — adjust deliberately before scaling.\n\n> **This is a template.** The default logic (expiry + split filter) is a starting point — remix it with your own filters, timing rules, or market selection criteria. The skill handles all the plumbing (market discovery, trade execution, safeguards). Your agent provides the alpha.\n\n> Strategy attribution: [@mert](https://x.com/mert/status/2020216613279060433) — see source thread for the original methodology (topic filter, near-expiry timing, strong-split entry).\n\n## When to Use This Skill\n\nUse this skill when the user wants to:\n- Trade markets that are about to resolve (last-minute conviction bets)\n- Filter by topic (e.g. only SOL/crypto markets)\n- Cap bet size (e.g. never more than $10)\n- Only trade when odds are strongly skewed (e.g. 60/40 or better)\n- Run an automated expiry-sniping strategy\n\n## Setup Flow\n\n1. **Install the Simmer SDK**\n   ```bash\n   pip install simmer-sdk\n   ```\n\n2. **Ask for Simmer API key**\n   - Get it from simmer.markets/dashboard -> SDK tab\n   - Store in environment as `SIMMER_API_KEY`\n\n3. **Ask for wallet private key** (required for live trading)\n   - This is the private key for their Polymarket wallet (the wallet that holds USDC)\n   - Store in environment as `WALLET_PRIVATE_KEY`\n   - The SDK uses this to sign orders client-side automatically — no manual signing needed\n\n4. **Ask about settings** (or confirm defaults)\n   - Market filter: Which markets to scan (default: all)\n   - Max bet: Maximum per trade (default $10)\n   - Expiry window: How close to resolution (default 2 minutes)\n   - Min split: Minimum odds skew (default 60/40)\n\n5. **Save settings to config.json or environment variables**\n\n## Configuration\n\n| Setting | Environment Variable | Default | Description |\n|---------|---------------------|---------|-------------|\n| Market filter | `SIMMER_MERT_FILTER` | (all) | Tag or keyword filter (e.g. `solana`, `crypto`) |\n| Max bet | `SIMMER_MERT_MAX_BET` | 10.00 | Maximum USD per trade |\n| Expiry window | `SIMMER_MERT_EXPIRY_MINS` | 2 | Only trade markets resolving within N minutes |\n| Min split | `SIMMER_MERT_MIN_SPLIT` | 0.60 | Only trade when YES or NO >= this (e.g. 0.60 = 60/40) |\n| Max trades/run | `SIMMER_MERT_MAX_TRADES` | 5 | Maximum trades per scan cycle |\n| Smart sizing % | `SIMMER_MERT_SIZING_PCT` | 0.05 | % of balance per trade |\n| Fee buffer | `SIMMER_MERT_FEE_BUFFER` | 0.02 | Extra alpha required above entry fee; only applies when `SIMMER_MERT_MIN_EDGE` is set |\n| Declared edge | `SIMMER_MERT_MIN_EDGE` | 0.00 | Your signal's claimed edge above market price (probability units). At 0 (default): fee is logged but gate is advisory only. Set to X to block trades where entry fee > X — e.g. `0.05` requires your signal to clear at least 5¢ above market after fees |\n\n## Quick Commands\n\n```bash\n# Check account balance and positions\npython scripts/status.py\n\n# Detailed position list\npython scripts/status.py --positions\n```\n\n**API Reference:**\n- Base URL: `https://api.simmer.markets`\n- Auth: `Authorization: Bearer $SIMMER_API_KEY`\n- Portfolio: `GET /api/sdk/portfolio`\n- Positions: `GET /api/sdk/positions`\n\n## Running the Skill\n\n```bash\n# Dry run (default -- shows opportunities, no trades)\npython mert_sniper.py\n\n# Execute real trades\npython mert_sniper.py --live\n\n# Filter to specific markets\npython mert_sniper.py --filter solana\n\n# Custom expiry window (5 minutes)\npython mert_sniper.py --expiry 5\n\n# With smart position sizing (uses portfolio balance)\npython mert_sniper.py --live --smart-sizing\n\n# Check positions only\npython mert_sniper.py --positions\n\n# View config\npython mert_sniper.py --config\n\n# Disable safeguards (not recommended)\npython mert_sniper.py --no-safeguards\n```\n\n## How It Works\n\nEach cycle the script:\n1. Fetches active markets from Simmer API (optionally filtered by tag/keyword)\n2. Filters to markets resolving within the expiry window (default 2 minutes)\n3. Checks the price split -- only trades when one side >= min_split (default 60%)\n4. Determines direction: backs the favored side (higher probability)\n5. **Fee logging**: prints entry-fee cost per market (`POLY_FEE_RATE_CRYPTO × p × (1-p)`, entry only — redemption is free). If `SIMMER_MERT_MIN_EDGE > 0`, gates out markets where declared edge < entry fee + buffer\n6. **Safeguards**: Checks context for flip-flop warnings, slippage, market status\n7. **Execution**: Places trade on the favored side, capped at max bet\n8. Reports summary of scanned, filtered, and traded markets\n\n## Example Output\n\n```\n🎯 Mert Sniper - Near-Expiry Conviction Trading\n==================================================\n\n  [DRY RUN] No trades will be executed. Use --live to enable trading.\n\n  Configuration:\n  Filter:        solana\n  Max bet:       $10.00\n  Expiry window: 2 minutes\n  Min split:     60/40\n  Max trades:    5\n  Smart sizing:  Disabled\n  Safeguards:    Enabled\n\n  Fetching markets (filter: solana)...\n  Found 12 active markets\n\n  Markets expiring within 2 minutes: 2\n\n  SOL highest price on Feb 10?\n     Resolves in: 1m 34s\n     Split: YES 72% / NO 28%\n     Side: YES (72% >= 60%)\n     [DRY RUN] Would buy $10.00 on YES\n\n  Summary:\n  Markets scanned: 12\n  Near expiry:     2\n  Strong split:    1\n  Trades executed: 0\n\n  [DRY RUN MODE - no real trades executed]\n```\n\n## Troubleshooting\n\n**\"No markets found\"**\n- Check your filter -- try without a filter first\n- Markets may not be available (check simmer.markets)\n\n**\"No markets expiring within window\"**\n- Increase expiry window: `--expiry 10` (10 minutes)\n- Or run more frequently (cron every minute)\n\n**\"Split too narrow\"**\n- Lower the min split: `--set min_split=0.55`\n- This trades more often but with less conviction\n\n**\"Resolves in: 17h\" on 15-min markets**\n- Polymarket's `endDate` is the event-level end-of-day, not the individual market close time\n- For 15-min crypto markets (e.g. \"BTC Up or Down - Feb 8, 11PM ET\"), the actual close time is in the question text but not in the API\n- This is a Polymarket data limitation — widen the expiry window (`--expiry 1080`) as a workaround, or use the split filter to find conviction opportunities regardless of timing\n\n**\"External wallet requires a pre-signed order\"**\n- `WALLET_PRIVATE_KEY` is not set in the environment\n- The SDK signs orders automatically when this env var is present — no manual signing code needed\n- Fix: `export WALLET_PRIVATE_KEY=0x<your-polymarket-wallet-private-key>`\n- Do NOT attempt to sign orders manually or modify the skill code — the SDK handles it\n\n**\"Balance shows $0 but I have funds on Polygon\"**\n- Polymarket V2 (live 2026-04-28) uses **pUSD** (PolyUSD, 1:1 backed by USDC.e). If your wallet holds USDC.e, migrate at [simmer.markets/dashboard](https://simmer.markets/dashboard) with one click (~30s)\n- If you bridged native USDC (Circle), swap to USDC.e first, then migrate to pUSD\n- Full migration guide: [docs.simmer.markets/v2-migration](https://docs.simmer.markets/v2-migration)\n\n**\"API key invalid\"**\n- Get new key from simmer.markets/dashboard -> SDK tab\n\nFile v1.3.1:_meta.json\n\n{\n  \"ownerId\": \"kn7axnp7bzqsf5fkx0z8px7han7zyq1x\",\n  \"slug\": \"polymarket-mert-sniper\",\n  \"version\": \"1.3.1\",\n  \"publishedAt\": 1779547620615\n}\n\nFile v1.3.1:DISCLAIMER.md\n\n# Disclaimer\n\nThis skill is a **framework**, not a production trading system. Read this\nin full before connecting it to a wallet with real funds.\n\n## No financial advice\n\nNothing in this skill constitutes financial, investment, or trading\nadvice. The default strategy implemented here is a starting point, not a\ntested edge. Suitability for any account size or risk tolerance is your\nresponsibility to assess.\n\n## Default parameters are not validated\n\nDefault parameters are calibrated for testing the plumbing, not for live\nprofit. They have not been validated to produce positive returns under\ncurrent market conditions. Run paper mode for an extended period before\nscaling beyond default position sizes.\n\n## Automated trading carries irreversible risk\n\nWhen this skill runs with `--live`, it places real on-chain orders.\nOn-chain trades cannot be recalled. Strategy errors, signal lag, market\nregime shifts, and operator misconfiguration can produce losses\nexceeding any specific position size.\n\n## Risk monitoring may not apply to all market types\n\nStop-loss and take-profit monitors run on a fixed schedule. Markets that\nresolve faster than the monitor cycle cannot be exited automatically.\nPosition sizing is the only risk control on these markets — set it\nconservatively.\n\n## Use of this skill is at your own risk\n\nBy installing and running this skill you agree that the authors are not\nliable for any losses, direct or indirect, that arise from its use. This\napplies regardless of skill provenance — official Simmer skills,\ncommunity skills, and skills imported from external repositories all\ncarry this same disclaimer.\n\n## Where to learn more before going live\n\n- The skill's own `SKILL.md` documents the strategy and parameters\n- Your trading venue's documentation covers fee structure, order types,\n  and resolution rules\n- Simmer SDK documentation covers paper mode, dry-run flags, and\n  position monitoring\n\nFile v1.3.1:clawhub.json\n\n{\n  \"emoji\": \"\\ud83c\\udfaf\",\n  \"primaryEnv\": \"SIMMER_API_KEY\",\n  \"requires\": {\n    \"env\": [\n      \"SIMMER_API_KEY\"\n    ],\n    \"pip\": [\n      \"simmer-sdk>=0.11.1\"\n    ]\n  },\n  \"envVars\": [\n    {\n      \"name\": \"SIMMER_API_KEY\",\n      \"required\": true,\n      \"description\": \"Your Simmer SDK API key \\u2014 get from simmer.markets/dashboard\"\n    },\n    {\n      \"name\": \"WALLET_PRIVATE_KEY\",\n      \"required\": false,\n      \"description\": \"Only needed for external-wallet self-custody trading. Not required when using managed wallets.\"\n    }\n  ],\n  \"cron\": null,\n  \"autostart\": false,\n  \"automaton\": {\n    \"managed\": true,\n    \"entrypoint\": \"mert_sniper.py\"\n  },\n  \"tunables\": [\n    {\n      \"env\": \"SIMMER_MERT_MAX_BET_USD\",\n      \"type\": \"number\",\n      \"default\": 50,\n      \"range\": [\n        1,\n        200\n      ],\n      \"step\": 5,\n      \"label\": \"Max bet per trade\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_EXPIRY_MINUTES\",\n      \"type\": \"number\",\n      \"default\": 30,\n      \"range\": [\n        5,\n        120\n      ],\n      \"step\": 5,\n      \"label\": \"Order expiry (minutes)\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MIN_SPLIT\",\n      \"type\": \"number\",\n      \"default\": 0.1,\n      \"range\": [\n        0.01,\n        0.5\n      ],\n      \"step\": 0.01,\n      \"label\": \"Minimum probability split\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MAX_TRADES_PER_RUN\",\n      \"type\": \"number\",\n      \"default\": 5,\n      \"range\": [\n        1,\n        20\n      ],\n      \"step\": 1,\n      \"label\": \"Max trades per run\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_SIZING_PCT\",\n      \"type\": \"number\",\n      \"default\": 0.1,\n      \"range\": [\n        0.01,\n        1.0\n      ],\n      \"step\": 0.01,\n      \"label\": \"Position sizing percentage\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_FEE_BUFFER\",\n      \"type\": \"number\",\n      \"default\": 0.02,\n      \"range\": [\n        0.0,\n        0.10\n      ],\n      \"step\": 0.005,\n      \"label\": \"Fee buffer (extra alpha required above entry fee)\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MIN_EDGE\",\n      \"type\": \"number\",\n      \"default\": 0.0,\n      \"range\": [\n        0.0,\n        0.20\n      ],\n      \"step\": 0.01,\n      \"label\": \"Declared edge above market price (0 = fee-logging only, no gate)\"\n    }\n  ]\n}\n\nFile v1.3.1:config.json\n\n{\n  \"max_bet_usd\": 10.00\n}\n\nArchive v1.2.2: 6 files, 14459 bytes\n\nFiles: clawhub.json (1715b), config.json (27b), mert_sniper.py (26411b), scripts/status.py (5110b), SKILL.md (6995b), _meta.json (141b)\n\nFile v1.2.2:SKILL.md\n\n---\nname: polymarket-mert-sniper\ndescription: Near-expiry conviction trading on Polymarket. Snipe markets about to resolve when the odds are heavily skewed. Filter by topic, cap your bets, and only trade strong splits close to deadline.\nmetadata:\n  author: Simmer (@simmer_markets)\n  version: \"1.2.2\"\n  displayName: Mert Sniper\n  difficulty: advanced\n  attribution: Strategy inspired by @mert — https://x.com/mert/status/2020216613279060433\n---\n# Mert Sniper\n\nNear-expiry conviction trading on Polymarket. Snipe markets about to resolve when the odds are heavily skewed.\n\n> Strategy by [@mert](https://x.com/mert/status/2020216613279060433) — filter by topic, cap your bets, wait until near expiry, and only trade strong splits.\n\n> **This is a template.** The default logic (expiry + split filter) gets you started — remix it with your own filters, timing rules, or market selection criteria. The skill handles all the plumbing (market discovery, trade execution, safeguards). Your agent provides the alpha.\n\n## When to Use This Skill\n\n> **Polymarket only.** All trades execute on Polymarket with real USDC. Use `--live` for real trades, dry-run is the default.\n\nUse this skill when the user wants to:\n- Trade markets that are about to resolve (last-minute conviction bets)\n- Filter by topic (e.g. only SOL/crypto markets)\n- Cap bet size (e.g. never more than $10)\n- Only trade when odds are strongly skewed (e.g. 60/40 or better)\n- Run an automated expiry-sniping strategy\n\n## Setup Flow\n\n1. **Install the Simmer SDK**\n   ```bash\n   pip install simmer-sdk\n   ```\n\n2. **Ask for Simmer API key**\n   - Get it from simmer.markets/dashboard -> SDK tab\n   - Store in environment as `SIMMER_API_KEY`\n\n3. **Ask for wallet private key** (required for live trading)\n   - This is the private key for their Polymarket wallet (the wallet that holds USDC)\n   - Store in environment as `WALLET_PRIVATE_KEY`\n   - The SDK uses this to sign orders client-side automatically — no manual signing needed\n\n4. **Ask about settings** (or confirm defaults)\n   - Market filter: Which markets to scan (default: all)\n   - Max bet: Maximum per trade (default $10)\n   - Expiry window: How close to resolution (default 2 minutes)\n   - Min split: Minimum odds skew (default 60/40)\n\n5. **Save settings to config.json or environment variables**\n\n## Configuration\n\n| Setting | Environment Variable | Default | Description |\n|---------|---------------------|---------|-------------|\n| Market filter | `SIMMER_MERT_FILTER` | (all) | Tag or keyword filter (e.g. `solana`, `crypto`) |\n| Max bet | `SIMMER_MERT_MAX_BET` | 10.00 | Maximum USD per trade |\n| Expiry window | `SIMMER_MERT_EXPIRY_MINS` | 2 | Only trade markets resolving within N minutes |\n| Min split | `SIMMER_MERT_MIN_SPLIT` | 0.60 | Only trade when YES or NO >= this (e.g. 0.60 = 60/40) |\n| Max trades/run | `SIMMER_MERT_MAX_TRADES` | 5 | Maximum trades per scan cycle |\n| Smart sizing % | `SIMMER_MERT_SIZING_PCT` | 0.05 | % of balance per trade |\n\n## Quick Commands\n\n```bash\n# Check account balance and positions\npython scripts/status.py\n\n# Detailed position list\npython scripts/status.py --positions\n```\n\n**API Reference:**\n- Base URL: `https://api.simmer.markets`\n- Auth: `Authorization: Bearer $SIMMER_API_KEY`\n- Portfolio: `GET /api/sdk/portfolio`\n- Positions: `GET /api/sdk/positions`\n\n## Running the Skill\n\n```bash\n# Dry run (default -- shows opportunities, no trades)\npython mert_sniper.py\n\n# Execute real trades\npython mert_sniper.py --live\n\n# Filter to specific markets\npython mert_sniper.py --filter solana\n\n# Custom expiry window (5 minutes)\npython mert_sniper.py --expiry 5\n\n# With smart position sizing (uses portfolio balance)\npython mert_sniper.py --live --smart-sizing\n\n# Check positions only\npython mert_sniper.py --positions\n\n# View config\npython mert_sniper.py --config\n\n# Disable safeguards (not recommended)\npython mert_sniper.py --no-safeguards\n```\n\n## How It Works\n\nEach cycle the script:\n1. Fetches active markets from Simmer API (optionally filtered by tag/keyword)\n2. Filters to markets resolving within the expiry window (default 2 minutes)\n3. Checks the price split -- only trades when one side >= min_split (default 60%)\n4. Determines direction: backs the favored side (higher probability)\n5. **Safeguards**: Checks context for flip-flop warnings, slippage, market status\n6. **Execution**: Places trade on the favored side, capped at max bet\n7. Reports summary of scanned, filtered, and traded markets\n\n## Example Output\n\n```\n🎯 Mert Sniper - Near-Expiry Conviction Trading\n==================================================\n\n  [DRY RUN] No trades will be executed. Use --live to enable trading.\n\n  Configuration:\n  Filter:        solana\n  Max bet:       $10.00\n  Expiry window: 2 minutes\n  Min split:     60/40\n  Max trades:    5\n  Smart sizing:  Disabled\n  Safeguards:    Enabled\n\n  Fetching markets (filter: solana)...\n  Found 12 active markets\n\n  Markets expiring within 2 minutes: 2\n\n  SOL highest price on Feb 10?\n     Resolves in: 1m 34s\n     Split: YES 72% / NO 28%\n     Side: YES (72% >= 60%)\n     [DRY RUN] Would buy $10.00 on YES\n\n  Summary:\n  Markets scanned: 12\n  Near expiry:     2\n  Strong split:    1\n  Trades executed: 0\n\n  [DRY RUN MODE - no real trades executed]\n```\n\n## Troubleshooting\n\n**\"No markets found\"**\n- Check your filter -- try without a filter first\n- Markets may not be available (check simmer.markets)\n\n**\"No markets expiring within window\"**\n- Increase expiry window: `--expiry 10` (10 minutes)\n- Or run more frequently (cron every minute)\n\n**\"Split too narrow\"**\n- Lower the min split: `--set min_split=0.55`\n- This trades more often but with less conviction\n\n**\"Resolves in: 17h\" on 15-min markets**\n- Polymarket's `endDate` is the event-level end-of-day, not the individual market close time\n- For 15-min crypto markets (e.g. \"BTC Up or Down - Feb 8, 11PM ET\"), the actual close time is in the question text but not in the API\n- This is a Polymarket data limitation — widen the expiry window (`--expiry 1080`) as a workaround, or use the split filter to find conviction opportunities regardless of timing\n\n**\"External wallet requires a pre-signed order\"**\n- `WALLET_PRIVATE_KEY` is not set in the environment\n- The SDK signs orders automatically when this env var is present — no manual signing code needed\n- Fix: `export WALLET_PRIVATE_KEY=0x<your-polymarket-wallet-private-key>`\n- Do NOT attempt to sign orders manually or modify the skill code — the SDK handles it\n\n**\"Balance shows $0 but I have funds on Polygon\"**\n- Polymarket V2 (live 2026-04-28) uses **pUSD** (PolyUSD, 1:1 backed by USDC.e). If your wallet holds USDC.e, migrate at [simmer.markets/dashboard](https://simmer.markets/dashboard) with one click (~30s)\n- If you bridged native USDC (Circle), swap to USDC.e first, then migrate to pUSD\n- Full migration guide: [docs.simmer.markets/v2-migration](https://docs.simmer.markets/v2-migration)\n\n**\"API key invalid\"**\n- Get new key from simmer.markets/dashboard -> SDK tab\n\nFile v1.2.2:_meta.json\n\n{\n  \"ownerId\": \"kn7axnp7bzqsf5fkx0z8px7han7zyq1x\",\n  \"slug\": \"polymarket-mert-sniper\",\n  \"version\": \"1.2.2\",\n  \"publishedAt\": 1777025210149\n}\n\nFile v1.2.2:clawhub.json\n\n{\n  \"emoji\": \"\\ud83c\\udfaf\",\n  \"primaryEnv\": \"SIMMER_API_KEY\",\n  \"requires\": {\n    \"env\": [\n      \"SIMMER_API_KEY\"\n    ],\n    \"pip\": [\n      \"simmer-sdk>=0.11.1\"\n    ]\n  },\n  \"envVars\": [\n    {\n      \"name\": \"SIMMER_API_KEY\",\n      \"required\": true,\n      \"description\": \"Your Simmer SDK API key \\u2014 get from simmer.markets/dashboard\"\n    },\n    {\n      \"name\": \"WALLET_PRIVATE_KEY\",\n      \"required\": false,\n      \"description\": \"Only needed for external-wallet self-custody trading. Not required when using managed wallets.\"\n    }\n  ],\n  \"cron\": null,\n  \"autostart\": false,\n  \"automaton\": {\n    \"managed\": true,\n    \"entrypoint\": \"mert_sniper.py\"\n  },\n  \"tunables\": [\n    {\n      \"env\": \"SIMMER_MERT_MAX_BET_USD\",\n      \"type\": \"number\",\n      \"default\": 50,\n      \"range\": [\n        1,\n        200\n      ],\n      \"step\": 5,\n      \"label\": \"Max bet per trade\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_EXPIRY_MINUTES\",\n      \"type\": \"number\",\n      \"default\": 30,\n      \"range\": [\n        5,\n        120\n      ],\n      \"step\": 5,\n      \"label\": \"Order expiry (minutes)\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MIN_SPLIT\",\n      \"type\": \"number\",\n      \"default\": 0.1,\n      \"range\": [\n        0.01,\n        0.5\n      ],\n      \"step\": 0.01,\n      \"label\": \"Minimum probability split\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MAX_TRADES_PER_RUN\",\n      \"type\": \"number\",\n      \"default\": 5,\n      \"range\": [\n        1,\n        20\n      ],\n      \"step\": 1,\n      \"label\": \"Max trades per run\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_SIZING_PCT\",\n      \"type\": \"number\",\n      \"default\": 0.1,\n      \"range\": [\n        0.01,\n        1.0\n      ],\n      \"step\": 0.01,\n      \"label\": \"Position sizing percentage\"\n    }\n  ]\n}\n\nFile v1.2.2:config.json\n\n{\n  \"max_bet_usd\": 10.00\n}\n\nArchive v1.2.1: 6 files, 14032 bytes\n\nFiles: clawhub.json (1707b), config.json (27b), mert_sniper.py (25091b), scripts/status.py (5110b), SKILL.md (6995b), _meta.json (141b)\n\nFile v1.2.1:SKILL.md\n\n---\nname: polymarket-mert-sniper\ndescription: Near-expiry conviction trading on Polymarket. Snipe markets about to resolve when the odds are heavily skewed. Filter by topic, cap your bets, and only trade strong splits close to deadline.\nmetadata:\n  author: Simmer (@simmer_markets)\n  version: \"1.2.1\"\n  displayName: Mert Sniper\n  difficulty: advanced\n  attribution: Strategy inspired by @mert — https://x.com/mert/status/2020216613279060433\n---\n# Mert Sniper\n\nNear-expiry conviction trading on Polymarket. Snipe markets about to resolve when the odds are heavily skewed.\n\n> Strategy by [@mert](https://x.com/mert/status/2020216613279060433) — filter by topic, cap your bets, wait until near expiry, and only trade strong splits.\n\n> **This is a template.** The default logic (expiry + split filter) gets you started — remix it with your own filters, timing rules, or market selection criteria. The skill handles all the plumbing (market discovery, trade execution, safeguards). Your agent provides the alpha.\n\n## When to Use This Skill\n\n> **Polymarket only.** All trades execute on Polymarket with real USDC. Use `--live` for real trades, dry-run is the default.\n\nUse this skill when the user wants to:\n- Trade markets that are about to resolve (last-minute conviction bets)\n- Filter by topic (e.g. only SOL/crypto markets)\n- Cap bet size (e.g. never more than $10)\n- Only trade when odds are strongly skewed (e.g. 60/40 or better)\n- Run an automated expiry-sniping strategy\n\n## Setup Flow\n\n1. **Install the Simmer SDK**\n   ```bash\n   pip install simmer-sdk\n   ```\n\n2. **Ask for Simmer API key**\n   - Get it from simmer.markets/dashboard -> SDK tab\n   - Store in environment as `SIMMER_API_KEY`\n\n3. **Ask for wallet private key** (required for live trading)\n   - This is the private key for their Polymarket wallet (the wallet that holds USDC)\n   - Store in environment as `WALLET_PRIVATE_KEY`\n   - The SDK uses this to sign orders client-side automatically — no manual signing needed\n\n4. **Ask about settings** (or confirm defaults)\n   - Market filter: Which markets to scan (default: all)\n   - Max bet: Maximum per trade (default $10)\n   - Expiry window: How close to resolution (default 2 minutes)\n   - Min split: Minimum odds skew (default 60/40)\n\n5. **Save settings to config.json or environment variables**\n\n## Configuration\n\n| Setting | Environment Variable | Default | Description |\n|---------|---------------------|---------|-------------|\n| Market filter | `SIMMER_MERT_FILTER` | (all) | Tag or keyword filter (e.g. `solana`, `crypto`) |\n| Max bet | `SIMMER_MERT_MAX_BET` | 10.00 | Maximum USD per trade |\n| Expiry window | `SIMMER_MERT_EXPIRY_MINS` | 2 | Only trade markets resolving within N minutes |\n| Min split | `SIMMER_MERT_MIN_SPLIT` | 0.60 | Only trade when YES or NO >= this (e.g. 0.60 = 60/40) |\n| Max trades/run | `SIMMER_MERT_MAX_TRADES` | 5 | Maximum trades per scan cycle |\n| Smart sizing % | `SIMMER_MERT_SIZING_PCT` | 0.05 | % of balance per trade |\n\n## Quick Commands\n\n```bash\n# Check account balance and positions\npython scripts/status.py\n\n# Detailed position list\npython scripts/status.py --positions\n```\n\n**API Reference:**\n- Base URL: `https://api.simmer.markets`\n- Auth: `Authorization: Bearer $SIMMER_API_KEY`\n- Portfolio: `GET /api/sdk/portfolio`\n- Positions: `GET /api/sdk/positions`\n\n## Running the Skill\n\n```bash\n# Dry run (default -- shows opportunities, no trades)\npython mert_sniper.py\n\n# Execute real trades\npython mert_sniper.py --live\n\n# Filter to specific markets\npython mert_sniper.py --filter solana\n\n# Custom expiry window (5 minutes)\npython mert_sniper.py --expiry 5\n\n# With smart position sizing (uses portfolio balance)\npython mert_sniper.py --live --smart-sizing\n\n# Check positions only\npython mert_sniper.py --positions\n\n# View config\npython mert_sniper.py --config\n\n# Disable safeguards (not recommended)\npython mert_sniper.py --no-safeguards\n```\n\n## How It Works\n\nEach cycle the script:\n1. Fetches active markets from Simmer API (optionally filtered by tag/keyword)\n2. Filters to markets resolving within the expiry window (default 2 minutes)\n3. Checks the price split -- only trades when one side >= min_split (default 60%)\n4. Determines direction: backs the favored side (higher probability)\n5. **Safeguards**: Checks context for flip-flop warnings, slippage, market status\n6. **Execution**: Places trade on the favored side, capped at max bet\n7. Reports summary of scanned, filtered, and traded markets\n\n## Example Output\n\n```\n🎯 Mert Sniper - Near-Expiry Conviction Trading\n==================================================\n\n  [DRY RUN] No trades will be executed. Use --live to enable trading.\n\n  Configuration:\n  Filter:        solana\n  Max bet:       $10.00\n  Expiry window: 2 minutes\n  Min split:     60/40\n  Max trades:    5\n  Smart sizing:  Disabled\n  Safeguards:    Enabled\n\n  Fetching markets (filter: solana)...\n  Found 12 active markets\n\n  Markets expiring within 2 minutes: 2\n\n  SOL highest price on Feb 10?\n     Resolves in: 1m 34s\n     Split: YES 72% / NO 28%\n     Side: YES (72% >= 60%)\n     [DRY RUN] Would buy $10.00 on YES\n\n  Summary:\n  Markets scanned: 12\n  Near expiry:     2\n  Strong split:    1\n  Trades executed: 0\n\n  [DRY RUN MODE - no real trades executed]\n```\n\n## Troubleshooting\n\n**\"No markets found\"**\n- Check your filter -- try without a filter first\n- Markets may not be available (check simmer.markets)\n\n**\"No markets expiring within window\"**\n- Increase expiry window: `--expiry 10` (10 minutes)\n- Or run more frequently (cron every minute)\n\n**\"Split too narrow\"**\n- Lower the min split: `--set min_split=0.55`\n- This trades more often but with less conviction\n\n**\"Resolves in: 17h\" on 15-min markets**\n- Polymarket's `endDate` is the event-level end-of-day, not the individual market close time\n- For 15-min crypto markets (e.g. \"BTC Up or Down - Feb 8, 11PM ET\"), the actual close time is in the question text but not in the API\n- This is a Polymarket data limitation — widen the expiry window (`--expiry 1080`) as a workaround, or use the split filter to find conviction opportunities regardless of timing\n\n**\"External wallet requires a pre-signed order\"**\n- `WALLET_PRIVATE_KEY` is not set in the environment\n- The SDK signs orders automatically when this env var is present — no manual signing code needed\n- Fix: `export WALLET_PRIVATE_KEY=0x<your-polymarket-wallet-private-key>`\n- Do NOT attempt to sign orders manually or modify the skill code — the SDK handles it\n\n**\"Balance shows $0 but I have funds on Polygon\"**\n- Polymarket V2 (live 2026-04-28) uses **pUSD** (PolyUSD, 1:1 backed by USDC.e). If your wallet holds USDC.e, migrate at [simmer.markets/dashboard](https://simmer.markets/dashboard) with one click (~30s)\n- If you bridged native USDC (Circle), swap to USDC.e first, then migrate to pUSD\n- Full migration guide: [docs.simmer.markets/v2-migration](https://docs.simmer.markets/v2-migration)\n\n**\"API key invalid\"**\n- Get new key from simmer.markets/dashboard -> SDK tab\n\nFile v1.2.1:_meta.json\n\n{\n  \"ownerId\": \"kn7axnp7bzqsf5fkx0z8px7han7zyq1x\",\n  \"slug\": \"polymarket-mert-sniper\",\n  \"version\": \"1.2.1\",\n  \"publishedAt\": 1776923805499\n}\n\nFile v1.2.1:clawhub.json\n\n{\n  \"emoji\": \"\\ud83c\\udfaf\",\n  \"primaryEnv\": \"SIMMER_API_KEY\",\n  \"requires\": {\n    \"env\": [\n      \"SIMMER_API_KEY\"\n    ],\n    \"pip\": [\n      \"simmer-sdk\"\n    ]\n  },\n  \"envVars\": [\n    {\n      \"name\": \"SIMMER_API_KEY\",\n      \"required\": true,\n      \"description\": \"Your Simmer SDK API key \\u2014 get from simmer.markets/dashboard\"\n    },\n    {\n      \"name\": \"WALLET_PRIVATE_KEY\",\n      \"required\": false,\n      \"description\": \"Only needed for external-wallet self-custody trading. Not required when using managed wallets.\"\n    }\n  ],\n  \"cron\": null,\n  \"autostart\": false,\n  \"automaton\": {\n    \"managed\": true,\n    \"entrypoint\": \"mert_sniper.py\"\n  },\n  \"tunables\": [\n    {\n      \"env\": \"SIMMER_MERT_MAX_BET_USD\",\n      \"type\": \"number\",\n      \"default\": 50,\n      \"range\": [\n        1,\n        200\n      ],\n      \"step\": 5,\n      \"label\": \"Max bet per trade\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_EXPIRY_MINUTES\",\n      \"type\": \"number\",\n      \"default\": 30,\n      \"range\": [\n        5,\n        120\n      ],\n      \"step\": 5,\n      \"label\": \"Order expiry (minutes)\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MIN_SPLIT\",\n      \"type\": \"number\",\n      \"default\": 0.1,\n      \"range\": [\n        0.01,\n        0.5\n      ],\n      \"step\": 0.01,\n      \"label\": \"Minimum probability split\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MAX_TRADES_PER_RUN\",\n      \"type\": \"number\",\n      \"default\": 5,\n      \"range\": [\n        1,\n        20\n      ],\n      \"step\": 1,\n      \"label\": \"Max trades per run\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_SIZING_PCT\",\n      \"type\": \"number\",\n      \"default\": 0.1,\n      \"range\": [\n        0.01,\n        1.0\n      ],\n      \"step\": 0.01,\n      \"label\": \"Position sizing percentage\"\n    }\n  ]\n}\n\nFile v1.2.1:config.json\n\n{\n  \"max_bet_usd\": 10.00\n}\n\nArchive v1.1.4: 6 files, 13992 bytes\n\nFiles: clawhub.json (1707b), config.json (27b), mert_sniper.py (25091b), scripts/status.py (5110b), SKILL.md (6842b), _meta.json (141b)\n\nFile v1.1.4:SKILL.md\n\n---\nname: polymarket-mert-sniper\ndescription: Near-expiry conviction trading on Polymarket. Snipe markets about to resolve when the odds are heavily skewed. Filter by topic, cap your bets, and only trade strong splits close to deadline.\nmetadata:\n  author: Simmer (@simmer_markets)\n  version: \"1.1.4\"\n  displayName: Mert Sniper\n  difficulty: advanced\n  attribution: Strategy inspired by @mert — https://x.com/mert/status/2020216613279060433\n---\n# Mert Sniper\n\nNear-expiry conviction trading on Polymarket. Snipe markets about to resolve when the odds are heavily skewed.\n\n> Strategy by [@mert](https://x.com/mert/status/2020216613279060433) — filter by topic, cap your bets, wait until near expiry, and only trade strong splits.\n\n> **This is a template.** The default logic (expiry + split filter) gets you started — remix it with your own filters, timing rules, or market selection criteria. The skill handles all the plumbing (market discovery, trade execution, safeguards). Your agent provides the alpha.\n\n## When to Use This Skill\n\n> **Polymarket only.** All trades execute on Polymarket with real USDC. Use `--live` for real trades, dry-run is the default.\n\nUse this skill when the user wants to:\n- Trade markets that are about to resolve (last-minute conviction bets)\n- Filter by topic (e.g. only SOL/crypto markets)\n- Cap bet size (e.g. never more than $10)\n- Only trade when odds are strongly skewed (e.g. 60/40 or better)\n- Run an automated expiry-sniping strategy\n\n## Setup Flow\n\n1. **Install the Simmer SDK**\n   ```bash\n   pip install simmer-sdk\n   ```\n\n2. **Ask for Simmer API key**\n   - Get it from simmer.markets/dashboard -> SDK tab\n   - Store in environment as `SIMMER_API_KEY`\n\n3. **Ask for wallet private key** (required for live trading)\n   - This is the private key for their Polymarket wallet (the wallet that holds USDC)\n   - Store in environment as `WALLET_PRIVATE_KEY`\n   - The SDK uses this to sign orders client-side automatically — no manual signing needed\n\n4. **Ask about settings** (or confirm defaults)\n   - Market filter: Which markets to scan (default: all)\n   - Max bet: Maximum per trade (default $10)\n   - Expiry window: How close to resolution (default 2 minutes)\n   - Min split: Minimum odds skew (default 60/40)\n\n5. **Save settings to config.json or environment variables**\n\n## Configuration\n\n| Setting | Environment Variable | Default | Description |\n|---------|---------------------|---------|-------------|\n| Market filter | `SIMMER_MERT_FILTER` | (all) | Tag or keyword filter (e.g. `solana`, `crypto`) |\n| Max bet | `SIMMER_MERT_MAX_BET` | 10.00 | Maximum USD per trade |\n| Expiry window | `SIMMER_MERT_EXPIRY_MINS` | 2 | Only trade markets resolving within N minutes |\n| Min split | `SIMMER_MERT_MIN_SPLIT` | 0.60 | Only trade when YES or NO >= this (e.g. 0.60 = 60/40) |\n| Max trades/run | `SIMMER_MERT_MAX_TRADES` | 5 | Maximum trades per scan cycle |\n| Smart sizing % | `SIMMER_MERT_SIZING_PCT` | 0.05 | % of balance per trade |\n\n## Quick Commands\n\n```bash\n# Check account balance and positions\npython scripts/status.py\n\n# Detailed position list\npython scripts/status.py --positions\n```\n\n**API Reference:**\n- Base URL: `https://api.simmer.markets`\n- Auth: `Authorization: Bearer $SIMMER_API_KEY`\n- Portfolio: `GET /api/sdk/portfolio`\n- Positions: `GET /api/sdk/positions`\n\n## Running the Skill\n\n```bash\n# Dry run (default -- shows opportunities, no trades)\npython mert_sniper.py\n\n# Execute real trades\npython mert_sniper.py --live\n\n# Filter to specific markets\npython mert_sniper.py --filter solana\n\n# Custom expiry window (5 minutes)\npython mert_sniper.py --expiry 5\n\n# With smart position sizing (uses portfolio balance)\npython mert_sniper.py --live --smart-sizing\n\n# Check positions only\npython mert_sniper.py --positions\n\n# View config\npython mert_sniper.py --config\n\n# Disable safeguards (not recommended)\npython mert_sniper.py --no-safeguards\n```\n\n## How It Works\n\nEach cycle the script:\n1. Fetches active markets from Simmer API (optionally filtered by tag/keyword)\n2. Filters to markets resolving within the expiry window (default 2 minutes)\n3. Checks the price split -- only trades when one side >= min_split (default 60%)\n4. Determines direction: backs the favored side (higher probability)\n5. **Safeguards**: Checks context for flip-flop warnings, slippage, market status\n6. **Execution**: Places trade on the favored side, capped at max bet\n7. Reports summary of scanned, filtered, and traded markets\n\n## Example Output\n\n```\n🎯 Mert Sniper - Near-Expiry Conviction Trading\n==================================================\n\n  [DRY RUN] No trades will be executed. Use --live to enable trading.\n\n  Configuration:\n  Filter:        solana\n  Max bet:       $10.00\n  Expiry window: 2 minutes\n  Min split:     60/40\n  Max trades:    5\n  Smart sizing:  Disabled\n  Safeguards:    Enabled\n\n  Fetching markets (filter: solana)...\n  Found 12 active markets\n\n  Markets expiring within 2 minutes: 2\n\n  SOL highest price on Feb 10?\n     Resolves in: 1m 34s\n     Split: YES 72% / NO 28%\n     Side: YES (72% >= 60%)\n     [DRY RUN] Would buy $10.00 on YES\n\n  Summary:\n  Markets scanned: 12\n  Near expiry:     2\n  Strong split:    1\n  Trades executed: 0\n\n  [DRY RUN MODE - no real trades executed]\n```\n\n## Troubleshooting\n\n**\"No markets found\"**\n- Check your filter -- try without a filter first\n- Markets may not be available (check simmer.markets)\n\n**\"No markets expiring within window\"**\n- Increase expiry window: `--expiry 10` (10 minutes)\n- Or run more frequently (cron every minute)\n\n**\"Split too narrow\"**\n- Lower the min split: `--set min_split=0.55`\n- This trades more often but with less conviction\n\n**\"Resolves in: 17h\" on 15-min markets**\n- Polymarket's `endDate` is the event-level end-of-day, not the individual market close time\n- For 15-min crypto markets (e.g. \"BTC Up or Down - Feb 8, 11PM ET\"), the actual close time is in the question text but not in the API\n- This is a Polymarket data limitation — widen the expiry window (`--expiry 1080`) as a workaround, or use the split filter to find conviction opportunities regardless of timing\n\n**\"External wallet requires a pre-signed order\"**\n- `WALLET_PRIVATE_KEY` is not set in the environment\n- The SDK signs orders automatically when this env var is present — no manual signing code needed\n- Fix: `export WALLET_PRIVATE_KEY=0x<your-polymarket-wallet-private-key>`\n- Do NOT attempt to sign orders manually or modify the skill code — the SDK handles it\n\n**\"Balance shows $0 but I have USDC on Polygon\"**\n- Polymarket uses **USDC.e** (bridged USDC, contract `0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174`) — not native USDC\n- If you bridged USDC to Polygon recently, you likely received native USDC\n- Swap native USDC to USDC.e, then retry\n\n**\"API key invalid\"**\n- Get new key from simmer.markets/dashboard -> SDK tab\n\nFile v1.1.4:_meta.json\n\n{\n  \"ownerId\": \"kn7axnp7bzqsf5fkx0z8px7han7zyq1x\",\n  \"slug\": \"polymarket-mert-sniper\",\n  \"version\": \"1.1.4\",\n  \"publishedAt\": 1776849332627\n}\n\nFile v1.1.4:clawhub.json\n\n{\n  \"emoji\": \"\\ud83c\\udfaf\",\n  \"primaryEnv\": \"SIMMER_API_KEY\",\n  \"requires\": {\n    \"env\": [\n      \"SIMMER_API_KEY\"\n    ],\n    \"pip\": [\n      \"simmer-sdk\"\n    ]\n  },\n  \"envVars\": [\n    {\n      \"name\": \"SIMMER_API_KEY\",\n      \"required\": true,\n      \"description\": \"Your Simmer SDK API key \\u2014 get from simmer.markets/dashboard\"\n    },\n    {\n      \"name\": \"WALLET_PRIVATE_KEY\",\n      \"required\": false,\n      \"description\": \"Only needed for external-wallet self-custody trading. Not required when using managed wallets.\"\n    }\n  ],\n  \"cron\": null,\n  \"autostart\": false,\n  \"automaton\": {\n    \"managed\": true,\n    \"entrypoint\": \"mert_sniper.py\"\n  },\n  \"tunables\": [\n    {\n      \"env\": \"SIMMER_MERT_MAX_BET_USD\",\n      \"type\": \"number\",\n      \"default\": 50,\n      \"range\": [\n        1,\n        200\n      ],\n      \"step\": 5,\n      \"label\": \"Max bet per trade\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_EXPIRY_MINUTES\",\n      \"type\": \"number\",\n      \"default\": 30,\n      \"range\": [\n        5,\n        120\n      ],\n      \"step\": 5,\n      \"label\": \"Order expiry (minutes)\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MIN_SPLIT\",\n      \"type\": \"number\",\n      \"default\": 0.1,\n      \"range\": [\n        0.01,\n        0.5\n      ],\n      \"step\": 0.01,\n      \"label\": \"Minimum probability split\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MAX_TRADES_PER_RUN\",\n      \"type\": \"number\",\n      \"default\": 5,\n      \"range\": [\n        1,\n        20\n      ],\n      \"step\": 1,\n      \"label\": \"Max trades per run\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_SIZING_PCT\",\n      \"type\": \"number\",\n      \"default\": 0.1,\n      \"range\": [\n        0.01,\n        1.0\n      ],\n      \"step\": 0.01,\n      \"label\": \"Position sizing percentage\"\n    }\n  ]\n}\n\nFile v1.1.4:config.json\n\n{\n  \"max_bet_usd\": 10.00\n}\n\nArchive v1.1.3: 6 files, 13840 bytes\n\nFiles: clawhub.json (1333b), config.json (27b), mert_sniper.py (25091b), scripts/status.py (5110b), SKILL.md (6842b), _meta.json (141b)\n\nFile v1.1.3:SKILL.md\n\n---\nname: polymarket-mert-sniper\ndescription: Near-expiry conviction trading on Polymarket. Snipe markets about to resolve when the odds are heavily skewed. Filter by topic, cap your bets, and only trade strong splits close to deadline.\nmetadata:\n  author: Simmer (@simmer_markets)\n  version: \"1.1.3\"\n  displayName: Mert Sniper\n  difficulty: advanced\n  attribution: Strategy inspired by @mert — https://x.com/mert/status/2020216613279060433\n---\n# Mert Sniper\n\nNear-expiry conviction trading on Polymarket. Snipe markets about to resolve when the odds are heavily skewed.\n\n> Strategy by [@mert](https://x.com/mert/status/2020216613279060433) — filter by topic, cap your bets, wait until near expiry, and only trade strong splits.\n\n> **This is a template.** The default logic (expiry + split filter) gets you started — remix it with your own filters, timing rules, or market selection criteria. The skill handles all the plumbing (market discovery, trade execution, safeguards). Your agent provides the alpha.\n\n## When to Use This Skill\n\n> **Polymarket only.** All trades execute on Polymarket with real USDC. Use `--live` for real trades, dry-run is the default.\n\nUse this skill when the user wants to:\n- Trade markets that are about to resolve (last-minute conviction bets)\n- Filter by topic (e.g. only SOL/crypto markets)\n- Cap bet size (e.g. never more than $10)\n- Only trade when odds are strongly skewed (e.g. 60/40 or better)\n- Run an automated expiry-sniping strategy\n\n## Setup Flow\n\n1. **Install the Simmer SDK**\n   ```bash\n   pip install simmer-sdk\n   ```\n\n2. **Ask for Simmer API key**\n   - Get it from simmer.markets/dashboard -> SDK tab\n   - Store in environment as `SIMMER_API_KEY`\n\n3. **Ask for wallet private key** (required for live trading)\n   - This is the private key for their Polymarket wallet (the wallet that holds USDC)\n   - Store in environment as `WALLET_PRIVATE_KEY`\n   - The SDK uses this to sign orders client-side automatically — no manual signing needed\n\n4. **Ask about settings** (or confirm defaults)\n   - Market filter: Which markets to scan (default: all)\n   - Max bet: Maximum per trade (default $10)\n   - Expiry window: How close to resolution (default 2 minutes)\n   - Min split: Minimum odds skew (default 60/40)\n\n5. **Save settings to config.json or environment variables**\n\n## Configuration\n\n| Setting | Environment Variable | Default | Description |\n|---------|---------------------|---------|-------------|\n| Market filter | `SIMMER_MERT_FILTER` | (all) | Tag or keyword filter (e.g. `solana`, `crypto`) |\n| Max bet | `SIMMER_MERT_MAX_BET` | 10.00 | Maximum USD per trade |\n| Expiry window | `SIMMER_MERT_EXPIRY_MINS` | 2 | Only trade markets resolving within N minutes |\n| Min split | `SIMMER_MERT_MIN_SPLIT` | 0.60 | Only trade when YES or NO >= this (e.g. 0.60 = 60/40) |\n| Max trades/run | `SIMMER_MERT_MAX_TRADES` | 5 | Maximum trades per scan cycle |\n| Smart sizing % | `SIMMER_MERT_SIZING_PCT` | 0.05 | % of balance per trade |\n\n## Quick Commands\n\n```bash\n# Check account balance and positions\npython scripts/status.py\n\n# Detailed position list\npython scripts/status.py --positions\n```\n\n**API Reference:**\n- Base URL: `https://api.simmer.markets`\n- Auth: `Authorization: Bearer $SIMMER_API_KEY`\n- Portfolio: `GET /api/sdk/portfolio`\n- Positions: `GET /api/sdk/positions`\n\n## Running the Skill\n\n```bash\n# Dry run (default -- shows opportunities, no trades)\npython mert_sniper.py\n\n# Execute real trades\npython mert_sniper.py --live\n\n# Filter to specific markets\npython mert_sniper.py --filter solana\n\n# Custom expiry window (5 minutes)\npython mert_sniper.py --expiry 5\n\n# With smart position sizing (uses portfolio balance)\npython mert_sniper.py --live --smart-sizing\n\n# Check positions only\npython mert_sniper.py --positions\n\n# View config\npython mert_sniper.py --config\n\n# Disable safeguards (not recommended)\npython mert_sniper.py --no-safeguards\n```\n\n## How It Works\n\nEach cycle the script:\n1. Fetches active markets from Simmer API (optionally filtered by tag/keyword)\n2. Filters to markets resolving within the expiry window (default 2 minutes)\n3. Checks the price split -- only trades when one side >= min_split (default 60%)\n4. Determines direction: backs the favored side (higher probability)\n5. **Safeguards**: Checks context for flip-flop warnings, slippage, market status\n6. **Execution**: Places trade on the favored side, capped at max bet\n7. Reports summary of scanned, filtered, and traded markets\n\n## Example Output\n\n```\n🎯 Mert Sniper - Near-Expiry Conviction Trading\n==================================================\n\n  [DRY RUN] No trades will be executed. Use --live to enable trading.\n\n  Configuration:\n  Filter:        solana\n  Max bet:       $10.00\n  Expiry window: 2 minutes\n  Min split:     60/40\n  Max trades:    5\n  Smart sizing:  Disabled\n  Safeguards:    Enabled\n\n  Fetching markets (filter: solana)...\n  Found 12 active markets\n\n  Markets expiring within 2 minutes: 2\n\n  SOL highest price on Feb 10?\n     Resolves in: 1m 34s\n     Split: YES 72% / NO 28%\n     Side: YES (72% >= 60%)\n     [DRY RUN] Would buy $10.00 on YES\n\n  Summary:\n  Markets scanned: 12\n  Near expiry:     2\n  Strong split:    1\n  Trades executed: 0\n\n  [DRY RUN MODE - no real trades executed]\n```\n\n## Troubleshooting\n\n**\"No markets found\"**\n- Check your filter -- try without a filter first\n- Markets may not be available (check simmer.markets)\n\n**\"No markets expiring within window\"**\n- Increase expiry window: `--expiry 10` (10 minutes)\n- Or run more frequently (cron every minute)\n\n**\"Split too narrow\"**\n- Lower the min split: `--set min_split=0.55`\n- This trades more often but with less conviction\n\n**\"Resolves in: 17h\" on 15-min markets**\n- Polymarket's `endDate` is the event-level end-of-day, not the individual market close time\n- For 15-min crypto markets (e.g. \"BTC Up or Down - Feb 8, 11PM ET\"), the actual close time is in the question text but not in the API\n- This is a Polymarket data limitation — widen the expiry window (`--expiry 1080`) as a workaround, or use the split filter to find conviction opportunities regardless of timing\n\n**\"External wallet requires a pre-signed order\"**\n- `WALLET_PRIVATE_KEY` is not set in the environment\n- The SDK signs orders automatically when this env var is present — no manual signing code needed\n- Fix: `export WALLET_PRIVATE_KEY=0x<your-polymarket-wallet-private-key>`\n- Do NOT attempt to sign orders manually or modify the skill code — the SDK handles it\n\n**\"Balance shows $0 but I have USDC on Polygon\"**\n- Polymarket uses **USDC.e** (bridged USDC, contract `0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174`) — not native USDC\n- If you bridged USDC to Polygon recently, you likely received native USDC\n- Swap native USDC to USDC.e, then retry\n\n**\"API key invalid\"**\n- Get new key from simmer.markets/dashboard -> SDK tab\n\nFile v1.1.3:_meta.json\n\n{\n  \"ownerId\": \"kn7axnp7bzqsf5fkx0z8px7han7zyq1x\",\n  \"slug\": \"polymarket-mert-sniper\",\n  \"version\": \"1.1.3\",\n  \"publishedAt\": 1776846326547\n}\n\nFile v1.1.3:clawhub.json\n\n{\n  \"emoji\": \"\\ud83c\\udfaf\",\n  \"requires\": {\n    \"env\": [\n      \"SIMMER_API_KEY\",\n      \"WALLET_PRIVATE_KEY\"\n    ],\n    \"pip\": [\n      \"simmer-sdk\"\n    ]\n  },\n  \"cron\": null,\n  \"autostart\": false,\n  \"automaton\": {\n    \"managed\": true,\n    \"entrypoint\": \"mert_sniper.py\"\n  },\n  \"tunables\": [\n    {\n      \"env\": \"SIMMER_MERT_MAX_BET_USD\",\n      \"type\": \"number\",\n      \"default\": 50,\n      \"range\": [\n        1,\n        200\n      ],\n      \"step\": 5,\n      \"label\": \"Max bet per trade\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_EXPIRY_MINUTES\",\n      \"type\": \"number\",\n      \"default\": 30,\n      \"range\": [\n        5,\n        120\n      ],\n      \"step\": 5,\n      \"label\": \"Order expiry (minutes)\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MIN_SPLIT\",\n      \"type\": \"number\",\n      \"default\": 0.1,\n      \"range\": [\n        0.01,\n        0.5\n      ],\n      \"step\": 0.01,\n      \"label\": \"Minimum probability split\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MAX_TRADES_PER_RUN\",\n      \"type\": \"number\",\n      \"default\": 5,\n      \"range\": [\n        1,\n        20\n      ],\n      \"step\": 1,\n      \"label\": \"Max trades per run\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_SIZING_PCT\",\n      \"type\": \"number\",\n      \"default\": 0.1,\n      \"range\": [\n        0.01,\n        1.0\n      ],\n      \"step\": 0.01,\n      \"label\": \"Position sizing percentage\"\n    }\n  ]\n}\n\nFile v1.1.3:config.json\n\n{\n  \"max_bet_usd\": 10.00\n}","readmeExcerpt":"Skill: polymarket-mert-sniper Owner: simmer Summary: Near-expiry conviction trading on Polymarket. The skill scans markets in their final minutes, filters for strongly-skewed splits (60/40+), and places bounded trades against the under-priced side. Defaults — $10 max per trade, 5 trades/run, 8-minute expiry window, dry-run unless --live. Tags: latest:1.3.6 Version history: v1.3.6 | 2026-09-06T01:14:42.815Z | auto pol","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"pip install simmer-sdk"},{"language":"bash","snippet":"# Check account balance and positions\npython scripts/status.py\n\n# Detailed position list\npython scripts/status.py --positions"},{"language":"bash","snippet":"# Dry run (default -- shows opportunities, no trades)\npython mert_sniper.py\n\n# Execute real trades\npython mert_sniper.py --live\n\n# Filter to specific markets\npython mert_sniper.py --filter solana\n\n# Custom expiry window (5 minutes)\npython mert_sniper.py --expiry 5\n\n# With smart position sizing (uses portfolio balance)\npython mert_sniper.py --live --smart-sizing\n\n# Check positions only\npython mert_sniper.py --positions\n\n# View config\npython mert_sniper.py --config\n\n# Disable safeguards (not recommended)\npython mert_sniper.py --no-safeguards"},{"language":"text","snippet":"🎯 Mert Sniper - Near-Expiry Conviction Trading\n==================================================\n\n  [DRY RUN] No trades will be executed. Use --live to enable trading.\n\n  Configuration:\n  Filter:        solana\n  Max bet:       $10.00\n  Expiry window: 8 minutes\n  Min split:     60/40\n  Max trades:    5\n  Smart sizing:  Disabled\n  Safeguards:    Enabled\n\n  Fetching markets (filter: solana)...\n  Found 12 active markets\n\n  Markets expiring within 8 minutes: 2\n\n  SOL highest price on Feb 10?\n     Resolves in: 1m 34s\n     Split: YES 72% / NO 28%\n     Side: YES (72% >= 60%)\n     [DRY RUN] Would buy $10.00 on YES\n\n  Summary:\n  Markets scanned: 12\n  Near expiry:     2\n  Strong split:    1\n  Trades executed: 0\n\n  [DRY RUN MODE - no real trades executed]"},{"language":"bash","snippet":"pip install simmer-sdk"},{"language":"bash","snippet":"# Check account balance and positions\npython scripts/status.py\n\n# Detailed position list\npython scripts/status.py --positions"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: polymarket-mert-sniper\ndescription: Near-expiry conviction trading on Polymarket. The skill scans markets in their final minutes, filters for strongly-skewed splits (60/40+), and places bounded trades against the under-priced side. Defaults — $10 max per trade, 5 trades/run, 8-minute expiry window, dry-run unless `--live`.\nmetadata:\n  author: Simmer (@simmer_markets)\n  version: \"1.3.6\"\n  displayName: Mert Sniper\n  difficulty: advanced\n  attribution: Strategy inspired by @mert — https://x.com/mert/status/2020216613279060433\n---\n# Mert Sniper\n\nNear-expiry conviction trading on Polymarket. The skill scans markets in their final minutes of pricing, filters for strongly-skewed splits, and places bounded trades against the under-priced side.\n\n> 🚨 **Framework, not a production trading system.** Read [DISCLAIMER.md](./DISCLAIMER.md) before connecting to a wallet with real funds. Dry-run is the default; `--live` is required for any real-USDC trade. Defaults: $10 max per trade, 60/40 split minimum, 8-minute expiry window, 5 trades per scan cycle — adjust deliberately before scaling.\n\n> **This is a template.** The default logic (expiry + split filter) is a starting point — remix it with your own filters, timing rules, or market selection criteria. The skill handles all the plumbing (market discovery, trade execution, safeguards). Your agent provides the alpha.\n\n> Strategy attribution: [@mert](https://x.com/mert/status/2020216613279060433) — see source thread for the original methodology (topic filter, near-expiry timing, strong-split entry).\n\n> **News-recency veto.** Optional guard that checks Simmer's macro-news schedule before order placement and skips matching news-resolution markets inside the first 30 seconds after CPI, BLS jobs/unemployment, FOMC, nonfarm payrolls, or quarterly earnings events. Continuous-feed crypto Up/Down markets are not blocked by this veto. Default is off until internal positive backfill coverage exists; set `enable_news_veto=true` to enable it.\n\n## When to Use This Skill\n\nUse this skill when the user wants to:\n- Trade markets that are about to resolve (last-minute conviction bets)\n- Filter by topic (e.g. only SOL/crypto markets)\n- Cap bet size (e.g. never more than $10)\n- Only trade when odds are strongly skewed (e.g. 60/40 or better)\n- Run an automated expiry-sniping strategy\n\n## Setup Flow\n\n1. **Install the Simmer SDK**\n   ```bash\n   pip install simmer-sdk\n   ```\n\n2. **Ask for Simmer API key**\n   - Get it from simmer.markets/dashboard -> SDK tab\n   - Store in environment as `SIMMER_API_KEY`\n\n3. **Ask for wallet private key** (required for live trading)\n   - This is the private key for their Polymarket wallet (the wallet that holds USDC)\n   - Store in environment as `WALLET_PRIVATE_KEY`\n   - The SDK uses this to sign orders client-side automatically — no manual signing needed\n\n4. **Ask about settings** (or confirm defaults)\n   - Market filter: Which markets to scan (default: all)\n   - Max bet: Maximum per trade (defa"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7axnp7bzqsf5fkx0z8px7han7zyq1x\",\n  \"slug\": \"polymarket-mert-sniper\",\n  \"version\": \"1.3.6\",\n  \"publishedAt\": 1788657282815\n}"},{"path":"DISCLAIMER.md","content":"# Disclaimer\n\nThis skill is a **framework**, not a production trading system. Read this\nin full before connecting it to a wallet with real funds.\n\n## No financial advice\n\nNothing in this skill constitutes financial, investment, or trading\nadvice. The default strategy implemented here is a starting point, not a\ntested edge. Suitability for any account size or risk tolerance is your\nresponsibility to assess.\n\n## Default parameters are not validated\n\nDefault parameters are calibrated for testing the plumbing, not for live\nprofit. They have not been validated to produce positive returns under\ncurrent market conditions. Run paper mode for an extended period before\nscaling beyond default position sizes.\n\n## Automated trading carries irreversible risk\n\nWhen this skill runs with `--live`, it places real on-chain orders.\nOn-chain trades cannot be recalled. Strategy errors, signal lag, market\nregime shifts, and operator misconfiguration can produce losses\nexceeding any specific position size.\n\n## Risk monitoring may not apply to all market types\n\nStop-loss and take-profit monitors run on a fixed schedule. Markets that\nresolve faster than the monitor cycle cannot be exited automatically.\nPosition sizing is the only risk control on these markets — set it\nconservatively.\n\n## Use of this skill is at your own risk\n\nBy installing and running this skill you agree that the authors are not\nliable for any losses, direct or indirect, that arise from its use. This\napplies regardless of skill provenance — official Simmer skills,\ncommunity skills, and skills imported from external repositories all\ncarry this same disclaimer.\n\n## Where to learn more before going live\n\n- The skill's own `SKILL.md` documents the strategy and parameters\n- Your trading venue's documentation covers fee structure, order types,\n  and resolution rules\n- Simmer SDK documentation covers paper mode, dry-run flags, and\n  position monitoring"},{"path":"skill-card.md","content":"## Description:\n\nNear-expiry conviction trading on Polymarket that scans final-minute markets, filters for strongly skewed splits, and proposes or places bounded trades with dry-run as the default.\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\nExternal users and trading-strategy developers use this skill to configure and run a near-expiry Polymarket scanning workflow with dry-run previews and optional live order placement through Simmer.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Live mode can place real Polymarket trades, and on-chain orders cannot be recalled.\n\nMitigation: Keep dry-run enabled until configuration and wallet readiness are reviewed; use a dedicated low-balance wallet or API key for initial operation.\n\nRisk: Managed ClawHub tunables advertise higher or different defaults than the README and Python defaults, changing trade-size and strategy exposure.\n\nMitigation: Verify the effective runtime values before enabling live or managed execution, especially max bet, expiry window, minimum split, and position sizing.\n\nRisk: Portfolio and status commands can expose balances, open positions, and activity in terminal output or logs.\n\nMitigation: Avoid running status output in shared terminals or persistent logs, and limit API key access to the minimum needed for operation.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/simmer/skills/polymarket-mert-sniper)\n- [Strategy attribution thread](https://x.com/mert/status/2020216613279060433)\n- [Simmer V2 migration guide](https://docs.simmer.markets/v2-migration)\n- [Simmer API base](https://api.simmer.markets)\n- [Polymarket CLOB API](https://clob.polymarket.com)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown with inline shell commands and configuration values]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Dry-run status, market scan summaries, account status output, and live-trade execution guidance may be produced depending on command flags.]\n\n## Skill Version(s):\n\n1.3.6 (source: frontmatter and 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."},{"path":"clawhub.json","content":"{\n  \"emoji\": \"\\ud83c\\udfaf\",\n  \"primaryEnv\": \"SIMMER_API_KEY\",\n  \"requires\": {\n    \"env\": [\n      \"SIMMER_API_KEY\"\n    ],\n    \"pip\": [\n      \"simmer-sdk>=0.17.25\"\n    ]\n  },\n  \"envVars\": [\n    {\n      \"name\": \"SIMMER_API_KEY\",\n      \"required\": true,\n      \"description\": \"Your Simmer SDK API key \\u2014 get from simmer.markets/dashboard\"\n    },\n    {\n      \"name\": \"WALLET_PRIVATE_KEY\",\n      \"required\": false,\n      \"description\": \"Only needed for external-wallet self-custody trading. Not required when using managed wallets.\"\n    }\n  ],\n  \"cron\": null,\n  \"autostart\": false,\n  \"automaton\": {\n    \"managed\": true,\n    \"entrypoint\": \"mert_sniper.py\"\n  },\n  \"tunables\": [\n    {\n      \"env\": \"SIMMER_MERT_MAX_BET_USD\",\n      \"type\": \"number\",\n      \"default\": 50,\n      \"range\": [\n        1,\n        200\n      ],\n      \"step\": 5,\n      \"label\": \"Max bet per trade\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_EXPIRY_MINUTES\",\n      \"type\": \"number\",\n      \"default\": 30,\n      \"range\": [\n        5,\n        120\n      ],\n      \"step\": 5,\n      \"label\": \"Order expiry (minutes)\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MIN_SPLIT\",\n      \"type\": \"number\",\n      \"default\": 0.1,\n      \"range\": [\n        0.01,\n        0.5\n      ],\n      \"step\": 0.01,\n      \"label\": \"Minimum probability split\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MAX_TRADES_PER_RUN\",\n      \"type\": \"number\",\n      \"default\": 5,\n      \"range\": [\n        1,\n        20\n      ],\n      \"step\": 1,\n      \"label\": \"Max trades per run\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_SIZING_PCT\",\n      \"type\": \"number\",\n      \"default\": 0.1,\n      \"range\": [\n        0.01,\n        1.0\n      ],\n      \"step\": 0.01,\n      \"label\": \"Position sizing percentage\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_FEE_BUFFER\",\n      \"type\": \"number\",\n      \"default\": 0.02,\n      \"range\": [\n        0.0,\n        0.10\n      ],\n      \"step\": 0.005,\n      \"label\": \"Fee buffer (extra alpha required above entry fee)\"\n    },\n    {\n      \"env\": \"SIMMER_MERT_MIN_EDGE\",\n      \"type\": \"number\",\n      \"default\": 0.0,\n      \"range\": [\n        0.0,\n        0.20\n      ],\n      \"step\": 0.01,\n      \"label\": \"Declared edge above market price (0 = fee-logging only, no gate)\"\n    }\n  ]\n}"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1961,"uniquenessScore":43,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T07:22:37.618Z","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-09T07:22:37.618Z","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-09T22:17:47.314Z","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"}]}}}