<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Introduction to Agent Skills |</title><link>https://haobin-tan.netlify.app/doc/claude/introduction-to-agent-skills/</link><atom:link href="https://haobin-tan.netlify.app/doc/claude/introduction-to-agent-skills/index.xml" rel="self" type="application/rss+xml"/><description>Introduction to Agent Skills</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>en</language><lastBuildDate>Tue, 13 Oct 2026 00:00:00 +0000</lastBuildDate><image><url>https://haobin-tan.netlify.app/media/icon_hu_eee4a95885829ab2.png</url><title>Introduction to Agent Skills</title><link>https://haobin-tan.netlify.app/doc/claude/introduction-to-agent-skills/</link></image><item><title>What Are Skills?</title><link>https://haobin-tan.netlify.app/doc/claude/introduction-to-agent-skills/what_are_skills/</link><pubDate>Tue, 13 Oct 2026 00:00:00 +0000</pubDate><guid>https://haobin-tan.netlify.app/doc/claude/introduction-to-agent-skills/what_are_skills/</guid><description>
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Note&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;h3 id="tldr"&gt;TL;DR&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Skills are folders of instructions&lt;/strong&gt; that Claude Code can discover and use to handle tasks more accurately. Each skill lives in a &lt;code&gt;SKILL.md&lt;/code&gt; file with a name and description in its frontmatter&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Claude uses the description to match skills to requests.&lt;/strong&gt; When you ask Claude to do something, it compares your request against available skill descriptions and activates the ones that match&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Personal skills&lt;/strong&gt; go in &lt;code&gt;~/.claude/skills&lt;/code&gt; and follow you across all projects. &lt;strong&gt;Project skills&lt;/strong&gt; go in &lt;code&gt;.claude/skills&lt;/code&gt; inside a repository and are shared with anyone who clones it&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skills load on demand&lt;/strong&gt; — unlike CLAUDE.md (which loads into every conversation) or slash commands (which require explicit invocation), skills activate automatically when Claude recognizes the situation&lt;/li&gt;
&lt;li&gt;If you find yourself &lt;strong&gt;explaining the same thing to Claude repeatedly&lt;/strong&gt;, that&amp;rsquo;s a skill waiting to be written&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;A skill is a markdown file that teaches Claude how to do something once. Claude then applies that knowledge automatically whenever it&amp;rsquo;s relevant.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="what-skills-are"&gt;What Skills Are&lt;/h2&gt;
&lt;p&gt;Skills are folders of instructions and resources that Claude Code can discover and use to handle tasks more accurately.&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://raw.githubusercontent.com/EckoTan0804/upic-repo/master/uPic/8be14e8288bb6b0427685c79cbc41ef6861f762f0270f3e02a9948a9a93153ed.png" alt="The pr-review SKILL.md open in a code editor, with review checks such as no hardcoded secrets and Pydantic schemas." loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Each skill lives in a &lt;code&gt;SKILL.md&lt;/code&gt; file with a &lt;strong&gt;name&lt;/strong&gt; and &lt;strong&gt;description&lt;/strong&gt; in its frontmatter.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pr-review&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Reviews pull requests for code quality. Use when reviewing PRs or checking code changes.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;The description is how Claude decides whether to use the skill.
&lt;ul&gt;
&lt;li&gt;When you ask Claude to review a PR, it matches your request against available skill descriptions and finds the relevant one.&lt;/li&gt;
&lt;li&gt;Claude reads your request, compares it to all available skill descriptions, and activates the ones that match.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Below the frontmatter, you write the actual instructions or whatever Claude needs to know for that task.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="where-skills-live"&gt;Where Skills Live&lt;/h2&gt;
&lt;p&gt;You can store skills in different places depending on who needs them:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Personal skills&lt;/strong&gt; go in &lt;code&gt;~/.claude/skills&lt;/code&gt; (your home directory).
&lt;ul&gt;
&lt;li&gt;These follow you across all your projects — your commit message style, your documentation format, how you like code explained.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Project skills&lt;/strong&gt; go in &lt;code&gt;.claude/skills&lt;/code&gt; inside the root directory of your repository.
&lt;ul&gt;
&lt;li&gt;Anyone who clones the repo gets these skills automatically. This is where team standards live, like your company&amp;rsquo;s brand guidelines, preferred fonts, and colors for web design.&lt;/li&gt;
&lt;li&gt;Project skills get committed to version control alongside your code, so the whole team shares them.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="skills-vs-claudemd-vs-slash-commands"&gt;Skills vs. CLAUDE.md vs. Slash Commands&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;CLAUDE.md&lt;/strong&gt; files load into &lt;strong&gt;every&lt;/strong&gt; conversation. For example, if you want Claude to &lt;em&gt;always&lt;/em&gt; use TypeScript&amp;rsquo;s strict mode, that goes in CLAUDE.md.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Skills&lt;/strong&gt; are automatic and task-specific.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;SKills load on demand when they match your request.&lt;/p&gt;
&lt;p&gt;When Claude matches a skill to your request, you&amp;rsquo;ll see it load in the terminal:&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://raw.githubusercontent.com/EckoTan0804/upic-repo/master/uPic/40cd804fb58151c6a0b9c0bb739fa5e5a1da3246b2f27d33c3dd28fc51cf3344.png" alt="After a request to review the pull request on branch sg-221, a Skill pr-review line reads &amp;ldquo;Successfully loaded skill&amp;rdquo;." loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Claude only loads the name and description initially, so they don&amp;rsquo;t fill up your entire context window.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;E.g., Your PR review checklist doesn&amp;rsquo;t need to be in context when you&amp;rsquo;re debugging — it loads when you actually ask for a review.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Slash commands&lt;/strong&gt; require you to explicitly type them. Skills don&amp;rsquo;t. Claude applies them when it recognizes the situation.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="when-to-use-skills"&gt;When to Use Skills&lt;/h2&gt;
&lt;p&gt;The rule of thumb: &lt;strong&gt;If you find yourself explaining the same thing to Claude repeatedly, that&amp;rsquo;s a skill waiting to be written.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Skills work best for specialized knowledge that applies to specific tasks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Code review standards your team follows&lt;/li&gt;
&lt;li&gt;Commit message formats you prefer&lt;/li&gt;
&lt;li&gt;Brand guidelines for your organization&lt;/li&gt;
&lt;li&gt;Documentation templates for specific types of docs&lt;/li&gt;
&lt;li&gt;Debugging checklists for particular frameworks&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Creating Your First Skill</title><link>https://haobin-tan.netlify.app/doc/claude/introduction-to-agent-skills/creating_your_first_skill/</link><pubDate>Tue, 13 Oct 2026 00:00:00 +0000</pubDate><guid>https://haobin-tan.netlify.app/doc/claude/introduction-to-agent-skills/creating_your_first_skill/</guid><description>
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Note&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;h3 id="tldr"&gt;TL;DR&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;A skill is a &lt;strong&gt;directory containing a &lt;code&gt;SKILL.md&lt;/code&gt; file&lt;/strong&gt; with metadata (name, description) in frontmatter and instructions below&lt;/li&gt;
&lt;li&gt;Claude loads &lt;strong&gt;only skill names and descriptions at startup&lt;/strong&gt;, then matches incoming requests against those descriptions using semantic matching&lt;/li&gt;
&lt;li&gt;You get a &lt;strong&gt;confirmation prompt&lt;/strong&gt; before Claude loads the full skill content into context&lt;/li&gt;
&lt;li&gt;Priority for name conflicts: &lt;strong&gt;Enterprise → Personal → Project → Plugins&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;To update a skill, edit its &lt;code&gt;SKILL.md&lt;/code&gt;. To remove one, delete its directory. &lt;strong&gt;Always restart Claude Code&lt;/strong&gt; for changes to take effect&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="creating-a-skill"&gt;Creating a Skill&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;name&lt;/strong&gt; identifies your skill.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;description&lt;/strong&gt; tells Claude when to use it — this is the matching criteria.&lt;/li&gt;
&lt;li&gt;Everything after the second set of dashes is the instructions Claude follows when the skill is activated.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pr-description&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Writes pull request descriptions. Use when creating a PR, writing a PR, or when the user asks to summarize changes for a pull request.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;When writing a PR description:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;1.&lt;/span&gt; Run &lt;span class="sb"&gt;`git diff main...HEAD`&lt;/span&gt; to see all changes on this branch
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;2.&lt;/span&gt; Write a description following this format:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## What
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;One sentence explaining what this PR does.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Why
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Brief context on why this change is needed
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Changes
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Bullet points of specific changes made
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Group related changes together
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Mention any files deleted or renamed
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="testing-your-skill"&gt;Testing Your Skill&lt;/h2&gt;
&lt;p&gt;Claude Code loads skills at startup, so restart your session after creating one. You can verify it&amp;rsquo;s available by checking the available skills list.&lt;/p&gt;
&lt;h2 id="how-skill-matching-works"&gt;How Skill Matching Works&lt;/h2&gt;
&lt;p&gt;When Claude Code starts, it scans four locations for skills but only loads the &lt;strong&gt;name and description&lt;/strong&gt; — not the full content.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Enterprise&lt;/strong&gt;: &lt;code&gt;managed-settings.json&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Personal&lt;/strong&gt;: &lt;code&gt;˜/.claude/skills&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Project&lt;/strong&gt;: &lt;code&gt;project/.claude/skills&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plugins&lt;/strong&gt;: &lt;code&gt;project/.claude-plugin/plugin.json&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When you send a request, Claude compares your message against the descriptions of all available skills.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Example: &amp;ldquo;Explain what this function does&amp;rdquo; would match a skill described as &amp;ldquo;explain code with visual diagrams&amp;rdquo; because the intent overlaps.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Once a match is found, Claude asks you to confirm loading the skill. This confirmation step keeps you aware of what context Claude is pulling in. After you confirm, Claude reads the complete &lt;code&gt;SKILL.md&lt;/code&gt; file and follows its instructions.&lt;/p&gt;
&lt;h2 id="skill-priority"&gt;Skill Priority&lt;/h2&gt;
&lt;p&gt;The priority order (from high to low):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Enterprise&lt;/strong&gt; — managed settings, highest priority&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Personal&lt;/strong&gt; — your home directory (&lt;code&gt;~/.claude/skills&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Project&lt;/strong&gt; — the &lt;code&gt;.claude/skills&lt;/code&gt; directory inside a repository&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plugins&lt;/strong&gt; — installed plugins, lowest priority&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If your company has an enterprise &amp;ldquo;code-review&amp;rdquo; skill and you create a personal &amp;ldquo;code-review&amp;rdquo; skill with the same name, the enterprise version takes precedence.&lt;/p&gt;
&lt;p&gt;To avoid conflicts, use &lt;strong&gt;descriptive&lt;/strong&gt; names.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Example: Instead of just &amp;ldquo;review,&amp;rdquo; use something like &amp;ldquo;frontend-review&amp;rdquo; or &amp;ldquo;backend-review.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="updating-and-removing-skills"&gt;Updating and Removing Skills&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: Edit its &lt;code&gt;SKILL.md&lt;/code&gt; file&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Remove&lt;/strong&gt;: Delete its directory&lt;/p&gt;
&lt;p&gt;Restart Claude Code after any changes for them to take effect.&lt;/p&gt;</description></item><item><title>Configuration and Multi-File Skills</title><link>https://haobin-tan.netlify.app/doc/claude/introduction-to-agent-skills/configuration_and_multi_file_skills/</link><pubDate>Tue, 13 Oct 2026 00:00:00 +0000</pubDate><guid>https://haobin-tan.netlify.app/doc/claude/introduction-to-agent-skills/configuration_and_multi_file_skills/</guid><description>
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Note&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;h3 id="tldr"&gt;TL;DR&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;name&lt;/code&gt; and &lt;code&gt;description&lt;/code&gt; are required&lt;/strong&gt; — &lt;code&gt;allowed-tools&lt;/code&gt; and &lt;code&gt;model&lt;/code&gt; are optional but powerful additions&lt;/li&gt;
&lt;li&gt;A good description &lt;strong&gt;answers two questions&lt;/strong&gt;: What does the skill do? When should Claude use it?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;allowed-tools&lt;/code&gt;&lt;/strong&gt; pre-approves the listed tools while the skill is active, so Claude can use them without asking, and it doesn&amp;rsquo;t limit Claude to those tools&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Progressive disclosure&lt;/strong&gt;: keep SKILL.md under 500 lines and link to supporting files (references, scripts, assets) that Claude reads only when needed&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tell Claude to execute scripts without loading their contents into context&lt;/strong&gt; — only the output consumes tokens, keeping context efficient&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="skill-metadata-fields"&gt;Skill Metadata Fields&lt;/h2&gt;
&lt;p&gt;The
defines the core fields in the SKILL.md frontmatter, and Claude Code adds a few of its own (such as &lt;code&gt;model&lt;/code&gt;).&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Required?&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;Rules and tips&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Identifies the skill&lt;/td&gt;
&lt;td&gt;&lt;li/&gt;Lowercase letters, numbers and hyphens only, &lt;strong&gt;up to 64 characters&lt;/strong&gt;. &lt;br /&gt;&lt;li/&gt;Should match the skill’s folder name.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Tells Claude when to use the skill. The lesson calls this the most important field, because Claude matches requests against it.&lt;/td&gt;
&lt;td&gt;&lt;li/&gt;&lt;strong&gt;Up to 1,024 characters.&lt;/strong&gt; &lt;br /&gt;&lt;li/&gt;Say what the skill does &lt;strong&gt;and&lt;/strong&gt; when to use it, and include the words people actually use when asking for that task.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;allowed-tools&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Lets Claude use the listed tools without asking permission while the skill is active&lt;/td&gt;
&lt;td&gt;The approval lasts for the turn that invoked the skill and ends with your next message. It doesn’t stop Claude from using other tools. Plain &lt;code&gt;Bash&lt;/code&gt; approves all shell commands, so narrow it, e.g. &lt;code&gt;Bash(git status *)&lt;/code&gt;. If you leave the field out, nothing is pre-approved.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;model&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Picks which Claude model runs the skill&lt;/td&gt;
&lt;td&gt;Use it when a skill needs a specific model.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;disallowed-tools&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;No (a separate Claude Code field the lesson also mentions)&lt;/td&gt;
&lt;td&gt;Takes the listed tools away while the skill is active&lt;/td&gt;
&lt;td&gt;This is the opposite of &lt;code&gt;allowed-tools&lt;/code&gt;: it actually removes tools.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="writing-effective-descriptions"&gt;Writing Effective Descriptions&lt;/h2&gt;
&lt;p&gt;Be &lt;strong&gt;explicit&lt;/strong&gt; with your instructions.&lt;/p&gt;
&lt;p&gt;A good description answers two questions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;What does the skill do?&lt;/li&gt;
&lt;li&gt;When should Claude use it?&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-emerald-100 dark:bg-emerald-900 border-emerald-500"
data-callout="tip"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-emerald-600 dark:text-emerald-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 18v-5.25m0 0a6 6 0 0 0 1.5-.189m-1.5.189a6 6 0 0 1-1.5-.189m3.75 7.478a12.1 12.1 0 0 1-4.5 0m3.75 2.383a14.4 14.4 0 0 1-3 0M14.25 18v-.192c0-.983.658-1.823 1.508-2.316a7.5 7.5 0 1 0-7.517 0c.85.493 1.509 1.333 1.509 2.316V18"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Tip&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;If your skill isn&amp;rsquo;t triggering when you expect it to, try &lt;strong&gt;adding more keywords&lt;/strong&gt; that match how you actually phrase your requests. The description is what Claude uses to decide whether a skill is relevant, so the language matters.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="pre-approving-tools-with-allowed-tools"&gt;Pre-Approving Tools with &lt;code&gt;allowed-tools&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;allowed-tools&lt;/code&gt; field pre-approves the tools you list, so Claude can use them without a permission prompt for the rest of the turn that invoked the skill. The grant clears when you send your next message.&lt;/p&gt;
&lt;!-- text: required trigger text; content is inserted from clipboard --&gt;
&lt;details class="spoiler " id="spoiler-0"&gt;
&lt;summary class="cursor-pointer"&gt;Example&lt;/summary&gt;
&lt;div class="rounded-lg bg-neutral-50 dark:bg-neutral-800 p-2"&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;codebase-onboarding&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Helps new developers understand the system works.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;allowed-tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Read, Grep, Glob, Bash&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;sonnet&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;allowed-tools&lt;/code&gt; field is set to &lt;code&gt;Read, Grep, Glob, Bash&lt;/code&gt;. When this skill is active, Claude can use those four tools without asking permission. It doesn&amp;rsquo;t lose access to anything else: if the skill&amp;rsquo;s instructions lead Claude to edit or write a file, that goes through your normal permission settings like any other tool call.&lt;/p&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-red-100 dark:bg-red-900 border-red-500"
data-callout="caution"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-red-600 dark:text-red-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0zM12 15.75h.007v.008H12z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Caution&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Listing &lt;code&gt;Bash&lt;/code&gt; on its own pre-approves shell commands in general, so reserve that for skills you trust, or narrow it to a pattern such as &lt;code&gt;Bash(git status *)&lt;/code&gt;.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;To take tools away while a skill is active, use a separate Claude Code frontmatter field, &lt;code&gt;disallowed-tools&lt;/code&gt;, which removes the tools you list from the set Claude can use.s&lt;/p&gt;
&lt;h2 id="progressive-disclosure"&gt;Progressive Disclosure&lt;/h2&gt;
&lt;!-- text: required trigger text; content is inserted from clipboard --&gt;
&lt;details class="spoiler " id="spoiler-1"&gt;
&lt;summary class="cursor-pointer"&gt;Why progressive disclosure is necessary&lt;/summary&gt;
&lt;div class="rounded-lg bg-neutral-50 dark:bg-neutral-800 p-2"&gt;
&lt;p&gt;Skills share Claude&amp;rsquo;s context window with your conversation. When Claude activates a skill, it loads the contents of that SKILL.md into context. But sometimes you need references, examples, or utility scripts that the skill depends on.&lt;/p&gt;
&lt;p&gt;Cramming everything into one 2,000-line file has two problems: it takes up a lot of context window space, and it&amp;rsquo;s not fun to maintain.&lt;/p&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;p&gt;&lt;strong&gt;Progressive disclosure&lt;/strong&gt;: Keep essential instructions in SKILL.md and put detailed reference material in separate files that Claude reads only when needed.&lt;/p&gt;
&lt;p&gt;The open standard suggests organizing your skill directory with:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Location&lt;/th&gt;
&lt;th&gt;Contains&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SKILL.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Essential instructions, plus links to the supporting files with clear guidance on when to load each one&lt;/td&gt;
&lt;td&gt;A good rule of thumb: &lt;strong&gt;keep SKILL.md under 500 lines&lt;/strong&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;scripts/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Executable code&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;references/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Additional documentation&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;assets/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Images, templates, or other data files&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;my-skill/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── SKILL.md # short (&amp;lt;500 lines): what to do and when to read the other files.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── references/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ └── architecture-guide.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── scripts/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ └── check.py
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── assets/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └── report-template.md
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="using-scripts-efficiently"&gt;Using Scripts Efficiently&lt;/h2&gt;
&lt;p&gt;Key instruction to include in your SKILL.md: Tell &lt;strong&gt;Claude to &lt;em&gt;run&lt;/em&gt; the script, not &lt;em&gt;read&lt;/em&gt; it&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Scripts in your skill directory can run &lt;em&gt;without&lt;/em&gt; loading their contents into context. The script executes and only the output consumes tokens.&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- text: required trigger text; content is inserted from clipboard --&gt;
&lt;details class="spoiler " id="spoiler-2"&gt;
&lt;summary class="cursor-pointer"&gt;Python analogy&lt;/summary&gt;
&lt;div class="rounded-lg bg-neutral-50 dark:bg-neutral-800 p-2"&gt;
In Python you call &lt;code&gt;pd.read_csv(path)&lt;/code&gt; without pasting the pandas source into your notebook. &lt;strong&gt;You care about the result, not the 10,000 lines that produced it.&lt;/strong&gt; A skill script works the same way for Claude.
&lt;/div&gt;
&lt;/details&gt;
&lt;p&gt;This is particularly useful for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Environment validation&lt;/li&gt;
&lt;li&gt;Data transformations that need to be consistent&lt;/li&gt;
&lt;li&gt;Operations that are more reliable as tested code than generated code&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- text: required trigger text; content is inserted from clipboard --&gt;
&lt;details class="spoiler " id="spoiler-3"&gt;
&lt;summary class="cursor-pointer"&gt;Example&lt;/summary&gt;
&lt;div class="rounded-lg bg-neutral-50 dark:bg-neutral-800 p-2"&gt;
&lt;p&gt;In a CV evaluation skill, &lt;code&gt;SKILL.md&lt;/code&gt; could say:&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Run &lt;code&gt;scripts/eval_metrics.py --pred preds.json --gt labels.json&lt;/code&gt; and summarize the mAP and per-class results.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Claude executes your tested metric code and sees only a short results table, not the implementation. You get the same mAP calculation every run, instead of Claude improvising one.&lt;/p&gt;
&lt;/div&gt;
&lt;/details&gt;</description></item><item><title>Skills vs. Other Claude Code Features</title><link>https://haobin-tan.netlify.app/doc/claude/introduction-to-agent-skills/skills_vs_other_claude_code_features/</link><pubDate>Tue, 13 Oct 2026 00:00:00 +0000</pubDate><guid>https://haobin-tan.netlify.app/doc/claude/introduction-to-agent-skills/skills_vs_other_claude_code_features/</guid><description>
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Note&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;h3 id="tldr"&gt;TL;DR&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CLAUDE.md&lt;/strong&gt; loads into every conversation and is best for always-on project standards. &lt;strong&gt;Skills&lt;/strong&gt; load on demand and are best for task-specific expertise&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Subagents&lt;/strong&gt; run in isolated execution contexts — use them for delegated work. &lt;strong&gt;Skills&lt;/strong&gt; add knowledge to your current conversation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hooks&lt;/strong&gt; are event-driven (fire on file saves, tool calls). &lt;strong&gt;Skills&lt;/strong&gt; are request-driven (activate based on what you&amp;rsquo;re asking)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MCP servers&lt;/strong&gt; provide external tools and integrations — a different category entirely from skills&lt;/li&gt;
&lt;li&gt;Each feature handles its own specialty — &lt;strong&gt;combine them&lt;/strong&gt; rather than forcing everything into one approach&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="claudemd-vs-skills"&gt;CLAUDE.md vs Skills&lt;/h2&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://raw.githubusercontent.com/EckoTan0804/upic-repo/master/uPic/5b601bf3261dea9cac381a074d1319512d2a169f1b45d847197a86fab9c106f6.png" alt="Side-by-side comparison of what belongs in CLAUDE.md and what belongs in Skills, listed below." loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use CLAUDE.md for:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Project-wide standards that &lt;strong&gt;always&lt;/strong&gt; apply&lt;/li&gt;
&lt;li&gt;Constraints like &amp;ldquo;never modify the database schema&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Framework preferences and coding style&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Use Skills for:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Task-specific expertise&lt;/li&gt;
&lt;li&gt;Knowledge that&amp;rsquo;s only relevant &lt;strong&gt;sometimes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Detailed procedures that would clutter every conversation&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-emerald-100 dark:bg-emerald-900 border-emerald-500"
data-callout="tip"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-emerald-600 dark:text-emerald-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 18v-5.25m0 0a6 6 0 0 0 1.5-.189m-1.5.189a6 6 0 0 1-1.5-.189m3.75 7.478a12.1 12.1 0 0 1-4.5 0m3.75 2.383a14.4 14.4 0 0 1-3 0M14.25 18v-.192c0-.983.658-1.823 1.508-2.316a7.5 7.5 0 1 0-7.517 0c.85.493 1.509 1.333 1.509 2.316V18"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Tip&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Skills can also be called &lt;em&gt;explicitly&lt;/em&gt; using /your-skill.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="skills-vs-subagents"&gt;Skills vs Subagents&lt;/h2&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://raw.githubusercontent.com/EckoTan0804/upic-repo/master/uPic/%E6%88%AA%E5%B1%8F2026-10-14%2017.06.00.png" alt="subagents vs. skills" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Subagents run in a &lt;strong&gt;separate&lt;/strong&gt; context. They receive a task, work on it independently, and return results. They&amp;rsquo;re isolated from the main conversation.&lt;/p&gt;
&lt;p&gt;Skills add knowledge to your &lt;strong&gt;current&lt;/strong&gt; conversation. When a skill activates, its instructions join the existing context.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use Subagents when:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You want to delegate a task to a separate execution context&lt;/li&gt;
&lt;li&gt;You need different tool access than the main conversation&lt;/li&gt;
&lt;li&gt;You want isolation between delegated work and your main context&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Use Skills when:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You want to enhance Claude&amp;rsquo;s knowledge for the current task&lt;/li&gt;
&lt;li&gt;The expertise applies throughout a conversation&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="skills-vs-hooks"&gt;Skills vs Hooks&lt;/h2&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://raw.githubusercontent.com/EckoTan0804/upic-repo/master/uPic/%E6%88%AA%E5%B1%8F2026-10-14%2017.07.51.png" alt="截屏2026-10-14 17.07.51" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Hooks are &lt;strong&gt;event-driven&lt;/strong&gt; and fire on events. A hook might run a linter every time Claude saves a file, or validate input before certain tool calls.&lt;/p&gt;
&lt;p&gt;Skills are &lt;strong&gt;request-driven&lt;/strong&gt;. They activate based on what you&amp;rsquo;re asking.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use Hooks for:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Operations that should run on every file save&lt;/li&gt;
&lt;li&gt;Validation before specific tool calls&lt;/li&gt;
&lt;li&gt;Automated side effects of Claude&amp;rsquo;s actions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Use Skills for:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Knowledge that informs how Claude handles requests&lt;/li&gt;
&lt;li&gt;Guidelines that affect Claude&amp;rsquo;s reasoning&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="putting-it-all-together"&gt;Putting It All Together&lt;/h2&gt;
&lt;p&gt;A typical setup might include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CLAUDE.md&lt;/strong&gt; — always-on project standards&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skills&lt;/strong&gt; — task-specific expertise that loads on demand&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hooks&lt;/strong&gt; — automated operations triggered by events&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Subagents&lt;/strong&gt; — isolated execution contexts for delegated work&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MCP servers&lt;/strong&gt; — external tools and integrations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each handles its own specialty. Don&amp;rsquo;t force everything into skills when another option fits better — and you can use multiple at a time.&lt;/p&gt;
&lt;p&gt;Use skills when you have knowledge that Claude should apply automatically when the topic is relevant, and combine them with other features for comprehensive customization.&lt;/p&gt;</description></item><item><title>Sharing Skills</title><link>https://haobin-tan.netlify.app/doc/claude/introduction-to-agent-skills/sharing_skills/</link><pubDate>Tue, 13 Oct 2026 00:00:00 +0000</pubDate><guid>https://haobin-tan.netlify.app/doc/claude/introduction-to-agent-skills/sharing_skills/</guid><description>
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Note&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;h3 id="tldr"&gt;TL;DR&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Project skills&lt;/strong&gt; in &lt;code&gt;.claude/skills&lt;/code&gt; are shared automatically through Git — anyone who clones the repo gets them&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plugins&lt;/strong&gt; let you distribute skills across repositories via marketplaces for broader community use&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise managed settings&lt;/strong&gt; deploy skills organization-wide with the highest priority, ideal for mandatory standards and compliance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Subagents don&amp;rsquo;t automatically see your skills&lt;/strong&gt; — you must explicitly list skills in a custom agent&amp;rsquo;s frontmatter &lt;code&gt;skills&lt;/code&gt; field&lt;/li&gt;
&lt;li&gt;Built-in agents (Explorer, Plan, Verify) &lt;strong&gt;can&amp;rsquo;t access skills at all&lt;/strong&gt; — only custom subagents defined in &lt;code&gt;.claude/agents&lt;/code&gt; can&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="project-skills-committing-skills-to-your-repository"&gt;Project Skills: Committing Skills to Your Repository&lt;/h2&gt;
&lt;p&gt;The simplest sharing method is &lt;strong&gt;committing skills directly to your repository&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Place them in &lt;code&gt;.claude/skills&lt;/code&gt;, and anyone who clones the repo gets those skills automatically — no extra installation needed.&lt;/li&gt;
&lt;li&gt;When you push updates, everyone gets them on the next pull.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This approach works well for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Team coding standards&lt;/li&gt;
&lt;li&gt;Project-specific workflows&lt;/li&gt;
&lt;li&gt;Skills that reference your codebase structure&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;code&gt;.claude&lt;/code&gt; directory contains your agents, hooks, skills, and settings — all version-controlled and shared with the team through normal Git workflows.&lt;/p&gt;
&lt;h2 id="distributing-skills-through-plugins"&gt;Distributing Skills Through Plugins&lt;/h2&gt;
&lt;p&gt;Plugins are a way to extend Claude Code with custom functionality designed to be shared across teams and projects.&lt;/p&gt;
&lt;p&gt;In your plugin project, create a &lt;code&gt;skills&lt;/code&gt; directory that follows a similar file structure to the &lt;code&gt;.claude&lt;/code&gt; directory — each skill gets its own folder with a &lt;code&gt;SKILL.md&lt;/code&gt; file inside. After you distribute your plugin to a marketplace, other users can discover and install it into Claude Code for themselves.&lt;/p&gt;
&lt;p&gt;This approach is best &lt;strong&gt;when your skills aren&amp;rsquo;t too project-specific and can be useful to community members&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="enterprise-deployment-through-managed-settings"&gt;Enterprise Deployment Through Managed Settings&lt;/h2&gt;
&lt;p&gt;Administrators can deploy skills organization-wide through managed settings (&lt;code&gt;managed-setting.json&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Enterprise skills take the &lt;strong&gt;highest&lt;/strong&gt; priority — they override personal, project, and plugin skills with the same name.&lt;/p&gt;
&lt;p&gt;This is the right choice for mandatory standards, security requirements, compliance workflows, and coding practices that &lt;em&gt;&lt;strong&gt;must&lt;/strong&gt;&lt;/em&gt; be consistent across the organization.&lt;/p&gt;
&lt;h2 id="skills-and-subagents"&gt;Skills and Subagents&lt;/h2&gt;
&lt;p&gt;Subagents &lt;strong&gt;don&amp;rsquo;t&lt;/strong&gt; automatically inherit your skills. When you delegate a task to a subagent, it starts with a fresh, clean context.&lt;/p&gt;
&lt;p&gt;Important distinctions to understand:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Built-in agents&lt;/strong&gt; (like Explorer, Plan, and Verify) can&amp;rsquo;t access skills at all&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom subagents&lt;/strong&gt; you define &lt;em&gt;can&lt;/em&gt; use skills, but only when you &lt;em&gt;explicitly&lt;/em&gt; list them&lt;/li&gt;
&lt;li&gt;Skills are loaded when the subagent starts, not on demand like in the main conversation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;How to give a subagent skills:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Make sure the skills exist in your &lt;code&gt;.claude/skills&lt;/code&gt; directory&lt;/li&gt;
&lt;li&gt;Create a new subagent or add the &lt;code&gt;skills&lt;/code&gt; field to the frontmatter of an existing agent&amp;rsquo;s markdown file.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-emerald-100 dark:bg-emerald-900 border-emerald-500"
data-callout="tip"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-emerald-600 dark:text-emerald-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 18v-5.25m0 0a6 6 0 0 0 1.5-.189m-1.5.189a6 6 0 0 1-1.5-.189m3.75 7.478a12.1 12.1 0 0 1-4.5 0m3.75 2.383a14.4 14.4 0 0 1-3 0M14.25 18v-.192c0-.983.658-1.823 1.508-2.316a7.5 7.5 0 1 0-7.517 0c.85.493 1.509 1.333 1.509 2.316V18"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Tip&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;You can use the &lt;code&gt;/agents&lt;/code&gt; command in Claude Code to create a subagent interactively&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;details class="spoiler " id="spoiler-0"&gt;
&lt;summary class="cursor-pointer"&gt;Example&lt;/summary&gt;
&lt;div class="rounded-lg bg-neutral-50 dark:bg-neutral-800 p-2"&gt;
&lt;p&gt;Here&amp;rsquo;s what the frontmatter looks like of a subagent looks like:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;frontend-security-accessibility-reviewer&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Use this agent when you need to review frontend code for accessibility...&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Bash, Glob, Grep, Read, WebFetch, WebSearch, Skill...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;sonnet&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;blue&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;skills&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;accessibility-audit, performance-check&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When you delegate to this subagent, it has both skills loaded and applies them to every review.&lt;/p&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;p&gt;This pattern works really well when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You want isolated task delegation with specific expertise&lt;/li&gt;
&lt;li&gt;Different subagents need different skills (frontend reviewer vs. backend reviewer)&lt;/li&gt;
&lt;li&gt;You want to enforce standards in delegated work without relying on prompts&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Troubleshooting Skills</title><link>https://haobin-tan.netlify.app/doc/claude/introduction-to-agent-skills/troubleshooting_skills/</link><pubDate>Tue, 13 Oct 2026 00:00:00 +0000</pubDate><guid>https://haobin-tan.netlify.app/doc/claude/introduction-to-agent-skills/troubleshooting_skills/</guid><description>
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Note&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;h3 id="tldr"&gt;TL;DR&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Start with the &lt;strong&gt;skills validator tool&lt;/strong&gt; — it catches structural problems before you spend time debugging other things&lt;/li&gt;
&lt;li&gt;If a skill &lt;strong&gt;doesn&amp;rsquo;t trigger&lt;/strong&gt;, the cause is almost always the description — add trigger phrases that match how you actually phrase requests&lt;/li&gt;
&lt;li&gt;If a skill &lt;strong&gt;doesn&amp;rsquo;t load&lt;/strong&gt;, check that &lt;code&gt;SKILL.md&lt;/code&gt; is inside a named directory (not at the skills root) and the file name is exactly &lt;code&gt;SKILL.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;If the &lt;strong&gt;wrong skill gets used&lt;/strong&gt;, your descriptions are too similar — make them more distinct&lt;/li&gt;
&lt;li&gt;For &lt;strong&gt;runtime errors&lt;/strong&gt;, check dependencies, file permissions (&lt;code&gt;chmod +x&lt;/code&gt;), and path separators (use forward slashes everywhere)&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="use-the-skills-validator"&gt;Use the Skills Validator&lt;/h2&gt;
&lt;p&gt;The first thing to try is the agent skills verifier command.&lt;/p&gt;
&lt;p&gt;Installation steps vary by operating system, but using &lt;code&gt;uv&lt;/code&gt; is the easiest way to get it set up quickly.&lt;/p&gt;
&lt;p&gt;Once installed, either navigate to your skill directory or run the command from anywhere. The validator will catch structural problems before you spend time debugging other things.&lt;/p&gt;
&lt;h2 id="the-problems"&gt;The Problems&lt;/h2&gt;
&lt;p&gt;When skills don&amp;rsquo;t work, the problem usually falls into one of a few categories: the skill&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;doesn&amp;rsquo;t trigger,&lt;/li&gt;
&lt;li&gt;doesn&amp;rsquo;t load,&lt;/li&gt;
&lt;li&gt;has conflicts, or&lt;/li&gt;
&lt;li&gt;fails at runtime.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Quick troubleshooting checklist:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Not triggering?&lt;/strong&gt; -&amp;gt; Improve your description and add trigger phrases.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not loading?&lt;/strong&gt; -&amp;gt; Check your path, file name, and YAML syntax.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wrong skill used?&lt;/strong&gt; -&amp;gt; Make descriptions more distinct from each other.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Being shadowed?&lt;/strong&gt; -&amp;gt; Check the priority hierarchy and rename if needed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plugin skills missing?&lt;/strong&gt; -&amp;gt; Clear cache and reinstall.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Runtime failure?&lt;/strong&gt; -&amp;gt; Check dependencies, permissions, and paths.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="skill-doesnt-trigger"&gt;Skill doesn&amp;rsquo;t trigger&lt;/h3&gt;
&lt;p&gt;Problem: Your skill exists and passes validation, but Claude isn&amp;rsquo;t using it when you expect.&lt;/p&gt;
&lt;p&gt;Root cause: The &lt;strong&gt;description&lt;/strong&gt;. Claude uses semantic matching, so your request needs to overlap with the description&amp;rsquo;s meaning. If there&amp;rsquo;s not enough overlap, no match.&lt;/p&gt;
&lt;p&gt;Fix:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Check your description against how you&amp;rsquo;re actually phrasing requests&lt;/li&gt;
&lt;li&gt;Add trigger phrases users would actually say&lt;/li&gt;
&lt;li&gt;Test with variations like &amp;ldquo;help me profile this,&amp;rdquo; &amp;ldquo;why is this slow?&amp;rdquo;, &amp;ldquo;make this faster&amp;rdquo;&lt;/li&gt;
&lt;li&gt;If any variation fails to trigger, add those keywords to your description&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="skill-doesnt-load"&gt;Skill doesn&amp;rsquo;t load&lt;/h3&gt;
&lt;p&gt;Problem: The skill doesn&amp;rsquo;t appear when you ask Claude &amp;ldquo;what skills are available&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Fix:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Check these structural requirements:
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;SKILL.md&lt;/code&gt; file must be inside a named directory, not at the skills root&lt;/li&gt;
&lt;li&gt;The file name must be exactly &lt;code&gt;SKILL.md&lt;/code&gt; — all caps on &amp;ldquo;SKILL&amp;rdquo;, lowercase &amp;ldquo;md&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;claude --debug&lt;/code&gt; to see loading errors. Look for messages mentioning your skill name.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="wrong-skill-gets-used"&gt;Wrong skill gets used&lt;/h3&gt;
&lt;p&gt;Problem: Claude uses the wrong skill or seems confused between skills&lt;/p&gt;
&lt;p&gt;Root cause: Your descriptions are probably too similar.&lt;/p&gt;
&lt;p&gt;Fix: Make them distinct.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Being as specific as possible doesn&amp;rsquo;t just help Claude decide when to use your skill — it also prevents conflicts with other similar-sounding skills.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="skill-priority-conflicts"&gt;Skill priority conflicts&lt;/h3&gt;
&lt;p&gt;Problem: Your personal skill is being ignored,&lt;/p&gt;
&lt;p&gt;Root cause: An enterprise or higher-priority skill might have the same name.&lt;/p&gt;
&lt;p&gt;Fix:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rename your skill to something more distinct (this is usually the easier path)&lt;/li&gt;
&lt;li&gt;Talk to your admin about the enterprise skill&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="plugin-skills-not-appearing"&gt;Plugin skills not appearing&lt;/h3&gt;
&lt;p&gt;Problem: Installed a plugin but can&amp;rsquo;t see its skills.&lt;/p&gt;
&lt;p&gt;Fix:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Clear the cache, restart Claude Code, and reinstall.&lt;/li&gt;
&lt;li&gt;If skills still don&amp;rsquo;t appear after that, the plugin structure might be wrong. -&amp;gt; Use the validator tool.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="runtime-errors"&gt;Runtime errors&lt;/h3&gt;
&lt;p&gt;Problem: The skill loads but fails during execution.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Root Cause&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Missing dependencies&lt;/td&gt;
&lt;td&gt;If your skill uses external packages, they must be installed. Add dependency info to your skill description so Claude knows what&amp;rsquo;s needed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Permission issues&lt;/td&gt;
&lt;td&gt;Scripts need execute permission. Run &lt;code&gt;chmod +x&lt;/code&gt; on any scripts your skill references.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Path separators&lt;/td&gt;
&lt;td&gt;Use forward slashes everywhere, even on Windows.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item></channel></rss>