Creating skills
Skills are markdown (plus optional scripts) that teach the agent a focused workflow. Keep SKILL.md short—the context window is shared with chat, code, and other skills.
Where skills live
| Location | When to use |
|----------|-------------|
| .claude/skills/<name>/ in this repo | Default for n8n: team-shared, versioned. Cursor picks up project skills from here when working in the repo (same idea as Claude Code). |
| ~/.claude/skills/<name>/ | Personal skill for Claude Code across all projects. |
| ~/.cursor/skills/<name>/ | Optional personal skill for Cursor only, global to your machine. |
Do not put custom skills in ~/.cursor/skills-cursor/—that is reserved for Cursor’s built-in skills.
Prefer repo .claude/skills/ for anything that should match how the rest of the team works.
Before you write: gather requirements
Ask (or infer) briefly:
- Purpose — one concrete task or workflow.
- Triggers — when should the agent apply this skill?
- Gaps — what does the agent not already know (project rules, URLs, formats)?
- Outputs — templates, checklists, or strict formats?
- Examples — follow an existing skill in
.claude/skills/if one fits.
Ask the user in plain language when you need more detail.
File layout
skill-name/
├── SKILL.md # required
├── reference.md # optional — detail the agent reads only if needed
├── examples.md # optional
└── scripts/ # optional
Frontmatter (required)
---
name: skill-name # lowercase, hyphens, max 64 chars
description: >- # max 1024 chars, non-empty — see below
...
---
Description (discovery is everything — third person, WHAT + WHEN, trigger words):
- Good:
Extracts tables from PDFs and fills forms. Use when the user works with PDFs, forms, or document extraction. - Bad:
Helps with documentsorI can help you with PDFs
Authoring rules
- Concise — assume the model is capable; only add non-obvious domain or project facts.
- Progressive disclosure — essentials in
SKILL.md; long reference inreference.md. Link one level deep fromSKILL.md. - Prefer one default — e.g. one library or one workflow; add an escape hatch only if needed.
- Stable wording — one term per concept; avoid dated “until month X” notes unless you tuck legacy bits behind a short “Deprecated” note.
- Paths — forward slashes only (
scripts/foo.py).
Rough size: aim for well under ~200 lines in SKILL.md; if it grows, split detail out.
Scope: one job per skill (and parent skills)
- Single responsibility — one primary workflow or decision tree per skill. If triggers and steps diverge a lot (e.g. “create issue” vs “create PR” vs “full ticket → PR flow”), split into smaller dedicated skills.
- Prefer small + compose — two or three focused skills keep irrelevant detail out of context until needed. A parent (orchestrator) skill can say when to follow each child workflow and link to their
SKILL.md; avoid pasting full child content into the parent. - When one large skill is OK — a single end-to-end flow that always runs together and shares one tight checklist;
MCPs, CLI tools, and other skills
- Prefer CLI and repo commands when they solve the same problem — agents handle them well and they usually add less scaffolding noise to context than MCP tool discovery and schemas. Examples:
ghfor PRs/issues,pnpmscripts fromAGENTS.md. - MCPs are optional per user — not everyone has the same servers enabled. If a skill requires a specific MCP to work as written, say so explicitly:
- Put a hint in the frontmatter description (e.g. “Requires Linear MCP for …”) so mismatches are obvious early.
- Add a short Prerequisites (or Requirements) block near the top: which integration, what it is used for, and a fallback (e.g. web UI,
gh, or “ask the user to paste …”) when it is missing.
- Referencing other skills — give the path from the repository root (e.g.
.claude/skills/create-issue/SKILL.md) so humans and tools can resolve it. From a sibling folder, a relative link works too:[create-issue](../create-issue/SKILL.md). Name the skill and the task; parent skills should delegate steps instead of duplicating long procedures.
Patterns (pick what fits)
- Template — give the exact output shape (markdown/code blocks).
- Checklist — numbered or
- [ ]steps for multi-step work. - Branching — “If A → …; if B → …” at the top of a workflow.
- Scripts — document run commands; say whether to execute or read the script.
Workflow: create → verify
- Name + description — hyphenated name; description with triggers.
- Outline — minimal sections; link optional files.
- Implement —
SKILL.mdfirst; addreference.md/scripts/only if they save tokens or reduce errors. - Check — third-person description; terminology consistent; no duplicate encyclopedic content the model already knows.
Anti-patterns
- Verbose tutorials (“what is a PDF”) inside the skill.
- Many equivalent options with no default.
- Vague names (
helper,utils). - Deep chains of linked files.
- Assuming an MCP or tool is present without stating it or offering a fallback.
- One oversized skill that mixes unrelated workflows instead of smaller skills + a thin parent.
Quick example stub
---
name: my-workflow
description: Does X using project convention Y. Use when the user asks for X or mentions Z.
---
# My workflow
1. …
2. …
## Output format
Use a fenced code block for the exact shape reviewers should see.
## More detail
See [reference.md](reference.md) if edge cases matter.