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.
Workflow
Step 1: Understand the Strategy
Ask your human what their strategy does. They might:
- Describe a trading thesis in plain language
- Paste a tweet or thread about a strategy
- Reference an external data source (Synth, NOAA, Binance, RSS, etc.)
- Say something like "build me a bot that buys weather markets" or "create a skill for crypto momentum"
Clarify until you understand:
- Signal — What data drives the decision? (external API, market price, on-chain data, timing, etc.)
- Entry logic — When to buy? (price threshold, signal divergence, timing window, etc.)
- Exit logic — When to sell? (take profit threshold, time-based, signal reversal, or rely on auto-risk monitors)
- Market selection — Which markets? (by tag, keyword, category, or discovery logic)
- Position sizing — Fixed amount or smart sizing? What default max per trade?
Step 2: Load References
Read these files to understand the patterns:
references/skill-template.md — The canonical skill skeleton. Copy the boilerplate blocks verbatim (config system, get_client, safeguards, execute_trade, CLI args).
references/simmer-api.md — Simmer SDK API surface. All available methods, field names, return types.
If the Simmer MCP server is available (simmer://docs/skill-reference resource), prefer reading that for the most up-to-date API docs. Otherwise use references/simmer-api.md.
For real examples of working skills, read:
references/example-weather-trader.md — Pattern: external API signal + Simmer SDK trading
references/example-mert-sniper.md — Pattern: Simmer API only, filter-and-trade
Step 3: Get External API Docs (If Needed)
If the strategy uses an external data source:
- Polymarket CLOB data: If the Polymarket MCP server is available, search it for relevant endpoints (orderbook, prices, spreads). If not available, the key public endpoints are:
GET https://clob.polymarket.com/book?token_id=<token_id> — orderbook
GET https://clob.polymarket.com/midpoint?token_id=<token_id> — midpoint price
GET https://clob.polymarket.com/prices-history?market=<token_id>&interval=1w&fidelity=60 — price history
- Get
polymarket_token_id from the Simmer market response.
- Other APIs (Synth, NOAA, Binance, RSS, etc.): Ask your human to provide the relevant API docs, or web-fetch them if you have access.
Step 4: Generate the Skill
Create a complete folder on disk:
<skill-slug>/
├── SKILL.md # AgentSkills-compliant metadata + documentation
├── clawhub.json # ClawHub + automaton config
├── <script>.py # Main trading script
└── scripts/
└── status.py # Portfolio viewer (copy from references)
SKILL.md Frontmatter (AgentSkills format)
Simmer skills follow the AgentSkills open standard, making them compatible with Claude Code, Cursor, Gemini CLI, VS Code, and other skills-compatible agents.
---
name: <skill-slug>
description: <What it does + when to trigger. Max 1024 chars.>
metadata:
author: "<author>"
version: "1.0.0"
displayName: "<Human Readable Name>"
difficulty: "intermediate"
---
Rules:
name must be lowercase, hyphens only, match folder name
description is required, max 1024 chars
metadata values must be flat strings (AgentSkills spec)
- NO
clawdbot, requires, tunables, or automaton in SKILL.md — those go in clawhub.json
- Body must include: "This is a template" callout, setup flow, configuration table, quick commands, example output, troubleshooting section
clawhub.json (ClawHub + Automaton config)
{
"emoji": "<emoji>",
"requires": {
"env": ["SIMMER_API_KEY"],
"pip": ["simmer-sdk"]
},
"cron": null,
"autostart": false,
"automaton": {
"managed": true,
"entrypoint": "<script>.py"
}
}
simmer-sdk in requires.pip is required — this is what causes the skill to appear in the Simmer registry automatically
requires.env must include SIMMER_API_KEY
automaton.entrypoint must point to the main Python script
Python Script Requirements
Copy these verbatim from references/skill-template.md:
- Config system (
from simmer_sdk.skill import load_config, update_config, get_config_path)
get_client() singleton
check_context_safeguards()
execute_trade()
calculate_position_size()
- CLI entry point with standard args (
--live, --positions, --config, --set, --smart-sizing, --no-safeguards, --quiet)
Customize:
CONFIG_SCHEMA — skill-specific params with SIMMER_<SKILLNAME>_<PARAM> env vars
TRADE_SOURCE — unique tag like "sdk:<skillname>"
SKILL_SLUG — must match the ClawHub slug exactly (e.g., "polymarket-weather-trader")
- Signal logic — your human's strategy
- Market fetching/filtering — how to find relevant markets
- Main strategy function — the core loop
Step 5: Validate
Run the validator against the generated skill:
python /path/to/simmer-skill-builder/scripts/validate_skill.py /path/to/generated-skill/
Fix any FAIL results before delivering to your human.
Step 6: Publish to ClawHub
Once validated, publish the skill so it appears in the Simmer registry automatically:
npx clawhub@latest publish /path/to/generated-skill/ --slug <skill-slug> --version 1.0.0
After publishing, the Simmer sync job picks it up within 6 hours and lists it at simmer.markets/skills. No submission or approval needed — publishing to ClawHub with simmer-sdk as a dependency is all it takes.
Tell your human:
✅ Skill published to ClawHub. It will appear in the Simmer Skills Registry within 6 hours at simmer.markets/skills.
For full publishing details: simmer.markets/skillregistry.md
Hard Rules
- Always use
SimmerClient for trades. Never import py_clob_client, polymarket, or call the CLOB API directly for order placement. Simmer handles wallet signing, safety rails, and trade tracking.
- Always default to dry-run. The
--live flag must be explicitly passed for real trades.
- Always tag trades with
source=TRADE_SOURCE and skill_slug=SKILL_SLUG. SKILL_SLUG must match the ClawHub slug exactly — Simmer uses it to track per-skill volume.
- Always include safeguards — the
check_context_safeguards() function, skippable with --no-safeguards.
- Always include reasoning in
execute_trade() — it's displayed publicly and builds your reputation.
- Use stdlib only for HTTP (urllib). Don't add
requests, httpx, or aiohttp as dependencies unless your human specifically needs them. The only pip dependency should be simmer-sdk.
- Polymarket minimums: 5 shares per order, $0.01 min tick. Always check before trading.
- Include
sys.stdout.reconfigure(line_buffering=True) — required for cron/Docker/OpenClaw visibility.
get_positions() returns dataclasses — always convert with from dataclasses import asdict.
- Never expose API keys in generated code. Always read from
SIMMER_API_KEY env var via get_client().
Naming Convention
- Skill slug:
polymarket-<strategy> for Polymarket-specific, simmer-<strategy> for platform-agnostic
- Trade source:
sdk:<shortname> (e.g. sdk:synthvol, sdk:rssniper, sdk:momentum) — used for rebuy/conflict detection
- Skill slug: must match the ClawHub slug exactly (e.g.
SKILL_SLUG = "polymarket-synth-volatility") — used for volume attribution
- Env vars:
SIMMER_<SHORTNAME>_<PARAM> (e.g. SIMMER_SYNTHVOL_ENTRY)
- Script name:
<descriptive_name>.py (e.g. synth_volatility.py, rss_sniper.py)
Example: Tweet to Skill
Your human pastes:
"Build a bot that uses Synth volatility forecasts to trade Polymarket crypto hourly contracts. Buy YES when Synth probability > market price by 7%+ and Kelly size based on edge."
You would:
- Understand: Signal = Synth API probability vs Polymarket price. Entry = 7% divergence. Sizing = Kelly. Markets = crypto hourly contracts.
- Read
references/skill-template.md for the skeleton.
- Read
references/simmer-api.md for SDK methods.
- Read
references/example-weather-trader.md — closest pattern (external API signal).
- Ask your human for Synth API docs or web-fetch them.
- Generate
polymarket-synth-volatility/ with:
- SKILL.md (setup, config table, commands)
synth_volatility.py (fetch Synth forecast, compare to market price, Kelly size, trade)
scripts/status.py (copied)
- Validate with
scripts/validate_skill.py.
- Publish:
npx clawhub@latest publish polymarket-synth-volatility/ --slug polymarket-synth-volatility --version 1.0.0
1---2name: simmer-skill-builder3description: 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.4---5# Simmer Skill Builder
6
7Generate complete, runnable Simmer trading skills from a strategy description.
8
9> 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.
10
11## Workflow
12
13### Step 1: Understand the Strategy
14
15Ask your human what their strategy does. They might:
16- Describe a trading thesis in plain language
17- Paste a tweet or thread about a strategy
18- Reference an external data source (Synth, NOAA, Binance, RSS, etc.)
19- Say something like "build me a bot that buys weather markets" or "create a skill for crypto momentum"
20
21Clarify until you understand:
221. **Signal** — What data drives the decision? (external API, market price, on-chain data, timing, etc.)
232. **Entry logic** — When to buy? (price threshold, signal divergence, timing window, etc.)
243. **Exit logic** — When to sell? (take profit threshold, time-based, signal reversal, or rely on auto-risk monitors)
254. **Market selection** — Which markets? (by tag, keyword, category, or discovery logic)
265. **Position sizing** — Fixed amount or smart sizing? What default max per trade?
27
28### Step 2: Load References
29
30Read these files to understand the patterns:
31
321. **`references/skill-template.md`** — The canonical skill skeleton. Copy the boilerplate blocks verbatim (config system, get_client, safeguards, execute_trade, CLI args).
332. **`references/simmer-api.md`** — Simmer SDK API surface. All available methods, field names, return types.
34
35If the Simmer MCP server is available (`simmer://docs/skill-reference` resource), prefer reading that for the most up-to-date API docs. Otherwise use `references/simmer-api.md`.
36
37For real examples of working skills, read:
38- **`references/example-weather-trader.md`** — Pattern: external API signal + Simmer SDK trading
39- **`references/example-mert-sniper.md`** — Pattern: Simmer API only, filter-and-trade
40
41### Step 3: Get External API Docs (If Needed)
42
43If the strategy uses an external data source:
44
45- **Polymarket CLOB data:** If the Polymarket MCP server is available, search it for relevant endpoints (orderbook, prices, spreads). If not available, the key public endpoints are:
46 - `GET https://clob.polymarket.com/book?token_id=<token_id>` — orderbook
47 - `GET https://clob.polymarket.com/midpoint?token_id=<token_id>` — midpoint price
48 - `GET https://clob.polymarket.com/prices-history?market=<token_id>&interval=1w&fidelity=60` — price history
49 - Get `polymarket_token_id` from the Simmer market response.
50- **Other APIs (Synth, NOAA, Binance, RSS, etc.):** Ask your human to provide the relevant API docs, or web-fetch them if you have access.
51
52### Step 4: Generate the Skill
53
54Create a complete folder on disk:
55
56```
57<skill-slug>/
58├── SKILL.md # AgentSkills-compliant metadata + documentation
59├── clawhub.json # ClawHub + automaton config
60├── <script>.py # Main trading script
61└── scripts/
62 └── status.py # Portfolio viewer (copy from references)
63```
64
65#### SKILL.md Frontmatter (AgentSkills format)
66
67Simmer skills follow the [AgentSkills](https://agentskills.io) open standard, making them compatible with Claude Code, Cursor, Gemini CLI, VS Code, and other skills-compatible agents.
68
69```yaml
70---
71name: <skill-slug>
72description: <What it does + when to trigger. Max 1024 chars.>
73metadata:
74 author: "<author>"
75 version: "1.0.0"
76 displayName: "<Human Readable Name>"
77 difficulty: "intermediate"
78---
79```
80
81Rules:
82- `name` must be lowercase, hyphens only, match folder name
83- `description` is required, max 1024 chars
84- `metadata` values must be flat strings (AgentSkills spec)
85- NO `clawdbot`, `requires`, `tunables`, or `automaton` in SKILL.md — those go in `clawhub.json`
86- Body must include: "This is a template" callout, setup flow, configuration table, quick commands, example output, troubleshooting section
87
88#### clawhub.json (ClawHub + Automaton config)
89
90```json
91{
92 "emoji": "<emoji>",
93 "requires": {
94 "env": ["SIMMER_API_KEY"],
95 "pip": ["simmer-sdk"]
96 },
97 "cron": null,
98 "autostart": false,
99 "automaton": {
100 "managed": true,
101 "entrypoint": "<script>.py"
102 }
103}
104```
105
106- `simmer-sdk` in `requires.pip` is required — this is what causes the skill to appear in the Simmer registry automatically
107- `requires.env` must include `SIMMER_API_KEY`
108- `automaton.entrypoint` must point to the main Python script
109
110#### Python Script Requirements
111
112Copy these verbatim from `references/skill-template.md`:
113- Config system (`from simmer_sdk.skill import load_config, update_config, get_config_path`)
114- `get_client()` singleton
115- `check_context_safeguards()`
116- `execute_trade()`
117- `calculate_position_size()`
118- CLI entry point with standard args (`--live`, `--positions`, `--config`, `--set`, `--smart-sizing`, `--no-safeguards`, `--quiet`)
119
120Customize:
121- `CONFIG_SCHEMA` — skill-specific params with `SIMMER_<SKILLNAME>_<PARAM>` env vars
122- `TRADE_SOURCE` — unique tag like `"sdk:<skillname>"`
123- `SKILL_SLUG` — must match the ClawHub slug exactly (e.g., `"polymarket-weather-trader"`)
124- Signal logic — your human's strategy
125- Market fetching/filtering — how to find relevant markets
126- Main strategy function — the core loop
127
128### Step 5: Validate
129
130Run the validator against the generated skill:
131
132```bash
133python /path/to/simmer-skill-builder/scripts/validate_skill.py /path/to/generated-skill/
134```
135
136Fix any FAIL results before delivering to your human.
137
138### Step 6: Publish to ClawHub
139
140Once validated, publish the skill so it appears in the Simmer registry automatically:
141
142```bash
143npx clawhub@latest publish /path/to/generated-skill/ --slug <skill-slug> --version 1.0.0
144```
145
146After publishing, the Simmer sync job picks it up within 6 hours and lists it at [simmer.markets/skills](https://simmer.markets/skills). No submission or approval needed — publishing to ClawHub with `simmer-sdk` as a dependency is all it takes.
147
148Tell your human:
149> ✅ Skill published to ClawHub. It will appear in the Simmer Skills Registry within 6 hours at simmer.markets/skills.
150
151For full publishing details: [simmer.markets/skillregistry.md](https://simmer.markets/skillregistry.md)
152
153## Hard Rules
154
1551. **Always use `SimmerClient` for trades.** Never import `py_clob_client`, `polymarket`, or call the CLOB API directly for order placement. Simmer handles wallet signing, safety rails, and trade tracking.
1562. **Always default to dry-run.** The `--live` flag must be explicitly passed for real trades.
1573. **Always tag trades** with `source=TRADE_SOURCE` and `skill_slug=SKILL_SLUG`. `SKILL_SLUG` must match the ClawHub slug exactly — Simmer uses it to track per-skill volume.
1584. **Always include safeguards** — the `check_context_safeguards()` function, skippable with `--no-safeguards`.
1595. **Always include reasoning** in `execute_trade()` — it's displayed publicly and builds your reputation.
1606. **Use stdlib only** for HTTP (urllib). Don't add `requests`, `httpx`, or `aiohttp` as dependencies unless your human specifically needs them. The only pip dependency should be `simmer-sdk`.
1617. **Polymarket minimums:** 5 shares per order, $0.01 min tick. Always check before trading.
1628. **Include `sys.stdout.reconfigure(line_buffering=True)`** — required for cron/Docker/OpenClaw visibility.
1639. **`get_positions()` returns dataclasses** — always convert with `from dataclasses import asdict`.
16410. **Never expose API keys in generated code.** Always read from `SIMMER_API_KEY` env var via `get_client()`.
165
166## Naming Convention
167
168- Skill slug: `polymarket-<strategy>` for Polymarket-specific, `simmer-<strategy>` for platform-agnostic
169- Trade source: `sdk:<shortname>` (e.g. `sdk:synthvol`, `sdk:rssniper`, `sdk:momentum`) — used for rebuy/conflict detection
170- Skill slug: must match the ClawHub slug exactly (e.g. `SKILL_SLUG = "polymarket-synth-volatility"`) — used for volume attribution
171- Env vars: `SIMMER_<SHORTNAME>_<PARAM>` (e.g. `SIMMER_SYNTHVOL_ENTRY`)
172- Script name: `<descriptive_name>.py` (e.g. `synth_volatility.py`, `rss_sniper.py`)
173
174## Example: Tweet to Skill
175
176Your human pastes:
177> "Build a bot that uses Synth volatility forecasts to trade Polymarket crypto hourly contracts. Buy YES when Synth probability > market price by 7%+ and Kelly size based on edge."
178
179You would:
1801. Understand: Signal = Synth API probability vs Polymarket price. Entry = 7% divergence. Sizing = Kelly. Markets = crypto hourly contracts.
1812. Read `references/skill-template.md` for the skeleton.
1823. Read `references/simmer-api.md` for SDK methods.
1834. Read `references/example-weather-trader.md` — closest pattern (external API signal).
1845. Ask your human for Synth API docs or web-fetch them.
1856. Generate `polymarket-synth-volatility/` with:
186 - SKILL.md (setup, config table, commands)
187 - `synth_volatility.py` (fetch Synth forecast, compare to market price, Kelly size, trade)
188 - `scripts/status.py` (copied)
1897. Validate with `scripts/validate_skill.py`.
1908. Publish: `npx clawhub@latest publish polymarket-synth-volatility/ --slug polymarket-synth-volatility --version 1.0.0`