Claude Code skills

How to Build a Claude Code Skill: A Marketer's Step-by-Step Guide (2026)

Learn how to build a Claude Code skill: SKILL.md frontmatter, descriptions that trigger, references and scripts, a full brand-voice example, and testing.

Ritik Namdev Ritik Namdev ·Published 2 November 2026 ·19 min read ·Last verified November 2026

You have pasted the same brand voice notes into Claude forty times. Every brief starts with “here’s our audience, here’s our tone, here’s what we never say.” Then a new chat forgets all of it.

A Claude Code skill fixes that. You write the instructions once, in a folder, and Claude loads them when the job calls for it. This guide shows you how to build a Claude Code skill from an empty folder to a tested, working brand-voice skill. No engineering background needed. You need a text editor and about an hour.

New to the idea? Start with what Claude Code skills are and come back.

What a Claude Code skill is (the 60-second answer)

A Claude Code skill is a folder containing a file called SKILL.md. The file opens with a short YAML header (frontmatter) that names the skill and describes when to use it, followed by plain Markdown instructions. Claude reads every skill’s description at the start of a session and loads the full instructions only when your request matches.

That last part matters for marketers. According to Anthropic’s Claude Code skills docs, only the description sits in context until the skill is invoked. So you can keep a dozen skills installed (brand voice, content briefs, SEO checklist, email QA) without stuffing all of them into every conversation.

Where skills live

LocationPathWho gets it
Personal~/.claude/skills/<skill-name>/SKILL.mdYou, in every project on this machine
Project.claude/skills/<skill-name>/SKILL.mdAnyone who opens this repository or folder
Plugin<plugin>/skills/<skill-name>/SKILL.mdAnyone who installs the plugin, invoked as /plugin-name:skill-name
EnterpriseManaged settings directoryEveryone on managed machines

If two skills share a name, the docs say enterprise beats personal and personal beats project.

Rule of thumb: put a skill in ~/.claude/skills while you build it. Move it into a project’s .claude/skills folder when your team should share it. Package it as a plugin when people outside the team need it.

Two ways a skill runs

  1. Claude invokes it when your message matches the description. You ask “write a LinkedIn post about our spring launch” and the brand-voice skill loads.
  2. You invoke it by typing /skill-name at the start of a message, for example /brand-voice draft a welcome email.

Takeaway: a skill is a reusable prompt with a trigger. The trigger is the description, which is why most of this guide is about writing that one field well.

Study the best existing skills before you build your own

Before you write a line, read three or four skills that already work. Good public skills show you description phrasing that triggers, how authors split long instructions into reference files, and what a realistic size looks like. It costs nothing and saves you the most common beginner mistakes.

Free GitHub repos worth reading

Star counts below were pulled from the GitHub API on 1 November 2026. They change daily, so treat them as a snapshot.

RepoStars (1 Nov 2026)What to study in it
anthropics/skills~186,200Anthropic’s own examples, including brand-guidelines, doc-coauthoring, internal-comms and skill-creator. The closest thing to a reference style.
ComposioHQ/awesome-claude-skills~78,500A curated directory. Useful for finding skills by category rather than as a model to copy.
coreyhaines31/marketingskills~57,800Marketing skills such as copywriting, cro, seo-audit, ai-seo and emails. Note how product-marketing acts as a shared context skill other skills check first.
alirezarezvani/claude-skills~29,100A large mixed library that includes marketing skills. Good for comparing many description styles side by side.
TheCraigHewitt/seomachine~7,600An SEO content workflow built on Claude Code. Shows how a multi-step writing process gets broken into pieces.
AgriciDaniel/claude-blog~2,600A blog-writing skill set. Handy for seeing how a long writing pipeline is staged.

Anthropic also publishes knowledge-work-plugins, which includes a marketing plugin. Reading a plugin shows you how several skills get bundled together.

Most of the community repos install with the skills CLI, for example:

npx skills add coreyhaines31/marketingskills

The repo’s README also documents --skill to pick individual skills and -a claude-code to target Claude Code. For the full install walkthrough, see how to install Claude Code skills.

Paid skill bundles exist. Prices below come from the vendors’ own pages as of 1 November 2026. We have not bought or audited these packs, so this is a listing, not a recommendation.

PackStated priceNotes
SuperSkills$50 one-timeThe vendor’s page describes a bundle of 139 skills delivered as a ZIP.
OpenClaw Revenue skills bundle$79 lifetime, $199 team tierPer the vendor page.

