create-skill
Skill785 starsChanged 12 days agoMITView on GitHub
Generate a complete new skill from a one-line prompt and ship it as a PR
- Commits and pushes
We split this skill into the rules it gives an agent
19 rules. 0 are common, 6 are distinctive, and 13 are very specific to this project.
0
Common
Most of the 125 edited versions we read keep these.
6
Distinctive
This author's own choices. Worth a look.
13
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Very specific: line 16
If ${var} is empty, exit CREATE_SKILL_NO_VAR:
- Very specific: line 44
Read the top 3 candidates fully.
- Distinctive: line 61
If the secret has no graceful fallback, the generated skill's step 1 must do:
- Very specific: line 73
Model: - default claude-sonnet-5-5.
- Distinctive: line 117
Every link clickable (full URLs, not placeholders).
- Very specific: line 119
Use only ${var} and ${today} template variables — no other invented variables.
- Distinctive: line 120
No TODOs, no placeholders, no "fill in later".
- Very specific: line 138
No literal substring matches: TODO, FIXME, XXX, placeholder, fill in, lorem, <your-, your_api_key_here, example.com.
- Very specific: line 139
Every ${...} template variable resolves to ${var} or ${today}.
- Very specific: line 148
Add model: "claude-haiku-5-5" (or "claude-opus-5-5") if chosen in step 5.
- Very specific: line 149
Add var: "" if the skill takes a default var.
- Distinctive: line 150
Add a brief trailing comment if the name doesn't make purpose obvious.
- Distinctive: line 151
Place near related skills (crypto with crypto, content with content, etc.).
- Very specific: line 154
Verify YAML still parses after the edit.
- Very specific: line 161
Read output/.dry-run/$name.json.
- Very specific: line 162
Put the verdict JSON in the PR body under a ## Dry-run section either way, so a reviewer sees the gate ran.
- Very specific: line 171
If this run can't execute a step (e.g.
- Distinctive: line 263
Never: commit a generated skill directly to main.
- Very specific: line 265
Never: add an API key/secret to the workflow that isn't already there.
“Common” is measured: kept by at least 6 in 10 of the 125 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
${var} — A natural-language description of the skill to create. Required. Example:
"monitor Hacker News for AI papers and send a summary"or"track gas prices on Ethereum and alert when below 10 gwei".
<!-- autoresearch: variation B — sharper output via PR-first workflow + quality enforcement + exit taxonomy + new-secret guard -->If ${var} is empty, exit CREATE_SKILL_NO_VAR:
./notify "create-skill aborted: var empty — pass a description e.g. \"monitor X for Y\""Then stop.
Today is ${today}. Your task is to generate a complete, production-ready skill from ${var}, score it against a quality bar, and ship it as a PR — never commit directly to main.
Steps
Parse the request. Extract from
${var}:- Core action verb (monitor, fetch, generate, analyze, alert, track, scan, etc.)
- Data source(s) — APIs, websites, RSS, on-chain, GitHub, etc.
- Output format — notification, article, file, PR, dashboard, etc.
- Configurable parameter(s) the new skill will accept via its own
${var} - Suggested cadence (daily, hourly, weekly, on-demand)
Save a one-paragraph structured request summary; you'll use it in the PR body.
- Duplicate detection (deep — not just
ls). Find functional overlap, not just name collision.
Read the top 3 candidates fully. For each, judge: does it already do this? Could the request be solved by running an existing skill with a differentkeywords=$(echo "${var}" | tr '[:upper:]' '[:lower:]' | grep -oE '[a-z]{4,}' \ | grep -vE '^(send|with|from|that|this|when|each|into|over|some|like|just|than|then|also|will|have|been|using|monitor|track|fetch|alert)$' \ | sort -u) for kw in $keywords; do grep -liE "$kw" skills/*/SKILL.md | head -5 donevar=?- Near-duplicate exists → exit
CREATE_SKILL_DUPLICATE. Notify with the existing skill name and a one-line suggestion ("use existing{skill}withvar={...}instead"). Stop. - Functionally adjacent → design the new skill to complement (different angle/cadence/output). Document the boundary in the PR body.
- Near-duplicate exists → exit
Research the data sources. For every API or data source the new skill needs:
- WebSearch for the current API documentation. Cross-check against a secondary source when feasible (a recent GitHub repo using it, an official changelog, or a Stack Overflow answer dated ≥2026) to confirm the endpoint isn't deprecated.
- WebFetch the canonical docs URL — record it as a comment in the SKILL.md and in the PR body's "Sources researched" section.
- Identify exact endpoints, required headers, auth scheme, response schema, and rate limits.
- Note every required environment variable / API key.
- Determine fallback strategy when an optional API key isn't set (WebSearch / WebFetch / cached data / public endpoint).
Research bar (soft): at least one confirmed source URL or exemplar (a working docs page or a public repo using the API). If none, do not hard-abort — log
CREATE_SKILL_INSUFFICIENT_RESEARCH, ask the operator via./notifywith what was tried and why each source failed, and stop. The operator can re-dispatch with a clearer prompt or a source hint.New-secret guard. Secrets values are never inspectable from the workflow — only names are listed. Use
gh api repos/:owner/:repo/actions/secrets --jq '.secrets[].name'to read the names of secrets already configured (this endpoint returns names only, never values). Cross-reference with env-var usage inaeon.ymland existing workflows. For each env var the new skill needs:- Name present → continue.
- Name missing → record as
NEW_SECRET_REQUIRED. The generated skill must gracefully degrade or skip when the secret is absent (no hard crash). Add a### Required secretssection to the PR body listing what the operator must add to GitHub Actions secrets before enabling.
If the secret has no graceful fallback, the generated skill's step 1 must do:
if [ -z "$VAR" ]; then ./notify "{skill} skipped: VAR not set"; exit 0; fi- Design the skill. Decide:
- Skill name — lowercase, hyphenated, 2-3 words max (e.g.,
gas-alert,hn-papers). Must not collide with any existing entry underskills/. - Description — one sentence, starts with a verb, ≤90 chars.
- Tags — pick from:
content,crypto,dev,meta,news,research,social. Max 3. - Variable behavior — what
${var}controls; what happens when empty (sane default OR clean abort with notify). - Steps — 4-8 numbered, following the standard pattern: read context → fetch/search → process/analyze → write output → log → notify.
- Schedule suggestion — choose a cron slot. Read existing schedules in
aeon.yml; avoid co-scheduling at the same minute as heavy skills (article, repo-scanner, deep-research, telegram-digest) unless the new skill is lightweight (<30s expected). Prefer a:30minute offset if the natural hour is already crowded. - Model - default
claude-sonnet-5-5. Pickclaude-haiku-5-5if the skill is high-frequency aggregation/digestion (cost optimization), orclaude-opus-5-5if it needs the strongest reasoning. Document the choice in the PR body. - Category - the pack the skill joins. Pick exactly one of
coreevolutionbasicsdevcryptoproductivity(the setscripts/check-skill-categories.shenforces; anything else, or a missing category, fails CI). For a new user-facing skill that is usuallybasics,dev,crypto, orproductivity. Seedocs/skill-packs.md.
- Skill name — lowercase, hyphenated, 2-3 words max (e.g.,
Write the SKILL.md draft at
skills/{skill-name}/SKILL.mdwith this exact structure:--- name: {skill-name} description: {One-sentence description starting with a verb} metadata: title: {Display Name} category: {category} var: "" tags: - {tag} --- > **${var}** — {What the variable controls}. {If-empty behavior}. Today is ${today}. {One sentence describing the task.} ## Steps 1. **{Step title}.** {Specific instructions — endpoints, commands, formats.} 2. **{Step title}.** {More instructions. Code blocks for curl/bash when relevant.} ... N-1. **Log.** Append to `memory/logs/${today}.md`: - Skill: {skill-name} - What was done and key outputs N. **Notify.** Send via `./notify`: {Output format template — specify ≤4000 chars, clickable URLs} ## Network note {How this skill reaches the network — ./secretcurl with an {ENV_NAME} placeholder for auth'd APIs, gh api for GitHub, curl + WebFetch fallback for public}Hard rules for the generated content:
- Complete
curlcommands with proper headers and URL encoding (no pseudo-code). jqparsing for JSON APIs.- Notification character limit explicitly stated (under 4000 chars total).
- Every link clickable (full URLs, not placeholders).
- Fallback behavior defined for every optional secret.
- Use only
${var}and${today}template variables — no other invented variables. - No TODOs, no placeholders, no "fill in later".
- Mandatory
## Network notesection (accurate model — see the## Network notein this skill for the canonical wording; there is no network sandbox).
- Complete
Quality enforcement (self-edit pass). Score the draft 1-5 across:
Criterion What to check Frontmatter complete name,category,description,var,tagspresent and well-formedVar doc Single >block-quote line; if-empty behavior definedAPI calls complete Curl + headers + jq, not pseudo-code Fallback behavior Graceful degradation for every optional secret Output spec Char limits, clickable URLs, format template explicit Network note Present and matches the auth pattern of the API used ( ./secretcurlfor auth'd,gh apifor GitHub, WebFetch fallback for public)Any criterion <4 → rewrite that section once. Still <4 after one rewrite → exit
CREATE_SKILL_VALIDATION_FAILEDwith a notify listing failed criteria. Do not ship a low-quality skill.Post-write validation. Re-read the SKILL.md from disk and verify:
- Frontmatter YAML is parseable; required keys present.
- No literal substring matches:
TODO,FIXME,XXX,placeholder,fill in,lorem,<your-,your_api_key_here,example.com. - Every
${...}template variable resolves to${var}or${today}. - At least one
./notifyinvocation appears in the body. - At least one
memory/logs/${today}.mdwrite appears. ## Network notesection exists.
Any failure → delete the partial file and any other writes, exit
CREATE_SKILL_VALIDATION_FAILEDwith a notify listing the failed checks. No partial state.Register in
aeon.yml. Insert the new skill in the appropriate time-slot section:- Format:
{skill-name}: { enabled: false, schedule: "{suggested_cron}" } - Add
model: "claude-haiku-5-5"(or"claude-opus-5-5") if chosen in step 5. - Add
var: ""if the skill takes a default var. - Add a brief trailing comment if the name doesn't make purpose obvious.
- Place near related skills (crypto with crypto, content with content, etc.).
- Always
enabled: false. Operator decides when to turn it on.
Verify YAML still parses after the edit. If parsing fails, revert the change and exit
CREATE_SKILL_VALIDATION_FAILED.- Format:
9b. Dry-run gate (blocks a broken generated skill from auto-merge). Before opening the PR, execute the new skill once with synthetic secrets, so a generated skill never reaches production having only ever run with real credentials:
bash
DRYRUN_VERDICT="output/.dry-run/$name.json" bash scripts/dry-run.sh run "$name" || true
- The script self-checks the SKILL_DRYRUN repo variable (default on) and returns a skipped verdict when it is 0.
- Read output/.dry-run/$name.json. passed: true (or skipped: true) means continue. passed: false means delete skills/$name/, revert the aeon.yml edit, and exit CREATE_SKILL_DRYRUN_FAILED with a notify listing the verdict reasons[]. Do not open the PR.
- Put the verdict JSON in the PR body under a ## Dry-run section either way, so a reviewer sees the gate ran.
The gate is structural (exit 0, non-empty output, no write outside the declared mode, no secret outside requires:), and no real credential is ever placed in the run's environment. It does not re-score content; the Haiku scorer already does that.
9c. Registration checklist (a new skill trips four CI gates; a red one blocks the merge). The PR must also carry:
- bash scripts/check-skill-categories.sh passing (category from step 5).
- catalog/skills.json + catalog/packs.json regenerated with bin/generate-skills-json and bin/generate-packs-json, in a separate commit after the SKILL.md commit (the catalog's sha/updated come from git history).
- An eyebrowlock.json entry for the new skill: ci-skill-integrity hard-fails any skill without one. Run eyebrow scan with the version pinned in .github/workflows/ci-skill-integrity.yml and splice only the new skill's artifact into the committed lockfile.
- node scripts/validate-readme-catalog.mjs passing (README and docs skill counts include the new skill).
- The disabled aeon.yml entry from step 9.
If this run can't execute a step (e.g. no eyebrow binary), list the missing steps under a ## Before merge heading in the PR body instead of skipping them silently.
- Open as a PR (never commit to
main).
${var}name="{skill-name}" git checkout -b create-skill/$name git add skills/$name/SKILL.md aeon.yml git commit -m "create skill: $name {one-sentence description} Generated by create-skill from var: \"{request summary, ≤80 chars}\"" git push -u origin create-skill/$name gh pr create --title "create skill: $name" --body "$(cat <<'EOF' ## Skill **Name**: `{skill-name}` **Description**: {description} **Tags**: {tags} **Schedule**: `{cron}` (disabled by default) **Model**: {model} **Var**: {var-doc} ## Request
Capture the PR URL.## Sources researched - {URL 1} - {URL 2} - {URL 3} ## Required secrets {list of NEW_SECRET_REQUIRED env vars OR "None — uses existing secrets"} ## Quality scores | Criterion | Score | |-----------|-------| | Frontmatter | X/5 | | Var doc | X/5 | | API calls | X/5 | | Fallback behavior | X/5 | | Output spec | X/5 | | Network note | X/5 | ## Trigger manually Workflow dispatch with `skill={skill-name}` and `var={example-var}`. EOF )" - Log. Append to
memory/logs/${today}.md:### create-skill - Request: {var, ≤80 chars} - Created: skills/{skill-name}/SKILL.md - Registered in aeon.yml: schedule={cron}, model={model} - Required secrets: {list or "none"} - Quality scores: F/V/A/Fb/O/N = X/X/X/X/X/X - PR: {url} - Exit: CREATE_SKILL_OK (or CREATE_SKILL_NEW_SECRET_REQUIRED) - Notify. Send via
./notify:*create-skill — {skill-name}* {one-line description} Schedule: `{cron}` (disabled by default) {Required secrets line if any} PR: {url} Trigger: dispatch skill=`{skill-name}` var=`{example}`
Exit taxonomy
| Code | When | Action |
CREATE_SKILL_OK | New skill created, validated, PR opened | Notify with PR link |
CREATE_SKILL_NEW_SECRET_REQUIRED | Same as OK plus operator must add a new secret before enabling | Notify with PR link + secret call-out |
CREATE_SKILL_NO_VAR | ${var} empty | Notify abort reason; stop |
CREATE_SKILL_DUPLICATE | Existing skill covers the request | Notify with existing-skill suggestion; stop |
CREATE_SKILL_INSUFFICIENT_RESEARCH | Couldn't confirm ≥1 working data source after WebSearch + WebFetch | Notify with what was tried; stop |
CREATE_SKILL_VALIDATION_FAILED | Quality enforcement or post-write checks failed | Delete partial files; revert aeon.yml; notify with failed criteria; stop |
CREATE_SKILL_DRYRUN_FAILED | The dry-run gate (step 9b) returned passed: false | Delete partial files; revert aeon.yml; notify with verdict reasons; do NOT open the PR; stop |
Network note
There is no network sandbox — curl works, with WebFetch as the fallback for a flaky public GET during research. For an auth'd API the new skill will call, route it through ./secretcurl with a {ENV_NAME} placeholder (the key injected via the skill's requires:), and gh api for GitHub. Irreversible side-effects (email, spend, on-chain writes, deploys) run in-run via ./secretcurl as the skill's final, fail-closed action — there is no deferred/postprocess step, and never defer a read (see CLAUDE.md).
Constraints
- Never commit a generated skill directly to
main. Always open a PR. - Never enable a generated skill in
aeon.yml(enabled: falsealways — operator decides). - Never add an API key/secret to the workflow that isn't already there. Surface as
NEW_SECRET_REQUIREDand document in the PR body. - Never ship a skill that fails validation. Aborting cleanly is always better than shipping broken.
- Never overwrite an existing
skills/{name}/SKILL.md— name collisions are blocking errors.
Other versions137 projects use a version of this.
Word for word · 3
- aaronjmars/aeon★ 776100% same
- MiroShark/miroshark-aeon★ 19100% same
- aaronjmars/miroshark-aeon★ 18100% same
Edited · 0
None found.
Wrote their own version · 134
- microsoft/vscode★ 194ksame name
- CherryHQ/cherry-studio★ 53ksame name
- videojs/video.js★ 40ksame name
- BuilderIO/agent-native★ 7.4ksame name
- stagewise-io/stagewise★ 6.8ksame name
- dotnet/skills★ 5.8ksame name
- xstongxue/best-skills★ 2.9ksame name
- Lilac-Labs/gini-agent★ 1.9ksame name
- Open-Curiosity/gini-agent★ 1.9ksame name
- zylos-ai/zylos-core★ 1.2ksame name
124 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
Used alongsideProjects with it also use review-bugbot, migrate-to-skills and 8 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
0mlkrizzz655335vSkillreview-bugbot
缺陷导向代码审查。用 Bugbot 子代理找 bug。
Also in 5 projects that use this
32103210Skillmigrate-to-skills
Convert 'Applied intelligently' Cursor rules (.cursor/rules/*.mdc) and slash commands (.cursor/commands/*.md) to Agent Skills format (.cursor/skills/). Use when you want to migrate rules or commands to skills, convert .mdc rules to SKILL.md format, or consolidate commands into the skills directory.
Also in 8 projects that use this
32103210Skillupdate-cursor-settings
Modify Cursor/VSCode user settings in settings.json. Use when you want to change editor settings, preferences, configuration, themes, font size, tab size, format on save, auto save, keybindings, or any settings.json values.
Also in 8 projects that use this
PandelisZSkillupdate-cli-config
View and modify Cursor CLI configuration settings in ~/.cursor/cli-config.json. Use when the user wants to change CLI settings, configure permissions, switch approval mode, enable vim mode, toggle display options, configure sandbox, or manage any CLI preferences.
Also in 7 projects that use this
vikneshwaran16032005-altSkillbuild-premium-website
Build a premium, animated marketing website (React + Vite + Tailwind + GSAP) for any industry. Use when the user asks to "build a website", "make a landing page for [business]", "build a marketing site", or wants a high-end animated company website. Adapts color, copy, services, and signature animation to the industry.
Also in 7 projects that use this
vikneshwaran16032005-altSkillinstantly-campaign
Create a new Instantly cold-email campaign in the proven 5-email structure of the user's top-performing campaign (~16% reply rate). Use when the user wants to launch a new outbound campaign, write a cold email sequence, create an Instantly campaign, draft outreach for a new service or niche, or set up a sales sequence.
Also in 6 projects that use this
- +1 more from vikneshwaran16032005-alt
- +1 more from 32103210
In this repository90 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- llms.txtllms.txt
- aeonSkill
- action-converterSkill
- aeon-doctorSkill
- aeon-updateSkill
- anatomySkill
- arc-studioSkill
- articleSkill
- auto-mergeSkill
- autoresearchSkill
- auto-workflowSkill
- base-mcpSkill
- bd-radarSkill
- changelogSkill
- competitor-monitorSkill
- compute-resellSkill
- cortx-reliabilitySkill
- create-proveSkill
- defi-overviewSkill
- deploy-prototypeSkill
- deploy-uni-hookSkill
- digestSkill
- distribute-tokensSkill
- executor-mcpSkill
- featureSkill
- feedback-builderSkill
- fetch-tweetsSkill
- finance-district-mcpSkill
- fleet-controlSkill
- fork-fleetSkill
- github-filing-registrySkill
- github-monitorSkill
- github-trendingSkill
- glim-mcpSkill
- heartbeatSkill
- higgsfieldSkill
- hunter-22Skill
- idea-forgeSkill
- idea-pipelineSkill
- inbox-triageSkill
- install-skillSkill
- investigation-reportSkill
- last30Skill
- memory-flushSkill
- mention-radarSkill
- miroshark-matchdaySkill
- monitor-polymarketSkill
- narrative-convergenceSkill
- narrative-trackerSkill
- onchain-monitorSkill
- operator-scorecardSkill
- pack-submitSkill
- picks-trackerSkill
- pm-manipulationSkill
- posthog-errorsSkill
- price-alertSkill
- pr-reviewSkill
- pr-triageSkill
- The first 60 shown.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

