Claude: Zero to Hero
Power user · module 2 of 8

Skills

You are here · Paths A, B, C · Requires Pro or above in practice · 60–75 min · Assumes Projects.

Skills are listed as available on Free, but they only run with code execution enabled, which is paid-only. Free users can read this module but can’t do the exercises.

What you’ll learn: what a Skill is, how progressive disclosure makes them nearly free, and how to write one that actually triggers.


If you only read one thing

A Project holds what you know. A Skill holds how you do something.

A Skill is a set of instructions for one repeatable task — how your team writes release notes, how you want expense reports formatted, how to clean a particular export — that Claude loads only when it’s relevant. The trigger for making one is simple: you’ve pasted the same multi-step instructions into chat three times.

The clever part is that Skills are nearly free. Claude only reads a one-line description of each installed Skill until one actually applies, so you can install dozens without slowing anything down or crowding out your conversation.

Two things determine whether a Skill works. The description decides whether it ever fires — it must say both what the Skill does and when to use it, in the words you’d actually say. The body decides whether the result is good — write it like a runbook for a new hire, with numbered steps and what to do when information is missing.

And treat installing someone else’s Skill like installing software: it can tell Claude to do things. Read it first.


What a Skill is

A Skill is a folder containing a SKILL.md file — instructions Claude loads on demand when they’re relevant — plus optional bundled files and scripts.

The core insight: a Skill is what you’d write to onboard a new team member to one specific task. Not facts about your company (that’s a Project), but how we do this thing here.

release-notes/
├── SKILL.md          # main instructions
├── TEMPLATE.md       # the format we use
├── examples/
│   └── v2.4.0.md     # a good past example
└── scripts/
    └── fetch_prs.py  # utility Claude can run

Progressive disclosure — why Skills are nearly free

This is the mechanism that makes Skills work at scale.

Level When it loads Cost What
1 · Metadata Always, at startup ~100 tokens per skill name and description from the frontmatter
2 · Instructions When the skill triggers Under 5k tokens The body of SKILL.md
3 · Resources Only when referenced Zero until accessed Bundled files; scripts run via bash, only output enters context

The consequence: you can install dozens of Skills without a context penalty. Until one triggers, it costs about a hundred tokens.

And bundled content is effectively unlimited. A Skill can ship a 500-page API reference, and if the task doesn’t need it, it costs nothing.

Scripts are especially efficient: when Claude runs validate.py, the script’s code never enters context — only its output. That makes scripts far cheaper and more deterministic than asking Claude to generate equivalent code on the fly.


Anatomy of a SKILL.md

---
name: release-notes
description: Write release notes for the Ledger service in our house format. Use when the user asks for release notes, a changelog, or a version announcement.
---

# Release notes

## Process

1. Ask which version and which date range of merged PRs to cover.
2. Group changes into: Breaking, Added, Fixed, Internal. Omit empty groups.
3. Each entry is one sentence in past tense, starting with a verb.
4. Breaking changes always come first and always include a migration note.
5. Link every entry to its PR.

## Format

Follow TEMPLATE.md exactly. See examples/v2.4.0.md for a good result.

## Rules

- Never invent a PR number. If you don't have it, write `(PR: TBC)`.
- Internal-only changes get one line, not a paragraph.
- No marketing language. Engineers read these.

Field requirements

name

description


Writing a description that triggers

This is the single most important part of the whole skill, because it’s the only thing Claude sees until the skill fires. Claude matches your request against descriptions to decide what’s relevant.

A good description says both what the skill does and when to use it.

Bad Why Good
Release notes helper No trigger conditions Write release notes for the Ledger service in our house format. Use when the user asks for release notes, a changelog, or a version announcement.
Handles documents Too broad — will over-trigger Convert meeting transcripts into structured decision logs. Use when given a transcript, meeting notes, or recording summary and asked for decisions or action items.
Use this for data Meaningless Clean and validate CSV exports from Salesforce, fixing date formats and deduplicating on email. Use when the user mentions a Salesforce export or a messy CSV.

Include the words users actually say. If your team says “changelog”, “release notes”, and “what shipped”, put all three in the description.

Be specific enough not to over-trigger. A description like “handles documents” will fire on everything and crowd out better matches.