A word of caution. Some packs advertise thousands of skills and countdown-style “slots left” offers. Count matters less than quality, and you can read every free repo above before deciding whether to pay. If a vendor will not show you a sample SKILL.md before purchase, that tells you something.

What to look for when you read a skill

  • The description. Does it say what the skill does and when to use it, with concrete trigger phrases?
  • Length. Is SKILL.md short, with detail pushed into references/?
  • Steps. Are instructions numbered and checkable, or a wall of advice?
  • Examples. Does it show a good output and a bad one?
  • Boundaries. Does it say what the skill should not do?

Takeaway: borrow structure, not text. Your brand voice is the part no public repo can give you.

How to build a Claude Code skill in 7 steps

Building a skill takes seven steps: pick one repeated job, create the folder, write the frontmatter, write the instructions, add reference files, add scripts if needed, then test. Each step below is small. The order matters, because the job you pick shapes every field after it.

Step 1: Pick one job you repeat every week

The best first skill is boring. It is something you already do the same way each time:

  • Applying brand voice to drafts
  • Turning a keyword into a content brief
  • Checking a page against an on-page SEO checklist
  • Rewriting product copy into three ad variants

Avoid “do all my marketing.” One skill, one job. If you want ideas by role, see Claude Code skills for marketers and skills for content writers.

Step 2: Create the folder

Open a terminal and run:

mkdir -p ~/.claude/skills/brand-voice
touch ~/.claude/skills/brand-voice/SKILL.md

Use lowercase letters and hyphens for the folder name. The docs say name defaults to the folder name, so a clean folder name gives you a clean slash command.

Step 3: Write the frontmatter

Frontmatter sits between two --- lines and must start on the very first line of the file. Here is the minimum:

---
name: brand-voice
description: Applies the Acme brand voice to marketing copy. Use when writing or editing blog posts, emails, social posts, landing pages or ads for Acme, or when the user says "on-brand", "brand voice" or "make this sound like us".
---

That is enough to work. The next section covers every other field.

Step 4: Write the instructions

Below the frontmatter, write Markdown the way you would brief a sharp freelancer. Numbered steps, clear rules, one example. Keep it tight: Anthropic’s docs recommend keeping SKILL.md under 500 lines and moving detail into separate files.

Step 5: Add a references folder

Long material (full style guide, persona sheets, banned-claims list) goes into references/. Link each file from SKILL.md so Claude knows when to open it.

Step 6: Add a scripts folder (optional)

If part of the job is mechanical, like counting words or flagging banned phrases, put a small script in scripts/. Claude runs it rather than reading it.

Step 7: Test, then iterate

Start a fresh session, ask for something that should trigger the skill, and watch whether it loads. We cover testing in detail below.

Takeaway: a working skill can be one file with five lines of frontmatter. Everything else is refinement.

SKILL.md frontmatter fields, checked against Anthropic’s docs

Only description is recommended; every frontmatter field is technically optional. Claude Code ignores fields it does not recognise, so a typo fails silently. The table lists the fields marketers will actually use, with meanings taken from Anthropic’s SKILL.md reference.

FieldWhat it doesShould a marketer use it?
nameThe command name in the / menu. Defaults to the folder name.Yes, match the folder.
descriptionWhat the skill does and when to use it. Claude uses this to decide when to apply the skill.Always. This is the trigger.
when_to_useExtra trigger context, such as phrases or example requests. Appended to the description.Useful if your description gets long.
argument-hintAutocomplete hint, e.g. [keyword].Nice for brief-style skills.
disable-model-invocationtrue means only you can run it with /name.Yes for skills that publish or send things.
user-invocablefalse hides it from the / menu so only Claude invokes it.Rarely.
allowed-toolsTools Claude can use without asking during that turn.Only for trusted scripts.
model / effortModel or effort level for the current turn.Optional.
context: forkRuns the skill in a separate subagent.Advanced.
pathsGlob patterns limiting automatic activation to matching files.Handy for content repos, e.g. content/**/*.md.
metadata, license, compatibilityAccepted, not acted on.For sharing.

Two limits worth knowing

  1. The description cap. Per the docs, description plus when_to_use is truncated at 1,536 characters in the skill listing. Put the important trigger words first.
  2. Portability. Outside Claude Code (claude.ai uploads or the Skills API), only name, description, license, compatibility, metadata and allowed-tools are allowed, and other keys cause an error. If you plan to share a skill with someone on claude.ai, stick to those six.

