How to create a Claude skill, step by step
Create a Claude skill from an empty folder: write SKILL.md, add scripts, check it triggers, then share it and make it work in Codex and Cursor too.
- For
- Developers writing their first skill
- Written for
- Claude CodeCodexCursorGitHub CopilotGemini CLIOpenCodeAny agent that reads SKILL.md folders
- Time
- 9 min read · updated Nov 10, 2026
The short answer
- To create a Claude skill, make a folder named after the skill, put a
SKILL.mdfile in it with anameand adescriptionbetween---lines, and write the instructions below them. Save the folder in~/.claude/skills/(every project) or.claude/skills/(one repository). - Add scripts or reference files beside
SKILL.mdwhen the job needs them, then check that Claude picks the skill up by asking for the job in plain words, or by typing/<skill-name>.
This guide shows how to create a Claude skill from nothing: one folder, one SKILL.md, and the files it needs. The example is a small skill that makes Open Graph images, because a skill that produces a file is easy to check: either the PNG is right or it isn’t. Everything here follows the Agent Skills specification (opens in a new tab), which Claude Code’s docs say its skills follow, so the same folder also loads in Codex, Cursor and other agents that read the format.
What a skill is made of
A skill is a folder. The only required file is SKILL.md: a header in YAML between --- markers, then Markdown instructions. The spec suggests three optional folders beside it.
Write both name and description even though Claude Code needs neither: the spec requires them, and so do Codex and Cursor. Cursor also requires the name to match the folder.
How to create a Claude skill in six steps
Step 1: Make the folder
Name it after the skill, in lowercase with hyphens. In your home folder it serves every project; in
.claude/skills/inside a repository it serves that repository.TerminalStep 2: Write the header
The
descriptionis the only part the agent reads before it decides to use the skill, so say what it makes, what it needs and the words people use when they ask for it. Write a description that makes a skill trigger covers this in detail.Step 3: Write the instructions
Numbered steps the agent follows: what to ask for, which script to run with which arguments, how to check the result, and what to do when something fails. Write them for a capable colleague who has never seen your project.
Step 4: Add scripts and reference files
Put anything that must come out the same every time in a script, not in prose. Move long reference material into
references/and link it fromSKILL.mdso the agent reads it only when needed. Both Anthropic and the spec say to keepSKILL.mdunder 500 lines.Step 5: Check it loads and triggers
Start a new session, ask for the job in plain words, and see whether the skill is used. Then run it by name. Details are in the next section.
Step 6: Share it
Commit it to a repository, wrap it in a plugin, or zip it for the Claude app. See Share your skill.
A complete SKILL.md example
Here is a whole skill that makes a 1200×630 release card. It uses only the spec’s fields, so it isn’t tied to one agent. Its script, scripts/render.mjs, is yours to write: in this design it fills an HTML template with the text and screenshots it with headless Chrome, which is how Lookbk’s free Editorial OG Card works.
A few choices in it are worth copying. The header names the output, the size and the file type. The instructions tell the agent to ask rather than invent. The script validates before it renders and exits non-zero on a bad result, so the agent can tell success from failure without looking at the image. In Claude Code you can write ${CLAUDE_SKILL_DIR} in place of <skill>, but the plain wording works in every agent.
Test that it triggers
- Ask for the job without naming the skill, such as “make a link preview for our v2.4 release”, in a new session. If Claude uses the skill, the description works.
- Run it by name with
/release-og-card. Claude Code’s troubleshooting list also suggests asking “What skills are available?” to see whether it loaded. - Check the header parses. If the YAML is broken, Claude Code still loads the body with no description, so
/release-og-cardworks but Claude never picks it on its own.claude plugin validate ~/.claude/skillsfinds such files (Claude Code v2.1.233 or later), andclaude --debugshows the parse error. Outside Claude Code, the spec’sskills-ref validate ./release-og-cardchecks the header and naming rules. - Check the output, not just the trigger. Anthropic’s docs put it plainly: seeing a skill trigger tells you Claude found it, not that it did what you intended. Run it with and without the skill and compare.
Let a skill write the skill
Each of the big agents has a helper for this. In Claude Code, install Anthropic’s skill-creator plugin with /plugin install skill-creator@claude-plugins-official; its README says it creates new skills, improves existing ones and runs evals, and the skills docs say it can generate should-trigger and should-not-trigger prompts and suggest description edits. Codex has a built-in $skill-creator that asks what the skill does, when it should trigger and whether it needs scripts. Cursor has a /create-skill command. Treat what they write as a draft and review it like any other code.
Share your skill
Make it work in Codex and Cursor too
The format is the same, so portability is mostly about folders and fields. Claude Code reads .claude/skills. Codex reads .agents/skills, from your working folder up to the repository root, and ~/.agents/skills. Cursor reads .agents/skills and .cursor/skills, and .claude/skills and .codex/skills for compatibility. Where skills live has the full table, including Copilot, Gemini CLI and OpenCode.
- Keep the header to the spec’s fields, and the folder name equal to
name. - Refer to files by paths relative to the skill folder, one level deep, as the spec recommends.
- Put Claude Code-only behaviour, such as
context: fork, in a copy you keep for Claude Code, or leave it out. - Install for everything at once by copying the folder to both
~/.claude/skills/and~/.agents/skills/. An agent that reads both may then list it twice; Where skills live explains which copy wins.
What a skill that makes something visual needs
Every skill on Lookbk is built the same way, and the pattern suits any skill whose result is an image, a video, a deck or a page. Take Editorial OG Card: its folder holds SKILL.md, a scripts/ folder (one script turns Markdown front matter into cards.json, another renders the PNGs), a template/ with the card’s HTML, CSS and JavaScript, two fictional examples under examples/, and a NOTICE.md listing the fonts and software it uses.
- The design lives in a template, not in the prompt. The agent fills in words; it doesn’t redraw the layout, so the tenth card looks like the first.
- Every field has a limit, and the script enforces it. Its render script checks every card and lists every problem at once before drawing anything.
- The script checks its own output. It confirms every PNG is 1200×630 and writes a preview page to look at.
- Examples ship with the skill. They show the agent a finished input, and the previews on its Lookbk page are rendered from them.
To read a complete one, install a free skill and open its folder. Free skills need no account:
Common questions
- How do I make a Claude skill without writing code?
- A skill can be instructions only: a folder with a
SKILL.mdand no scripts. Add a script only for steps that must come out the same every time. - Where do I save a skill so Claude Code finds it?
- In
~/.claude/skills/<skill>/SKILL.mdfor every project on your computer, or.claude/skills/<skill>/SKILL.mdinside a repository for that repository only. - Which fields does SKILL.md need?
- The Agent Skills spec requires
nameanddescription. Claude Code treats every field as optional and recommendsdescription, but writing both keeps the skill usable in Codex, Cursor and the Claude app. - Why doesn’t Claude use my skill?
- Usually the description doesn’t contain the words people use for the job, or the header doesn’t parse. Run
/<skill>to check it loaded, then rewrite the description and test with realistic requests. - Can I use the same skill in Codex and Cursor?
- Yes. Both read the same
SKILL.mdformat. Codex looks in.agents/skills; Cursor reads.agents/skills,.cursor/skillsand also.claude/skills. - Is there a tool that writes the skill for me?
- Yes: Anthropic’s skill-creator plugin for Claude Code,
$skill-creatorin Codex and/create-skillin Cursor. Review what they write before you share it.
Sources
What this guide says about other companies’ tools comes from their own documentation, checked on Nov 10, 2026.
- Claude Code: extend Claude with skills (opens in a new tab)
- Agent Skills specification (opens in a new tab)
- Claude Code: create a plugin (opens in a new tab)
- Claude Code: create a plugin marketplace (opens in a new tab)
- Anthropic: skill-creator plugin (opens in a new tab)
- Claude Help Center: use skills in Claude (opens in a new tab)
- Codex: build skills (opens in a new tab)
- Cursor: Agent Skills (opens in a new tab)
Did this guide help?
Read next
All guidesWrite a description that makes a skill trigger
How an agent picks a skill, what to put in its description, and how to test that it triggers when it should and stays quiet when it shouldn’t.
Where skills live: folders for every agent
The folders Claude Code, Codex, Cursor and other agents read skills from, which copy wins when two share a name, and what cloud agents can see.
Claude Code skills best practices
How to choose, install, check, update and combine Claude Code skills, from Anthropic’s docs: where they live, how they trigger and what to do when they don’t.
Claude skills vs MCP: what each does, when to use which
A skill teaches Claude how to do a job; an MCP server connects it to another system. What each is, when to pick one, and how a skill can call MCP tools.
See a skill’s result before you install it.
Every skill page shows what it makes, what it needs and which agents can run it.