The body: write it like a runbook

The description gets it loaded. The body determines whether the result is good.

Do:

Don’t:


Where Skills live, per surface

Skills do not sync across surfaces. Upload separately to each.

Surface How Sharing
claude.ai Customize → Skills, upload as .zip Individual. Team/Enterprise Owners can provision skills org-wide — they appear in every member’s list, enabled or disabled by default
Cowork Same, plus via Plugins Individual, or via plugin
Claude Code ~/.claude/skills/ (personal) or .claude/skills/ (project) Project skills go in git; also shareable via plugins
Claude API Upload via the /v1/skills endpoints Workspace-wide
Agent SDK / Managed Agents Configured in code Per deployment

The four kinds of skill

Kind What
Anthropic skills Built and maintained by Anthropic — PowerPoint, Excel, Word, PDF. Available to everyone, invoked automatically. Not available in Claude Code.
Custom skills Yours: brand guidelines, email templates, team conventions, data workflows
Organization-provisioned Team/Enterprise Owners push skills to everyone. See Provision and manage skills for your organization
Partner skills Professionally built by Notion, Figma, Atlassian and others, designed to pair with their MCP connectors

Browse everything via Customize → Skills → + → Browse skills.

Skills follow the Agent Skills open standard, so the same format works across platforms that adopt it — you’re not locked to Claude. A reference Python SDK exists for implementers.


Runtime differences worth knowing

Surface Network Package install
claude.ai Varies by user/admin settings — full, partial, or none
Claude API None. No external calls. None. Pre-installed packages only.
Claude Code Full — same as any program on your machine Allowed, but install locally, not globally

If you write a Skill that fetches from a URL, it will work in Claude Code and fail on the API. Plan for the surface you’re targeting.


Security

Treat installing a Skill like installing software.

A Skill gives Claude new instructions and executable code. A malicious one can direct Claude to invoke tools in ways that don’t match its stated purpose — data exfiltration, unauthorised access, destructive operations.

Rules:


Skill vs. Project vs. instruction

  Loads Best for
Custom instructions Every conversation Global preferences
Project Every conversation in the project Domain context and reference material
Skill On demand, when relevant A repeatable procedure

The trigger for creating a Skill: you’ve pasted the same multi-step instructions into chat three times.


Try it

Exercise 1 — Convert a prompt into a Skill. Take the best template from your prompt library (Structured prompting with XML). Write it as a SKILL.md with proper frontmatter. Zip the folder. Upload it. Use it.

Exercise 2 — Description A/B. Write two descriptions for the same skill: one vague, one specific with trigger words. Install each in turn and try five naturally-phrased requests. Count how often it fired.

Worked example Say the Skill formats your weekly team update. **Version A (vague):** `Helps with team updates.` **Version B (specific):** `Format the weekly engineering team update in our house style — sections for Shipped, In progress, Blocked, and a one-line headline. Use when the user asks for a weekly update, a team update, a status post, or "what shipped this week".` **The five test requests** — say them the way you naturally would, not the way the description is worded: 1. "write my weekly update" 2. "what shipped this week — can you write that up" 3. "I need to post a status to the team channel" 4. "draft the eng update for Friday" 5. "summarise the week for the team" **Scoring.** Tally how many of the five triggered the Skill on each version. Version A typically fires on one or two; version B on four or five. The gap is entirely because B contains the words you actually said. **What to notice.** Request 3 says none of "weekly", "update" or "shipped" — it says "status" and "post". B catches it because "status post" made it into the description. That's the whole technique: write down the phrasings your team really uses, including the sloppy ones, rather than the tidy name you gave the Skill.

Exercise 3 — Progressive disclosure. Build a skill with a bundled reference file. Ask a question that needs the file and one that doesn’t. Confirm Claude only reads it when relevant.

Exercise 4 — Script over prose. Write a skill that includes a small Python script (e.g. validating a CSV). Compare against a version where the skill describes the validation in prose. The script version is more reliable and cheaper.

Exercise 5 — Audit. Find a third-party skill in the skills directory. Read every file before installing. Practise the habit now, while nothing is at stake.


Checkpoint


Going deeper