One more gotcha from the docs: if your YAML fails to parse, the skill loads with no fields set. A stray colon inside an unquoted description can do this. Wrap descriptions in quotes when they contain colons.

Takeaway: name and description cover 90% of what you need. Reach for the rest when a specific problem asks for it.

How to write a description that makes your skill trigger

A description triggers reliably when it says what the skill does, names the situations it applies to, and includes the literal phrases a user would type. Claude matches your request against every installed description. Vague text like “helps with content” gives it nothing to match.

Community write-ups on DEV and blog.fsck.com point to the description as the most common reason a skill never fires. Some Reddit users report better results with directive wording (“Use when…” or even “MUST be used when…”). Treat that as practitioner advice to test, not a rule.

Weak versus strong descriptions

WeakStrong
”Brand voice skill.""Applies the Acme brand voice to marketing copy. Use when writing or editing blog posts, emails, social posts or ads for Acme, or when the user says on-brand, brand voice or make this sound like us."
"Helps with briefs.""Turns a target keyword into a content brief with search intent, outline, FAQs and internal links. Use when the user gives a keyword and asks for a brief, outline or content plan."
"SEO stuff.""Checks a draft against an on-page SEO checklist (title, meta, headings, links, schema). Use when the user asks to review, audit or optimise a page or post for SEO.”

A four-part formula

  1. Verb + object: “Applies the brand voice to marketing copy.”
  2. Contexts: list the content types (blog, email, ads, landing pages).
  3. Trigger phrases: the words people really type (“on-brand”, “make this sound like us”).
  4. Exclusions, if needed: “Do not use for legal or investor documents.”

Common description mistakes

  • Starting with the skill’s backstory instead of its job
  • Using internal jargon nobody types (“apply VX-2 framework”)
  • Overlapping with another skill so neither wins clearly
  • Burying trigger phrases past the character cap

If a skill should never run by surprise (one that posts to a CMS, say), skip the trigger-phrase work and set disable-model-invocation: true. You then run it only with /name.

Takeaway: write the description last, after you know exactly what the skill does, and read it as if you were Claude scanning 30 of them.

Using the references/ and scripts/ folders

references/ holds long documents Claude reads when needed; scripts/ holds small programs Claude runs. Splitting them out keeps SKILL.md short and readable, and means Claude loads the heavy material only for the task that needs it.

Anthropic’s docs show this layout:

brand-voice/
├── SKILL.md            (overview and steps)
├── references/
│   ├── voice-guide.md  (loaded when needed)
│   ├── personas.md
│   └── banned-claims.md
└── scripts/
    └── check-banned.sh (executed, not loaded)

What goes in references/

FileContentsWhen SKILL.md tells Claude to open it
voice-guide.mdTone, sentence style, words you use and avoid, before/after examplesEvery drafting or editing task
personas.mdTwo or three audience profilesWhen the user names an audience
banned-claims.mdClaims legal or leadership will not approveBefore final output
examples.mdThree approved pieces of copyWhen tone is unclear

The docs are explicit that you should link each supporting file from SKILL.md. A file Claude is never told about is a file Claude may never read.

What goes in scripts/

Scripts suit anything with a right answer: word counts, banned-word checks, reading-level scores, CSV cleanup. Reference them with ${CLAUDE_SKILL_DIR}, which the docs describe as a way to point at bundled scripts regardless of the working directory:

Run `${CLAUDE_SKILL_DIR}/scripts/check-banned.sh <file>` and fix every line it prints.

You do not need to write code yourself. Ask Claude to write the script, read what it produces, and run it once on a sample file before you trust it.

Takeaway: if you would hand it to a freelancer as an attachment, it goes in references/. If you would ask them to run a checker, it goes in scripts/.

Worked example: a complete brand-voice skill

Below is a full, copy-paste brand-voice skill for a fictional company called Acme. Swap in your own voice rules, audiences and banned claims. It uses only portable frontmatter fields, so it also works if you upload it to claude.ai.

The full SKILL.md

---
name: brand-voice
description: "Applies the Acme brand voice to marketing copy. Use when writing, editing or reviewing blog posts, emails, social posts, landing pages or ads for Acme, or when the user says on-brand, brand voice, our tone, or make this sound like us. Do not use for legal, HR or investor documents."
---

# Acme brand voice

You write and edit marketing copy for Acme, a project-management tool for small agencies.

## Before you write

1. Read `references/voice-guide.md` in full.
2. If the user names an audience, read the matching section of `references/personas.md`. If not, ask one question: "Who is this for: agency owners or project managers?"
3. Confirm the format (blog, email, social, ad, landing page) and the length.

