554/better-skill-creator/SKILL.md
Create high-quality skills that reliably trigger, complete workflows cleanly, and work well with other skills. Use when the user asks to build a new capability, integrate a new API, or extend the system with a repeatable workflow. Improvement on the default skill-creator with use-case design, behavioral testing, and success criteria.
npx skillsauth add starchild-ai-agent/community-skills @554/better-skill-creatorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You build skills that actually work — not just valid YAML, but skills that trigger reliably, complete their workflows without hand-holding, and compose well with other skills.
The fundamental insight from Anthropic's skill design guide: the description is the skill's interface to the agent. A skill that doesn't trigger is a skill that doesn't exist. A skill that triggers for the wrong things causes confusion. Get the description right first — everything else follows.
Before writing a single line of SKILL.md, fill out this canvas. It forces clarity about what the skill actually does and prevents writing instructions for a skill that was never well-defined.
Skill Name: _______________
Use Case 1: _______________
Trigger phrase: "..."
Steps: 1. → 2. → 3.
Expected output: _______________
Use Case 2: _______________
Trigger phrase: "..."
Steps: 1. → 2. → 3.
Expected output: _______________
Dependencies:
- API keys needed: _______________
- Python packages: _______________
- External services: _______________
Success looks like:
- Agent triggers on ___% of relevant queries
- User doesn't need to re-prompt to get _______________
- Works independently when combined with: _______________
If you can't fill in at least 2 use cases with concrete trigger phrases, the skill isn't ready to build yet. Ask the user to clarify.
scripts/ executed via bashpython skills/skill-creator/scripts/init_skill.py my-new-skill --path ./skills
With resource directories:
python skills/skill-creator/scripts/init_skill.py api-helper --path ./skills --resources scripts,references
The description is the only part of your skill that's always in context. It's what the agent reads to decide whether to activate the skill. Two requirements:
Formula: [What it does] + [Use when <specific trigger conditions>]
Examples:
# Too vague — agent won't know when to use this
"Trading utilities and market analysis tools."
# Good — clear what/when
"Fetch live and historical crypto prices, on-chain metrics, and sentiment
scores. Use when the user asks about price, volume, market cap, trend, or
wants data to support a trade thesis."
# Good — multi-scenario trigger
"Generate TradingView-style candlestick charts with indicators. Use when
the user wants a visual chart, price visualization, or technical analysis
plot."
Hard limits:
< > — they break the skill loaderclaude, anthropic, or any Anthropic product nameTrigger failure modes:
---
name: skill-name # lowercase, alphanumeric + hyphens, 2-64 chars
version: 1.0.0 # semver — required for market publishing
description: "..." # trigger text — see formula above
author: your-name # for market publishing
tags: [tag1, tag2] # for discoverability
metadata:
starchild:
emoji: "🔧"
skillKey: skill-name
requires:
env: [API_KEY_NAME] # env vars that must be set
bins: [python3] # binaries that must ALL exist
anyBins: [curl, wget] # binaries where ANY ONE is sufficient
install:
- kind: pip
package: pandas
- kind: apt
package: curl
bins: [curl]
user-invocable: true
---
| Field | Required | Notes |
|-------|----------|-------|
| name | ✅ | lowercase hyphen-case, 2-64 chars |
| version | ✅ for publishing | semver, immutable once published |
| description | ✅ | trigger text — this is the skill's interface |
| author | for publishing | your name |
| tags | for publishing | array of strings |
| emoji | no | display in skill list |
| requires.env | no | fails gracefully if missing |
| requires.bins | no | ALL must exist |
| requires.anyBins | no | ANY ONE must exist |
| user-invocable | no | allow /command style invocation (default: true) |
Match the body structure to the skill's nature. Don't force workflows onto knowledge skills or vice versa.
| Pattern | Best for | Example | |---------|----------|---------| | Workflow-based | Sequential processes | charting: fetch → configure → render → serve | | Task-based | User-driven, multiple entry points | trading: "analyze" / "compare" / "check sentiment" | | Reference/guidelines | Rules, frameworks, decision trees | strategy: core principles, when to do X vs Y | | Capabilities-based | Tool groupings | market-data: price tools / derivatives tools / social tools |
Write for the agent, not the user. Direct voice.
Bad: "This skill can be used to generate charts when the user requests them."
Good: "You generate charts. Fetch OHLCV data, configure the chart layout, render via the charting script, and serve with preview_serve."
What to include:
What to leave out:
If the skill involves any on-chain operations (transactions, approvals, swaps, bridging, signing):
## Prerequisites — Wallet Policy
Before executing any [operation], the wallet policy must be active.
Load the **wallet-policy** skill and propose the standard wildcard
policy (deny key export + allow `*`). This covers all [skill-name]
operations across all chains.
Before finalizing: does this skill assume it's the only capability active? It shouldn't.
Define these before testing, not after. Write them into the skill's comments or your notes.
Quantitative (aim for these thresholds):
Qualitative:
python skills/skill-creator/scripts/validate_skill.py ./skills/my-new-skill
This checks: frontmatter structure, required fields, TODO placeholders, body length, field placement.
Run 3+ test cases from your Use-Case Canvas and evaluate against your success criteria:
Test: "[exact user phrase from canvas]"
Expected: skill triggers, completes workflow X
Actual: _______________
Pass/Fail: ___
Common failure modes and fixes:
| Symptom | Likely cause | Fix | |---------|-------------|-----| | Skill never triggers | Description too vague | Add "Use when..." with exact trigger phrases | | Triggers for wrong requests | Description too broad | Narrow trigger conditions, add "NOT for..." | | Workflow stops mid-way | Missing decision branch | Add the missing case to the body | | Works first run, fails second | Session state assumption | Remove stateful assumptions from instructions | | Conflicts with another skill | Overlapping descriptions | Differentiate with specific trigger conditions |
Edge cases to test:
skill_refresh()
Then run one final test from your Use-Case Canvas to confirm the skill loads, triggers, and completes.
my-skill/
├── SKILL.md # Frontmatter + core instructions (< 500 lines)
├── scripts/ # Fragile operations: exact API calls, rendering pipelines
│ └── render.py # Executed via bash, never loaded into context
├── references/ # Detailed docs loaded on demand
│ └── api-guide.md # Only read when agent explicitly needs it
└── assets/ # Templates, images, config files used in output
└── template.json # Never loaded into context
Context budget:
scripts/: executed, not read — no context costreferences/: read on demand — only when explicitly neededassets/: never in context — output artifacts onlyrequires.env and env varsWhen the skill is ready to share, publish it via the skill-installer workflow.
Pre-publish checklist:
name field: lowercase hyphen-case, 2-64 charsversion field: semver (e.g. 1.0.0) — immutable once publisheddescription passes the formula test (what + when)author and tags set[TODO] placeholders in body< > in descriptionPublish:
# 1. Get OIDC token
TOKEN=$(curl -s --unix-socket /.fly/api \
-X POST -H "Content-Type: application/json" \
"http://localhost/v1/tokens/oidc" \
-d '{"aud": "skills-market-gateway"}')
# 2. Build and publish
SKILL_DIR="./skills/my-skill"
GATEWAY="https://skills-market-gateway.fly.dev"
PAYLOAD=$(python3 -c "
import os, json
files = {}
for root, dirs, fnames in os.walk('$SKILL_DIR'):
for f in fnames:
full = os.path.join(root, f)
rel = os.path.relpath(full, '$SKILL_DIR')
with open(full) as fh:
files[rel] = fh.read()
print(json.dumps({'files': files}))
")
curl -s -X POST "$GATEWAY/skills/publish" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d "$PAYLOAD" | python3 -m json.tool
Version is immutable after publishing — bump to 1.0.1 before republishing.
tools
TQX (tqx.trade) HK/US stock quant workflow via tqx-cli: cross-sectional factor analysis, event-driven strategy backtests on the panda_backtest engine, and agent-driven automated paper trading. Use when the user wants to run factor IC/IR analysis, backtest a Python trading strategy on Hong Kong or US stocks, or set up agent-automated trading (e.g. "backtest a moving-average strategy on AAPL", "analyze a momentum factor on HK stocks", "let the agent trade my paper account").
tools
中学物理实验教学参赛方案套件。包含四个完整实验(单摆测g、声悬浮测声速、向心力定量演示仪、电磁阻尼定量研究),每套含固件源码、3D打印图纸、教学PPT、教学文稿、采购清单、调试手册、视频分镜脚本、模拟器。Use when a teacher/student needs a complete, classroom-ready physics experiment package for competition or teaching.
development
End-to-end blog management for AI agents. Write, import, build, preview, and publish articles using the blog template. Covers draft workflow, article import, SEO, OG images, and deployment.
development
ESP8266/ESP32 + 磁簧开关/霍尔传感器 单摆测重力加速度实验套件。 硬件搭建→固件烧录→数据采集→Web仪表盘→g值计算→教学文档,一站式完成。 Use when the user wants to build a pendulum g-measurement experiment, measure gravity with a micro-controller, or needs a complete physics experiment package with hardware + firmware + dashboard + teaching materials.