🛠️Claude Skills · Lesson 4

How to Create Skills

A custom skill is a single Markdown file — SKILL.md — that teaches Claude a repeatable workflow. Write it once, and Claude applies it consistently every time the skill is triggered.

SKILL.md formatField rulesComplete templateWorking exampleWhere to save it

The SKILL.md file

Every custom skill is a directory containing one required file: SKILL.md. It has two parts — a YAML frontmatter block that Claude reads at startup, and a Markdown body that Claude reads only when the skill is triggered. This two-part design means dozens of skills can be installed without bloating the context window.

Annotated anatomy of a SKILL.md file — hover over the three panels on the right to see what each level loads.

SKILL.md
---
name: meeting-notes-formatter
description: "Formats raw meeting notes into structured summaries…"
---
# Meeting Notes Formatter
## Goal
Transform unstructured notes into a clean, consistent format.
## Output structure
1. Meeting summary
2. Key decisions
3. Action items (table)
4. Open questions
## Guidelines
- Extract owner names from context…
Level 1 — Always loaded
YAML frontmatter. Claude reads name and description at startup to know the skill exists. ~100 tokens.
Level 2 — Loaded on trigger
Markdown body. Claude reads SKILL.md via bash only when the skill is needed. Keeps context clean. Under 5k tokens.
Level 3 — Loaded as needed
Optional bundled files. Supporting .md files, scripts, templates — Claude fetches these only when referenced in SKILL.md.

Frontmatter field rules

FieldLimitGuidance
namemax 64 charsLowercase letters, numbers, hyphens only. No reserved words ("anthropic", "claude").
descriptionmax 1024 charsDescribe what the skill does AND when Claude should activate it. Be specific — vague descriptions cause missed triggers.

Creating a skill: step by step

1
Pick one specific task
Good skills solve one well-defined problem — "format meeting notes" or "review Python code for security issues". Broad skills ("help me write better") are vague and trigger unpredictably.
2
Write the SKILL.md
Start with the YAML frontmatter (name + description), then add the body: a Goal, an Output structure, and specific Guidelines. Add an Example section so Claude has a concrete reference.
3
Put it in a folder
Name the folder the same as your skill. For Claude Code: place it at ~/.claude/skills/your-skill-name/SKILL.md. For Claude.ai: zip the folder and upload it via claude.ai/customize/skills.
4
Test it
Start a new conversation and try the slash command (e.g. /meeting-notes-formatter) or just describe the task naturally. Check that the output matches your Output structure section exactly.

Blank template

Copy this and fill in the placeholders. The frontmatter is the only required part — the body sections are a recommended structure, not a strict requirement.

SKILL.md — blank template
---
name: your-skill-name
description: >
  What this skill does and when Claude should use it.
  Be specific: mention the types of input (meeting notes,
  code files, support tickets) and the expected output.
---

# Your Skill Name

## Goal
One-sentence description of the skill's purpose.

## Output structure
Define the exact format Claude should produce:
1. Section one
2. Section two
3. Section three (table, list, prose — your choice)

## Guidelines
- Rule one: be concrete, not vague
- Rule two: cover edge cases (what if a field is missing?)
- Rule three: specify tone, length, or style if it matters

## Example
**Input:** Brief example of raw input text.

**Output:**
### [Section heading from your output structure]
[Example of what Claude should produce here]

Working example: meeting-notes-formatter

A complete, ready-to-use skill. Drop it into a folder called meeting-notes-formatter/ and it works immediately. Notice how the description tells Claude both what the skill does and exactly which user requests should activate it.

SKILL.md — meeting-notes-formatter
---
name: meeting-notes-formatter
description: >
  Formats raw meeting notes into a structured summary with
  key decisions, action items, and open questions.
  Use when the user shares meeting notes, a transcript, or
  asks to clean up or summarise meeting content.
---

# Meeting Notes Formatter

## Goal
Turn unstructured meeting notes into a clear, scannable
document that anyone can read in under a minute.

## Output structure
Always produce these four sections in order:

1. **Meeting summary** — 2-3 sentences covering the main
   topic and outcome.
2. **Key decisions** — bulleted list of what was agreed.
3. **Action items** — table with columns:
   | Owner | Task | Due date |
4. **Open questions** — items raised but not resolved.

## Guidelines
- Extract owner names from context; default to "TBD" if unclear.
- Use plain language; keep jargon only if it appears in the notes.
- If no due date is mentioned, leave that column blank.
- Do not infer or add information that isn't in the notes.
- If notes are very short, all four sections may still appear
  (some will just be "None noted.").

## Example

**Input:**
we met today about the Q3 launch. sarah said we should push
back the date by 2 weeks. john will update the roadmap by
friday. still unsure about the pricing model.

**Output:**
### Meeting Summary
The team discussed the Q3 product launch and agreed to a
two-week schedule extension.

### Key Decisions
- Launch date pushed back by two weeks.

### Action Items
| Owner | Task           | Due date |
|-------|----------------|----------|
| John  | Update roadmap | Friday   |

### Open Questions
- Pricing model still to be determined.

Where to save your skill

💻Claude Code
  1. Create the folder: ~/.claude/skills/meeting-notes-formatter/
  2. Save SKILL.md inside that folder
  3. Claude discovers it automatically — no restart needed
For project-scoped skills, use .claude/skills/ inside your repo root instead.
🌐Claude.ai
  1. Zip the skill folder: meeting-notes-formatter.zip
  2. Open claude.ai/customize/skills
  3. Click '+ Upload .zip' and select the file
Requires Pro, Max, Team, or Enterprise plan with code execution enabled.

Skill folder structure

The structure below mirrors the real Anthropic skill-creator skill directory (from the screenshot). Only SKILL.md is required. All subfolders are optional — add them as your skill grows:

agents/Sub-agent SKILL.md files for multi-step workflows
assets/Images, icons, data files referenced in instructions
eval-viewer/Tooling to run and view skill evaluations
references/Additional .md files with API docs, schemas, examples
scripts/Executable Python/shell helpers Claude runs via bash
LICENSE.txtInclude if distributing your skill publicly
📁~/.claude/skills/
📁skill-creator/
📄SKILL.mdrequired # main instructions
📁agents/optional # sub-agent definitions
📁assets/optional # images, icons, data files
📁eval-viewer/optional # evaluation tooling
📁references/optional # extra .md reference files
📁scripts/optional # executable helper scripts
📄LICENSE.txt # licence (Anthropic skills)
📁your-custom-skill/
📄SKILL.mdrequired
📁references/optional

How it looks in Claude.ai after upload

Mockup of the claude.ai/customize/skills panel with a custom skill installed.

Customize
Skills
Connectors
Preferences
My Skills
/meeting-notes
Active · Custom
/code-reviewer
Draft
+ Upload .zip
/meeting-notes-formatter
Custom · Uploaded by you
Active
Formats raw meeting notes into structured summaries with action items, decisions, and follow-ups. Trigger with /meeting-notes-formatter or describe meeting content.
Trigger: Slash command + auto-detect
Uploaded: Today
💡 Tip: The most common reason a skill does not trigger is a vague description. Include the specific words a user would naturally type — "meeting notes", "transcript", "format my notes" — so Claude's auto-detection has clear signals to match against.
⚠️ Note: Only install skills from sources you trust. A skill runs in a code execution environment with filesystem access. Review every file inside a skill zip before uploading it, especially if it bundles scripts.

What's Next

Creation basics done. Next: building a complete skill folder from scratch — SKILL.md, supporting files, and a test run.