## Voice rules (summary)

- Plain, direct and warm. Write like a project lead talking to a peer.
- Second person ("you"). Short sentences, mixed with the occasional longer one.
- Lead with the reader's problem, then the outcome, then the feature.
- Use numbers only when the user supplies them or they appear in `references/`.
- British or American spelling: American.

## Never

- Invent statistics, customer names, quotes or results.
- Use these words: revolutionary, game-changer, seamless, unlock, leverage, synergy.
- Promise outcomes ("guaranteed", "double your revenue").
- Make any claim listed in `references/banned-claims.md`.

## Process

1. Draft the copy following the rules above.
2. Run `${CLAUDE_SKILL_DIR}/scripts/check-banned.sh` on the draft if you saved it to a file, and fix each flagged line.
3. Check the draft against the "Before/after" examples in `references/voice-guide.md`.
4. Return the copy, then a short note listing any claims that need proof from the user.

## Output format

- The finished copy first, ready to paste.
- Then a heading "Needs proof" with a bullet list, or "None".

## Example

User: "Make this on-brand: Our revolutionary platform seamlessly streamlines agency workflows."

Good output:
"Stop chasing status updates in five different apps. Acme puts every client project on one board, so you can see what is late before your client does."

Needs proof: None.

The supporting files

A minimal references/voice-guide.md needs four parts: a one-paragraph description of the voice, a “we say / we don’t say” table, three before/after rewrites, and formatting rules per channel.

A starter scripts/check-banned.sh can be a one-line grep:

#!/bin/bash
grep -n -i -E "revolutionary|game-changer|seamless|unlock|leverage|synergy" "$1"

Make it executable with chmod +x scripts/check-banned.sh.

Variation: a content-brief skill

The same pattern works for briefs. Change three things:

PartBrand voiceContent brief
Description trigger”on-brand”, “make this sound like us""brief”, “outline”, “content plan for [keyword]“
argument-hintnone[keyword]
Referencesvoice guide, personas, banned claimsbrief template, internal link list, SERP checklist

SEO people can go deeper with Claude Code skills for SEO and skills for keyword research.

Takeaway: steal this structure, replace every Acme detail, and you have a working skill today.

How to test a Claude Code skill

Test a skill by triggering it two ways (by request and by /name), checking the output against your rules, and comparing against a session without the skill. A skill that loads but produces off-brand copy is still broken.

A simple test plan

TestHowPass looks like
ListingRun /skills in Claude Codebrand-voice appears
Direct callType /brand-voice rewrite: [paste copy]Skill loads, follows the process
Natural triggerFresh session: “write a LinkedIn post for Acme’s launch”Claude loads the skill without being told
Near miss”Write our privacy policy”Skill does not load (it is excluded)
Rule checkFeed it copy full of banned wordsAll flagged and removed, nothing invented
BaselineSame prompt with the skill turned offClear difference in tone

The docs describe turning off personal or project skills for a baseline by setting them to "off" in skillOverrides, and running realistic prompts in fresh sessions with and without the skill.

Fixing the usual failures

  • Never triggers: rewrite the description with the exact phrases you used in your test prompt.
  • Triggers on the wrong tasks: add an exclusion line, or narrow the contexts.
  • Loads but ignores rules: move the most important rules higher in SKILL.md and make them numbered steps.
  • Breaks after an edit: check your YAML. The docs note that a parse failure loads the skill with no fields set. Run claude --debug to see what was loaded.

Edits to files under ~/.claude/skills/ or .claude/skills/ are picked up in the same session, per the docs. If you created a brand-new top-level skills directory, run /reload-skills.

Takeaway: write your five test prompts before you edit anything, then rerun them after every change.

Iterating: how good skills get better

Iteration means running the skill on real work, noting each output you had to fix by hand, and turning each fix into a rule, example or reference file. Your first version will be wrong in small ways. That is normal.

A practical loop:

  1. Use the skill on five real tasks.
  2. Keep a list of every manual correction.
  3. Group corrections. Tone issues go to voice-guide.md. Process issues go to SKILL.md steps. Repeated mechanical fixes become a script.
  4. Add one before/after example for each recurring mistake.
  5. Rerun your test prompts.

Watch the size. When SKILL.md creeps toward the 500-line guideline, move sections into references/. When a skill tries to do two jobs, split it into two skills with clearly different descriptions.

Version your skills if a team uses them. A project skill in .claude/skills/ can sit in Git, so changes get reviewed like any other file. For teams without engineers, Claude Code skills for non-developers covers simpler setups.

