{"id":"8e15ac15-505e-442a-a3e7-41a85d4b9884","entityType":"agent","slug":"clawhub-simmer-kalshi-weather-trader","name":"kalshi-weather-trader","canonicalUrl":"https://www.xpersona.co/agent/clawhub-simmer-kalshi-weather-trader","canonicalPath":"/agent/clawhub-simmer-kalshi-weather-trader","generatedAt":"2026-10-10T08:10:41.683Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T20:36:08.224Z","emptyReason":null},"description":"Trade Kalshi weather markets using NOAA forecasts via Simmer SDK and DFlow on Solana. Port of the popular polymarket-weather-trader. Use when user wants to trade temperature markets on Kalshi, automate weather bets, or check NOAA forecasts.","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 2K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s17eez0vajry6hjb97y9mbtv2s85wekv:kalshi-weather-trader","sourceUrl":"https://clawhub.ai/simmer/kalshi-weather-trader","homepage":"https://clawhub.ai/simmer/skills/kalshi-weather-trader","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/simmer/kalshi-weather-trader","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/simmer/skills/kalshi-weather-trader","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":66,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"kalshi-weather-trader 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-09T20:36:08.224Z","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-09T20:36:08.224Z","emptyReason":null},"stars":null,"forks":null,"downloads":2018,"packageName":null,"latestVersion":"1.0.12","tractionLabel":"2K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T20:36:08.224Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T20:36:08.224Z","lastCrawledAt":"2026-10-09T20:36:08.224Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T20:36:08.224Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.12","createdAt":"2026-09-10T03:02:54.292Z","changelog":"**Summary:** Adds entry price lower bound & new entry safeguards for more robust trade filtering. - Introduced `SIMMER_WEATHER_MIN_ENTRY_PRICE` to skip entries below a set price floor (lottery-ticket protection). - Added min-hours-to-resolve safeguard on entry for stricter filtering (`SIMMER_WEATHER_MIN_HOURS_TO_RESOLVE`). - Updated documentation (SKILL.md) for new safeguards and configuration options. - New tests for entry safeguards added. - Minor refactoring for clarity in changelog and config instructions.","fileCount":11,"zipByteSize":28335},{"version":"1.0.11","createdAt":"2026-09-06T01:10:11.028Z","changelog":"- Updated to version 1.0.11 - Minor documentation changes in SKILL.md - Removed redundant skill-card.md file - No user-facing logic or feature changes","fileCount":10,"zipByteSize":24890},{"version":"1.0.10","createdAt":"2026-06-13T05:07:59.364Z","changelog":"Disclose that the auto stop-loss can't catch gap-resolution on weather temperature markets (price gaps to ~0 at resolution); size for full loss.","fileCount":10,"zipByteSize":24688},{"version":"1.0.9","createdAt":"2026-05-26T14:23:13.760Z","changelog":"- Bumped version to 1.0.9. - Updated SKILL.md metadata to reflect new version. - No core code or functionality changes documented.","fileCount":10,"zipByteSize":24418},{"version":"1.0.8","createdAt":"2026-05-23T11:14:08.831Z","changelog":"Version 1.0.8 - Added a clear disclaimer ([DISCLAIMER.md](./DISCLAIMER.md)) emphasizing this is a framework, not a production trading system. - Introduced a full changelog ([CHANGELOG.md](./CHANGELOG.md)) for better version tracking. - Enhanced handling for scenarios where no forecast sources are available, with new corresponding test (`tests/test_sources_none.py`). - Updated documentation in SKILL.md to reference the disclaimer and clarify framework intent. - Minor internal improvements and test coverage updates.","fileCount":9,"zipByteSize":22732},{"version":"1.0.7","createdAt":"2026-05-19T05:37:59.160Z","changelog":"Kalshi Weather Trader v1.0.7 - Bumped version to 1.0.7 in SKILL.md metadata. - No user-facing functional changes. Documentation and metadata update only.","fileCount":6,"zipByteSize":19553},{"version":"1.0.6","createdAt":"2026-04-24T13:22:40.516Z","changelog":"Experiment: apply flagship fix pattern (envVars + primaryEnv in both SKILL.md frontmatter and clawhub.json). Testing whether this clears the VT suspicious flag or only addresses LLM scanner complaints.","fileCount":6,"zipByteSize":19536},{"version":"1.0.5","createdAt":"2026-04-16T10:05:11.677Z","changelog":"Add pip install simmer-sdk to setup flow","fileCount":6,"zipByteSize":19215}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17eez0vajry6hjb97y9mbtv2s85wekv:kalshi-weather-trader","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s17eez0vajry6hjb97y9mbtv2s85wekv:kalshi-weather-trader` 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/kalshi-weather-trader 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-kalshi-weather-trader/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-simmer-kalshi-weather-trader/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-simmer-kalshi-weather-trader/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-simmer-kalshi-weather-trader/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-simmer-kalshi-weather-trader/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-simmer-kalshi-weather-trader/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-10T08:10:41.679Z"}},"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-kalshi-weather-trader/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-simmer-kalshi-weather-trader/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-simmer-kalshi-weather-trader/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-simmer-kalshi-weather-trader/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-09T20:36:08.224Z","emptyReason":null},"readme":"Skill: kalshi-weather-trader\n\nOwner: simmer\n\nSummary: Trade Kalshi weather markets using NOAA forecasts via Simmer SDK and DFlow on Solana. Port of the popular polymarket-weather-trader. Use when user wants to trade temperature markets on Kalshi, automate weather bets, or check NOAA forecasts.\n\nTags: latest:1.0.12\n\nVersion history:\n\nv1.0.12 | 2026-09-10T03:02:54.292Z | auto\n\n**Summary:** Adds entry price lower bound & new entry safeguards for more robust trade filtering.\n\n- Introduced `SIMMER_WEATHER_MIN_ENTRY_PRICE` to skip entries below a set price floor (lottery-ticket protection).\n- Added min-hours-to-resolve safeguard on entry for stricter filtering (`SIMMER_WEATHER_MIN_HOURS_TO_RESOLVE`).\n- Updated documentation (SKILL.md) for new safeguards and configuration options.\n- New tests for entry safeguards added.\n- Minor refactoring for clarity in changelog and config instructions.\n\nv1.0.11 | 2026-09-06T01:10:11.028Z | auto\n\n- Updated to version 1.0.11\n- Minor documentation changes in SKILL.md\n- Removed redundant skill-card.md file\n- No user-facing logic or feature changes\n\nv1.0.10 | 2026-06-13T05:07:59.364Z | user\n\nDisclose that the auto stop-loss can't catch gap-resolution on weather temperature markets (price gaps to ~0 at resolution); size for full loss.\n\nv1.0.9 | 2026-05-26T14:23:13.760Z | auto\n\n- Bumped version to 1.0.9.\n- Updated SKILL.md metadata to reflect new version.\n- No core code or functionality changes documented.\n\nv1.0.8 | 2026-05-23T11:14:08.831Z | auto\n\nVersion 1.0.8\n\n- Added a clear disclaimer ([DISCLAIMER.md](./DISCLAIMER.md)) emphasizing this is a framework, not a production trading system.\n- Introduced a full changelog ([CHANGELOG.md](./CHANGELOG.md)) for better version tracking.\n- Enhanced handling for scenarios where no forecast sources are available, with new corresponding test (`tests/test_sources_none.py`).\n- Updated documentation in SKILL.md to reference the disclaimer and clarify framework intent.\n- Minor internal improvements and test coverage updates.\n\nv1.0.7 | 2026-05-19T05:37:59.160Z | auto\n\nKalshi Weather Trader v1.0.7\n\n- Bumped version to 1.0.7 in SKILL.md metadata.\n- No user-facing functional changes. Documentation and metadata update only.\n\nv1.0.6 | 2026-04-24T13:22:40.516Z | user\n\nExperiment: apply flagship fix pattern (envVars + primaryEnv in both SKILL.md frontmatter and clawhub.json). Testing whether this clears the VT suspicious flag or only addresses LLM scanner complaints.\n\nv1.0.5 | 2026-04-16T10:05:11.677Z | user\n\nAdd pip install simmer-sdk to setup flow\n\nv1.0.4 | 2026-04-03T02:46:53.418Z | user\n\nAdd auto_redeem() call at start of each cycle for external wallet support\n\nv1.0.3 | 2026-03-29T07:03:46.817Z | auto\n\n- Improved error messaging in weather_trader.py for better debugging and user clarity.\n- No updates to documentation or user-facing commands required.\n\nv1.0.2 | 2026-03-17T09:40:47.579Z | auto\n\n- Minor code update in weather_trader.py; no changes to documentation or user-facing features.\n- Internal improvements only; skill usage and setup remain unchanged.\n\nv1.0.1 | 2026-03-16T11:31:48.564Z | auto\n\n- Minor internal update to weather_trader.py; no changes to user-facing documentation or functionality.\n- SKILL.md remains unchanged in content; version stays at 1.0.0.\n\nv1.0.0 | 2026-03-14T05:09:50.088Z | auto\n\nKalshi Weather Trader v1.0.0\n\n- Initial release: trade Kalshi weather markets using NOAA forecasts via Simmer SDK and DFlow on Solana.\n- Supports automated trading, market discovery, NOAA forecast parsing, and live trade execution.\n- Customizable entry/exit thresholds, position sizing, city selection, and other trading parameters.\n- Includes safeguards for slippage, KYC, time decay, and flip-flop detection.\n- Provides commands to check balances, positions, and perform dry runs or live trades.\n- Requires Simmer API key, Solana private key, KYC verification, and wallet funding to operate.\n\nArchive index:\n\nArchive v1.0.12: 11 files, 28335 bytes\n\nFiles: CHANGELOG.md (919b), clawhub.json (3669b), config.json (3b), DISCLAIMER.md (2349b), scripts/status.py (5443b), skill-card.md (2626b), SKILL.md (8450b), tests/test_entry_safeguards.py (6151b), tests/test_sources_none.py (3740b), weather_trader.py (48644b), _meta.json (141b)\n\nFile v1.0.12:SKILL.md\n\n---\nname: kalshi-weather-trader\ndescription: Trade Kalshi weather markets using NOAA forecasts via Simmer SDK and DFlow on Solana. Port of the popular polymarket-weather-trader. Use when user wants to trade temperature markets on Kalshi, automate weather bets, or check NOAA forecasts.\nmetadata:\n  author: Simmer (@simmer_markets)\n  version: \"1.0.12\"\n  displayName: Kalshi Weather Trader\n  difficulty: intermediate\n  attribution: Strategy inspired by gopfan2, powered by DFlow\n  primaryEnv: SIMMER_API_KEY\n  envVars:\n    - name: SIMMER_API_KEY\n      required: true\n      description: \"Your Simmer SDK API key — get from simmer.markets/dashboard\"\n    - name: SOLANA_PRIVATE_KEY\n      required: true\n      description: \"Solana wallet private key (base58) for signing DFlow trades. Kalshi has no managed-wallet mode — self-custody is the only option. Store only in secured environment; never commit.\"\n---\n# Kalshi Weather Trader\n\nTrade temperature markets on Kalshi using NOAA forecast data, via DFlow on Solana.\n\n> 🚨 **Framework, not a production trading system.** Read [DISCLAIMER.md](./DISCLAIMER.md) before connecting to a wallet with real funds.\n\n> **This is a template.** The default signal is NOAA temperature forecasts — remix it with other weather APIs, different forecast models, or additional market types (precipitation, wind, etc.). The skill handles all the plumbing (market discovery, NOAA parsing, trade execution, safeguards). Your agent provides the alpha.\n\n> **Powered by DFlow.** Kalshi trades execute via DFlow's Solana-based prediction market infrastructure. KYC verification through Proof is required for buys.\n\n## When to Use This Skill\n\nUse this skill when the user wants to:\n- Trade weather markets on Kalshi (not Polymarket)\n- Set up automated temperature trading on Kalshi\n- Check their Kalshi weather trading positions\n- Configure trading thresholds or locations\n\n## Setup Flow\n\nWhen user asks to install or configure this skill:\n\n1. **Install the Simmer SDK**\n   ```bash\n   pip install simmer-sdk\n   ```\n\n2. **Ask for Simmer API key**\n   - They can get it from simmer.markets/dashboard → SDK tab\n   - Store in environment as `SIMMER_API_KEY`\n\n3. **Ask for Solana private key** (required for live trading)\n   - This is the base58-encoded secret key for their Solana wallet\n   - Store in environment as `SOLANA_PRIVATE_KEY`\n   - The SDK uses this to sign transactions client-side automatically\n\n4. **Verify KYC**\n   - Required for Kalshi buys (not sells)\n   - Complete at [dflow.net/proof](https://dflow.net/proof)\n   - Check status: `curl \"https://api.simmer.markets/api/proof/status?wallet=YOUR_SOLANA_ADDRESS\"`\n\n5. **Fund the wallet**\n   - SOL on Solana mainnet for transaction fees (~0.01 SOL)\n   - USDC on Solana mainnet for trading capital\n\n6. **Ask about settings** (or confirm defaults)\n   - Entry threshold: Upper bound for when to buy (default 15¢)\n   - Min entry price: Lower bound to skip lottery-ticket mids (default 0 = off)\n   - Min hours to resolve: Skip entries resolving too soon (default 2h; exits keep 2h)\n   - Exit threshold: When to sell (default 45¢)\n   - Max position: Amount per trade (default $2.00)\n   - Locations: Which cities to trade (default NYC)\n\n7. **Save settings to environment variables**\n\n8. **Set up cron** (disabled by default — user must enable scheduling)\n\n## Configuration\n\n| Setting | Environment Variable | Default | Description |\n|---------|---------------------|---------|-------------|\n| Entry threshold | `SIMMER_WEATHER_ENTRY_THRESHOLD` | 0.15 | **Upper** bound — buy when price is *below* this |\n| Min entry price | `SIMMER_WEATHER_MIN_ENTRY_PRICE` | 0 | **Lower** bound — skip lottery tickets below this (`0` = off), e.g. `0.15` to skip sub-15¢ tickets. Must be below the entry threshold. |\n| Min hours to resolve | `SIMMER_WEATHER_MIN_HOURS_TO_RESOLVE` | 2 | Skip entries if the market resolves in fewer than this many hours. Entry-only; exits keep a fixed 2h floor. |\n| Exit threshold | `SIMMER_WEATHER_EXIT_THRESHOLD` | 0.45 | Sell when price above this. Raise this if you raise entry above `0.45`, or the skill will self-exit. |\n| Max position | `SIMMER_WEATHER_MAX_POSITION_USD` | 2.00 | Maximum USD per trade |\n| Max trades/run | `SIMMER_WEATHER_MAX_TRADES_PER_RUN` | 5 | Maximum trades per scan cycle |\n| Locations | `SIMMER_WEATHER_LOCATIONS` | NYC | Comma-separated cities (NYC, Chicago, Seattle, Atlanta, Dallas, Miami) |\n| Binary only | `SIMMER_WEATHER_BINARY_ONLY` | false | Skip range-bucket events, only trade binary yes/no markets |\n| Smart sizing % | `SIMMER_WEATHER_SIZING_PCT` | 0.05 | % of balance per trade |\n| Slippage max | `SIMMER_WEATHER_SLIPPAGE_MAX` | 0.15 | Skip trades with slippage above this (0.15 = 15%) |\n| Min liquidity | `SIMMER_WEATHER_MIN_LIQUIDITY` | 0 | Skip markets with liquidity below this USD amount (0 = disabled) |\n\n**Supported locations:** NYC, Chicago, Seattle, Atlanta, Dallas, Miami\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 weather_trader.py\n\n# Execute real trades\npython weather_trader.py --live\n\n# With smart position sizing (uses portfolio balance)\npython weather_trader.py --live --smart-sizing\n\n# Check positions only\npython weather_trader.py --positions\n\n# View config\npython weather_trader.py --config\n\n# Quiet mode — only output on trades/errors (ideal for high-frequency runs)\npython weather_trader.py --live --smart-sizing --quiet\n```\n\n## How It Works\n\nEach cycle the script:\n1. Fetches active weather markets from Simmer API\n2. Groups markets by event (each temperature day is one event)\n3. Parses event names to get location and date\n4. Fetches NOAA forecast for that location/date\n5. Finds the temperature bucket that matches the forecast\n6. **Safeguards**: Checks context for flip-flop warnings, slippage, time decay\n7. **Trend Detection**: Looks for recent price drops (stronger buy signal)\n8. **Entry**: If min-entry ≤ bucket price < entry threshold and safeguards pass → BUY\n9. **Exit**: Checks open positions, sells if price > exit threshold\n10. **Tagging**: All trades tagged with `sdk:kalshi-weather` for tracking\n\n## Safeguards\n\nBefore trading, the skill checks:\n- **Flip-flop warning**: Skips if you've been reversing too much\n- **Slippage**: Skips if estimated slippage > 15% (tunable via `SIMMER_WEATHER_SLIPPAGE_MAX`)\n- **Time decay**: Skips entries if market resolves in < `SIMMER_WEATHER_MIN_HOURS_TO_RESOLVE` hours (default 2)\n- **Market status**: Skips if market already resolved\n- **Kalshi maintenance**: Kalshi's clearinghouse has a weekly maintenance window on Thursdays 3:00-5:00 AM ET — orders during this window will fail\n\n`SIMMER_WEATHER_MIN_ENTRY_PRICE` (default 0 = off) is the other side of the entry-price check, not this list — `--no-safeguards` does not disable it.\n\nDisable the flip-flop / slippage / time-decay / resolved checks with `--no-safeguards` (not recommended).\n\n## Troubleshooting\n\n**\"Safeguard blocked: Severe flip-flop warning\"**\n- You've been changing direction too much on this market\n- Wait before trading again\n\n**\"Slippage too high\"**\n- Market is illiquid, reduce position size or skip\n\n**\"Resolves in Xh - too soon\"**\n- Market resolves sooner than `SIMMER_WEATHER_MIN_HOURS_TO_RESOLVE` (default 2h). Raise the env to skip resolve-day entries.\n\n**\"Price $X.XX below min entry\"**\n- Bucket mid is below `SIMMER_WEATHER_MIN_ENTRY_PRICE`. Lottery-ticket floor; default is off (`0`).\n\n**\"No weather markets found\"**\n- Weather markets may not be active (seasonal)\n- Make sure you've imported Kalshi weather markets first: `POST /api/sdk/markets/import/kalshi`\n\n**\"KYC verification required\"**\n- Complete verification at [dflow.net/proof](https://dflow.net/proof)\n- Only required for buys, not sells\n\n**\"SOLANA_PRIVATE_KEY not set\"**\n- The SDK signs transactions automatically when this env var is present\n- Fix: `export SOLANA_PRIVATE_KEY=<your-base58-secret-key>`\n\n**\"Insufficient SOL for transaction fees\"**\n- Fund your Solana wallet with at least 0.05 SOL for gas\n\n**\"API key invalid\"**\n- Get new key from simmer.markets/dashboard → SDK tab\n\nFile v1.0.12:_meta.json\n\n{\n  \"ownerId\": \"kn7axnp7bzqsf5fkx0z8px7han7zyq1x\",\n  \"slug\": \"kalshi-weather-trader\",\n  \"version\": \"1.0.12\",\n  \"publishedAt\": 1789009374292\n}\n\nFile v1.0.12:CHANGELOG.md\n\n# Changelog — kalshi-weather-trader\n\n## [1.0.12] - 2026-09-09\n\n### Added\n- `SIMMER_WEATHER_MIN_ENTRY_PRICE` (default `0` = off). Rejects entries below this mid so a raised `ENTRY_THRESHOLD` cannot buy lottery tickets.\n- `SIMMER_WEATHER_MIN_HOURS_TO_RESOLVE` (default `2`). Env override for the entry time-decay safeguard. Entry-only: exits keep the original 2h floor.\n\n### Fixed\n- The local entry price band now runs before context and trend network calls, so below-floor candidates are rejected with zero context/history requests.\n\n## [1.0.8] - 2026-05-23\n\n### Fixed\n- `check_exit_opportunities` no longer crashes with `TypeError: argument of type 'NoneType' is not iterable` when a position's `sources` field is `None` (e.g. paper-mode entries). Changed `pos.get(\"sources\", [])` → `pos.get(\"sources\") or []` so explicit `None` values are coalesced to `[]`. Closes SIM-2371.\n\n## [1.0.7] - prior\n- See git history.\n\nFile v1.0.12: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.\n\nSome markets also resolve by gapping rather than decaying. Weather\ntemperature buckets are the clearest case: the losing side can sit near\nyour entry, then jump straight to about 0 at resolution, with no\nintermediate price for a percentage stop to trigger on and no liquidity\nto exit into. On these markets a stop-loss cannot cap your loss\nregardless of the monitor cycle.\n\nPosition sizing is the only reliable risk control on these markets. Set\nit conservatively, assuming the full position can go to zero.\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.0.12:skill-card.md\n\n## Description:\n\nTrade Kalshi weather markets using NOAA forecasts via the Simmer SDK and DFlow on Solana.\n\nThis skill is for demonstration purposes and not for production usage.\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 developers and traders use this skill to configure, dry-run, and optionally execute automated Kalshi temperature-market trades driven by NOAA forecast signals. It also helps inspect account balances, open weather positions, and trading thresholds.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The security summary says live-trading safeguards can fail open.\n\nMitigation: Keep dry-run mode enabled until behavior is verified, and do not rely on advertised safeguards unless the fail-open behavior is fixed or acceptable for the user's risk tolerance.\n\nRisk: The skill handles wallet-signing credentials and can place real on-chain orders.\n\nMitigation: Use a dedicated low-balance wallet, keep the Solana private key only in secured environment storage, and avoid connecting funds beyond the amount intended for this strategy.\n\nRisk: The security guidance notes an unpinned Simmer SDK dependency.\n\nMitigation: Pin or review the simmer-sdk version before live use, especially before installing updates or enabling scheduled runs.\n\nRisk: Automated weather-market trades can lose value quickly near resolution and may not be recoverable.\n\nMitigation: Use conservative position sizing, start with paper or simulated runs, and review market resolution timing before enabling live execution.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/simmer/skills/kalshi-weather-trader)\n- [Simmer API](https://api.simmer.markets)\n- [Simmer dashboard](https://simmer.markets/dashboard)\n- [NOAA Weather API](https://api.weather.gov)\n- [DFlow Proof KYC](https://dflow.net/proof)\n\n## Skill Output:\n\n**Output Type(s):** [text, JSON, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown with inline shell commands and optional JSON status reports]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Dry-run is the default; live trading requires explicit --live execution and configured credentials.]\n\n## Skill Version(s):\n\n1.0.12 (source: server evidence, frontmatter, changelog released 2026-09-09)\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.0.12:clawhub.json\n\n{\n  \"emoji\": \"\\ud83c\\udf21\\ufe0f\",\n  \"primaryEnv\": \"SIMMER_API_KEY\",\n  \"requires\": {\n    \"env\": [\n      \"SIMMER_API_KEY\",\n      \"SOLANA_PRIVATE_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\": \"SOLANA_PRIVATE_KEY\",\n      \"required\": true,\n      \"description\": \"Solana wallet private key (base58) for signing DFlow trades. Kalshi has no managed-wallet mode \\u2014 self-custody is the only option.\"\n    },\n    {\n      \"name\": \"SIMMER_WEATHER_ENTRY_THRESHOLD\",\n      \"required\": false,\n      \"description\": \"Upper bound: buy when bucket price is below this (default 0.15).\"\n    },\n    {\n      \"name\": \"SIMMER_WEATHER_MIN_ENTRY_PRICE\",\n      \"required\": false,\n      \"description\": \"Lower bound: skip lottery-ticket mids below this (default 0 = off).\"\n    },\n    {\n      \"name\": \"SIMMER_WEATHER_MIN_HOURS_TO_RESOLVE\",\n      \"required\": false,\n      \"description\": \"Skip entries if the market resolves in fewer than this many hours (default 2). Entry-only; exits keep a 2h floor.\"\n    },\n    {\n      \"name\": \"SIMMER_WEATHER_EXIT_THRESHOLD\",\n      \"required\": false,\n      \"description\": \"Sell when price above this (default 0.45). Raise this if you raise ENTRY above 0.45, or the skill will self-exit.\"\n    }\n  ],\n  \"cron\": null,\n  \"autostart\": false,\n  \"automaton\": {\n    \"managed\": true,\n    \"entrypoint\": \"weather_trader.py\"\n  },\n  \"tunables\": [\n    {\n      \"env\": \"SIMMER_WEATHER_ENTRY_THRESHOLD\",\n      \"type\": \"number\",\n      \"default\": 0.15,\n      \"range\": [0.01, 0.50],\n      \"step\": 0.01,\n      \"label\": \"Entry edge threshold (upper bound)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MIN_ENTRY_PRICE\",\n      \"type\": \"number\",\n      \"default\": 0,\n      \"range\": [0, 0.50],\n      \"step\": 0.01,\n      \"label\": \"Min entry price (lottery-ticket floor; 0 = off)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MIN_HOURS_TO_RESOLVE\",\n      \"type\": \"number\",\n      \"default\": 2,\n      \"range\": [0, 72],\n      \"step\": 1,\n      \"label\": \"Min hours to resolution (time-decay skip)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_EXIT_THRESHOLD\",\n      \"type\": \"number\",\n      \"default\": 0.45,\n      \"range\": [0.10, 0.99],\n      \"step\": 0.01,\n      \"label\": \"Exit probability threshold\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MAX_POSITION_USD\",\n      \"type\": \"number\",\n      \"default\": 2.00,\n      \"range\": [1, 200],\n      \"step\": 1,\n      \"label\": \"Max position size (USD)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_SIZING_PCT\",\n      \"type\": \"number\",\n      \"default\": 0.05,\n      \"range\": [0.01, 1.0],\n      \"step\": 0.01,\n      \"label\": \"Position sizing percentage\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MAX_TRADES_PER_RUN\",\n      \"type\": \"number\",\n      \"default\": 5,\n      \"range\": [1, 20],\n      \"step\": 1,\n      \"label\": \"Max trades per run\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_LOCATIONS\",\n      \"type\": \"string\",\n      \"default\": \"NYC\",\n      \"label\": \"Target cities (comma-separated)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_BINARY_ONLY\",\n      \"type\": \"boolean\",\n      \"default\": false,\n      \"label\": \"Binary markets only (skip range-bucket)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_SLIPPAGE_MAX\",\n      \"type\": \"number\",\n      \"default\": 0.15,\n      \"range\": [0.05, 1.0],\n      \"step\": 0.05,\n      \"label\": \"Max slippage before skipping trade\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MIN_LIQUIDITY\",\n      \"type\": \"number\",\n      \"default\": 0,\n      \"range\": [0, 10000],\n      \"step\": 100,\n      \"label\": \"Min market liquidity USD (0 = disabled)\"\n    }\n  ]\n}\n\nFile v1.0.12:config.json\n\n{}\n\nArchive v1.0.11: 10 files, 24890 bytes\n\nFiles: CHANGELOG.md (423b), clawhub.json (2430b), config.json (3b), DISCLAIMER.md (2349b), scripts/status.py (5443b), skill-card.md (2439b), SKILL.md (7168b), tests/test_sources_none.py (3740b), weather_trader.py (46911b), _meta.json (141b)\n\nFile v1.0.11:SKILL.md\n\n---\nname: kalshi-weather-trader\ndescription: Trade Kalshi weather markets using NOAA forecasts via Simmer SDK and DFlow on Solana. Port of the popular polymarket-weather-trader. Use when user wants to trade temperature markets on Kalshi, automate weather bets, or check NOAA forecasts.\nmetadata:\n  author: Simmer (@simmer_markets)\n  version: \"1.0.11\"\n  displayName: Kalshi Weather Trader\n  difficulty: intermediate\n  attribution: Strategy inspired by gopfan2, powered by DFlow\n  primaryEnv: SIMMER_API_KEY\n  envVars:\n    - name: SIMMER_API_KEY\n      required: true\n      description: \"Your Simmer SDK API key — get from simmer.markets/dashboard\"\n    - name: SOLANA_PRIVATE_KEY\n      required: true\n      description: \"Solana wallet private key (base58) for signing DFlow trades. Kalshi has no managed-wallet mode — self-custody is the only option. Store only in secured environment; never commit.\"\n---\n# Kalshi Weather Trader\n\nTrade temperature markets on Kalshi using NOAA forecast data, via DFlow on Solana.\n\n> 🚨 **Framework, not a production trading system.** Read [DISCLAIMER.md](./DISCLAIMER.md) before connecting to a wallet with real funds.\n\n> **This is a template.** The default signal is NOAA temperature forecasts — remix it with other weather APIs, different forecast models, or additional market types (precipitation, wind, etc.). The skill handles all the plumbing (market discovery, NOAA parsing, trade execution, safeguards). Your agent provides the alpha.\n\n> **Powered by DFlow.** Kalshi trades execute via DFlow's Solana-based prediction market infrastructure. KYC verification through Proof is required for buys.\n\n## When to Use This Skill\n\nUse this skill when the user wants to:\n- Trade weather markets on Kalshi (not Polymarket)\n- Set up automated temperature trading on Kalshi\n- Check their Kalshi weather trading positions\n- Configure trading thresholds or locations\n\n## Setup Flow\n\nWhen user asks to install or configure this skill:\n\n1. **Install the Simmer SDK**\n   ```bash\n   pip install simmer-sdk\n   ```\n\n2. **Ask for Simmer API key**\n   - They can get it from simmer.markets/dashboard → SDK tab\n   - Store in environment as `SIMMER_API_KEY`\n\n3. **Ask for Solana private key** (required for live trading)\n   - This is the base58-encoded secret key for their Solana wallet\n   - Store in environment as `SOLANA_PRIVATE_KEY`\n   - The SDK uses this to sign transactions client-side automatically\n\n4. **Verify KYC**\n   - Required for Kalshi buys (not sells)\n   - Complete at [dflow.net/proof](https://dflow.net/proof)\n   - Check status: `curl \"https://api.simmer.markets/api/proof/status?wallet=YOUR_SOLANA_ADDRESS\"`\n\n5. **Fund the wallet**\n   - SOL on Solana mainnet for transaction fees (~0.01 SOL)\n   - USDC on Solana mainnet for trading capital\n\n6. **Ask about settings** (or confirm defaults)\n   - Entry threshold: When to buy (default 15¢)\n   - Exit threshold: When to sell (default 45¢)\n   - Max position: Amount per trade (default $2.00)\n   - Locations: Which cities to trade (default NYC)\n\n7. **Save settings to environment variables**\n\n8. **Set up cron** (disabled by default — user must enable scheduling)\n\n## Configuration\n\n| Setting | Environment Variable | Default | Description |\n|---------|---------------------|---------|-------------|\n| Entry threshold | `SIMMER_WEATHER_ENTRY_THRESHOLD` | 0.15 | Buy when price below this |\n| Exit threshold | `SIMMER_WEATHER_EXIT_THRESHOLD` | 0.45 | Sell when price above this |\n| Max position | `SIMMER_WEATHER_MAX_POSITION_USD` | 2.00 | Maximum USD per trade |\n| Max trades/run | `SIMMER_WEATHER_MAX_TRADES_PER_RUN` | 5 | Maximum trades per scan cycle |\n| Locations | `SIMMER_WEATHER_LOCATIONS` | NYC | Comma-separated cities (NYC, Chicago, Seattle, Atlanta, Dallas, Miami) |\n| Binary only | `SIMMER_WEATHER_BINARY_ONLY` | false | Skip range-bucket events, only trade binary yes/no markets |\n| Smart sizing % | `SIMMER_WEATHER_SIZING_PCT` | 0.05 | % of balance per trade |\n| Slippage max | `SIMMER_WEATHER_SLIPPAGE_MAX` | 0.15 | Skip trades with slippage above this (0.15 = 15%) |\n| Min liquidity | `SIMMER_WEATHER_MIN_LIQUIDITY` | 0 | Skip markets with liquidity below this USD amount (0 = disabled) |\n\n**Supported locations:** NYC, Chicago, Seattle, Atlanta, Dallas, Miami\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 weather_trader.py\n\n# Execute real trades\npython weather_trader.py --live\n\n# With smart position sizing (uses portfolio balance)\npython weather_trader.py --live --smart-sizing\n\n# Check positions only\npython weather_trader.py --positions\n\n# View config\npython weather_trader.py --config\n\n# Quiet mode — only output on trades/errors (ideal for high-frequency runs)\npython weather_trader.py --live --smart-sizing --quiet\n```\n\n## How It Works\n\nEach cycle the script:\n1. Fetches active weather markets from Simmer API\n2. Groups markets by event (each temperature day is one event)\n3. Parses event names to get location and date\n4. Fetches NOAA forecast for that location/date\n5. Finds the temperature bucket that matches the forecast\n6. **Safeguards**: Checks context for flip-flop warnings, slippage, time decay\n7. **Trend Detection**: Looks for recent price drops (stronger buy signal)\n8. **Entry**: If bucket price < threshold and safeguards pass → BUY\n9. **Exit**: Checks open positions, sells if price > exit threshold\n10. **Tagging**: All trades tagged with `sdk:kalshi-weather` for tracking\n\n## Safeguards\n\nBefore trading, the skill checks:\n- **Flip-flop warning**: Skips if you've been reversing too much\n- **Slippage**: Skips if estimated slippage > 15%\n- **Time decay**: Skips if market resolves in < 2 hours\n- **Market status**: Skips if market already resolved\n- **Kalshi maintenance**: Kalshi's clearinghouse has a weekly maintenance window on Thursdays 3:00-5:00 AM ET — orders during this window will fail\n\nDisable with `--no-safeguards` (not recommended).\n\n## Troubleshooting\n\n**\"Safeguard blocked: Severe flip-flop warning\"**\n- You've been changing direction too much on this market\n- Wait before trading again\n\n**\"Slippage too high\"**\n- Market is illiquid, reduce position size or skip\n\n**\"No weather markets found\"**\n- Weather markets may not be active (seasonal)\n- Make sure you've imported Kalshi weather markets first: `POST /api/sdk/markets/import/kalshi`\n\n**\"KYC verification required\"**\n- Complete verification at [dflow.net/proof](https://dflow.net/proof)\n- Only required for buys, not sells\n\n**\"SOLANA_PRIVATE_KEY not set\"**\n- The SDK signs transactions automatically when this env var is present\n- Fix: `export SOLANA_PRIVATE_KEY=<your-base58-secret-key>`\n\n**\"Insufficient SOL for transaction fees\"**\n- Fund your Solana wallet with at least 0.05 SOL for gas\n\n**\"API key invalid\"**\n- Get new key from simmer.markets/dashboard → SDK tab\n\nFile v1.0.11:_meta.json\n\n{\n  \"ownerId\": \"kn7axnp7bzqsf5fkx0z8px7han7zyq1x\",\n  \"slug\": \"kalshi-weather-trader\",\n  \"version\": \"1.0.11\",\n  \"publishedAt\": 1788657011028\n}\n\nFile v1.0.11:CHANGELOG.md\n\n# Changelog — kalshi-weather-trader\n\n## [1.0.8] - 2026-05-23\n\n### Fixed\n- `check_exit_opportunities` no longer crashes with `TypeError: argument of type 'NoneType' is not iterable` when a position's `sources` field is `None` (e.g. paper-mode entries). Changed `pos.get(\"sources\", [])` → `pos.get(\"sources\") or []` so explicit `None` values are coalesced to `[]`. Closes SIM-2371.\n\n## [1.0.7] - prior\n- See git history.\n\nFile v1.0.11: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.\n\nSome markets also resolve by gapping rather than decaying. Weather\ntemperature buckets are the clearest case: the losing side can sit near\nyour entry, then jump straight to about 0 at resolution, with no\nintermediate price for a percentage stop to trigger on and no liquidity\nto exit into. On these markets a stop-loss cannot cap your loss\nregardless of the monitor cycle.\n\nPosition sizing is the only reliable risk control on these markets. Set\nit conservatively, assuming the full position can go to zero.\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.0.11:skill-card.md\n\n## Description:\n\nTrade Kalshi weather markets using NOAA forecasts via Simmer SDK and DFlow on Solana.\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 developers use this skill to configure, dry-run, and optionally execute automated Kalshi weather-market trades based on NOAA forecasts, Simmer SDK market data, and DFlow execution. It also supports account status checks and trading-parameter tuning.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Live mode can place real on-chain trades using a raw Solana private key, and those trades may be irreversible.\n\nMitigation: Use dry-run mode first, keep funds in a dedicated low-balance wallet, and store SIMMER_API_KEY and SOLANA_PRIVATE_KEY only in secured environment storage.\n\nRisk: Safety controls may be under-scoped or fail open, especially if safeguards are disabled or automation is scheduled before review.\n\nMitigation: Avoid --no-safeguards for live runs, review automatic market-import behavior, and delay scheduled automation until live-trading behavior is understood.\n\nRisk: Weather-market stop-loss behavior may not cap losses when markets resolve quickly or gap at resolution.\n\nMitigation: Use conservative position sizing, set low per-trade limits, and assume a full position can go to zero.\n\n## Reference(s):\n\n- [Kalshi Weather Trader on ClawHub](https://clawhub.ai/simmer/skills/kalshi-weather-trader)\n- [Skill Disclaimer](DISCLAIMER.md)\n- [Simmer API](https://api.simmer.markets)\n- [NOAA Weather API](https://api.weather.gov)\n- [DFlow Proof KYC](https://dflow.net/proof)\n\n## Skill Output:\n\n**Output Type(s):** [guidance, shell commands, configuration, code]\n\n**Output Format:** [Markdown guidance with inline shell commands and configuration values]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Can produce dry-run analysis, live-trading commands, account-status checks, and environment-variable configuration guidance.]\n\n## Skill Version(s):\n\n1.0.11 (source: server release metadata and SKILL.md 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.0.11:clawhub.json\n\n{\n  \"emoji\": \"\\ud83c\\udf21\\ufe0f\",\n  \"primaryEnv\": \"SIMMER_API_KEY\",\n  \"requires\": {\n    \"env\": [\n      \"SIMMER_API_KEY\",\n      \"SOLANA_PRIVATE_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\": \"SOLANA_PRIVATE_KEY\",\n      \"required\": true,\n      \"description\": \"Solana wallet private key (base58) for signing DFlow trades. Kalshi has no managed-wallet mode \\u2014 self-custody is the only option.\"\n    }\n  ],\n  \"cron\": null,\n  \"autostart\": false,\n  \"automaton\": {\n    \"managed\": true,\n    \"entrypoint\": \"weather_trader.py\"\n  },\n  \"tunables\": [\n    {\n      \"env\": \"SIMMER_WEATHER_ENTRY_THRESHOLD\",\n      \"type\": \"number\",\n      \"default\": 0.15,\n      \"range\": [0.01, 0.50],\n      \"step\": 0.01,\n      \"label\": \"Entry edge threshold\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_EXIT_THRESHOLD\",\n      \"type\": \"number\",\n      \"default\": 0.45,\n      \"range\": [0.10, 0.99],\n      \"step\": 0.01,\n      \"label\": \"Exit probability threshold\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MAX_POSITION_USD\",\n      \"type\": \"number\",\n      \"default\": 2.00,\n      \"range\": [1, 200],\n      \"step\": 1,\n      \"label\": \"Max position size (USD)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_SIZING_PCT\",\n      \"type\": \"number\",\n      \"default\": 0.05,\n      \"range\": [0.01, 1.0],\n      \"step\": 0.01,\n      \"label\": \"Position sizing percentage\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MAX_TRADES_PER_RUN\",\n      \"type\": \"number\",\n      \"default\": 5,\n      \"range\": [1, 20],\n      \"step\": 1,\n      \"label\": \"Max trades per run\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_LOCATIONS\",\n      \"type\": \"string\",\n      \"default\": \"NYC\",\n      \"label\": \"Target cities (comma-separated)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_BINARY_ONLY\",\n      \"type\": \"boolean\",\n      \"default\": false,\n      \"label\": \"Binary markets only (skip range-bucket)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_SLIPPAGE_MAX\",\n      \"type\": \"number\",\n      \"default\": 0.15,\n      \"range\": [0.05, 1.0],\n      \"step\": 0.05,\n      \"label\": \"Max slippage before skipping trade\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MIN_LIQUIDITY\",\n      \"type\": \"number\",\n      \"default\": 0,\n      \"range\": [0, 10000],\n      \"step\": 100,\n      \"label\": \"Min market liquidity USD (0 = disabled)\"\n    }\n  ]\n}\n\nFile v1.0.11:config.json\n\n{}\n\nArchive v1.0.10: 10 files, 24688 bytes\n\nFiles: CHANGELOG.md (423b), clawhub.json (2430b), config.json (3b), DISCLAIMER.md (2349b), scripts/status.py (5110b), skill-card.md (2583b), SKILL.md (7168b), tests/test_sources_none.py (3740b), weather_trader.py (46907b), _meta.json (141b)\n\nFile v1.0.10:SKILL.md\n\n---\nname: kalshi-weather-trader\ndescription: Trade Kalshi weather markets using NOAA forecasts via Simmer SDK and DFlow on Solana. Port of the popular polymarket-weather-trader. Use when user wants to trade temperature markets on Kalshi, automate weather bets, or check NOAA forecasts.\nmetadata:\n  author: Simmer (@simmer_markets)\n  version: \"1.0.10\"\n  displayName: Kalshi Weather Trader\n  difficulty: intermediate\n  attribution: Strategy inspired by gopfan2, powered by DFlow\n  primaryEnv: SIMMER_API_KEY\n  envVars:\n    - name: SIMMER_API_KEY\n      required: true\n      description: \"Your Simmer SDK API key — get from simmer.markets/dashboard\"\n    - name: SOLANA_PRIVATE_KEY\n      required: true\n      description: \"Solana wallet private key (base58) for signing DFlow trades. Kalshi has no managed-wallet mode — self-custody is the only option. Store only in secured environment; never commit.\"\n---\n# Kalshi Weather Trader\n\nTrade temperature markets on Kalshi using NOAA forecast data, via DFlow on Solana.\n\n> 🚨 **Framework, not a production trading system.** Read [DISCLAIMER.md](./DISCLAIMER.md) before connecting to a wallet with real funds.\n\n> **This is a template.** The default signal is NOAA temperature forecasts — remix it with other weather APIs, different forecast models, or additional market types (precipitation, wind, etc.). The skill handles all the plumbing (market discovery, NOAA parsing, trade execution, safeguards). Your agent provides the alpha.\n\n> **Powered by DFlow.** Kalshi trades execute via DFlow's Solana-based prediction market infrastructure. KYC verification through Proof is required for buys.\n\n## When to Use This Skill\n\nUse this skill when the user wants to:\n- Trade weather markets on Kalshi (not Polymarket)\n- Set up automated temperature trading on Kalshi\n- Check their Kalshi weather trading positions\n- Configure trading thresholds or locations\n\n## Setup Flow\n\nWhen user asks to install or configure this skill:\n\n1. **Install the Simmer SDK**\n   ```bash\n   pip install simmer-sdk\n   ```\n\n2. **Ask for Simmer API key**\n   - They can get it from simmer.markets/dashboard → SDK tab\n   - Store in environment as `SIMMER_API_KEY`\n\n3. **Ask for Solana private key** (required for live trading)\n   - This is the base58-encoded secret key for their Solana wallet\n   - Store in environment as `SOLANA_PRIVATE_KEY`\n   - The SDK uses this to sign transactions client-side automatically\n\n4. **Verify KYC**\n   - Required for Kalshi buys (not sells)\n   - Complete at [dflow.net/proof](https://dflow.net/proof)\n   - Check status: `curl \"https://api.simmer.markets/api/proof/status?wallet=YOUR_SOLANA_ADDRESS\"`\n\n5. **Fund the wallet**\n   - SOL on Solana mainnet for transaction fees (~0.01 SOL)\n   - USDC on Solana mainnet for trading capital\n\n6. **Ask about settings** (or confirm defaults)\n   - Entry threshold: When to buy (default 15¢)\n   - Exit threshold: When to sell (default 45¢)\n   - Max position: Amount per trade (default $2.00)\n   - Locations: Which cities to trade (default NYC)\n\n7. **Save settings to environment variables**\n\n8. **Set up cron** (disabled by default — user must enable scheduling)\n\n## Configuration\n\n| Setting | Environment Variable | Default | Description |\n|---------|---------------------|---------|-------------|\n| Entry threshold | `SIMMER_WEATHER_ENTRY_THRESHOLD` | 0.15 | Buy when price below this |\n| Exit threshold | `SIMMER_WEATHER_EXIT_THRESHOLD` | 0.45 | Sell when price above this |\n| Max position | `SIMMER_WEATHER_MAX_POSITION_USD` | 2.00 | Maximum USD per trade |\n| Max trades/run | `SIMMER_WEATHER_MAX_TRADES_PER_RUN` | 5 | Maximum trades per scan cycle |\n| Locations | `SIMMER_WEATHER_LOCATIONS` | NYC | Comma-separated cities (NYC, Chicago, Seattle, Atlanta, Dallas, Miami) |\n| Binary only | `SIMMER_WEATHER_BINARY_ONLY` | false | Skip range-bucket events, only trade binary yes/no markets |\n| Smart sizing % | `SIMMER_WEATHER_SIZING_PCT` | 0.05 | % of balance per trade |\n| Slippage max | `SIMMER_WEATHER_SLIPPAGE_MAX` | 0.15 | Skip trades with slippage above this (0.15 = 15%) |\n| Min liquidity | `SIMMER_WEATHER_MIN_LIQUIDITY` | 0 | Skip markets with liquidity below this USD amount (0 = disabled) |\n\n**Supported locations:** NYC, Chicago, Seattle, Atlanta, Dallas, Miami\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 weather_trader.py\n\n# Execute real trades\npython weather_trader.py --live\n\n# With smart position sizing (uses portfolio balance)\npython weather_trader.py --live --smart-sizing\n\n# Check positions only\npython weather_trader.py --positions\n\n# View config\npython weather_trader.py --config\n\n# Quiet mode — only output on trades/errors (ideal for high-frequency runs)\npython weather_trader.py --live --smart-sizing --quiet\n```\n\n## How It Works\n\nEach cycle the script:\n1. Fetches active weather markets from Simmer API\n2. Groups markets by event (each temperature day is one event)\n3. Parses event names to get location and date\n4. Fetches NOAA forecast for that location/date\n5. Finds the temperature bucket that matches the forecast\n6. **Safeguards**: Checks context for flip-flop warnings, slippage, time decay\n7. **Trend Detection**: Looks for recent price drops (stronger buy signal)\n8. **Entry**: If bucket price < threshold and safeguards pass → BUY\n9. **Exit**: Checks open positions, sells if price > exit threshold\n10. **Tagging**: All trades tagged with `sdk:kalshi-weather` for tracking\n\n## Safeguards\n\nBefore trading, the skill checks:\n- **Flip-flop warning**: Skips if you've been reversing too much\n- **Slippage**: Skips if estimated slippage > 15%\n- **Time decay**: Skips if market resolves in < 2 hours\n- **Market status**: Skips if market already resolved\n- **Kalshi maintenance**: Kalshi's clearinghouse has a weekly maintenance window on Thursdays 3:00-5:00 AM ET — orders during this window will fail\n\nDisable with `--no-safeguards` (not recommended).\n\n## Troubleshooting\n\n**\"Safeguard blocked: Severe flip-flop warning\"**\n- You've been changing direction too much on this market\n- Wait before trading again\n\n**\"Slippage too high\"**\n- Market is illiquid, reduce position size or skip\n\n**\"No weather markets found\"**\n- Weather markets may not be active (seasonal)\n- Make sure you've imported Kalshi weather markets first: `POST /api/sdk/markets/import/kalshi`\n\n**\"KYC verification required\"**\n- Complete verification at [dflow.net/proof](https://dflow.net/proof)\n- Only required for buys, not sells\n\n**\"SOLANA_PRIVATE_KEY not set\"**\n- The SDK signs transactions automatically when this env var is present\n- Fix: `export SOLANA_PRIVATE_KEY=<your-base58-secret-key>`\n\n**\"Insufficient SOL for transaction fees\"**\n- Fund your Solana wallet with at least 0.05 SOL for gas\n\n**\"API key invalid\"**\n- Get new key from simmer.markets/dashboard → SDK tab\n\nFile v1.0.10:_meta.json\n\n{\n  \"ownerId\": \"kn7axnp7bzqsf5fkx0z8px7han7zyq1x\",\n  \"slug\": \"kalshi-weather-trader\",\n  \"version\": \"1.0.10\",\n  \"publishedAt\": 1781327279364\n}\n\nFile v1.0.10:CHANGELOG.md\n\n# Changelog — kalshi-weather-trader\n\n## [1.0.8] - 2026-05-23\n\n### Fixed\n- `check_exit_opportunities` no longer crashes with `TypeError: argument of type 'NoneType' is not iterable` when a position's `sources` field is `None` (e.g. paper-mode entries). Changed `pos.get(\"sources\", [])` → `pos.get(\"sources\") or []` so explicit `None` values are coalesced to `[]`. Closes SIM-2371.\n\n## [1.0.7] - prior\n- See git history.\n\nFile v1.0.10: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.\n\nSome markets also resolve by gapping rather than decaying. Weather\ntemperature buckets are the clearest case: the losing side can sit near\nyour entry, then jump straight to about 0 at resolution, with no\nintermediate price for a percentage stop to trigger on and no liquidity\nto exit into. On these markets a stop-loss cannot cap your loss\nregardless of the monitor cycle.\n\nPosition sizing is the only reliable risk control on these markets. Set\nit conservatively, assuming the full position can go to zero.\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.0.10:skill-card.md\n\n## Description: <br>\nKalshi Weather Trader helps agents configure, dry-run, and optionally execute Kalshi weather-market trades using NOAA forecasts, the Simmer SDK, and DFlow on Solana. <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 agent operators use this skill to inspect Kalshi weather positions, configure weather-trading thresholds and locations, and run dry-run or live automated temperature-market scans. Live trading requires Simmer API credentials and a Solana wallet private key. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill requires a raw Solana private key for live trading. <br>\nMitigation: Use a dedicated low-balance wallet, never reuse a primary wallet key, and store the key only in a secured environment. <br>\nRisk: Live mode can place automated trades, and safeguards can be bypassed. <br>\nMitigation: Keep dry-run mode enabled until the strategy is understood, avoid --no-safeguards for live trades, and set explicit spending limits before enabling scheduled or quiet live runs. <br>\nRisk: Weather temperature markets can resolve by gapping to near zero, so stop-loss monitoring may not cap losses. <br>\nMitigation: Size positions conservatively and assume each position can become a full loss. <br>\n\n\n## Reference(s): <br>\n- [ClawHub package page](https://clawhub.ai/simmer/kalshi-weather-trader) <br>\n- [Simmer API](https://api.simmer.markets) <br>\n- [NOAA Weather API](https://api.weather.gov) <br>\n- [DFlow Proof verification](https://dflow.net/proof) <br>\n- [Simmer dashboard](https://simmer.markets/dashboard) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with shell commands, environment configuration, and command-line status output] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May emit JSON automaton status from the trading entrypoint; dry-run is the default unless live trading is explicitly enabled.] <br>\n\n## Skill Version(s): <br>\n1.0.10 (source: server release evidence and 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.0.10:clawhub.json\n\n{\n  \"emoji\": \"\\ud83c\\udf21\\ufe0f\",\n  \"primaryEnv\": \"SIMMER_API_KEY\",\n  \"requires\": {\n    \"env\": [\n      \"SIMMER_API_KEY\",\n      \"SOLANA_PRIVATE_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\": \"SOLANA_PRIVATE_KEY\",\n      \"required\": true,\n      \"description\": \"Solana wallet private key (base58) for signing DFlow trades. Kalshi has no managed-wallet mode \\u2014 self-custody is the only option.\"\n    }\n  ],\n  \"cron\": null,\n  \"autostart\": false,\n  \"automaton\": {\n    \"managed\": true,\n    \"entrypoint\": \"weather_trader.py\"\n  },\n  \"tunables\": [\n    {\n      \"env\": \"SIMMER_WEATHER_ENTRY_THRESHOLD\",\n      \"type\": \"number\",\n      \"default\": 0.15,\n      \"range\": [0.01, 0.50],\n      \"step\": 0.01,\n      \"label\": \"Entry edge threshold\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_EXIT_THRESHOLD\",\n      \"type\": \"number\",\n      \"default\": 0.45,\n      \"range\": [0.10, 0.99],\n      \"step\": 0.01,\n      \"label\": \"Exit probability threshold\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MAX_POSITION_USD\",\n      \"type\": \"number\",\n      \"default\": 2.00,\n      \"range\": [1, 200],\n      \"step\": 1,\n      \"label\": \"Max position size (USD)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_SIZING_PCT\",\n      \"type\": \"number\",\n      \"default\": 0.05,\n      \"range\": [0.01, 1.0],\n      \"step\": 0.01,\n      \"label\": \"Position sizing percentage\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MAX_TRADES_PER_RUN\",\n      \"type\": \"number\",\n      \"default\": 5,\n      \"range\": [1, 20],\n      \"step\": 1,\n      \"label\": \"Max trades per run\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_LOCATIONS\",\n      \"type\": \"string\",\n      \"default\": \"NYC\",\n      \"label\": \"Target cities (comma-separated)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_BINARY_ONLY\",\n      \"type\": \"boolean\",\n      \"default\": false,\n      \"label\": \"Binary markets only (skip range-bucket)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_SLIPPAGE_MAX\",\n      \"type\": \"number\",\n      \"default\": 0.15,\n      \"range\": [0.05, 1.0],\n      \"step\": 0.05,\n      \"label\": \"Max slippage before skipping trade\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MIN_LIQUIDITY\",\n      \"type\": \"number\",\n      \"default\": 0,\n      \"range\": [0, 10000],\n      \"step\": 100,\n      \"label\": \"Min market liquidity USD (0 = disabled)\"\n    }\n  ]\n}\n\nFile v1.0.10:config.json\n\n{}\n\nArchive v1.0.9: 10 files, 24418 bytes\n\nFiles: CHANGELOG.md (423b), clawhub.json (2430b), config.json (3b), DISCLAIMER.md (1925b), scripts/status.py (5110b), skill-card.md (2441b), SKILL.md (7167b), tests/test_sources_none.py (3740b), weather_trader.py (46907b), _meta.json (140b)\n\nFile v1.0.9:SKILL.md\n\n---\nname: kalshi-weather-trader\ndescription: Trade Kalshi weather markets using NOAA forecasts via Simmer SDK and DFlow on Solana. Port of the popular polymarket-weather-trader. Use when user wants to trade temperature markets on Kalshi, automate weather bets, or check NOAA forecasts.\nmetadata:\n  author: Simmer (@simmer_markets)\n  version: \"1.0.9\"\n  displayName: Kalshi Weather Trader\n  difficulty: intermediate\n  attribution: Strategy inspired by gopfan2, powered by DFlow\n  primaryEnv: SIMMER_API_KEY\n  envVars:\n    - name: SIMMER_API_KEY\n      required: true\n      description: \"Your Simmer SDK API key — get from simmer.markets/dashboard\"\n    - name: SOLANA_PRIVATE_KEY\n      required: true\n      description: \"Solana wallet private key (base58) for signing DFlow trades. Kalshi has no managed-wallet mode — self-custody is the only option. Store only in secured environment; never commit.\"\n---\n# Kalshi Weather Trader\n\nTrade temperature markets on Kalshi using NOAA forecast data, via DFlow on Solana.\n\n> 🚨 **Framework, not a production trading system.** Read [DISCLAIMER.md](./DISCLAIMER.md) before connecting to a wallet with real funds.\n\n> **This is a template.** The default signal is NOAA temperature forecasts — remix it with other weather APIs, different forecast models, or additional market types (precipitation, wind, etc.). The skill handles all the plumbing (market discovery, NOAA parsing, trade execution, safeguards). Your agent provides the alpha.\n\n> **Powered by DFlow.** Kalshi trades execute via DFlow's Solana-based prediction market infrastructure. KYC verification through Proof is required for buys.\n\n## When to Use This Skill\n\nUse this skill when the user wants to:\n- Trade weather markets on Kalshi (not Polymarket)\n- Set up automated temperature trading on Kalshi\n- Check their Kalshi weather trading positions\n- Configure trading thresholds or locations\n\n## Setup Flow\n\nWhen user asks to install or configure this skill:\n\n1. **Install the Simmer SDK**\n   ```bash\n   pip install simmer-sdk\n   ```\n\n2. **Ask for Simmer API key**\n   - They can get it from simmer.markets/dashboard → SDK tab\n   - Store in environment as `SIMMER_API_KEY`\n\n3. **Ask for Solana private key** (required for live trading)\n   - This is the base58-encoded secret key for their Solana wallet\n   - Store in environment as `SOLANA_PRIVATE_KEY`\n   - The SDK uses this to sign transactions client-side automatically\n\n4. **Verify KYC**\n   - Required for Kalshi buys (not sells)\n   - Complete at [dflow.net/proof](https://dflow.net/proof)\n   - Check status: `curl \"https://api.simmer.markets/api/proof/status?wallet=YOUR_SOLANA_ADDRESS\"`\n\n5. **Fund the wallet**\n   - SOL on Solana mainnet for transaction fees (~0.01 SOL)\n   - USDC on Solana mainnet for trading capital\n\n6. **Ask about settings** (or confirm defaults)\n   - Entry threshold: When to buy (default 15¢)\n   - Exit threshold: When to sell (default 45¢)\n   - Max position: Amount per trade (default $2.00)\n   - Locations: Which cities to trade (default NYC)\n\n7. **Save settings to environment variables**\n\n8. **Set up cron** (disabled by default — user must enable scheduling)\n\n## Configuration\n\n| Setting | Environment Variable | Default | Description |\n|---------|---------------------|---------|-------------|\n| Entry threshold | `SIMMER_WEATHER_ENTRY_THRESHOLD` | 0.15 | Buy when price below this |\n| Exit threshold | `SIMMER_WEATHER_EXIT_THRESHOLD` | 0.45 | Sell when price above this |\n| Max position | `SIMMER_WEATHER_MAX_POSITION_USD` | 2.00 | Maximum USD per trade |\n| Max trades/run | `SIMMER_WEATHER_MAX_TRADES_PER_RUN` | 5 | Maximum trades per scan cycle |\n| Locations | `SIMMER_WEATHER_LOCATIONS` | NYC | Comma-separated cities (NYC, Chicago, Seattle, Atlanta, Dallas, Miami) |\n| Binary only | `SIMMER_WEATHER_BINARY_ONLY` | false | Skip range-bucket events, only trade binary yes/no markets |\n| Smart sizing % | `SIMMER_WEATHER_SIZING_PCT` | 0.05 | % of balance per trade |\n| Slippage max | `SIMMER_WEATHER_SLIPPAGE_MAX` | 0.15 | Skip trades with slippage above this (0.15 = 15%) |\n| Min liquidity | `SIMMER_WEATHER_MIN_LIQUIDITY` | 0 | Skip markets with liquidity below this USD amount (0 = disabled) |\n\n**Supported locations:** NYC, Chicago, Seattle, Atlanta, Dallas, Miami\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 weather_trader.py\n\n# Execute real trades\npython weather_trader.py --live\n\n# With smart position sizing (uses portfolio balance)\npython weather_trader.py --live --smart-sizing\n\n# Check positions only\npython weather_trader.py --positions\n\n# View config\npython weather_trader.py --config\n\n# Quiet mode — only output on trades/errors (ideal for high-frequency runs)\npython weather_trader.py --live --smart-sizing --quiet\n```\n\n## How It Works\n\nEach cycle the script:\n1. Fetches active weather markets from Simmer API\n2. Groups markets by event (each temperature day is one event)\n3. Parses event names to get location and date\n4. Fetches NOAA forecast for that location/date\n5. Finds the temperature bucket that matches the forecast\n6. **Safeguards**: Checks context for flip-flop warnings, slippage, time decay\n7. **Trend Detection**: Looks for recent price drops (stronger buy signal)\n8. **Entry**: If bucket price < threshold and safeguards pass → BUY\n9. **Exit**: Checks open positions, sells if price > exit threshold\n10. **Tagging**: All trades tagged with `sdk:kalshi-weather` for tracking\n\n## Safeguards\n\nBefore trading, the skill checks:\n- **Flip-flop warning**: Skips if you've been reversing too much\n- **Slippage**: Skips if estimated slippage > 15%\n- **Time decay**: Skips if market resolves in < 2 hours\n- **Market status**: Skips if market already resolved\n- **Kalshi maintenance**: Kalshi's clearinghouse has a weekly maintenance window on Thursdays 3:00-5:00 AM ET — orders during this window will fail\n\nDisable with `--no-safeguards` (not recommended).\n\n## Troubleshooting\n\n**\"Safeguard blocked: Severe flip-flop warning\"**\n- You've been changing direction too much on this market\n- Wait before trading again\n\n**\"Slippage too high\"**\n- Market is illiquid, reduce position size or skip\n\n**\"No weather markets found\"**\n- Weather markets may not be active (seasonal)\n- Make sure you've imported Kalshi weather markets first: `POST /api/sdk/markets/import/kalshi`\n\n**\"KYC verification required\"**\n- Complete verification at [dflow.net/proof](https://dflow.net/proof)\n- Only required for buys, not sells\n\n**\"SOLANA_PRIVATE_KEY not set\"**\n- The SDK signs transactions automatically when this env var is present\n- Fix: `export SOLANA_PRIVATE_KEY=<your-base58-secret-key>`\n\n**\"Insufficient SOL for transaction fees\"**\n- Fund your Solana wallet with at least 0.05 SOL for gas\n\n**\"API key invalid\"**\n- Get new key from simmer.markets/dashboard → SDK tab\n\nFile v1.0.9:_meta.json\n\n{\n  \"ownerId\": \"kn7axnp7bzqsf5fkx0z8px7han7zyq1x\",\n  \"slug\": \"kalshi-weather-trader\",\n  \"version\": \"1.0.9\",\n  \"publishedAt\": 1779805393760\n}\n\nFile v1.0.9:CHANGELOG.md\n\n# Changelog — kalshi-weather-trader\n\n## [1.0.8] - 2026-05-23\n\n### Fixed\n- `check_exit_opportunities` no longer crashes with `TypeError: argument of type 'NoneType' is not iterable` when a position's `sources` field is `None` (e.g. paper-mode entries). Changed `pos.get(\"sources\", [])` → `pos.get(\"sources\") or []` so explicit `None` values are coalesced to `[]`. Closes SIM-2371.\n\n## [1.0.7] - prior\n- See git history.\n\nFile v1.0.9: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.0.9:skill-card.md\n\n## Description: <br>\nTrade Kalshi weather markets using NOAA forecasts via Simmer SDK and DFlow on Solana. <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 developers use this skill to inspect Kalshi weather trading positions, configure automated temperature-market trading, and run dry-run or live trading flows using NOAA forecasts. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can use a Solana private key to sign live financial trades. <br>\nMitigation: Use a dedicated low-balance wallet, keep the private key only in a secured environment, and start with dry-run mode before enabling live trading. <br>\nRisk: Automated trading can place irreversible on-chain orders and produce financial losses. <br>\nMitigation: Keep position and trade limits small, monitor runs closely, and enable scheduling only when intentional. <br>\nRisk: Disabling safeguards can increase exposure to slippage, rapid market resolution, and repeated direction changes. <br>\nMitigation: Avoid --no-safeguards for live trading and keep slippage, time-decay, and position-size controls enabled. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/simmer/kalshi-weather-trader) <br>\n- [Simmer API](https://api.simmer.markets) <br>\n- [Simmer dashboard](https://simmer.markets/dashboard) <br>\n- [DFlow Proof KYC](https://dflow.net/proof) <br>\n- [NOAA Weather API](https://api.weather.gov) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown with inline shell commands, Python entrypoints, configuration variables, and trading status text] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May produce dry-run opportunity summaries, account and position status, live trade execution results, and configuration guidance.] <br>\n\n## Skill Version(s): <br>\n1.0.9 (source: server release evidence and SKILL.md metadata) <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.0.9:clawhub.json\n\n{\n  \"emoji\": \"\\ud83c\\udf21\\ufe0f\",\n  \"primaryEnv\": \"SIMMER_API_KEY\",\n  \"requires\": {\n    \"env\": [\n      \"SIMMER_API_KEY\",\n      \"SOLANA_PRIVATE_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\": \"SOLANA_PRIVATE_KEY\",\n      \"required\": true,\n      \"description\": \"Solana wallet private key (base58) for signing DFlow trades. Kalshi has no managed-wallet mode \\u2014 self-custody is the only option.\"\n    }\n  ],\n  \"cron\": null,\n  \"autostart\": false,\n  \"automaton\": {\n    \"managed\": true,\n    \"entrypoint\": \"weather_trader.py\"\n  },\n  \"tunables\": [\n    {\n      \"env\": \"SIMMER_WEATHER_ENTRY_THRESHOLD\",\n      \"type\": \"number\",\n      \"default\": 0.15,\n      \"range\": [0.01, 0.50],\n      \"step\": 0.01,\n      \"label\": \"Entry edge threshold\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_EXIT_THRESHOLD\",\n      \"type\": \"number\",\n      \"default\": 0.45,\n      \"range\": [0.10, 0.99],\n      \"step\": 0.01,\n      \"label\": \"Exit probability threshold\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MAX_POSITION_USD\",\n      \"type\": \"number\",\n      \"default\": 2.00,\n      \"range\": [1, 200],\n      \"step\": 1,\n      \"label\": \"Max position size (USD)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_SIZING_PCT\",\n      \"type\": \"number\",\n      \"default\": 0.05,\n      \"range\": [0.01, 1.0],\n      \"step\": 0.01,\n      \"label\": \"Position sizing percentage\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MAX_TRADES_PER_RUN\",\n      \"type\": \"number\",\n      \"default\": 5,\n      \"range\": [1, 20],\n      \"step\": 1,\n      \"label\": \"Max trades per run\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_LOCATIONS\",\n      \"type\": \"string\",\n      \"default\": \"NYC\",\n      \"label\": \"Target cities (comma-separated)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_BINARY_ONLY\",\n      \"type\": \"boolean\",\n      \"default\": false,\n      \"label\": \"Binary markets only (skip range-bucket)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_SLIPPAGE_MAX\",\n      \"type\": \"number\",\n      \"default\": 0.15,\n      \"range\": [0.05, 1.0],\n      \"step\": 0.05,\n      \"label\": \"Max slippage before skipping trade\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MIN_LIQUIDITY\",\n      \"type\": \"number\",\n      \"default\": 0,\n      \"range\": [0, 10000],\n      \"step\": 100,\n      \"label\": \"Min market liquidity USD (0 = disabled)\"\n    }\n  ]\n}\n\nFile v1.0.9:config.json\n\n{}\n\nArchive v1.0.8: 9 files, 22732 bytes\n\nFiles: CHANGELOG.md (423b), clawhub.json (2430b), config.json (3b), DISCLAIMER.md (1925b), scripts/status.py (5110b), SKILL.md (7167b), tests/test_sources_none.py (3740b), weather_trader.py (45349b), _meta.json (140b)\n\nFile v1.0.8:SKILL.md\n\n---\nname: kalshi-weather-trader\ndescription: Trade Kalshi weather markets using NOAA forecasts via Simmer SDK and DFlow on Solana. Port of the popular polymarket-weather-trader. Use when user wants to trade temperature markets on Kalshi, automate weather bets, or check NOAA forecasts.\nmetadata:\n  author: Simmer (@simmer_markets)\n  version: \"1.0.8\"\n  displayName: Kalshi Weather Trader\n  difficulty: intermediate\n  attribution: Strategy inspired by gopfan2, powered by DFlow\n  primaryEnv: SIMMER_API_KEY\n  envVars:\n    - name: SIMMER_API_KEY\n      required: true\n      description: \"Your Simmer SDK API key — get from simmer.markets/dashboard\"\n    - name: SOLANA_PRIVATE_KEY\n      required: true\n      description: \"Solana wallet private key (base58) for signing DFlow trades. Kalshi has no managed-wallet mode — self-custody is the only option. Store only in secured environment; never commit.\"\n---\n# Kalshi Weather Trader\n\nTrade temperature markets on Kalshi using NOAA forecast data, via DFlow on Solana.\n\n> 🚨 **Framework, not a production trading system.** Read [DISCLAIMER.md](./DISCLAIMER.md) before connecting to a wallet with real funds.\n\n> **This is a template.** The default signal is NOAA temperature forecasts — remix it with other weather APIs, different forecast models, or additional market types (precipitation, wind, etc.). The skill handles all the plumbing (market discovery, NOAA parsing, trade execution, safeguards). Your agent provides the alpha.\n\n> **Powered by DFlow.** Kalshi trades execute via DFlow's Solana-based prediction market infrastructure. KYC verification through Proof is required for buys.\n\n## When to Use This Skill\n\nUse this skill when the user wants to:\n- Trade weather markets on Kalshi (not Polymarket)\n- Set up automated temperature trading on Kalshi\n- Check their Kalshi weather trading positions\n- Configure trading thresholds or locations\n\n## Setup Flow\n\nWhen user asks to install or configure this skill:\n\n1. **Install the Simmer SDK**\n   ```bash\n   pip install simmer-sdk\n   ```\n\n2. **Ask for Simmer API key**\n   - They can get it from simmer.markets/dashboard → SDK tab\n   - Store in environment as `SIMMER_API_KEY`\n\n3. **Ask for Solana private key** (required for live trading)\n   - This is the base58-encoded secret key for their Solana wallet\n   - Store in environment as `SOLANA_PRIVATE_KEY`\n   - The SDK uses this to sign transactions client-side automatically\n\n4. **Verify KYC**\n   - Required for Kalshi buys (not sells)\n   - Complete at [dflow.net/proof](https://dflow.net/proof)\n   - Check status: `curl \"https://api.simmer.markets/api/proof/status?wallet=YOUR_SOLANA_ADDRESS\"`\n\n5. **Fund the wallet**\n   - SOL on Solana mainnet for transaction fees (~0.01 SOL)\n   - USDC on Solana mainnet for trading capital\n\n6. **Ask about settings** (or confirm defaults)\n   - Entry threshold: When to buy (default 15¢)\n   - Exit threshold: When to sell (default 45¢)\n   - Max position: Amount per trade (default $2.00)\n   - Locations: Which cities to trade (default NYC)\n\n7. **Save settings to environment variables**\n\n8. **Set up cron** (disabled by default — user must enable scheduling)\n\n## Configuration\n\n| Setting | Environment Variable | Default | Description |\n|---------|---------------------|---------|-------------|\n| Entry threshold | `SIMMER_WEATHER_ENTRY_THRESHOLD` | 0.15 | Buy when price below this |\n| Exit threshold | `SIMMER_WEATHER_EXIT_THRESHOLD` | 0.45 | Sell when price above this |\n| Max position | `SIMMER_WEATHER_MAX_POSITION_USD` | 2.00 | Maximum USD per trade |\n| Max trades/run | `SIMMER_WEATHER_MAX_TRADES_PER_RUN` | 5 | Maximum trades per scan cycle |\n| Locations | `SIMMER_WEATHER_LOCATIONS` | NYC | Comma-separated cities (NYC, Chicago, Seattle, Atlanta, Dallas, Miami) |\n| Binary only | `SIMMER_WEATHER_BINARY_ONLY` | false | Skip range-bucket events, only trade binary yes/no markets |\n| Smart sizing % | `SIMMER_WEATHER_SIZING_PCT` | 0.05 | % of balance per trade |\n| Slippage max | `SIMMER_WEATHER_SLIPPAGE_MAX` | 0.15 | Skip trades with slippage above this (0.15 = 15%) |\n| Min liquidity | `SIMMER_WEATHER_MIN_LIQUIDITY` | 0 | Skip markets with liquidity below this USD amount (0 = disabled) |\n\n**Supported locations:** NYC, Chicago, Seattle, Atlanta, Dallas, Miami\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 weather_trader.py\n\n# Execute real trades\npython weather_trader.py --live\n\n# With smart position sizing (uses portfolio balance)\npython weather_trader.py --live --smart-sizing\n\n# Check positions only\npython weather_trader.py --positions\n\n# View config\npython weather_trader.py --config\n\n# Quiet mode — only output on trades/errors (ideal for high-frequency runs)\npython weather_trader.py --live --smart-sizing --quiet\n```\n\n## How It Works\n\nEach cycle the script:\n1. Fetches active weather markets from Simmer API\n2. Groups markets by event (each temperature day is one event)\n3. Parses event names to get location and date\n4. Fetches NOAA forecast for that location/date\n5. Finds the temperature bucket that matches the forecast\n6. **Safeguards**: Checks context for flip-flop warnings, slippage, time decay\n7. **Trend Detection**: Looks for recent price drops (stronger buy signal)\n8. **Entry**: If bucket price < threshold and safeguards pass → BUY\n9. **Exit**: Checks open positions, sells if price > exit threshold\n10. **Tagging**: All trades tagged with `sdk:kalshi-weather` for tracking\n\n## Safeguards\n\nBefore trading, the skill checks:\n- **Flip-flop warning**: Skips if you've been reversing too much\n- **Slippage**: Skips if estimated slippage > 15%\n- **Time decay**: Skips if market resolves in < 2 hours\n- **Market status**: Skips if market already resolved\n- **Kalshi maintenance**: Kalshi's clearinghouse has a weekly maintenance window on Thursdays 3:00-5:00 AM ET — orders during this window will fail\n\nDisable with `--no-safeguards` (not recommended).\n\n## Troubleshooting\n\n**\"Safeguard blocked: Severe flip-flop warning\"**\n- You've been changing direction too much on this market\n- Wait before trading again\n\n**\"Slippage too high\"**\n- Market is illiquid, reduce position size or skip\n\n**\"No weather markets found\"**\n- Weather markets may not be active (seasonal)\n- Make sure you've imported Kalshi weather markets first: `POST /api/sdk/markets/import/kalshi`\n\n**\"KYC verification required\"**\n- Complete verification at [dflow.net/proof](https://dflow.net/proof)\n- Only required for buys, not sells\n\n**\"SOLANA_PRIVATE_KEY not set\"**\n- The SDK signs transactions automatically when this env var is present\n- Fix: `export SOLANA_PRIVATE_KEY=<your-base58-secret-key>`\n\n**\"Insufficient SOL for transaction fees\"**\n- Fund your Solana wallet with at least 0.05 SOL for gas\n\n**\"API key invalid\"**\n- Get new key from simmer.markets/dashboard → SDK tab\n\nFile v1.0.8:_meta.json\n\n{\n  \"ownerId\": \"kn7axnp7bzqsf5fkx0z8px7han7zyq1x\",\n  \"slug\": \"kalshi-weather-trader\",\n  \"version\": \"1.0.8\",\n  \"publishedAt\": 1779534848831\n}\n\nFile v1.0.8:CHANGELOG.md\n\n# Changelog — kalshi-weather-trader\n\n## [1.0.8] - 2026-05-23\n\n### Fixed\n- `check_exit_opportunities` no longer crashes with `TypeError: argument of type 'NoneType' is not iterable` when a position's `sources` field is `None` (e.g. paper-mode entries). Changed `pos.get(\"sources\", [])` → `pos.get(\"sources\") or []` so explicit `None` values are coalesced to `[]`. Closes SIM-2371.\n\n## [1.0.7] - prior\n- See git history.\n\nFile v1.0.8: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.0.8:clawhub.json\n\n{\n  \"emoji\": \"\\ud83c\\udf21\\ufe0f\",\n  \"primaryEnv\": \"SIMMER_API_KEY\",\n  \"requires\": {\n    \"env\": [\n      \"SIMMER_API_KEY\",\n      \"SOLANA_PRIVATE_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\": \"SOLANA_PRIVATE_KEY\",\n      \"required\": true,\n      \"description\": \"Solana wallet private key (base58) for signing DFlow trades. Kalshi has no managed-wallet mode \\u2014 self-custody is the only option.\"\n    }\n  ],\n  \"cron\": null,\n  \"autostart\": false,\n  \"automaton\": {\n    \"managed\": true,\n    \"entrypoint\": \"weather_trader.py\"\n  },\n  \"tunables\": [\n    {\n      \"env\": \"SIMMER_WEATHER_ENTRY_THRESHOLD\",\n      \"type\": \"number\",\n      \"default\": 0.15,\n      \"range\": [0.01, 0.50],\n      \"step\": 0.01,\n      \"label\": \"Entry edge threshold\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_EXIT_THRESHOLD\",\n      \"type\": \"number\",\n      \"default\": 0.45,\n      \"range\": [0.10, 0.99],\n      \"step\": 0.01,\n      \"label\": \"Exit probability threshold\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MAX_POSITION_USD\",\n      \"type\": \"number\",\n      \"default\": 2.00,\n      \"range\": [1, 200],\n      \"step\": 1,\n      \"label\": \"Max position size (USD)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_SIZING_PCT\",\n      \"type\": \"number\",\n      \"default\": 0.05,\n      \"range\": [0.01, 1.0],\n      \"step\": 0.01,\n      \"label\": \"Position sizing percentage\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MAX_TRADES_PER_RUN\",\n      \"type\": \"number\",\n      \"default\": 5,\n      \"range\": [1, 20],\n      \"step\": 1,\n      \"label\": \"Max trades per run\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_LOCATIONS\",\n      \"type\": \"string\",\n      \"default\": \"NYC\",\n      \"label\": \"Target cities (comma-separated)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_BINARY_ONLY\",\n      \"type\": \"boolean\",\n      \"default\": false,\n      \"label\": \"Binary markets only (skip range-bucket)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_SLIPPAGE_MAX\",\n      \"type\": \"number\",\n      \"default\": 0.15,\n      \"range\": [0.05, 1.0],\n      \"step\": 0.05,\n      \"label\": \"Max slippage before skipping trade\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MIN_LIQUIDITY\",\n      \"type\": \"number\",\n      \"default\": 0,\n      \"range\": [0, 10000],\n      \"step\": 100,\n      \"label\": \"Min market liquidity USD (0 = disabled)\"\n    }\n  ]\n}\n\nFile v1.0.8:config.json\n\n{}\n\nArchive v1.0.7: 6 files, 19553 bytes\n\nFiles: clawhub.json (2430b), config.json (3b), scripts/status.py (5110b), SKILL.md (7026b), weather_trader.py (45345b), _meta.json (140b)\n\nFile v1.0.7:SKILL.md\n\n---\nname: kalshi-weather-trader\ndescription: Trade Kalshi weather markets using NOAA forecasts via Simmer SDK and DFlow on Solana. Port of the popular polymarket-weather-trader. Use when user wants to trade temperature markets on Kalshi, automate weather bets, or check NOAA forecasts.\nmetadata:\n  author: Simmer (@simmer_markets)\n  version: \"1.0.7\"\n  displayName: Kalshi Weather Trader\n  difficulty: intermediate\n  attribution: Strategy inspired by gopfan2, powered by DFlow\n  primaryEnv: SIMMER_API_KEY\n  envVars:\n    - name: SIMMER_API_KEY\n      required: true\n      description: \"Your Simmer SDK API key — get from simmer.markets/dashboard\"\n    - name: SOLANA_PRIVATE_KEY\n      required: true\n      description: \"Solana wallet private key (base58) for signing DFlow trades. Kalshi has no managed-wallet mode — self-custody is the only option. Store only in secured environment; never commit.\"\n---\n# Kalshi Weather Trader\n\nTrade temperature markets on Kalshi using NOAA forecast data, via DFlow on Solana.\n\n> **This is a template.** The default signal is NOAA temperature forecasts — remix it with other weather APIs, different forecast models, or additional market types (precipitation, wind, etc.). The skill handles all the plumbing (market discovery, NOAA parsing, trade execution, safeguards). Your agent provides the alpha.\n\n> **Powered by DFlow.** Kalshi trades execute via DFlow's Solana-based prediction market infrastructure. KYC verification through Proof is required for buys.\n\n## When to Use This Skill\n\nUse this skill when the user wants to:\n- Trade weather markets on Kalshi (not Polymarket)\n- Set up automated temperature trading on Kalshi\n- Check their Kalshi weather trading positions\n- Configure trading thresholds or locations\n\n## Setup Flow\n\nWhen user asks to install or configure this skill:\n\n1. **Install the Simmer SDK**\n   ```bash\n   pip install simmer-sdk\n   ```\n\n2. **Ask for Simmer API key**\n   - They can get it from simmer.markets/dashboard → SDK tab\n   - Store in environment as `SIMMER_API_KEY`\n\n3. **Ask for Solana private key** (required for live trading)\n   - This is the base58-encoded secret key for their Solana wallet\n   - Store in environment as `SOLANA_PRIVATE_KEY`\n   - The SDK uses this to sign transactions client-side automatically\n\n4. **Verify KYC**\n   - Required for Kalshi buys (not sells)\n   - Complete at [dflow.net/proof](https://dflow.net/proof)\n   - Check status: `curl \"https://api.simmer.markets/api/proof/status?wallet=YOUR_SOLANA_ADDRESS\"`\n\n5. **Fund the wallet**\n   - SOL on Solana mainnet for transaction fees (~0.01 SOL)\n   - USDC on Solana mainnet for trading capital\n\n6. **Ask about settings** (or confirm defaults)\n   - Entry threshold: When to buy (default 15¢)\n   - Exit threshold: When to sell (default 45¢)\n   - Max position: Amount per trade (default $2.00)\n   - Locations: Which cities to trade (default NYC)\n\n7. **Save settings to environment variables**\n\n8. **Set up cron** (disabled by default — user must enable scheduling)\n\n## Configuration\n\n| Setting | Environment Variable | Default | Description |\n|---------|---------------------|---------|-------------|\n| Entry threshold | `SIMMER_WEATHER_ENTRY_THRESHOLD` | 0.15 | Buy when price below this |\n| Exit threshold | `SIMMER_WEATHER_EXIT_THRESHOLD` | 0.45 | Sell when price above this |\n| Max position | `SIMMER_WEATHER_MAX_POSITION_USD` | 2.00 | Maximum USD per trade |\n| Max trades/run | `SIMMER_WEATHER_MAX_TRADES_PER_RUN` | 5 | Maximum trades per scan cycle |\n| Locations | `SIMMER_WEATHER_LOCATIONS` | NYC | Comma-separated cities (NYC, Chicago, Seattle, Atlanta, Dallas, Miami) |\n| Binary only | `SIMMER_WEATHER_BINARY_ONLY` | false | Skip range-bucket events, only trade binary yes/no markets |\n| Smart sizing % | `SIMMER_WEATHER_SIZING_PCT` | 0.05 | % of balance per trade |\n| Slippage max | `SIMMER_WEATHER_SLIPPAGE_MAX` | 0.15 | Skip trades with slippage above this (0.15 = 15%) |\n| Min liquidity | `SIMMER_WEATHER_MIN_LIQUIDITY` | 0 | Skip markets with liquidity below this USD amount (0 = disabled) |\n\n**Supported locations:** NYC, Chicago, Seattle, Atlanta, Dallas, Miami\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 weather_trader.py\n\n# Execute real trades\npython weather_trader.py --live\n\n# With smart position sizing (uses portfolio balance)\npython weather_trader.py --live --smart-sizing\n\n# Check positions only\npython weather_trader.py --positions\n\n# View config\npython weather_trader.py --config\n\n# Quiet mode — only output on trades/errors (ideal for high-frequency runs)\npython weather_trader.py --live --smart-sizing --quiet\n```\n\n## How It Works\n\nEach cycle the script:\n1. Fetches active weather markets from Simmer API\n2. Groups markets by event (each temperature day is one event)\n3. Parses event names to get location and date\n4. Fetches NOAA forecast for that location/date\n5. Finds the temperature bucket that matches the forecast\n6. **Safeguards**: Checks context for flip-flop warnings, slippage, time decay\n7. **Trend Detection**: Looks for recent price drops (stronger buy signal)\n8. **Entry**: If bucket price < threshold and safeguards pass → BUY\n9. **Exit**: Checks open positions, sells if price > exit threshold\n10. **Tagging**: All trades tagged with `sdk:kalshi-weather` for tracking\n\n## Safeguards\n\nBefore trading, the skill checks:\n- **Flip-flop warning**: Skips if you've been reversing too much\n- **Slippage**: Skips if estimated slippage > 15%\n- **Time decay**: Skips if market resolves in < 2 hours\n- **Market status**: Skips if market already resolved\n- **Kalshi maintenance**: Kalshi's clearinghouse has a weekly maintenance window on Thursdays 3:00-5:00 AM ET — orders during this window will fail\n\nDisable with `--no-safeguards` (not recommended).\n\n## Troubleshooting\n\n**\"Safeguard blocked: Severe flip-flop warning\"**\n- You've been changing direction too much on this market\n- Wait before trading again\n\n**\"Slippage too high\"**\n- Market is illiquid, reduce position size or skip\n\n**\"No weather markets found\"**\n- Weather markets may not be active (seasonal)\n- Make sure you've imported Kalshi weather markets first: `POST /api/sdk/markets/import/kalshi`\n\n**\"KYC verification required\"**\n- Complete verification at [dflow.net/proof](https://dflow.net/proof)\n- Only required for buys, not sells\n\n**\"SOLANA_PRIVATE_KEY not set\"**\n- The SDK signs transactions automatically when this env var is present\n- Fix: `export SOLANA_PRIVATE_KEY=<your-base58-secret-key>`\n\n**\"Insufficient SOL for transaction fees\"**\n- Fund your Solana wallet with at least 0.05 SOL for gas\n\n**\"API key invalid\"**\n- Get new key from simmer.markets/dashboard → SDK tab\n\nFile v1.0.7:_meta.json\n\n{\n  \"ownerId\": \"kn7axnp7bzqsf5fkx0z8px7han7zyq1x\",\n  \"slug\": \"kalshi-weather-trader\",\n  \"version\": \"1.0.7\",\n  \"publishedAt\": 1779169079160\n}\n\nFile v1.0.7:clawhub.json\n\n{\n  \"emoji\": \"\\ud83c\\udf21\\ufe0f\",\n  \"primaryEnv\": \"SIMMER_API_KEY\",\n  \"requires\": {\n    \"env\": [\n      \"SIMMER_API_KEY\",\n      \"SOLANA_PRIVATE_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\": \"SOLANA_PRIVATE_KEY\",\n      \"required\": true,\n      \"description\": \"Solana wallet private key (base58) for signing DFlow trades. Kalshi has no managed-wallet mode \\u2014 self-custody is the only option.\"\n    }\n  ],\n  \"cron\": null,\n  \"autostart\": false,\n  \"automaton\": {\n    \"managed\": true,\n    \"entrypoint\": \"weather_trader.py\"\n  },\n  \"tunables\": [\n    {\n      \"env\": \"SIMMER_WEATHER_ENTRY_THRESHOLD\",\n      \"type\": \"number\",\n      \"default\": 0.15,\n      \"range\": [0.01, 0.50],\n      \"step\": 0.01,\n      \"label\": \"Entry edge threshold\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_EXIT_THRESHOLD\",\n      \"type\": \"number\",\n      \"default\": 0.45,\n      \"range\": [0.10, 0.99],\n      \"step\": 0.01,\n      \"label\": \"Exit probability threshold\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MAX_POSITION_USD\",\n      \"type\": \"number\",\n      \"default\": 2.00,\n      \"range\": [1, 200],\n      \"step\": 1,\n      \"label\": \"Max position size (USD)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_SIZING_PCT\",\n      \"type\": \"number\",\n      \"default\": 0.05,\n      \"range\": [0.01, 1.0],\n      \"step\": 0.01,\n      \"label\": \"Position sizing percentage\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MAX_TRADES_PER_RUN\",\n      \"type\": \"number\",\n      \"default\": 5,\n      \"range\": [1, 20],\n      \"step\": 1,\n      \"label\": \"Max trades per run\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_LOCATIONS\",\n      \"type\": \"string\",\n      \"default\": \"NYC\",\n      \"label\": \"Target cities (comma-separated)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_BINARY_ONLY\",\n      \"type\": \"boolean\",\n      \"default\": false,\n      \"label\": \"Binary markets only (skip range-bucket)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_SLIPPAGE_MAX\",\n      \"type\": \"number\",\n      \"default\": 0.15,\n      \"range\": [0.05, 1.0],\n      \"step\": 0.05,\n      \"label\": \"Max slippage before skipping trade\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MIN_LIQUIDITY\",\n      \"type\": \"number\",\n      \"default\": 0,\n      \"range\": [0, 10000],\n      \"step\": 100,\n      \"label\": \"Min market liquidity USD (0 = disabled)\"\n    }\n  ]\n}\n\nFile v1.0.7:config.json\n\n{}\n\nArchive v1.0.6: 6 files, 19536 bytes\n\nFiles: clawhub.json (2430b), config.json (3b), scripts/status.py (5110b), SKILL.md (7026b), weather_trader.py (45216b), _meta.json (140b)\n\nFile v1.0.6:SKILL.md\n\n---\nname: kalshi-weather-trader\ndescription: Trade Kalshi weather markets using NOAA forecasts via Simmer SDK and DFlow on Solana. Port of the popular polymarket-weather-trader. Use when user wants to trade temperature markets on Kalshi, automate weather bets, or check NOAA forecasts.\nmetadata:\n  author: Simmer (@simmer_markets)\n  version: \"1.0.6\"\n  displayName: Kalshi Weather Trader\n  difficulty: intermediate\n  attribution: Strategy inspired by gopfan2, powered by DFlow\n  primaryEnv: SIMMER_API_KEY\n  envVars:\n    - name: SIMMER_API_KEY\n      required: true\n      description: \"Your Simmer SDK API key — get from simmer.markets/dashboard\"\n    - name: SOLANA_PRIVATE_KEY\n      required: true\n      description: \"Solana wallet private key (base58) for signing DFlow trades. Kalshi has no managed-wallet mode — self-custody is the only option. Store only in secured environment; never commit.\"\n---\n# Kalshi Weather Trader\n\nTrade temperature markets on Kalshi using NOAA forecast data, via DFlow on Solana.\n\n> **This is a template.** The default signal is NOAA temperature forecasts — remix it with other weather APIs, different forecast models, or additional market types (precipitation, wind, etc.). The skill handles all the plumbing (market discovery, NOAA parsing, trade execution, safeguards). Your agent provides the alpha.\n\n> **Powered by DFlow.** Kalshi trades execute via DFlow's Solana-based prediction market infrastructure. KYC verification through Proof is required for buys.\n\n## When to Use This Skill\n\nUse this skill when the user wants to:\n- Trade weather markets on Kalshi (not Polymarket)\n- Set up automated temperature trading on Kalshi\n- Check their Kalshi weather trading positions\n- Configure trading thresholds or locations\n\n## Setup Flow\n\nWhen user asks to install or configure this skill:\n\n1. **Install the Simmer SDK**\n   ```bash\n   pip install simmer-sdk\n   ```\n\n2. **Ask for Simmer API key**\n   - They can get it from simmer.markets/dashboard → SDK tab\n   - Store in environment as `SIMMER_API_KEY`\n\n3. **Ask for Solana private key** (required for live trading)\n   - This is the base58-encoded secret key for their Solana wallet\n   - Store in environment as `SOLANA_PRIVATE_KEY`\n   - The SDK uses this to sign transactions client-side automatically\n\n4. **Verify KYC**\n   - Required for Kalshi buys (not sells)\n   - Complete at [dflow.net/proof](https://dflow.net/proof)\n   - Check status: `curl \"https://api.simmer.markets/api/proof/status?wallet=YOUR_SOLANA_ADDRESS\"`\n\n5. **Fund the wallet**\n   - SOL on Solana mainnet for transaction fees (~0.01 SOL)\n   - USDC on Solana mainnet for trading capital\n\n6. **Ask about settings** (or confirm defaults)\n   - Entry threshold: When to buy (default 15¢)\n   - Exit threshold: When to sell (default 45¢)\n   - Max position: Amount per trade (default $2.00)\n   - Locations: Which cities to trade (default NYC)\n\n7. **Save settings to environment variables**\n\n8. **Set up cron** (disabled by default — user must enable scheduling)\n\n## Configuration\n\n| Setting | Environment Variable | Default | Description |\n|---------|---------------------|---------|-------------|\n| Entry threshold | `SIMMER_WEATHER_ENTRY_THRESHOLD` | 0.15 | Buy when price below this |\n| Exit threshold | `SIMMER_WEATHER_EXIT_THRESHOLD` | 0.45 | Sell when price above this |\n| Max position | `SIMMER_WEATHER_MAX_POSITION_USD` | 2.00 | Maximum USD per trade |\n| Max trades/run | `SIMMER_WEATHER_MAX_TRADES_PER_RUN` | 5 | Maximum trades per scan cycle |\n| Locations | `SIMMER_WEATHER_LOCATIONS` | NYC | Comma-separated cities (NYC, Chicago, Seattle, Atlanta, Dallas, Miami) |\n| Binary only | `SIMMER_WEATHER_BINARY_ONLY` | false | Skip range-bucket events, only trade binary yes/no markets |\n| Smart sizing % | `SIMMER_WEATHER_SIZING_PCT` | 0.05 | % of balance per trade |\n| Slippage max | `SIMMER_WEATHER_SLIPPAGE_MAX` | 0.15 | Skip trades with slippage above this (0.15 = 15%) |\n| Min liquidity | `SIMMER_WEATHER_MIN_LIQUIDITY` | 0 | Skip markets with liquidity below this USD amount (0 = disabled) |\n\n**Supported locations:** NYC, Chicago, Seattle, Atlanta, Dallas, Miami\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 weather_trader.py\n\n# Execute real trades\npython weather_trader.py --live\n\n# With smart position sizing (uses portfolio balance)\npython weather_trader.py --live --smart-sizing\n\n# Check positions only\npython weather_trader.py --positions\n\n# View config\npython weather_trader.py --config\n\n# Quiet mode — only output on trades/errors (ideal for high-frequency runs)\npython weather_trader.py --live --smart-sizing --quiet\n```\n\n## How It Works\n\nEach cycle the script:\n1. Fetches active weather markets from Simmer API\n2. Groups markets by event (each temperature day is one event)\n3. Parses event names to get location and date\n4. Fetches NOAA forecast for that location/date\n5. Finds the temperature bucket that matches the forecast\n6. **Safeguards**: Checks context for flip-flop warnings, slippage, time decay\n7. **Trend Detection**: Looks for recent price drops (stronger buy signal)\n8. **Entry**: If bucket price < threshold and safeguards pass → BUY\n9. **Exit**: Checks open positions, sells if price > exit threshold\n10. **Tagging**: All trades tagged with `sdk:kalshi-weather` for tracking\n\n## Safeguards\n\nBefore trading, the skill checks:\n- **Flip-flop warning**: Skips if you've been reversing too much\n- **Slippage**: Skips if estimated slippage > 15%\n- **Time decay**: Skips if market resolves in < 2 hours\n- **Market status**: Skips if market already resolved\n- **Kalshi maintenance**: Kalshi's clearinghouse has a weekly maintenance window on Thursdays 3:00-5:00 AM ET — orders during this window will fail\n\nDisable with `--no-safeguards` (not recommended).\n\n## Troubleshooting\n\n**\"Safeguard blocked: Severe flip-flop warning\"**\n- You've been changing direction too much on this market\n- Wait before trading again\n\n**\"Slippage too high\"**\n- Market is illiquid, reduce position size or skip\n\n**\"No weather markets found\"**\n- Weather markets may not be active (seasonal)\n- Make sure you've imported Kalshi weather markets first: `POST /api/sdk/markets/import/kalshi`\n\n**\"KYC verification required\"**\n- Complete verification at [dflow.net/proof](https://dflow.net/proof)\n- Only required for buys, not sells\n\n**\"SOLANA_PRIVATE_KEY not set\"**\n- The SDK signs transactions automatically when this env var is present\n- Fix: `export SOLANA_PRIVATE_KEY=<your-base58-secret-key>`\n\n**\"Insufficient SOL for transaction fees\"**\n- Fund your Solana wallet with at least 0.05 SOL for gas\n\n**\"API key invalid\"**\n- Get new key from simmer.markets/dashboard → SDK tab\n\nFile v1.0.6:_meta.json\n\n{\n  \"ownerId\": \"kn7axnp7bzqsf5fkx0z8px7han7zyq1x\",\n  \"slug\": \"kalshi-weather-trader\",\n  \"version\": \"1.0.6\",\n  \"publishedAt\": 1777036960516\n}\n\nFile v1.0.6:clawhub.json\n\n{\n  \"emoji\": \"\\ud83c\\udf21\\ufe0f\",\n  \"primaryEnv\": \"SIMMER_API_KEY\",\n  \"requires\": {\n    \"env\": [\n      \"SIMMER_API_KEY\",\n      \"SOLANA_PRIVATE_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\": \"SOLANA_PRIVATE_KEY\",\n      \"required\": true,\n      \"description\": \"Solana wallet private key (base58) for signing DFlow trades. Kalshi has no managed-wallet mode \\u2014 self-custody is the only option.\"\n    }\n  ],\n  \"cron\": null,\n  \"autostart\": false,\n  \"automaton\": {\n    \"managed\": true,\n    \"entrypoint\": \"weather_trader.py\"\n  },\n  \"tunables\": [\n    {\n      \"env\": \"SIMMER_WEATHER_ENTRY_THRESHOLD\",\n      \"type\": \"number\",\n      \"default\": 0.15,\n      \"range\": [0.01, 0.50],\n      \"step\": 0.01,\n      \"label\": \"Entry edge threshold\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_EXIT_THRESHOLD\",\n      \"type\": \"number\",\n      \"default\": 0.45,\n      \"range\": [0.10, 0.99],\n      \"step\": 0.01,\n      \"label\": \"Exit probability threshold\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MAX_POSITION_USD\",\n      \"type\": \"number\",\n      \"default\": 2.00,\n      \"range\": [1, 200],\n      \"step\": 1,\n      \"label\": \"Max position size (USD)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_SIZING_PCT\",\n      \"type\": \"number\",\n      \"default\": 0.05,\n      \"range\": [0.01, 1.0],\n      \"step\": 0.01,\n      \"label\": \"Position sizing percentage\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MAX_TRADES_PER_RUN\",\n      \"type\": \"number\",\n      \"default\": 5,\n      \"range\": [1, 20],\n      \"step\": 1,\n      \"label\": \"Max trades per run\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_LOCATIONS\",\n      \"type\": \"string\",\n      \"default\": \"NYC\",\n      \"label\": \"Target cities (comma-separated)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_BINARY_ONLY\",\n      \"type\": \"boolean\",\n      \"default\": false,\n      \"label\": \"Binary markets only (skip range-bucket)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_SLIPPAGE_MAX\",\n      \"type\": \"number\",\n      \"default\": 0.15,\n      \"range\": [0.05, 1.0],\n      \"step\": 0.05,\n      \"label\": \"Max slippage before skipping trade\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MIN_LIQUIDITY\",\n      \"type\": \"number\",\n      \"default\": 0,\n      \"range\": [0, 10000],\n      \"step\": 100,\n      \"label\": \"Min market liquidity USD (0 = disabled)\"\n    }\n  ]\n}\n\nFile v1.0.6:config.json\n\n{}\n\nArchive v1.0.5: 6 files, 19215 bytes\n\nFiles: clawhub.json (1989b), config.json (3b), scripts/status.py (5110b), SKILL.md (6601b), weather_trader.py (45216b), _meta.json (140b)\n\nFile v1.0.5:SKILL.md\n\n---\nname: kalshi-weather-trader\ndescription: Trade Kalshi weather markets using NOAA forecasts via Simmer SDK and DFlow on Solana. Port of the popular polymarket-weather-trader. Use when user wants to trade temperature markets on Kalshi, automate weather bets, or check NOAA forecasts.\nmetadata:\n  author: Simmer (@simmer_markets)\n  version: \"1.0.0\"\n  displayName: Kalshi Weather Trader\n  difficulty: intermediate\n  attribution: Strategy inspired by gopfan2, powered by DFlow\n---\n# Kalshi Weather Trader\n\nTrade temperature markets on Kalshi using NOAA forecast data, via DFlow on Solana.\n\n> **This is a template.** The default signal is NOAA temperature forecasts — remix it with other weather APIs, different forecast models, or additional market types (precipitation, wind, etc.). The skill handles all the plumbing (market discovery, NOAA parsing, trade execution, safeguards). Your agent provides the alpha.\n\n> **Powered by DFlow.** Kalshi trades execute via DFlow's Solana-based prediction market infrastructure. KYC verification through Proof is required for buys.\n\n## When to Use This Skill\n\nUse this skill when the user wants to:\n- Trade weather markets on Kalshi (not Polymarket)\n- Set up automated temperature trading on Kalshi\n- Check their Kalshi weather trading positions\n- Configure trading thresholds or locations\n\n## Setup Flow\n\nWhen user asks to install or configure this skill:\n\n1. **Install the Simmer SDK**\n   ```bash\n   pip install simmer-sdk\n   ```\n\n2. **Ask for Simmer API key**\n   - They can get it from simmer.markets/dashboard → SDK tab\n   - Store in environment as `SIMMER_API_KEY`\n\n3. **Ask for Solana private key** (required for live trading)\n   - This is the base58-encoded secret key for their Solana wallet\n   - Store in environment as `SOLANA_PRIVATE_KEY`\n   - The SDK uses this to sign transactions client-side automatically\n\n4. **Verify KYC**\n   - Required for Kalshi buys (not sells)\n   - Complete at [dflow.net/proof](https://dflow.net/proof)\n   - Check status: `curl \"https://api.simmer.markets/api/proof/status?wallet=YOUR_SOLANA_ADDRESS\"`\n\n5. **Fund the wallet**\n   - SOL on Solana mainnet for transaction fees (~0.01 SOL)\n   - USDC on Solana mainnet for trading capital\n\n6. **Ask about settings** (or confirm defaults)\n   - Entry threshold: When to buy (default 15¢)\n   - Exit threshold: When to sell (default 45¢)\n   - Max position: Amount per trade (default $2.00)\n   - Locations: Which cities to trade (default NYC)\n\n7. **Save settings to environment variables**\n\n8. **Set up cron** (disabled by default — user must enable scheduling)\n\n## Configuration\n\n| Setting | Environment Variable | Default | Description |\n|---------|---------------------|---------|-------------|\n| Entry threshold | `SIMMER_WEATHER_ENTRY_THRESHOLD` | 0.15 | Buy when price below this |\n| Exit threshold | `SIMMER_WEATHER_EXIT_THRESHOLD` | 0.45 | Sell when price above this |\n| Max position | `SIMMER_WEATHER_MAX_POSITION_USD` | 2.00 | Maximum USD per trade |\n| Max trades/run | `SIMMER_WEATHER_MAX_TRADES_PER_RUN` | 5 | Maximum trades per scan cycle |\n| Locations | `SIMMER_WEATHER_LOCATIONS` | NYC | Comma-separated cities (NYC, Chicago, Seattle, Atlanta, Dallas, Miami) |\n| Binary only | `SIMMER_WEATHER_BINARY_ONLY` | false | Skip range-bucket events, only trade binary yes/no markets |\n| Smart sizing % | `SIMMER_WEATHER_SIZING_PCT` | 0.05 | % of balance per trade |\n| Slippage max | `SIMMER_WEATHER_SLIPPAGE_MAX` | 0.15 | Skip trades with slippage above this (0.15 = 15%) |\n| Min liquidity | `SIMMER_WEATHER_MIN_LIQUIDITY` | 0 | Skip markets with liquidity below this USD amount (0 = disabled) |\n\n**Supported locations:** NYC, Chicago, Seattle, Atlanta, Dallas, Miami\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 weather_trader.py\n\n# Execute real trades\npython weather_trader.py --live\n\n# With smart position sizing (uses portfolio balance)\npython weather_trader.py --live --smart-sizing\n\n# Check positions only\npython weather_trader.py --positions\n\n# View config\npython weather_trader.py --config\n\n# Quiet mode — only output on trades/errors (ideal for high-frequency runs)\npython weather_trader.py --live --smart-sizing --quiet\n```\n\n## How It Works\n\nEach cycle the script:\n1. Fetches active weather markets from Simmer API\n2. Groups markets by event (each temperature day is one event)\n3. Parses event names to get location and date\n4. Fetches NOAA forecast for that location/date\n5. Finds the temperature bucket that matches the forecast\n6. **Safeguards**: Checks context for flip-flop warnings, slippage, time decay\n7. **Trend Detection**: Looks for recent price drops (stronger buy signal)\n8. **Entry**: If bucket price < threshold and safeguards pass → BUY\n9. **Exit**: Checks open positions, sells if price > exit threshold\n10. **Tagging**: All trades tagged with `sdk:kalshi-weather` for tracking\n\n## Safeguards\n\nBefore trading, the skill checks:\n- **Flip-flop warning**: Skips if you've been reversing too much\n- **Slippage**: Skips if estimated slippage > 15%\n- **Time decay**: Skips if market resolves in < 2 hours\n- **Market status**: Skips if market already resolved\n- **Kalshi maintenance**: Kalshi's clearinghouse has a weekly maintenance window on Thursdays 3:00-5:00 AM ET — orders during this window will fail\n\nDisable with `--no-safeguards` (not recommended).\n\n## Troubleshooting\n\n**\"Safeguard blocked: Severe flip-flop warning\"**\n- You've been changing direction too much on this market\n- Wait before trading again\n\n**\"Slippage too high\"**\n- Market is illiquid, reduce position size or skip\n\n**\"No weather markets found\"**\n- Weather markets may not be active (seasonal)\n- Make sure you've imported Kalshi weather markets first: `POST /api/sdk/markets/import/kalshi`\n\n**\"KYC verification required\"**\n- Complete verification at [dflow.net/proof](https://dflow.net/proof)\n- Only required for buys, not sells\n\n**\"SOLANA_PRIVATE_KEY not set\"**\n- The SDK signs transactions automatically when this env var is present\n- Fix: `export SOLANA_PRIVATE_KEY=<your-base58-secret-key>`\n\n**\"Insufficient SOL for transaction fees\"**\n- Fund your Solana wallet with at least 0.05 SOL for gas\n\n**\"API key invalid\"**\n- Get new key from simmer.markets/dashboard → SDK tab\n\nFile v1.0.5:_meta.json\n\n{\n  \"ownerId\": \"kn7axnp7bzqsf5fkx0z8px7han7zyq1x\",\n  \"slug\": \"kalshi-weather-trader\",\n  \"version\": \"1.0.5\",\n  \"publishedAt\": 1776333911677\n}\n\nFile v1.0.5:clawhub.json\n\n{\n  \"emoji\": \"\\ud83c\\udf21\\ufe0f\",\n  \"requires\": {\n    \"env\": [\n      \"SIMMER_API_KEY\",\n      \"SOLANA_PRIVATE_KEY\"\n    ],\n    \"pip\": [\n      \"simmer-sdk\"\n    ]\n  },\n  \"cron\": null,\n  \"autostart\": false,\n  \"automaton\": {\n    \"managed\": true,\n    \"entrypoint\": \"weather_trader.py\"\n  },\n  \"tunables\": [\n    {\n      \"env\": \"SIMMER_WEATHER_ENTRY_THRESHOLD\",\n      \"type\": \"number\",\n      \"default\": 0.15,\n      \"range\": [0.01, 0.50],\n      \"step\": 0.01,\n      \"label\": \"Entry edge threshold\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_EXIT_THRESHOLD\",\n      \"type\": \"number\",\n      \"default\": 0.45,\n      \"range\": [0.10, 0.99],\n      \"step\": 0.01,\n      \"label\": \"Exit probability threshold\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MAX_POSITION_USD\",\n      \"type\": \"number\",\n      \"default\": 2.00,\n      \"range\": [1, 200],\n      \"step\": 1,\n      \"label\": \"Max position size (USD)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_SIZING_PCT\",\n      \"type\": \"number\",\n      \"default\": 0.05,\n      \"range\": [0.01, 1.0],\n      \"step\": 0.01,\n      \"label\": \"Position sizing percentage\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MAX_TRADES_PER_RUN\",\n      \"type\": \"number\",\n      \"default\": 5,\n      \"range\": [1, 20],\n      \"step\": 1,\n      \"label\": \"Max trades per run\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_LOCATIONS\",\n      \"type\": \"string\",\n      \"default\": \"NYC\",\n      \"label\": \"Target cities (comma-separated)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_BINARY_ONLY\",\n      \"type\": \"boolean\",\n      \"default\": false,\n      \"label\": \"Binary markets only (skip range-bucket)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_SLIPPAGE_MAX\",\n      \"type\": \"number\",\n      \"default\": 0.15,\n      \"range\": [0.05, 1.0],\n      \"step\": 0.05,\n      \"label\": \"Max slippage before skipping trade\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MIN_LIQUIDITY\",\n      \"type\": \"number\",\n      \"default\": 0,\n      \"range\": [0, 10000],\n      \"step\": 100,\n      \"label\": \"Min market liquidity USD (0 = disabled)\"\n    }\n  ]\n}\n\nFile v1.0.5:config.json\n\n{}\n\nArchive v1.0.4: 6 files, 19189 bytes\n\nFiles: clawhub.json (1989b), config.json (3b), scripts/status.py (5110b), SKILL.md (6526b), weather_trader.py (45216b), _meta.json (140b)\n\nFile v1.0.4:SKILL.md\n\n---\nname: kalshi-weather-trader\ndescription: Trade Kalshi weather markets using NOAA forecasts via Simmer SDK and DFlow on Solana. Port of the popular polymarket-weather-trader. Use when user wants to trade temperature markets on Kalshi, automate weather bets, or check NOAA forecasts.\nmetadata:\n  author: Simmer (@simmer_markets)\n  version: \"1.0.0\"\n  displayName: Kalshi Weather Trader\n  difficulty: intermediate\n  attribution: Strategy inspired by gopfan2, powered by DFlow\n---\n# Kalshi Weather Trader\n\nTrade temperature markets on Kalshi using NOAA forecast data, via DFlow on Solana.\n\n> **This is a template.** The default signal is NOAA temperature forecasts — remix it with other weather APIs, different forecast models, or additional market types (precipitation, wind, etc.). The skill handles all the plumbing (market discovery, NOAA parsing, trade execution, safeguards). Your agent provides the alpha.\n\n> **Powered by DFlow.** Kalshi trades execute via DFlow's Solana-based prediction market infrastructure. KYC verification through Proof is required for buys.\n\n## When to Use This Skill\n\nUse this skill when the user wants to:\n- Trade weather markets on Kalshi (not Polymarket)\n- Set up automated temperature trading on Kalshi\n- Check their Kalshi weather trading positions\n- Configure trading thresholds or locations\n\n## Setup Flow\n\nWhen user asks to install or configure this skill:\n\n1. **Ask for Simmer API key**\n   - They can get it from simmer.markets/dashboard → SDK tab\n   - Store in environment as `SIMMER_API_KEY`\n\n2. **Ask for Solana private key** (required for live trading)\n   - This is the base58-encoded secret key for their Solana wallet\n   - Store in environment as `SOLANA_PRIVATE_KEY`\n   - The SDK uses this to sign transactions client-side automatically\n\n3. **Verify KYC**\n   - Required for Kalshi buys (not sells)\n   - Complete at [dflow.net/proof](https://dflow.net/proof)\n   - Check status: `curl \"https://api.simmer.markets/api/proof/status?wallet=YOUR_SOLANA_ADDRESS\"`\n\n4. **Fund the wallet**\n   - SOL on Solana mainnet for transaction fees (~0.01 SOL)\n   - USDC on Solana mainnet for trading capital\n\n5. **Ask about settings** (or confirm defaults)\n   - Entry threshold: When to buy (default 15¢)\n   - Exit threshold: When to sell (default 45¢)\n   - Max position: Amount per trade (default $2.00)\n   - Locations: Which cities to trade (default NYC)\n\n6. **Save settings to environment variables**\n\n7. **Set up cron** (disabled by default — user must enable scheduling)\n\n## Configuration\n\n| Setting | Environment Variable | Default | Description |\n|---------|---------------------|---------|-------------|\n| Entry threshold | `SIMMER_WEATHER_ENTRY_THRESHOLD` | 0.15 | Buy when price below this |\n| Exit threshold | `SIMMER_WEATHER_EXIT_THRESHOLD` | 0.45 | Sell when price above this |\n| Max position | `SIMMER_WEATHER_MAX_POSITION_USD` | 2.00 | Maximum USD per trade |\n| Max trades/run | `SIMMER_WEATHER_MAX_TRADES_PER_RUN` | 5 | Maximum trades per scan cycle |\n| Locations | `SIMMER_WEATHER_LOCATIONS` | NYC | Comma-separated cities (NYC, Chicago, Seattle, Atlanta, Dallas, Miami) |\n| Binary only | `SIMMER_WEATHER_BINARY_ONLY` | false | Skip range-bucket events, only trade binary yes/no markets |\n| Smart sizing % | `SIMMER_WEATHER_SIZING_PCT` | 0.05 | % of balance per trade |\n| Slippage max | `SIMMER_WEATHER_SLIPPAGE_MAX` | 0.15 | Skip trades with slippage above this (0.15 = 15%) |\n| Min liquidity | `SIMMER_WEATHER_MIN_LIQUIDITY` | 0 | Skip markets with liquidity below this USD amount (0 = disabled) |\n\n**Supported locations:** NYC, Chicago, Seattle, Atlanta, Dallas, Miami\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 weather_trader.py\n\n# Execute real trades\npython weather_trader.py --live\n\n# With smart position sizing (uses portfolio balance)\npython weather_trader.py --live --smart-sizing\n\n# Check positions only\npython weather_trader.py --positions\n\n# View config\npython weather_trader.py --config\n\n# Quiet mode — only output on trades/errors (ideal for high-frequency runs)\npython weather_trader.py --live --smart-sizing --quiet\n```\n\n## How It Works\n\nEach cycle the script:\n1. Fetches active weather markets from Simmer API\n2. Groups markets by event (each temperature day is one event)\n3. Parses event names to get location and date\n4. Fetches NOAA forecast for that location/date\n5. Finds the temperature bucket that matches the forecast\n6. **Safeguards**: Checks context for flip-flop warnings, slippage, time decay\n7. **Trend Detection**: Looks for recent price drops (stronger buy signal)\n8. **Entry**: If bucket price < threshold and safeguards pass → BUY\n9. **Exit**: Checks open positions, sells if price > exit threshold\n10. **Tagging**: All trades tagged with `sdk:kalshi-weather` for tracking\n\n## Safeguards\n\nBefore trading, the skill checks:\n- **Flip-flop warning**: Skips if you've been reversing too much\n- **Slippage**: Skips if estimated slippage > 15%\n- **Time decay**: Skips if market resolves in < 2 hours\n- **Market status**: Skips if market already resolved\n- **Kalshi maintenance**: Kalshi's clearinghouse has a weekly maintenance window on Thursdays 3:00-5:00 AM ET — orders during this window will fail\n\nDisable with `--no-safeguards` (not recommended).\n\n## Troubleshooting\n\n**\"Safeguard blocked: Severe flip-flop warning\"**\n- You've been changing direction too much on this market\n- Wait before trading again\n\n**\"Slippage too high\"**\n- Market is illiquid, reduce position size or skip\n\n**\"No weather markets found\"**\n- Weather markets may not be active (seasonal)\n- Make sure you've imported Kalshi weather markets first: `POST /api/sdk/markets/import/kalshi`\n\n**\"KYC verification required\"**\n- Complete verification at [dflow.net/proof](https://dflow.net/proof)\n- Only required for buys, not sells\n\n**\"SOLANA_PRIVATE_KEY not set\"**\n- The SDK signs transactions automatically when this env var is present\n- Fix: `export SOLANA_PRIVATE_KEY=<your-base58-secret-key>`\n\n**\"Insufficient SOL for transaction fees\"**\n- Fund your Solana wallet with at least 0.05 SOL for gas\n\n**\"API key invalid\"**\n- Get new key from simmer.markets/dashboard → SDK tab\n\nFile v1.0.4:_meta.json\n\n{\n  \"ownerId\": \"kn7axnp7bzqsf5fkx0z8px7han7zyq1x\",\n  \"slug\": \"kalshi-weather-trader\",\n  \"version\": \"1.0.4\",\n  \"publishedAt\": 1775184413418\n}\n\nFile v1.0.4:clawhub.json\n\n{\n  \"emoji\": \"\\ud83c\\udf21\\ufe0f\",\n  \"requires\": {\n    \"env\": [\n      \"SIMMER_API_KEY\",\n      \"SOLANA_PRIVATE_KEY\"\n    ],\n    \"pip\": [\n      \"simmer-sdk\"\n    ]\n  },\n  \"cron\": null,\n  \"autostart\": false,\n  \"automaton\": {\n    \"managed\": true,\n    \"entrypoint\": \"weather_trader.py\"\n  },\n  \"tunables\": [\n    {\n      \"env\": \"SIMMER_WEATHER_ENTRY_THRESHOLD\",\n      \"type\": \"number\",\n      \"default\": 0.15,\n      \"range\": [0.01, 0.50],\n      \"step\": 0.01,\n      \"label\": \"Entry edge threshold\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_EXIT_THRESHOLD\",\n      \"type\": \"number\",\n      \"default\": 0.45,\n      \"range\": [0.10, 0.99],\n      \"step\": 0.01,\n      \"label\": \"Exit probability threshold\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MAX_POSITION_USD\",\n      \"type\": \"number\",\n      \"default\": 2.00,\n      \"range\": [1, 200],\n      \"step\": 1,\n      \"label\": \"Max position size (USD)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_SIZING_PCT\",\n      \"type\": \"number\",\n      \"default\": 0.05,\n      \"range\": [0.01, 1.0],\n      \"step\": 0.01,\n      \"label\": \"Position sizing percentage\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MAX_TRADES_PER_RUN\",\n      \"type\": \"number\",\n      \"default\": 5,\n      \"range\": [1, 20],\n      \"step\": 1,\n      \"label\": \"Max trades per run\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_LOCATIONS\",\n      \"type\": \"string\",\n      \"default\": \"NYC\",\n      \"label\": \"Target cities (comma-separated)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_BINARY_ONLY\",\n      \"type\": \"boolean\",\n      \"default\": false,\n      \"label\": \"Binary markets only (skip range-bucket)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_SLIPPAGE_MAX\",\n      \"type\": \"number\",\n      \"default\": 0.15,\n      \"range\": [0.05, 1.0],\n      \"step\": 0.05,\n      \"label\": \"Max slippage before skipping trade\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MIN_LIQUIDITY\",\n      \"type\": \"number\",\n      \"default\": 0,\n      \"range\": [0, 10000],\n      \"step\": 100,\n      \"label\": \"Min market liquidity USD (0 = disabled)\"\n    }\n  ]\n}\n\nFile v1.0.4:config.json\n\n{}\n\nArchive v1.0.3: 6 files, 19056 bytes\n\nFiles: clawhub.json (1989b), config.json (3b), scripts/status.py (5110b), SKILL.md (6526b), weather_trader.py (44874b), _meta.json (140b)\n\nFile v1.0.3:SKILL.md\n\n---\nname: kalshi-weather-trader\ndescription: Trade Kalshi weather markets using NOAA forecasts via Simmer SDK and DFlow on Solana. Port of the popular polymarket-weather-trader. Use when user wants to trade temperature markets on Kalshi, automate weather bets, or check NOAA forecasts.\nmetadata:\n  author: Simmer (@simmer_markets)\n  version: \"1.0.0\"\n  displayName: Kalshi Weather Trader\n  difficulty: intermediate\n  attribution: Strategy inspired by gopfan2, powered by DFlow\n---\n# Kalshi Weather Trader\n\nTrade temperature markets on Kalshi using NOAA forecast data, via DFlow on Solana.\n\n> **This is a template.** The default signal is NOAA temperature forecasts — remix it with other weather APIs, different forecast models, or additional market types (precipitation, wind, etc.). The skill handles all the plumbing (market discovery, NOAA parsing, trade execution, safeguards). Your agent provides the alpha.\n\n> **Powered by DFlow.** Kalshi trades execute via DFlow's Solana-based prediction market infrastructure. KYC verification through Proof is required for buys.\n\n## When to Use This Skill\n\nUse this skill when the user wants to:\n- Trade weather markets on Kalshi (not Polymarket)\n- Set up automated temperature trading on Kalshi\n- Check their Kalshi weather trading positions\n- Configure trading thresholds or locations\n\n## Setup Flow\n\nWhen user asks to install or configure this skill:\n\n1. **Ask for Simmer API key**\n   - They can get it from simmer.markets/dashboard → SDK tab\n   - Store in environment as `SIMMER_API_KEY`\n\n2. **Ask for Solana private key** (required for live trading)\n   - This is the base58-encoded secret key for their Solana wallet\n   - Store in environment as `SOLANA_PRIVATE_KEY`\n   - The SDK uses this to sign transactions client-side automatically\n\n3. **Verify KYC**\n   - Required for Kalshi buys (not sells)\n   - Complete at [dflow.net/proof](https://dflow.net/proof)\n   - Check status: `curl \"https://api.simmer.markets/api/proof/status?wallet=YOUR_SOLANA_ADDRESS\"`\n\n4. **Fund the wallet**\n   - SOL on Solana mainnet for transaction fees (~0.01 SOL)\n   - USDC on Solana mainnet for trading capital\n\n5. **Ask about settings** (or confirm defaults)\n   - Entry threshold: When to buy (default 15¢)\n   - Exit threshold: When to sell (default 45¢)\n   - Max position: Amount per trade (default $2.00)\n   - Locations: Which cities to trade (default NYC)\n\n6. **Save settings to environment variables**\n\n7. **Set up cron** (disabled by default — user must enable scheduling)\n\n## Configuration\n\n| Setting | Environment Variable | Default | Description |\n|---------|---------------------|---------|-------------|\n| Entry threshold | `SIMMER_WEATHER_ENTRY_THRESHOLD` | 0.15 | Buy when price below this |\n| Exit threshold | `SIMMER_WEATHER_EXIT_THRESHOLD` | 0.45 | Sell when price above this |\n| Max position | `SIMMER_WEATHER_MAX_POSITION_USD` | 2.00 | Maximum USD per trade |\n| Max trades/run | `SIMMER_WEATHER_MAX_TRADES_PER_RUN` | 5 | Maximum trades per scan cycle |\n| Locations | `SIMMER_WEATHER_LOCATIONS` | NYC | Comma-separated cities (NYC, Chicago, Seattle, Atlanta, Dallas, Miami) |\n| Binary only | `SIMMER_WEATHER_BINARY_ONLY` | false | Skip range-bucket events, only trade binary yes/no markets |\n| Smart sizing % | `SIMMER_WEATHER_SIZING_PCT` | 0.05 | % of balance per trade |\n| Slippage max | `SIMMER_WEATHER_SLIPPAGE_MAX` | 0.15 | Skip trades with slippage above this (0.15 = 15%) |\n| Min liquidity | `SIMMER_WEATHER_MIN_LIQUIDITY` | 0 | Skip markets with liquidity below this USD amount (0 = disabled) |\n\n**Supported locations:** NYC, Chicago, Seattle, Atlanta, Dallas, Miami\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 weather_trader.py\n\n# Execute real trades\npython weather_trader.py --live\n\n# With smart position sizing (uses portfolio balance)\npython weather_trader.py --live --smart-sizing\n\n# Check positions only\npython weather_trader.py --positions\n\n# View config\npython weather_trader.py --config\n\n# Quiet mode — only output on trades/errors (ideal for high-frequency runs)\npython weather_trader.py --live --smart-sizing --quiet\n```\n\n## How It Works\n\nEach cycle the script:\n1. Fetches active weather markets from Simmer API\n2. Groups markets by event (each temperature day is one event)\n3. Parses event names to get location and date\n4. Fetches NOAA forecast for that location/date\n5. Finds the temperature bucket that matches the forecast\n6. **Safeguards**: Checks context for flip-flop warnings, slippage, time decay\n7. **Trend Detection**: Looks for recent price drops (stronger buy signal)\n8. **Entry**: If bucket price < threshold and safeguards pass → BUY\n9. **Exit**: Checks open positions, sells if price > exit threshold\n10. **Tagging**: All trades tagged with `sdk:kalshi-weather` for tracking\n\n## Safeguards\n\nBefore trading, the skill checks:\n- **Flip-flop warning**: Skips if you've been reversing too much\n- **Slippage**: Skips if estimated slippage > 15%\n- **Time decay**: Skips if market resolves in < 2 hours\n- **Market status**: Skips if market already resolved\n- **Kalshi maintenance**: Kalshi's clearinghouse has a weekly maintenance window on Thursdays 3:00-5:00 AM ET — orders during this window will fail\n\nDisable with `--no-safeguards` (not recommended).\n\n## Troubleshooting\n\n**\"Safeguard blocked: Severe flip-flop warning\"**\n- You've been changing direction too much on this market\n- Wait before trading again\n\n**\"Slippage too high\"**\n- Market is illiquid, reduce position size or skip\n\n**\"No weather markets found\"**\n- Weather markets may not be active (seasonal)\n- Make sure you've imported Kalshi weather markets first: `POST /api/sdk/markets/import/kalshi`\n\n**\"KYC verification required\"**\n- Complete verification at [dflow.net/proof](https://dflow.net/proof)\n- Only required for buys, not sells\n\n**\"SOLANA_PRIVATE_KEY not set\"**\n- The SDK signs transactions automatically when this env var is present\n- Fix: `export SOLANA_PRIVATE_KEY=<your-base58-secret-key>`\n\n**\"Insufficient SOL for transaction fees\"**\n- Fund your Solana wallet with at least 0.05 SOL for gas\n\n**\"API key invalid\"**\n- Get new key from simmer.markets/dashboard → SDK tab\n\nFile v1.0.3:_meta.json\n\n{\n  \"ownerId\": \"kn7axnp7bzqsf5fkx0z8px7han7zyq1x\",\n  \"slug\": \"kalshi-weather-trader\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1774767826817\n}\n\nFile v1.0.3:clawhub.json\n\n{\n  \"emoji\": \"\\ud83c\\udf21\\ufe0f\",\n  \"requires\": {\n    \"env\": [\n      \"SIMMER_API_KEY\",\n      \"SOLANA_PRIVATE_KEY\"\n    ],\n    \"pip\": [\n      \"simmer-sdk\"\n    ]\n  },\n  \"cron\": null,\n  \"autostart\": false,\n  \"automaton\": {\n    \"managed\": true,\n    \"entrypoint\": \"weather_trader.py\"\n  },\n  \"tunables\": [\n    {\n      \"env\": \"SIMMER_WEATHER_ENTRY_THRESHOLD\",\n      \"type\": \"number\",\n      \"default\": 0.15,\n      \"range\": [0.01, 0.50],\n      \"step\": 0.01,\n      \"label\": \"Entry edge threshold\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_EXIT_THRESHOLD\",\n      \"type\": \"number\",\n      \"default\": 0.45,\n      \"range\": [0.10, 0.99],\n      \"step\": 0.01,\n      \"label\": \"Exit probability threshold\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MAX_POSITION_USD\",\n      \"type\": \"number\",\n      \"default\": 2.00,\n      \"range\": [1, 200],\n      \"step\": 1,\n      \"label\": \"Max position size (USD)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_SIZING_PCT\",\n      \"type\": \"number\",\n      \"default\": 0.05,\n      \"range\": [0.01, 1.0],\n      \"step\": 0.01,\n      \"label\": \"Position sizing percentage\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MAX_TRADES_PER_RUN\",\n      \"type\": \"number\",\n      \"default\": 5,\n      \"range\": [1, 20],\n      \"step\": 1,\n      \"label\": \"Max trades per run\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_LOCATIONS\",\n      \"type\": \"string\",\n      \"default\": \"NYC\",\n      \"label\": \"Target cities (comma-separated)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_BINARY_ONLY\",\n      \"type\": \"boolean\",\n      \"default\": false,\n      \"label\": \"Binary markets only (skip range-bucket)\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_SLIPPAGE_MAX\",\n      \"type\": \"number\",\n      \"default\": 0.15,\n      \"range\": [0.05, 1.0],\n      \"step\": 0.05,\n      \"label\": \"Max slippage before skipping trade\"\n    },\n    {\n      \"env\": \"SIMMER_WEATHER_MIN_LIQUIDITY\",\n      \"type\": \"number\",\n      \"default\": 0,\n      \"range\": [0, 10000],\n      \"step\": 100,\n      \"label\": \"Min market liquidity USD (0 = disabled)\"\n    }\n  ]\n}\n\nFile v1.0.3:config.json\n\n{}","readmeExcerpt":"Skill: kalshi-weather-trader Owner: simmer Summary: Trade Kalshi weather markets using NOAA forecasts via Simmer SDK and DFlow on Solana. Port of the popular polymarket-weather-trader. Use when user wants to trade temperature markets on Kalshi, automate weather bets, or check NOAA forecasts. Tags: latest:1.0.12 Version history: v1.0.12 | 2026-09-10T03:02:54.292Z | auto **Summary:** Adds entry price lower bound & new ","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 weather_trader.py\n\n# Execute real trades\npython weather_trader.py --live\n\n# With smart position sizing (uses portfolio balance)\npython weather_trader.py --live --smart-sizing\n\n# Check positions only\npython weather_trader.py --positions\n\n# View config\npython weather_trader.py --config\n\n# Quiet mode — only output on trades/errors (ideal for high-frequency runs)\npython weather_trader.py --live --smart-sizing --quiet"},{"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 weather_trader.py\n\n# Execute real trades\npython weather_trader.py --live\n\n# With smart position sizing (uses portfolio balance)\npython weather_trader.py --live --smart-sizing\n\n# Check positions only\npython weather_trader.py --positions\n\n# View config\npython weather_trader.py --config\n\n# Quiet mode — only output on trades/errors (ideal for high-frequency runs)\npython weather_trader.py --live --smart-sizing --quiet"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: kalshi-weather-trader\ndescription: Trade Kalshi weather markets using NOAA forecasts via Simmer SDK and DFlow on Solana. Port of the popular polymarket-weather-trader. Use when user wants to trade temperature markets on Kalshi, automate weather bets, or check NOAA forecasts.\nmetadata:\n  author: Simmer (@simmer_markets)\n  version: \"1.0.12\"\n  displayName: Kalshi Weather Trader\n  difficulty: intermediate\n  attribution: Strategy inspired by gopfan2, powered by DFlow\n  primaryEnv: SIMMER_API_KEY\n  envVars:\n    - name: SIMMER_API_KEY\n      required: true\n      description: \"Your Simmer SDK API key — get from simmer.markets/dashboard\"\n    - name: SOLANA_PRIVATE_KEY\n      required: true\n      description: \"Solana wallet private key (base58) for signing DFlow trades. Kalshi has no managed-wallet mode — self-custody is the only option. Store only in secured environment; never commit.\"\n---\n# Kalshi Weather Trader\n\nTrade temperature markets on Kalshi using NOAA forecast data, via DFlow on Solana.\n\n> 🚨 **Framework, not a production trading system.** Read [DISCLAIMER.md](./DISCLAIMER.md) before connecting to a wallet with real funds.\n\n> **This is a template.** The default signal is NOAA temperature forecasts — remix it with other weather APIs, different forecast models, or additional market types (precipitation, wind, etc.). The skill handles all the plumbing (market discovery, NOAA parsing, trade execution, safeguards). Your agent provides the alpha.\n\n> **Powered by DFlow.** Kalshi trades execute via DFlow's Solana-based prediction market infrastructure. KYC verification through Proof is required for buys.\n\n## When to Use This Skill\n\nUse this skill when the user wants to:\n- Trade weather markets on Kalshi (not Polymarket)\n- Set up automated temperature trading on Kalshi\n- Check their Kalshi weather trading positions\n- Configure trading thresholds or locations\n\n## Setup Flow\n\nWhen user asks to install or configure this skill:\n\n1. **Install the Simmer SDK**\n   ```bash\n   pip install simmer-sdk\n   ```\n\n2. **Ask for Simmer API key**\n   - They can get it from simmer.markets/dashboard → SDK tab\n   - Store in environment as `SIMMER_API_KEY`\n\n3. **Ask for Solana private key** (required for live trading)\n   - This is the base58-encoded secret key for their Solana wallet\n   - Store in environment as `SOLANA_PRIVATE_KEY`\n   - The SDK uses this to sign transactions client-side automatically\n\n4. **Verify KYC**\n   - Required for Kalshi buys (not sells)\n   - Complete at [dflow.net/proof](https://dflow.net/proof)\n   - Check status: `curl \"https://api.simmer.markets/api/proof/status?wallet=YOUR_SOLANA_ADDRESS\"`\n\n5. **Fund the wallet**\n   - SOL on Solana mainnet for transaction fees (~0.01 SOL)\n   - USDC on Solana mainnet for trading capital\n\n6. **Ask about settings** (or confirm defaults)\n   - Entry threshold: Upper bound for when to buy (default 15¢)\n   - Min entry price: Lower bound to skip lottery-ticket mids (default 0 = off)\n   - Min hours to resolve: Skip ent"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7axnp7bzqsf5fkx0z8px7han7zyq1x\",\n  \"slug\": \"kalshi-weather-trader\",\n  \"version\": \"1.0.12\",\n  \"publishedAt\": 1789009374292\n}"},{"path":"CHANGELOG.md","content":"# Changelog — kalshi-weather-trader\n\n## [1.0.12] - 2026-09-09\n\n### Added\n- `SIMMER_WEATHER_MIN_ENTRY_PRICE` (default `0` = off). Rejects entries below this mid so a raised `ENTRY_THRESHOLD` cannot buy lottery tickets.\n- `SIMMER_WEATHER_MIN_HOURS_TO_RESOLVE` (default `2`). Env override for the entry time-decay safeguard. Entry-only: exits keep the original 2h floor.\n\n### Fixed\n- The local entry price band now runs before context and trend network calls, so below-floor candidates are rejected with zero context/history requests.\n\n## [1.0.8] - 2026-05-23\n\n### Fixed\n- `check_exit_opportunities` no longer crashes with `TypeError: argument of type 'NoneType' is not iterable` when a position's `sources` field is `None` (e.g. paper-mode entries). Changed `pos.get(\"sources\", [])` → `pos.get(\"sources\") or []` so explicit `None` values are coalesced to `[]`. Closes SIM-2371.\n\n## [1.0.7] - prior\n- See git history."},{"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.\n\nSome markets also resolve by gapping rather than decaying. Weather\ntemperature buckets are the clearest case: the losing side can sit near\nyour entry, then jump straight to about 0 at resolution, with no\nintermediate price for a percentage stop to trigger on and no liquidity\nto exit into. On these markets a stop-loss cannot cap your loss\nregardless of the monitor cycle.\n\nPosition sizing is the only reliable risk control on these markets. Set\nit conservatively, assuming the full position can go to zero.\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\nTrade Kalshi weather markets using NOAA forecasts via the Simmer SDK and DFlow on Solana.\n\nThis skill is for demonstration purposes and not for production usage.\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 developers and traders use this skill to configure, dry-run, and optionally execute automated Kalshi temperature-market trades driven by NOAA forecast signals. It also helps inspect account balances, open weather positions, and trading thresholds.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The security summary says live-trading safeguards can fail open.\n\nMitigation: Keep dry-run mode enabled until behavior is verified, and do not rely on advertised safeguards unless the fail-open behavior is fixed or acceptable for the user's risk tolerance.\n\nRisk: The skill handles wallet-signing credentials and can place real on-chain orders.\n\nMitigation: Use a dedicated low-balance wallet, keep the Solana private key only in secured environment storage, and avoid connecting funds beyond the amount intended for this strategy.\n\nRisk: The security guidance notes an unpinned Simmer SDK dependency.\n\nMitigation: Pin or review the simmer-sdk version before live use, especially before installing updates or enabling scheduled runs.\n\nRisk: Automated weather-market trades can lose value quickly near resolution and may not be recoverable.\n\nMitigation: Use conservative position sizing, start with paper or simulated runs, and review market resolution timing before enabling live execution.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/simmer/skills/kalshi-weather-trader)\n- [Simmer API](https://api.simmer.markets)\n- [Simmer dashboard](https://simmer.markets/dashboard)\n- [NOAA Weather API](https://api.weather.gov)\n- [DFlow Proof KYC](https://dflow.net/proof)\n\n## Skill Output:\n\n**Output Type(s):** [text, JSON, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown with inline shell commands and optional JSON status reports]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Dry-run is the default; live trading requires explicit --live execution and configured credentials.]\n\n## Skill Version(s):\n\n1.0.12 (source: server evidence, frontmatter, changelog released 2026-09-09)\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."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1918,"uniquenessScore":43,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T20:36:08.224Z","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-09T20:36:08.224Z","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-10T08:10:41.683Z","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"}]}}}