AI SKILL COOKBOOK · BY KROGSBOLL
A cookbook for Anthropic Claude Skills in six short chapters. Each one has something you can do today, and the last one shows how a team keeps Skills safe.
Start with chapter 01Claude / Anthropic only. Not a cross-platform guide.
New in October 2026: Anthropic donated the Agent Skills standard to the Agentic AI Foundation, so Skills are now an open standard (agentskills.io). This cookbook still covers the Claude side. Read the announcement ↗
What this cookbook covers, and Skills you can use today.
Creates and edits Word, PDF, PowerPoint, and Excel files. The same skills behind Claude's built-in document creation — install them directly instead of reading about how they work.
name: document-skills description: Create and edit DOCX, PDF, PPTX, and XLSX files plugin: document-skills@anthropic-agent-skills
In Cowork on Claude for Mac, record yourself doing the task on screen. Claude proposes the Skill from the recording — no SKILL.md required to get started.
Turns a description of what you want into a working Skill for you to review.
The official worked example this Cookbook's own SKILL.md sample is drawn from.
What a Skill is, in plain words.
A Skill is a folder of instructions, scripts, and resources that Claude loads dynamically to get better at a specific, repeatable task — brand guidelines, a data workflow, a formatting convention, anything you'd otherwise have to re-explain every conversation.
Only SKILL.md is required. Everything else is added only if the skill actually needs it — a simple skill can be nothing but a Markdown file with two lines of frontmatter.
This is Anthropic's own term for how Skills work, not a metaphor we invented. Claude doesn't load every Skill's full content into every conversation — it scans lightweight metadata (name + description) first, and only loads the full SKILL.md body when a task actually matches. This is what keeps Skills cheap to have many of, without bloating the context window.
| Capability | What it's for |
|---|---|
| Skills | Task-specific procedures that load only when relevant |
| Projects | Static background knowledge, always loaded in that project's chats |
| MCP | Connects Claude to external tools/data — Skills teach it how to use them well |
| Custom instructions | Broad, always-on preferences across every conversation |
Sourced directly from Anthropic's official "What are skills?" doc, not secondhand.
Find a Skill on GitHub and put it to work.
Skills are available on Free, Pro, Max, Team, and Enterprise plans, and in beta for Claude Code and API users. The one requirement: code execution must be enabled on your account.
claude.ai/customize/skills)Register Anthropic's example-skills repo as a plugin marketplace, then install from it:
/plugin marketplace add anthropics/skills
Then either use the interactive menu (Browse and install plugins → anthropic-agent-skills → document-skills or example-skills → Install now), or install directly:
/plugin install document-skills@anthropic-agent-skills
/plugin install example-skills@anthropic-agent-skills
Verified directly against the anthropics/skills GitHub repo — this is real, current syntax, not a paraphrase.
Everything above assumes you already have a Skill's ZIP file in hand. If you've never used GitHub before, this is the missing piece — exactly how to go from "someone told me about a Skill" to a ZIP file ready to upload.
Go to the repo's page in your browser — for example github.com/anthropics/skills, Anthropic's own official collection. You'll land on the main page. The big block of formatted text below the file list is the README — think of it as the repo's cover page, explaining what's inside in plain language.
Big repos like this one hold many Skills, each in its own folder. Click into the skills/ folder, then click a folder name (e.g. document-skills) to open it. You know you've found a real Skill — not just a folder of folders — when you see a file called SKILL.md sitting right there.
Navigate back to the top of the repo. Click the green "Code" button near the top right, then "Download ZIP" from the dropdown.
skills/, then into document-skills/SKILL.md is the one you actually need. Drag just that folder out somewhere easy to find, like your DesktopClaude needs a ZIP containing only that one Skill folder, not the whole repository.
Quick check before you upload: the ZIP's name should match the folder name, and if you peek inside it, the folder itself should be the first thing you see — not SKILL.md sitting loose at the top level. That's the same packaging rule covered in Chapter 05.
Now follow the "On claude.ai" steps further up this page: Customize → Skills → "+" → upload this ZIP.
| Word | What it means here |
|---|---|
| Repository (repo) | The project's folder, hosted on GitHub |
| README | The write-up GitHub shows automatically on a repo's homepage |
| Clone | Downloading a repo using Git instead of the ZIP button — faster to update later, but needs Git installed. The ZIP button works fine without it |
| Fork | Your own personal copy of someone else's repo, for keeping your own changes |
| Star | A bookmark/like — a rough signal of how many people trust or use a repo |
"Installed successfully" but Claude won't use it: this is a known issue — restart your session. If it still doesn't trigger, your description field may be too vague; see Chapter 04 for how Claude decides when to invoke a skill.
From a repeated task to a tested Skill.
There are two ways to create one — and most guides only tell you about the harder one.
In Cowork on Claude for Mac, you can record yourself doing the task on screen — clicks, typing, and optional narration — for up to ~10 minutes. Claude watches the recording and proposes a Skill for you to review and save. No SKILL.md writing required to get started.
Every Skill needs a SKILL.md starting with YAML frontmatter:
## Metadata
name: Brand Guidelines
description: Apply Acme Corp brand guidelines to all
presentations and documents
## Overview
Apply these standards whenever creating presentations,
documents, or marketing materials so outputs match
Acme's visual identity.
## Brand Colors
- Primary: #FF6B35 (Coral)
- Secondary: #004E89 (Navy Blue)
## Typography
Headers: Montserrat Bold
Body text: Open Sans Regular
## When to Apply
- PowerPoint presentations
- Client-facing Word documents
- Marketing materials
Download this SKILL.md ↓
This example is Anthropic's own, from the official "How to create custom skills" doc.
This is the part most examples skip: what do you actually type to trigger this Skill? You never call it by name — you just ask for the task, and Claude matches your request against the description field automatically.
Create a PowerPoint deck for our Q3 sales
pitch to Northwind Traders — 8 slides,
covering results, roadmap, and pricing.
Nothing in that prompt mentions "Brand Guidelines" or "Skill." Claude reads "Apply Acme Corp brand guidelines to all presentations and documents" in the Skill's description, recognizes this request matches, and quietly applies the coral/navy color palette and Montserrat/Open Sans typography from the example on the left — without being told to.
description that's too vague. See "A few GitHub words you'll run into" → Chapter 03 for the troubleshooting note on this.Optional pieces once you outgrow a single file: a dependencies frontmatter field for required packages, a references/ folder for overflow content, and executable scripts (Python, JS/Node — the same stack Anthropic's own document skills use).
| Try | What you're checking |
|---|---|
| A normal request | Does it trigger at all? |
| The same request, reworded | Does the description generalize? |
| An unrelated request | Does it stay quiet when it shouldn't fire? |
| An edge case | Does it degrade gracefully? |
| Bad input | Does it fail safely? |
Get your Skill to the people who need it.
Distribution follows the same four official types from Chapter 02 — how you share depends on who needs it.
| Type | How it spreads |
|---|---|
| Personal | A private ZIP you upload for yourself |
| Team / Enterprise share | Shared to specific people or groups — view-only, auto-updates when the owner changes it |
| Organization-provisioned | An admin pushes it to everyone, optionally on by default — no individual upload needed |
| Partner | Built and maintained by the partner company (Notion, Figma, Atlassian…), paired with their MCP connector |
The folder name must match the skill's name, and the folder itself — not its contents — must be the ZIP's root.
SKILL.mdREADME.md and a licenseThis is exactly how Anthropic distributes its own example skills — the anthropics/skills repo is nothing more exotic than a folder of Skills under version control.
Reviews, owners, versions and a weekly rhythm.
Once more than one person depends on a Skill, it stops being a clever personal trick and starts being software your team relies on. Treat it that way.
A Skill has more than instructions. Once a team depends on it, it also has:
That is why a team Skill needs a development process.
The problem isn't writing a Skill. The problem starts when several people are changing the same one. Without version control, you end up with:
You quickly lose track of which version is current, who changed it, why, whether it was tested, who approved it, and how to undo it. With Git, that becomes a line you can actually follow:
| Folder / file | What it's for |
|---|---|
skills/ | The actual Claude Skills |
SKILL.md | The Skill's instructions and triggering metadata |
references/ | Supporting material loaded only when needed, not stuffed into the main instructions |
scripts/ | Executable helpers, only when a Skill genuinely needs them |
examples/ | Representative examples, where they improve understanding or output quality |
tests/ | Test prompts and expectations for the Skill |
templates/ | The team's starting point for creating new Skills |
CODEOWNERS | Defines who must review changes to particular Skills |
docs/ | The rules for people contributing to the repository |
These are two different things living in the same repository. Keeping them mentally separate stops a lot of confusion — especially about where documentation belongs.
Only the inner box ever gets zipped up and used by Claude, exactly as in Chapters 04 and 05. Everything in the outer box is for the humans running the repository — it never ships inside the Skill.
README.md inside a skill folder, expecting Claude to read it. Claude only reads SKILL.md (and whatever it points to in references/). A README.md belongs at the repository root, or one level up — it's for the next human who opens the folder, not for Claude.Every change to an official Skill goes through the same sequence — no exceptions, no "just this once" direct edit to main.
main stays untouchedName the branch after what it does, not who's doing it: add-customer-email-skill, update-brand-colours, fix-invoice-skill-typo. Anyone glancing at the branch list should understand what's in flight without opening a single file.
| Word | What it means here |
|---|---|
| Branch | A temporary, isolated copy to work in — see Chapter 03 for repo/README/fork/star |
| Commit | A saved snapshot of your changes, with a short message describing what changed |
| Merge | Folding an approved branch's changes into main — the moment a change becomes official |
A Pull Request (PR) is a structured way of saying "please look at my change and approve it," with a place for reviewers to comment on specific lines, request changes, or approve. Nothing merges into main without one — that's what branch protection enforces (see "Ownership & CODEOWNERS" below).
.github/pull_request_template.md in the repository and GitHub will pre-fill it on every new Pull Request automatically — nobody has to remember the list."Testing" here means three different questions, not one:
| Question | What you're really checking |
|---|---|
| Does it trigger? | Claude recognizes a normal, on-topic request and loads the Skill |
| Does it behave correctly? | Once loaded, the output actually follows the instructions |
| Does it stay quiet? | It does not fire on unrelated requests |
| Try | What you're checking |
|---|---|
| A normal request | Does it trigger at all? |
| The same request, reworded | Does the description generalize? |
| An unrelated request | Does it stay quiet when it shouldn't fire? |
| An edge case | Does it degrade gracefully? |
| Bad input | Does it fail safely? |
A team-sized way to say the same thing: write a few prompts that should trigger the Skill and a few that should not, and run all of them in fresh chats. The "should not" half is the one people skip — and a Skill that fires on the wrong requests is just as broken as one that never fires.
Here's the trap that catches almost everyone the first time. You test a Skill in your own folder, it works, you share it — and it breaks for everyone else, because a file it needs (a reference doc, a template, a script) was never actually committed. It worked for you only because that file was still sitting on your computer.
So the real test is: get a clean copy — a fresh download of the branch, or the packaged ZIP itself — somewhere you've never worked, and run the matrix above there. If it still works from a folder that only contains what was actually committed, it'll work for your teammates.
A Skill tested alone almost always passes. The real question on a team is what happens when all your Skills are active at once: two with overlapping descriptions can fight, and the wrong one answers. Before shipping, run a normal request with your other everyday Skills switched on too, and confirm the right one — and only the right one — responds.
Anthropic's own anthropics/skills repository ships real scripts for exactly this, worth knowing exist even if your team starts out testing by hand:
python skills/skill-creator/scripts/quick_validate.py skills/skill-creator
python skills/skill-creator/scripts/init_skill.py my-skill --path skills --resources scripts,references,assets
python skills/skill-creator/scripts/package_skill.py skills/skill-creator
There's also a structured format for recorded test cases, evals/evals.json, with a skill_name field and an evals list of id / prompt / expected_output / files / expectations per case — a machine-checkable version of the 5-case matrix above.
Commands and format verified directly against anthropics/skills. A further script, run_eval.py, also exists in that repo for running these cases — its exact invocation wasn't independently confirmed at time of writing, so it's mentioned here by purpose, not with invented syntax.
Reviewing a Skill is different from reviewing ordinary text, because the real test is behavior, not prose. A good review actually runs it.
Someone should own each Skill by name, not "the team." A CODEOWNERS file makes this automatic instead of relying on memory: it maps a folder to specific people, and GitHub then requests their review automatically whenever a Pull Request touches that folder — the HR team gets pulled in on HR Skills, Finance on Finance Skills, without anyone having to remember to tag them.
# .github/CODEOWNERS
# These people must review changes to any skill
/skills/ @anna @ben @carla
# Different owners for specific skills
/skills/brand-guidelines/ @design-team
/skills/compliance/ @legal-team @security-team
In the repository's Settings → Branches, a protection rule on main turns the whole process from "a suggestion" into "the only way in":
With this on, there is no back door — not even for an admin in a hurry.
"Owner" means more than "whose name is on the folder." The named owner of a Skill is the person responsible for:
When something about the Skill changes in the real world — a supplier, a policy, a price list — the owner is who makes sure the Skill keeps up.
Give every Skill a version in its frontmatter, and bump it with a meaning a non-technical reader can follow — thinking in terms of what actually changed, not abstract numbers:
| Change | Version bump | Example |
|---|---|---|
| Fixed a typo, tiny wording tweak | Patch — last number | 1.0.0 → 1.0.1 |
| Added a new capability or reference file, old behavior unchanged | Minor — middle number | 1.0.1 → 1.1.0 |
| Changed what triggers it or how it behaves, in a way the team already relies on | Major — first number | 1.1.0 → 2.0.0 |
20251013), and custom Skills get an automatically generated version ID. Pick whichever your team finds easiest to read; just be consistent.Merging to main makes a change official in the repository — it does not, by itself, put the new version in front of every teammate. That last step depends on which of the three distribution methods from Chapter 05 your team uses: org-provisioned updates automatically, a shared ZIP needs re-uploading, a plugin marketplace needs /plugin update or a fresh install.
Made a mistake after merging? A new Pull Request that reverts the change is the normal fix; a maintainer can also roll back further using GitHub's own history. This is exactly why nothing skips the Pull Request step, even for "quick" changes — the undo mechanism only exists because the history does.
None of this requires everyone online at once. A simple weekly rhythm keeps it moving across time zones without a single meeting:
| When | What happens |
|---|---|
| Monday–Wednesday | People open Pull Requests when they have ideas |
| Any time | Reviewers look at open PRs, comment or approve, whenever their day allows |
| When approved | Any maintainer merges — doesn't have to be the original author |
| After merge | Library updated; team notified (a Slack/Teams message is enough) |
Skills pile up. Old ones that nobody uses don't just sit there harmlessly — they clutter Claude's decision about which Skill to load, and they confuse new team members. Add one recurring ritual: every few months, each owner re-checks their Skills. Anything that no longer works, or hasn't been used in roughly six months, gets deprecated (see the lifecycle card) rather than left to quietly rot. A ten-minute quarterly sweep saves a lot of "why did Claude do that?" later.
| Role | Responsibility | Needs deep technical skill? |
|---|---|---|
| Skill author | Creates or improves a Skill, opens a PR | No |
| Reviewer / Code Owner | Reads the proposal, approves or requests changes | No — but understands the topic |
| Admin / maintainer | Sets up the repo, branch protection, and distribution | Helpful, not required day to day |
| Everyone else | Uses the approved Skills | No |
Most people on the team only ever need to know two things: how to open a Pull Request, and how to review one.
A Skill isn't just a note to Claude — it's instructions, and sometimes scripts, that shape what Claude actually does. Anyone who can change a Skill can change how your team's Claude behaves. That's exactly why the review process above isn't red tape: a Skill is a trust boundary, so treat changes to one the way you'd treat changes to anything with real reach into your work.
The checks above happen before a Skill ships. Once Skills run inside agents that work on their own, there is a second job: reading what the agents did afterwards. Network limits and permission rules block actions; reading the finished sessions shows what slipped through, and where your limits are looser than you meant.
Anthropic's cookbook has a worked recipe for this, Review your agents' sessions for security issues with Claude. It looks for five things:
The result is a ranked list of the sessions a person should read, with quoted evidence for each. It can read Managed Agents sessions, Messages API logs or Claude Agent SDK logs, and its first two parts run offline without an API key.
Both recipes were read directly at anthropics/anthropic-cookbook on 22 October 2026 and described by what they say, not run by us. They are about agents and the API, not about writing a SKILL.md, so use them as a next step, not as part of the Skills review process above.
None of these are about Git. They're the traps where a Skill looks fine in the repo but misbehaves for real — the gap between "the file is correct" and "Claude does the right thing." Warn your team about these up front:
description. The single most common failure. Claude decides whether to use a Skill almost entirely from its description — too vague and it fires on the wrong things or never fires at all. Say plainly what it does and when to use it.SKILL.md. A giant instructions file gets loaded every single time, wasting Claude's attention. Keep SKILL.md lean (a good rule of thumb is under ~500 lines) and push detail into references/, which Claude opens only when it's needed.README.md inside a skill folder. Claude reads it as part of the Skill and it clutters things. Human docs go in the repo's root README, never inside an individual skill folder.CODEOWNERS decides who reviews a Skill, but it doesn't answer "what Skills do we even have?" A plain table in the repo's README — Skill name, what it's for, owner — is enough to stop the team from losing track and rebuilding things that already exist.Do I have to use the command line for any of this? No. Everything in this chapter — creating a branch, editing a SKILL.md, opening a Pull Request, reviewing and merging — can be done entirely through GitHub's website in your browser, or the free GitHub Desktop app. The git terms here (branch, commit, merge) are just names for buttons you click. If a teammate is comfortable at the command line that's fine too, but nobody has to be.
Do we need a developer to run this? Not day to day — a technical person is genuinely only needed for the first setup and occasional help. Proposing and reviewing Skills doesn't require it.
How many approvals should we require? Start with 1. For anything brand-, legal-, or compliance-sensitive, require 2.
Two people want to change the same Skill at once — what happens? GitHub flags the conflict. The second person waits for the first PR to finish, or the two of you combine the changes into one.