You'll walk away with
- What a skill is, where it lives (personal
~/.claude/skillsvs project.claude/skills), and how Claude Code matches one to a request - How to author a
SKILL.mdwith name, description, and instructions that reliably trigger when the task comes up - Advanced fields:
allowed-toolsfor restricting capabilities andmodelfor routing to a specific Claude model - Progressive disclosure: keeping
SKILL.mdunder 500 lines and linking to supporting files Claude reads only when needed - When to use skills versus CLAUDE.md, subagents, hooks, or MCP, and how they complement each other
- How to share skills via repo commits, plugins, or enterprise managed settings, and how to troubleshoot when one does not trigger
Read these first
Lesson outline
Every lesson from Introduction to Agent Skills with our one-line simplification. The Skilljar course is the source; we summarize.
| # | Skilljar lesson | Our simplification |
|---|---|---|
| 1 | What are skills? | Skills are folders of instructions Claude Code discovers and applies automatically; if you find yourself repeating instructions, that is a skill waiting to be written. |
| 2 | Creating your first skill | Create a SKILL.md with name + description frontmatter, drop it in ~/.claude/skills/<name>/, restart Claude Code to pick it up. |
| 3 | Configuration and multi-file skills | Add allowed-tools for capability restriction, use progressive disclosure to keep SKILL.md small and link to supporting files. |
| 4 | Skills vs. other Claude Code features | Skills are on-demand and request-driven; CLAUDE.md is always-on, subagents are isolated execution, hooks are event-driven, MCP is external tools. |
| 5 | Sharing skills | Personal in ~/.claude/skills, project (committed) in .claude/skills, plugins for distribution, managed settings for enterprise rollout. |
| 6 | Troubleshooting skills | Use the skills validator first; if it does not trigger, fix the description; if it does not load, check SKILL.md is in a named directory. |
The course in 7 paragraphs
Skills exist because every Claude Code user eventually notices they are typing the same instructions over and over. Every PR review, you re-describe how you want feedback structured. Every commit, you remind Claude of your message format. Skills fix this by letting you write a markdown file once that Claude applies automatically the next time the task comes up. The mental model is npm install for Claude's task-specific knowledge: scoped, on-demand, version-controlled.
Mechanically a skill is a directory containing a SKILL.md. The file has YAML frontmatter declaring at minimum name and description, then markdown instructions below. The description is load-bearing: at startup Claude Code loads only the names and descriptions of every available skill (cheap, no token cost). When you make a request, Claude semantically matches your phrasing against those descriptions and loads the full body of the matching skill into context. You see a confirmation prompt before the load. Skills are inert until they match.
Skills live in two places: personal at ~/.claude/skills/<skill-name>/ (follows you across all projects on your machine) and project at .claude/skills/<skill-name>/ inside a repo (committed to git, shared with everyone who clones). When names conflict, the priority hierarchy is Enterprise → Personal → Project → Plugins. Use personal for your own commit-message style or PR-review preferences; use project for team standards like coding conventions, brand guidelines, or framework-specific debugging checklists. Restart Claude Code after creating or editing a skill so it picks up the change.
Advanced configuration unlocks the production-grade use cases. `allowed-tools` restricts which tools Claude can use while the skill is active; set [Read, Grep, Glob] for a code-review skill so the reviewer cannot edit files even if the prompt drifts. `model` lets a skill request a specific Claude model. Progressive disclosure is the technique that keeps skills efficient: keep SKILL.md under 500 lines, and put deep references, scripts, and assets in sibling files that Claude reads on demand. The trick: Claude can execute a script and consume only its output, never the script's source, so a 2,000-line tax-rules-by-state lookup costs zero context tokens until the output lands.
Skills versus everything else is the question every team asks and the exam loves to test. CLAUDE.md loads into every conversation; use it for project-wide always-on standards (TypeScript strict mode, never modify the schema). Skills load on demand; use them for task-specific expertise that would clutter every conversation if it lived in CLAUDE.md. Subagents run in an isolated context with their own tool access; use them when you want delegation, not knowledge injection. Hooks fire on events (file save, tool call); use them for automation, not reasoning. MCP provides external tools; a different category entirely from skills. The right setup combines all of them.
Sharing scales the value. A personal skill stays on your machine. A project skill gets committed alongside the code; the next teammate who clones the repo gets it free. Plugins package a set of related skills (plus optional commands and config) for distribution outside a single repo. Managed settings let an enterprise admin push a skill set to every user's Claude Code installation, with the highest priority in the hierarchy. The shape that emerges is: personal skills are your habits, project skills are your team's standards, plugin skills are community contributions, enterprise skills are policy.
Troubleshooting follows a predictable pattern. Run the skills validator first; it catches structural problems (missing frontmatter, wrong filename, directory shape) faster than any other technique. If a skill does not trigger, the description is almost always the cause; add the trigger phrases users actually type. If it does not load, check that SKILL.md lives inside a named directory and that the filename is exactly SKILL.md (case-sensitive). If the wrong skill activates, two descriptions are too similar; disambiguate. For runtime errors in skill scripts, check dependencies, file permissions (chmod +x), and use forward slashes in paths. The exam treats skills as a recognition problem more than a creation problem. You will see scenarios describing team pain (a brand-guidelines doc Claude keeps missing, a PR-review style that drifts) and be asked which Claude Code feature solves it. Skill is the right answer when the knowledge is task-specific and on-demand; CLAUDE.md when it should always apply; subagent when you want isolation; hook when an event triggers automation; MCP when you need an external system.
Skills vs CLAUDE.md vs subagents vs hooks vs MCP
The single most-tested skills concept is which feature fits which job. Memorize the load model and the trigger.
- CLAUDE.md: always-on standards
Loads into every conversation. Use for project-wide constraints (TypeScript strict, never modify schema, framework preferences). Token cost on every turn, so keep it tight.
Concept: claude-md-hierarchy ↗ - Skills: on-demand, request-driven
Loads only when Claude matches a request to the skill's description. Use for task-specific expertise (PR review style, commit format, debugging checklists). Cost is zero until activated.
Concept: skills ↗ - Subagents: isolated execution
Runs in a separate context window with its own tool access; returns only a summary. Use for delegation, not knowledge injection. Cleaner parent context, less debuggability.
Concept: subagents ↗ - Hooks: event-driven automation
Fires on events (file save, tool call). Use for side effects: linters, validators, telemetry. Not for reasoning. Configured in settings.json, not markdown.
Concept: hooks ↗ - MCP: external tools
Provides callable capabilities from a separate server. Use for connecting Claude to systems outside the conversation. A different category entirely; complement skills, do not replace them.
Concept: mcp ↗
6 takeaways with cross-pillar bridges
Skills are markdown files that Claude Code loads on demand when your request matches their description, so they cost zero context tokens until activated.
Personal skills go in ~/.claude/skills, project skills go in .claude/skills (committed to git), and the priority hierarchy is Enterprise > Personal > Project > Plugins.
The description field is the load-bearing decision input; write it to answer two questions: what does the skill do, and when should Claude use it.
Use allowed-tools to restrict capabilities while a skill is active and use progressive disclosure (sub-500-line SKILL.md plus linked support files) to keep large skills efficient.
Skills are knowledge-injection; subagents are isolated execution; hooks are event-driven automation; CLAUDE.md is always-on standards; MCP is external tools, and each handles its own specialty.
When a skill does not trigger, the description is almost always the cause; add the trigger phrases users actually type and run the skills validator first when debugging.
How this maps to the CCA-F exam
2 hand-picked extras
These amplify the Skilljar course beyond what the course itself covers. Each was picked for a specific reason.
Equipping agents for the real world with Agent Skills
Anthropic's launch announcement framing the why behind skills, including the progressive-disclosure design choice. Pair with the Skilljar lessons for the architectural rationale.
Read source ↗Agent Skills: Anthropic Claude Code documentation
Canonical reference for the SKILL.md schema, allowed-tools, progressive disclosure, and the priority hierarchy. The doc you bookmark when authoring real skills.
Concepts in this course
Skills
Core primitive the course centers on
Concept: skills ↗CLAUDE.md hierarchy
The always-on alternative skills complement
Concept: claude-md-hierarchy ↗Subagents
Isolated execution alternative for delegation
Concept: subagents ↗Hooks
Event-driven alternative for automation
Concept: hooks ↗MCP
External tool surface that pairs with skills
Concept: mcp ↗Where you'll see this in production
Agent skills for enterprise KM
Enterprise rollout pattern: managed settings, shared brand and policy skills
Scenario: agent-skills-for-enterprise-km ↗Agent skills for developer tooling
Team-shared project skills for code review, commit format, debugging checklists
Scenario: agent-skills-for-developer-tooling ↗Agent skills with code execution
Progressive disclosure pattern using scripts that return data without loading source
Scenario: agent-skills-with-code-execution ↗Other course mirrors you may want next
8 questions answered
Phrased as the way real students search. Tagged by intent so you can scan to what you actually need.
ComparisonWhat are agent skills in Claude Code and how are they different from CLAUDE.md?
How-toHow do I create my first skill in Claude Code?
~/.claude/skills/<skill-name>/ (personal) or .claude/skills/<skill-name>/ (project). Inside, create a SKILL.md with YAML frontmatter declaring name and description, then write the instructions below the frontmatter. Restart Claude Code so it discovers the new skill. Verify it loads by making a request that should trigger it; you will see a confirmation prompt.TroubleshootWhy is my skill not triggering when I make a request?
DefinitionWhere do skills live and how does Claude Code find them?
~/.claude/skills/<skill-name>/ and follow you across every project on your machine. Project skills go in .claude/skills/<skill-name>/ inside a repo and are committed to version control so the team shares them. At startup Claude Code loads only the names and descriptions of every skill it finds; the full body loads on demand when a request matches.DefinitionWhat is progressive disclosure in agent skills?
ComparisonWhen should I use a skill versus a subagent versus a hook?
How-toHow do I share a skill with my team?
.claude/skills/<skill-name>/ inside the repo and commit it. Anyone who clones the repo gets the skill automatically. For broader distribution, package related skills as a plugin. For enterprise-wide rollout, use managed settings to push skills to every user's Claude Code installation; managed-setting skills sit at the top of the priority hierarchy.ScopeCan I restrict which tools a skill is allowed to use?
allowed-tools field to the skill's frontmatter listing only the tools Claude can use while the skill is active. For a code-review skill, set allowed-tools: [Read, Grep, Glob] so the reviewer cannot edit files even if the prompt drifts. The whitelist is your safety contract; relying on prompt-only constraints is the canonical anti-pattern.