Takeaway: every hand-edit you make is a missing line in your skill.

Using the skill-creator skill to build skills faster

Anthropic’s skill-creator is a skill that builds and tests other skills. You describe the job, it interviews you, drafts the SKILL.md, and can write test cases. It lives in the anthropics/skills repo.

According to Anthropic’s docs, you can install it as a plugin:

/plugin install skill-creator@claude-plugins-official

The docs say it writes test cases to evals/evals.json, runs them in isolated subagents and grades the results.

How to brief skill-creator

Give it what a human would need:

  • The job, in one sentence
  • Two or three real examples of good output
  • Your rules and banned claims (paste them or point to files)
  • The phrases you want to trigger the skill
  • What it should not do

Hand-built versus skill-creator

Hand-builtskill-creator
Speed to first draftSlowerFaster
Control over wordingFullYou edit afterward
Test casesYou write themGenerated for you
Best forLearning how skills work, small skillsLarger skills, teams, repeated builds

Our suggestion: build your first skill by hand so you understand each field, then use skill-creator for the next ones. Always read what it writes. It drafts from your inputs, so vague inputs still produce a vague skill.

Takeaway: skill-creator speeds up the typing, not the thinking. You still own the description and the rules.

Frequently asked questions

How do I create a skill in Claude Code?

Make a folder under ~/.claude/skills/ (for example brand-voice), add a SKILL.md file with name and description frontmatter, then write your instructions below it. Claude Code picks it up automatically.

What is the difference between a Claude skill and a prompt?

A prompt is typed each time. A skill is saved in a folder, triggers on its own when your request matches its description, and can carry reference files and scripts.

Where are Claude Code skills stored?

Personal skills go in ~/.claude/skills/, project skills in .claude/skills/ inside a project, and plugin skills inside the plugin’s skills/ folder.

What frontmatter fields does SKILL.md need?

None are strictly required. Anthropic recommends description, and name defaults to the folder name. Other fields like allowed-tools and disable-model-invocation are optional.

Why is my Claude Code skill not triggering?

Usually the description is too vague or lacks the words you type. Add concrete contexts and trigger phrases, check that the YAML parses, and confirm the skill appears in /skills.

Can I build a Claude skill without coding?

Yes. A skill is a Markdown file. Scripts are optional, and you can ask Claude to write them for you.

How long should a SKILL.md file be?

Anthropic recommends keeping it under 500 lines and moving detailed material into separate reference files.

Do Claude Code skills work on claude.ai?

Skills can be uploaded to claude.ai, but only the name, description, license, compatibility, metadata and allowed-tools fields are allowed there.

What is the skill-creator skill?

An Anthropic skill that helps you draft, test and refine new skills. It is available in the anthropics/skills repo and as a plugin.

How do I invoke a skill manually?

Type /skill-name at the start of your message, for example /brand-voice rewrite this email.

Can I stop a skill from running automatically?

Yes. Set disable-model-invocation: true in the frontmatter, and it runs only when you type its slash command.

How many skills can I install at once?

The docs do not set a simple number, but every description takes space in context and long listings get truncated, so keep descriptions focused.

Should I buy a paid skill pack?

Read the free repos first. Many marketing skills are free on GitHub. If you do pay, ask to see a sample SKILL.md before buying.

How do I share a skill with my team?

Commit it to .claude/skills/ in a shared repository, or package it as a plugin.

What is the difference between a skill and a slash command?

Skills create slash commands. The older .claude/commands/<name>.md format still works, but skills add supporting files and automatic triggering.

Your next step

Pick the one job you repeated most last week. Create the folder, write a five-line frontmatter, paste in the instructions you keep retyping, and run the six tests above. When it passes, add references/. When it fails, fix the description first.

Want to see what other marketers install before building? Browse Claude Code skills for copywriters or run an audit workflow with skills for SEO audits.

Sources and methodology

This guide was written from the documentation and public repos above. The Acme example is fictional and illustrative.

Ritik Namdev
Written by

Ritik Namdev

Growth · SEO · GEO

Growth marketer documenting a brand-new site's climb into Google and the AI engines - in public, with real numbers. Every tactic here is tested on real sites before it's published.

The Lab · Weekly

One experiment. Every week.

The field notes in your inbox - one thing I tested, the raw numbers behind it, and what it means for getting cited by AI.

Free. One practical SEO + AI search lesson a week. Unsubscribe anytime.

Free forever. Unsubscribe anytime.