Last issue concluded that the output layer is something you write yourself. This one is about how: don't sit down and write a skill from a blank page. Do the task once, then have the model extract the places where you corrected it. Below are 9 real items you can install or read: official docs, an official plugin, built-in commands, and one community methodology.
The Claude Code docs give one test for when to build a skill: Create a skill when you keep pasting the same instructions, checklist, or multi-step procedure into chat. The claude.com guide phrases it differently: when you find yourself correcting Claude with the same instructions. Both point at the same signal: repeated explanation is the raw material of a skill. That leaves one question: how to pull it out of the conversation, instead of writing yet another generic "best practices" file.
It removes re-explaining everything in every new session: table names and metric definitions, your report format, rules like "exclude test accounts for this kind of request". The main tool is the official skill-creator:
# Claude Code: the skill-creator plugin from the official marketplace
/plugin install skill-creator@claude-plugins-official
# If it reports "Marketplace not found", add the official marketplace and retry
/plugin marketplace add anthropics/claude-plugins-official
# First prompt: in the same session where you just finished the work
Turn the workflow we just used into a skill with skill-creator.
Keep the places where I corrected you along the way.
Why the same session? Because the first step of skill-creator, Capture Intent, says that if the current conversation already holds a workflow the user wants to capture (say, the user types turn this into a skill), it should extract answers from the conversation history first: the tools used, the order of steps, the corrections the user made, the input/output formats it saw. Then it asks you to fill the gaps and confirm. Open a new window and all of that raw material is gone.
Where the file goes: ~/.claude/skills/<name>/SKILL.md is personal (every project on this machine); .claude/skills/<name>/SKILL.md is per project (commit it to share with your team). After that, Claude calls it when a request matches the description, or you type /<name>.
agentskills.io, the official site for the open Agent Skills specification, names this trap at the top of "Best practices for skill creators": ask an LLM to write a skill from its training knowledge alone, and you get filler like "handle errors appropriately" or "follow best practices for authentication". The first fix it offers is called Extract from a hands-on task, and it tells you to watch four things:
Anthropic's "Skill authoring best practices" writes the same idea as seven steps with Claude A and Claude B. First, finish the task with Claude A and no skill, and notice what information you repeatedly provide. Then find the reusable pattern, have A write the skill, cut needless explanations, and tidy the structure. Next, open a fresh instance B with the skill loaded, give it similar tasks, watch what it misses, and take that back to A. The docs also point out that you don't need a special "writing skills" skill; ask Claude to write one and it follows the format.
On the community side, the strongest take is writing-skills inside obra/superpowers, which treats this as TDD: run a baseline without the skill and record the agent's exact excuses (RED), write the smallest skill that targets those violations (GREEN), then close the loopholes (REFACTOR). Its key line: If you didn't watch an agent fail without the skill, you don't know if the skill teaches the right thing.
/insights (built into Claude Code) analyzes your recent sessions on this machine (up to 200 per run) and writes an HTML report of friction points such as misunderstood requests, plus suggestions, to ~/.claude/usage-data/report.html. When it won't help: it is unavailable in cloud sessions, and the analysis spends your usage./run-skill-generator (built into Claude Code) is Anthropic's own example of a skill grown from repetition. It gets your app running from a clean environment, records the install commands, env vars and launch script that worked as a project skill at .claude/skills/run-<name>/, and from then on /run and /verify follow the recipe instead of rediscovering it. Skip it for standard projects: the docs say /run infers the launch without setup.CLAUDE.md. The official split: CLAUDE.md stays in context every turn; a skill loads only when used, and once loaded it isn't re-read on later turns. The reverse also holds: when a CLAUDE.md section has grown into a procedure rather than a fact, move it into a skill.writing-skills is blunter: if you can enforce it with a regex or a validator, automate it instead of documenting it.writing-skills: a skill is not a narrative about how you solved a problem once.For workflows with side effects (deploys, commits), add disable-model-invocation: true to the frontmatter so only you can trigger them with /name. For anything that needs live data, use an inline command such as !`git diff HEAD`. It runs before Claude sees the skill and injects the live output.
skill-creator warns about this itself. You iterate on a few examples because it is fast, but a skill that works only on those examples is useless. The goal is a skill that can be used a million times, not one stuffed with "fiddly overfitty changes, or oppressively constrictive MUSTs". After extraction, test it on a real task it has never seen.
From the official docs: skill names and descriptions sit in a standing listing whose budget is 1% of the model's context window. When it overflows, descriptions are dropped starting with the skills you invoke least, and a skill without its description is hard to trigger automatically. A single description plus when_to_use is also cut off at 1,536 characters. A loaded body stays in context, so every line is a recurring token cost.
A recorded workflow is only true for the environment on the day you recorded it. The docs tell you to run /run-skill-generator again when the build or launch changes. A personal skill has no such reminder; when it goes stale it just quietly does the wrong thing.
CLAUDE.md (a fact it should always know) → a hook (a rule that must always hold) → a skill (a procedure you keep pasting) → a plugin (several skills to install and share together). First ask whether it can move one step left.Start with these three: ① /plugin install skill-creator@claude-plugins-official. When the work is done, say "turn this into a skill" in the same session; it extracts the steps and your corrections from the history, then runs with-skill vs. without-skill comparisons. ② Read the Claude A / Claude B seven steps in the official "Skill authoring best practices" and follow its rhythm for testing. ③ Read writing-skills in obra/superpowers. You don't need the whole Superpowers suite; just copy its RED step of watching the agent fail first.
Add as needed: /run-skill-generator (when your project's launch steps are complex) · /insights (many local sessions, and you want to find where you keep getting stuck) · template/ in anthropics/skills (a minimal skeleton when writing by hand) · skills-ref validate (check frontmatter before sharing).
Don't: ask the model to "write a skill for X" without real context · try to extract in a new session (the raw material is gone) · turn always-true facts into a skill · keep must-hold rules only in a skill.
skill-creator: pull tools, steps, corrections and input/output formats out of the current conversation, then ask you about the gaps.true, Claude won't call the skill on its own; only you can, with /name.writing-skills guards against getting picked and then not reading the body. It records a test where a description that summarized the workflow ("code review between tasks") led the agent to do one review and skip the two-stage review in the body's flowchart; once the description only stated the trigger, the agent followed the body. My compromise: state when to use it and the key terms, but don't put a summary of the steps in there. Leave the procedure to the body.CLAUDE.md solves it, skip the skill; if getting it wrong causes incidents, use a hook.disable-model-invocation, ! inline commands, CLAUDE.md vs. skills, the 1% listing budget, /run-skill-generator (official, read 2026-10)skills-ref validate and ZIP packaging (official)/plugin install skill-creator@claude-plugins-official; the source skills/skill-creator/SKILL.md holds Capture Intent and "a million times" (official)/plugin install superpowers@claude-plugins-official/insights, up to 200 sessions, friction points, report path, unavailable in cloud sessions (official)