create-better-skill
Skill1 starsChanged 7 days agoMITView on GitHub
Generates an Agent Skill through a short interview, an early draft, and a weak-point review. Use when the user asks to create or write a skill or SKILL.md, or to turn this conversation's workflow into a reusable skill. Not for editing an existing skill, instructions files, prompt files, custom agents, hooks, or MCP servers.
In this repository5 other files it gives its agents.
- bem-cssSkill
- chrome-validationSkill
- cleaner-commitsSkill
- jest-coverageSkill
- web-accessibilitySkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
18 rules. About 0 are common, 14 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈14
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 12
One theme at a time: Ask one theme per turn; batch only tightly related questions.
- Very specific: line 13
Draft early: Write a rough SKILL.md once the outcome and triggers are clear, then iterate on it together.
- Distinctive: line 32
Check the table below; ask only if genuinely ambiguous.
- Distinctive: line 43
If another primitive fits better, say so and offer that instead.
- Distinctive: line 60
Ask for the new skill name before drafting.
- Distinctive: line 61
Ask about loading and confirmation explicitly.
- Distinctive: line 62
After themes 1–2, propose 2–3 names, recommend one, and confirm before creating the folder.
- Very specific: line 82
Keep the body under ~500 lines.
- Distinctive: line 83
Write it simple and direct: short imperative instructions, no filler or repeated context.
- Very specific: line 84
Do not add shell or bash to allowed-tools unless the user explicitly accepts the risk of pre-approved terminal commands.
- Distinctive: line 85
Add an explicit confirmation before any step that changes files, deploys, sends messages, or spends money.
- Distinctive: line 86
Put attribution in frontmatter metadata:
- Distinctive: line 97
Use the scope and target host from Step 3.
- Distinctive: line 107
Use personal scope when the user asks for global/all projects.
- Distinctive: line 109
Before writing, check the target and other supported locations for the same name.
- Distinctive: line 114
Use the choice from Step 3.
- Distinctive: line 138
Ask about the 2–3 worst specifically, quoting the offending line.
- Very specific: line 142
If skills-ref is installed and the skill uses only spec fields, run skills-ref validate <skill-dir>.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Create Better Skill
Goal: the best possible SKILL.md for the user's situation. They arrive with half an idea; pull the shape out a little at a time.
Three habits:
- One theme at a time. Ask one theme per turn; batch only tightly related questions.
- Draft early. Write a rough SKILL.md once the outcome and triggers are clear, then iterate on it together.
- Explain the why. One line per recommendation so the user learns to make the next call themselves.
Step 0 — Question tool
Use the host's native question tool for anything multiple-choice — OpenCode's question, VS Code's askQuestions, Claude Code's AskUserQuestion, or any equivalent. Give 2–5 options, recommended option first, one line per description. If the tool takes one question per call, ask one; if it batches, keep the batch within one theme. Open-ended questions ("describe the workflow") are fine as plain text. Plain text is the last resort, only when no question tool exists — then use lettered options (A / B / C).
Note the host agent you are running in: it decides the default save path and supported loading fields. If the user names a different target agent, use the save and loading rules in Step 4.
Step 1 — Use the conversation if it already contains the workflow
Review the conversation before asking anything. If the user followed a multi-step workflow, checklist, or review process, extract the steps as they were actually done, the decision points, their quality bar, the tools/files involved, and when to use or not use the skill.
Propose it in one message — "You did X → Y → Z with a check at each step. Capture that as a skill?" — and once confirmed, go to Step 2 to confirm the primitive, then Step 3 to confirm the outcome, triggers, and name. Don't skip those checks.
Otherwise, go to Step 2.
Step 2 — Confirm a skill is the right primitive
Check the table below; ask only if genuinely ambiguous.
| The user wants... | Better primitive |
| Always-on guidance for most project work | Instructions (.instructions.md / AGENTS.md) |
| One focused task with inputs, run by slash command | Prompt (.prompt.md) |
| Context isolation or per-stage tool limits | Custom agent (.agent.md) |
| Deterministic enforcement at tool events | Hook (.json) |
| Integration with an external API/system | MCP server |
| An on-demand workflow, possibly with scripts/templates | Skill — you are here |
If another primitive fits better, say so and offer that instead. Don't force the request into a skill.
Step 3 — Interview
One theme per turn. Skip themes the user already answered or delegated to you — tell them what you decided and why.
| # | Theme | What you need |
| 1 | Outcome | What the skill produces. One sentence with a concrete verb, plus one real input and the output you'd accept. |
| 2 | Trigger | At least 3 phrases the user would actually type, in their vocabulary, and what the skill must not handle. |
| 3 | Shape | Checklist, multi-step workflow, reference-heavy, or script-driven? |
| 4 | Inputs & outputs | What goes in (files, URLs, arguments) and what "done" looks like. |
| 5 | Scope & loading | Project or personal; which agent(s) must load it; auto-load or /name only; which steps need confirmation before acting. |
| 6 | Assets | Scripts, templates, or examples to ship inside the skill. |
Rules:
- Ask for the new skill name before drafting. Normalize it to lowercase hyphens and confirm before creating the folder.
- Ask about loading and confirmation explicitly; don't assume.
- After themes 1–2, propose 2–3 names, recommend one, and confirm before creating the folder. Name rules are in Step 4.
- Mirror the answer back before moving to the next theme.
- Draft once themes 1–2 are answered; keep interviewing against the draft. If a theme stays unclear, mark it as an assumption and resolve it in review.
Step 4 — Draft immediately
Once themes 1–2 are answered, write the SKILL.md. List assumptions in the chat, not in the file; turn accepted assumptions into plain instructions and leave no comments or TODOs before handoff.
Layout when bundled resources are needed:
<skill-name>/
├── SKILL.md # name + description frontmatter, then the workflow
├── references/ # deep docs, loaded only when needed
├── scripts/ # deterministic code the agent runs
└── assets/ # templates/files copied into outputsnamemust match the folder name. Use 1–64 characters matching^[a-z0-9]+(-[a-z0-9]+)*$: lowercase letters, digits, and single hyphens; no leading or trailing hyphen and no--.descriptionis the discovery surface: 1–1024 characters, always quoted. Use "what it does + Use when… + Not for…" with real trigger phrases; aim for 250–400 characters.- Keep the body under ~500 lines; move longer content to
references/with a "read this when..." pointer. - Write it simple and direct: short imperative instructions, no filler or repeated context.
- Do not add
shellorbashtoallowed-toolsunless the user explicitly accepts the risk of pre-approved terminal commands. - Add an explicit confirmation before any step that changes files, deploys, sends messages, or spends money.
Put attribution in frontmatter metadata:
metadata: generated-by: "create-better-skill (https://www.skills.sh/wazeerc/skills/create-better-skill)"Omit it if the user opts out.
Save location
Use the scope and target host from Step 3. If the user gave a path, use it.
| Host | Project | Personal |
| Claude Code | .claude/skills/ | ~/.claude/skills/ |
| Copilot / VS Code | .github/skills/ or .claude/skills/ | ~/.copilot/skills/ or ~/.claude/skills/ |
| Copilot CLI | .github/skills/ or .claude/skills/ | ~/.copilot/skills/ |
| OpenCode | .opencode/skills/ or .claude/skills/ | ~/.config/opencode/skills/ or ~/.claude/skills/ |
- In a git repo, default to project scope at the repo root. If there is no repo, ask whether to use a personal folder or a specific project; recommend personal for a reusable workflow.
- Use personal scope when the user asks for global/all projects.
- For a cross-agent project skill, use
.claude/skills/: Claude Code, Copilot/VS Code, Copilot CLI, and OpenCode all read it. For a cross-agent personal skill there is no single path all hosts read; use the host table or symlink into more than one personal folder..agents/skills/works for Copilot/VS Code and OpenCode, not Claude Code. - Before writing, check the target and other supported locations for the same name. If it exists, confirm overwrite or choose another name.
- Show the user the path and quoted description. Don't install or publish unless asked. Then run Step 5.
Loading
Use the choice from Step 3.
- Claude Code, Copilot, and VS Code: use
disable-model-invocation: truefor manual-only, oruser-invocable: falsefor auto-load only. OpenCode: put
opencode/autoinvoke: "false"undermetadatato hide it from automatic selection, andopencode/slash: "true"to expose/name. Quote both values:metadata: opencode/autoinvoke: "false" opencode/slash: "true"
Recommend manual-only for workflows that change files, deploy, or spend money; auto-load for reference or guidance. These are host-specific fields: for several hosts, include the fields each host understands and test in each. skills-ref will flag them as non-spec. Validate the choice in Step 7.
Step 5 — Grill the weak parts
Re-read the draft and find where a fresh agent would have to guess:
- vague verbs ("handle the data", "process the request") — what literally happens?
- missing error paths — what should happen when input is wrong or a step fails?
- unstated quality bar — how does the agent know the output is good?
- a description without real trigger phrases or a "Not for" boundary
- steps that assume a tool, file, or credential that may not exist
- destructive or irreversible steps without a confirmation point
Ask about the 2–3 worst specifically, quoting the offending line. Apply the answers, then run at most two review rounds. After that, list what is still assumed and ask the user to accept or correct it.
Step 6 — Validate
If skills-ref is installed and the skill uses only spec fields, run skills-ref validate <skill-dir>. It checks frontmatter only and rejects host-specific fields such as disable-model-invocation, so skip it for host-specific skills or expect those flags.
nameis 1–64 characters, matches^[a-z0-9]+(-[a-z0-9]+)*$, and matches the folder name, with no--or leading/trailing hyphen- Frontmatter is valid YAML: no tabs, colons inside values quoted
descriptionis 1–1024 characters, quoted, with real trigger phrases and a "Not for" boundary- Loading mode matches the user's choice and uses the target host's fields
- Every reference file says when to read it
- Markdown links resolve; bundled paths are relative and use
/; no absolute paths - No unresolved assumption comments, TODOs, or placeholder text
- No secrets or tokens
- Instructions explain why, not just MUST/NEVER
- Simple and direct: imperative sentences, no filler
- Body < ~500 lines; heavy content lives in references/scripts
Fix anything that fails and confirm each fix in one line.
Step 7 — Hand off
- What it does — two sentences.
- Path and loading — where it was created and whether it auto-loads or only runs as
/name. - Example prompts — three realistic positive prompts and two negative prompts that should not trigger the skill.
- Test — reload skills (
/reload-skillsin Claude Code,/skills reloadin Copilot CLI, restart or reload in OpenCode and VS Code), start a fresh session, and run one positive prompt, one/nameprompt, and one negative prompt. A same-session run only tests memory, not discovery. For a manual-only skill, confirm the positive prompt does not auto-load it. Ask whether to run the first positive prompt for real. - Next steps — the exact path and how to invoke it.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
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.

