simmer-skill-builder
Generate complete, installable OpenClaw trading skills from natural language strategy descriptions. Use when your human wants to create a new trading strategy, build a bot, generate a skill, automate a trade idea, turn a tweet into a strategy, or asks "build me a skill that...". Produces a full skill folder (SKILL.md + Python script + config) ready to install and run. Skill: simmer-skill-builder Owner: simmer Summary: Generate complete, installable OpenClaw trading skills from natural language strategy descriptions. Use when your human wants to create a new trading strategy, build a bot, generate a skill, automate a trade idea, turn a tweet into a strategy, or asks "build me a skill that...". Produces a full skill folder (SKILL.md + Python script + config) ready to install and run
Rank
62
Safety
84
Downloads
2.7k
Updated
Oct 9, 2026
Version
1.3.14
Source
CLAWHUB
About
What it does, and when to use it.
Capability contract not published. No trust telemetry is available yet. 2.7K downloads reported by the source. Last updated 10/9/2026.
Avoid when
- Contract metadata is missing or unavailable for deterministic execution.
Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing
Public facts
Every fact links back to the source it came from.
- Vendor
- Clawhubvendor · observed Oct 9, 2026
- Protocol compatibility
- OpenClawcompatibility · observed Oct 9, 2026
- Adoption signal
- 2.7K downloadsadoption · observed Oct 9, 2026
- Latest release
- 1.3.14release · observed Sep 30, 2026
- Handshake status
- UNKNOWNsecurity
Install and run
Setup complexity: low.
clawhub skill install s17eez0vajry6hjb97y9mbtv2s85wekv:simmer-skill-builder- Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.
- Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.
Contract: missing
curl -s "https://www.xpersona.co/api/v1/agents/clawhub-simmer-simmer-skill-builder/snapshot"
Documentation
CLAWHUB
153,899 characters of source documentation, loaded on request.
Extracted files
5 files captured from the source.
SKILL.md
--- name: simmer-skill-builder description: Generate complete, installable OpenClaw trading skills from natural language strategy descriptions. Use when your human wants to create a new trading strategy, build a bot, generate a skill, automate a trade idea, turn a tweet into a strategy, or asks "build me a skill that...". Produces a full skill folder (SKILL.md + Python script + config) ready to install and run. metadata: author: Simmer (@simmer_markets) version: "1.3.14" displayName: Simmer Skill Builder difficulty: beginner --- # Simmer Skill Builder Generate complete, runnable Simmer trading skills from a strategy description. > You are building an OpenClaw skill that trades prediction markets through the Simmer SDK. The skill you generate will be installed into your skill library and run by you — it must be a complete, self-contained folder that works out of the box. Use this skill when a human has a rough trading idea, a bounty brief, or a strategy thread and wants a deterministic skill they can validate, publish, and run. The best output is not just a clever prompt: it is a folder with bounded trading logic, explicit config, dry-run defaults, and enough docs for another builder to remix. ## Workflow ### Step 1: Intake and Triage #### 1a. Detect input type Your human's input falls into one of two modes: - **Conversational** (short description, thesis statement, "build me a bot that...") → go to 1b - **Pasted post / campaign brief** (long text >500 chars, contains code blocks, threshold numbers, or reads like an X thread, blog post, bounty, or World Cup strategy idea) → go to 1c #### 1b. Conversational intake Ask your human to clarify until you understand these five parameters: 1. **Signal** — What data drives the decision? (external API, market price, on-chain data, LLM probability estimate, timing, etc.) 2. **Entry logic** — When to buy? (price threshold, signal divergence, edge %, timing window, etc.) 3. **Exit logic** — When to sell? (take profit, time-based, signal reversal, or rely on auto-risk monitors — if unclear, default to auto-risk monitors but confirm with human) 4. **Market selection** — Which markets? (by tag, keyword, category, venue, volume filter, resolution window, or discovery logic) 5. **Position sizing** — Fixed amount or smart sizing? What Kelly fraction? What bankroll-% cap? What order type (market or limit)? #### 1c. From-post extraction When the human pastes a strategy post or campaign brief, extract — don't ask first. The post often contains the strategy shape already. Ask follow-ups only after you have separated what is explicit from what is missing. **Capture the author handle.** If the post is the strategy author's own (an X thread, a quant write-up), note their handle and source URL — you'll set `metadata.simmer.credit` so the published skill is attributed "via @them" (see the frontmatter section). Confirm the handle with the human before crediting; a pasted thread isn't always the author's
_meta.json
{
"ownerId": "kn7axnp7bzqsf5fkx0z8px7han7zyq1x",
"slug": "simmer-skill-builder",
"version": "1.3.14",
"publishedAt": 1790752680784
}references/example-llm-oracle.md
# Example: LLM Probability Oracle
Agent-as-oracle pattern. The agent provides probability estimates using its own LLM capability; the Python script handles deterministic math (bias correction, Kelly sizing, trade execution). No LLM SDK dependency needed — the agent IS the LLM.
This pattern is common in KOL strategy posts where the strategy uses Claude/GPT as a "probability engine" to estimate true probabilities for prediction markets.
## How it works
1. **SKILL.md body** instructs the agent on the calibration approach (reference-class framing, structured output, confidence gates)
2. **Agent evaluates** each candidate market using its own reasoning, producing a probability estimate + confidence level
3. **Python script receives** the estimate and applies deterministic gates: bias correction → Kelly sizing → position cap → limit order execution
The agent provides the intelligence. The script provides the math. Different agent runtimes (GPT-5.5, Claude, Qwen) each apply the calibration with their own strengths.
## SKILL.md body (agent instructions section)
The generated SKILL.md should include a section like this in its body, after the setup instructions:
```markdown
## How to evaluate markets
For each candidate market that passes the scan filters, evaluate it using
reference-class forecasting. Produce a structured assessment:
### Calibration approach
1. Identify the **reference class**: what category of event is this? (election,
crypto price, sports, weather, geopolitical). What is the historical base rate
for this class of outcome?
2. Apply **base-rate anchoring**: start from the base rate, then adjust based on
the specific circumstances of this market. Weight base rates over narrative.
3. Estimate **true probability** as a float between 0.03 and 0.97. Never output
probabilities outside this range — extreme confidence is almost always wrong
in prediction markets.
4. Assess **confidence**: "high" (strong base-rate data, well-understood domain),
"medium" (decent data but some uncertainty), "low" (speculative, limited data).
5. Identify the **edge direction**: compare your probability to the market price.
If your estimate is higher → edge is YES. Lower → edge is NO.
If within 5pp of market price → no actionable edge.
### Structured output
After evaluating each market, pass these values to the trading script:
- `true_probability` (float, 0.03-0.97)
- `confidence` ("high", "medium", "low")
- `edge_direction` ("YES", "NO", "NONE")
- `reasoning` (1-2 sentences explaining the key factors)
Skip markets where confidence is "low" or edge_direction is "NONE".
### Cost bounding
Evaluate at most 15 candidate markets per run. Each evaluation costs one LLM
reasoning step — unbounded scanning wastes agent compute. Apply scan filters
(volume, resolution window, price range) before evaluation, not after.
```
## Longshot bias correction table
Include this in the SKILL.md body so the agent understands the correction, and alsoreferences/example-mert-sniper.md
# Example: Mert Sniper
Pattern: **Simmer API only — filter markets by criteria, trade the edge.**
No external data source. Scans Simmer markets for near-expiry opportunities with heavily skewed odds, backs the favorite.
## SKILL.md Frontmatter
```yaml
---
name: polymarket-mert-sniper
displayName: Mert Sniper
description: Near-expiry conviction trading on Polymarket. Snipe markets about to resolve when odds are heavily skewed.
metadata: {"clawdbot":{"emoji":"<target>","requires":{"env":["SIMMER_API_KEY"],"pip":["simmer-sdk"]},"cron":null,"autostart":false,"automaton":{"managed":true,"entrypoint":"mert_sniper.py"}}}
version: "1.0.7"
published: true
---
```
## Config Schema
```python
CONFIG_SCHEMA = {
"market_filter": {"env": "SIMMER_MERT_FILTER", "default": "", "type": str},
"max_bet_usd": {"env": "SIMMER_MERT_MAX_BET", "default": 10.00, "type": float},
"expiry_window_mins": {"env": "SIMMER_MERT_EXPIRY_MINS", "default": 2, "type": int},
"min_split": {"env": "SIMMER_MERT_MIN_SPLIT", "default": 0.60, "type": float},
"max_trades_per_run": {"env": "SIMMER_MERT_MAX_TRADES", "default": 5, "type": int},
"sizing_pct": {"env": "SIMMER_MERT_SIZING_PCT", "default": 0.05, "type": float},
}
```
## Market Fetching with Tag + Text Fallback
```python
def fetch_markets(market_filter=""):
params = {"status": "active", "limit": 200}
if market_filter:
params["tags"] = market_filter
result = get_client()._request("GET", "/api/sdk/markets", params=params)
markets = result.get("markets", [])
# If tag returned nothing, try text search
if not markets and market_filter:
params.pop("tags", None)
params["q"] = market_filter
result = get_client()._request("GET", "/api/sdk/markets", params=params)
markets = result.get("markets", [])
return markets
```
## Strategy Core
```python
# 1. Fetch all active markets (optionally filtered by tag/keyword)
markets = fetch_markets(market_filter)
# 2. Filter to markets resolving within N minutes
now = datetime.now(timezone.utc)
for market in markets:
resolves_at = parse_resolves_at(market.get("resolves_at"))
minutes_remaining = (resolves_at - now).total_seconds() / 60
if 0 < minutes_remaining <= EXPIRY_WINDOW_MINS:
expiring_markets.append(market)
# 3. Check split — only trade when one side >= min_split (e.g. 60%)
price = market.get("current_probability", 0.5)
if price < MIN_SPLIT and price > (1 - MIN_SPLIT):
continue # Split too narrow
# 4. Back the favorite
if price >= MIN_SPLIT:
side = "yes"
else:
side = "no"
# 5. Safeguards, then execute
context = get_market_context(market_id)
should_trade, reasons = check_context_safeguards(context)
if should_trade:
reasoning = f"Near-expiry snipe: {side.upper()} at {price:.0%} with {mins_left}m to resolution"
result = execute_trade(market_id, side, position_size, reasoning=reasoning)
```
## Key Patterns Demonstrated
1. **No external API** — Uses only Simmreferences/example-weather-trader.md
# Example: Weather Trader
Pattern: **External API signal + Simmer SDK trading.**
Fetches NOAA temperature forecasts, compares to Polymarket weather market prices, buys underpriced buckets.
## SKILL.md Frontmatter
```yaml
---
name: polymarket-weather-trader
displayName: Polymarket Weather Trader
description: Trade Polymarket weather markets using NOAA forecasts via Simmer API.
metadata: {"clawdbot":{"emoji":"<thermometer>","requires":{"env":["SIMMER_API_KEY"],"pip":["simmer-sdk"]},"cron":null,"autostart":false,"automaton":{"managed":true,"entrypoint":"weather_trader.py"}}}
version: "1.10.1"
published: true
---
```
## Config Schema
```python
CONFIG_SCHEMA = {
"entry_threshold": {"env": "SIMMER_WEATHER_ENTRY", "default": 0.15, "type": float},
"exit_threshold": {"env": "SIMMER_WEATHER_EXIT", "default": 0.45, "type": float},
"max_position_usd": {"env": "SIMMER_WEATHER_MAX_POSITION", "default": 2.00, "type": float},
"sizing_pct": {"env": "SIMMER_WEATHER_SIZING_PCT", "default": 0.05, "type": float},
"max_trades_per_run": {"env": "SIMMER_WEATHER_MAX_TRADES", "default": 5, "type": int},
"locations": {"env": "SIMMER_WEATHER_LOCATIONS", "default": "NYC", "type": str},
}
```
## Signal: External API (NOAA)
```python
NOAA_API_BASE = "https://api.weather.gov"
def get_noaa_forecast(location):
"""Get NOAA forecast. Returns {date: {high: temp, low: temp}}."""
loc = LOCATIONS[location]
headers = {"User-Agent": "SimmerWeatherSkill/1.0", "Accept": "application/geo+json"}
# Step 1: Get grid coordinates
points_data = fetch_json(f"{NOAA_API_BASE}/points/{loc['lat']},{loc['lon']}", headers)
forecast_url = points_data["properties"]["forecast"]
# Step 2: Get forecast
forecast_data = fetch_json(forecast_url, headers)
periods = forecast_data["properties"]["periods"]
# Step 3: Parse into {date: {high, low}}
forecasts = {}
for period in periods:
date_str = period["startTime"][:10]
temp = period["temperature"]
if period["isDaytime"]:
forecasts.setdefault(date_str, {})["high"] = temp
else:
forecasts.setdefault(date_str, {})["low"] = temp
return forecasts
```
## Market Matching
```python
def parse_temperature_bucket(outcome_name):
"""Parse '32-36' or '40 or above' into (low, high) tuple."""
# "32 or below" -> (-999, 32)
# "50 or higher" -> (50, 999)
# "37-41" -> (37, 41)
...
# Match NOAA forecast to correct bucket
for market in event_markets:
bucket = parse_temperature_bucket(market["outcome_name"])
if bucket and bucket[0] <= forecast_temp <= bucket[1]:
matching_market = market
break
```
## Strategy Core
```python
# For each weather event:
# 1. Get NOAA forecast temperature
# 2. Find the market bucket that contains the forecast temp
# 3. If that bucket's price < entry_threshold (15c), BUY
# 4. If holding and price > exit_threshold (45c), SELL
if price < ENTRY_THRESHOLD:
result = executactivepieces
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
cherry-studio
AI productivity studio with smart chat, autonomous agents, and 300+ assistants.
AionUi
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!
CopilotKit
The Frontend for Agents & Generative UI. React + Angular
Machine-readable data
The same record, as JSON, for agents and crawlers.
{
"facts": [
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Clawhub",
"href": "https://clawhub.ai/simmer/skills/simmer-skill-builder",
"sourceUrl": "https://clawhub.ai/simmer/skills/simmer-skill-builder",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-09T12:21:10.245Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-simmer-simmer-skill-builder/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-simmer-simmer-skill-builder/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-10-09T12:21:10.245Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "2.7K downloads",
"href": "https://clawhub.ai/simmer/simmer-skill-builder",
"sourceUrl": "https://clawhub.ai/simmer/simmer-skill-builder",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-09T12:21:10.245Z",
"isPublic": true
},
{
"factKey": "latest_release",
"category": "release",
"label": "Latest release",
"value": "1.3.14",
"href": "https://clawhub.ai/simmer/simmer-skill-builder",
"sourceUrl": "https://clawhub.ai/simmer/simmer-skill-builder",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-09-30T07:18:00.784Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-simmer-simmer-skill-builder/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-simmer-simmer-skill-builder/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
],
"events": [
{
"eventType": "release",
"title": "Release 1.3.14",
"description": "- Added a publish confirmation script: scripts/confirm_publish.py - Updated SKILL.md to version 1.3.14 with no content changes shown beyond metadata version bump - Removed redundant file: skill-card.md",
"href": "https://clawhub.ai/simmer/simmer-skill-builder",
"sourceUrl": "https://clawhub.ai/simmer/simmer-skill-builder",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-09-30T07:18:00.784Z",
"isPublic": true
}
]
}Record generated Oct 9, 2026.
