{"id":496910,"date":"2026-10-01T12:09:22","date_gmt":"2026-10-01T12:09:22","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=496910"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=496910","title":{"rendered":"How to Create Agent Skills: Tools, Testing, and Installation"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><strong>Originally published on <\/strong><a href=\"https:\/\/mavka.ai\/blog\/how-to-create-test-install-claude-skills\" rel=\"noopener nofollow\"><strong>Mavka<\/strong><\/a><strong>.<\/strong><\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/502\/cbf\/6e6\/502cbf6e6d94310f5ba76645dd4a904a.jpg\" alt=\"An instructor writing formulas on a large chalkboard\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/\/post_images\/502\/cbf\/6e6\/502cbf6e6d94310f5ba76645dd4a904a.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/502\/cbf\/6e6\/502cbf6e6d94310f5ba76645dd4a904a.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>An instructor writing formulas on a large chalkboard<\/figcaption><\/div>\n<\/figure>\n<blockquote>\n<p>In short. Start with a task that keeps coming up and turn it into a Skill with superpowers:writing-skills. While creating it, test scenarios with and without the Skill, and validate the structure of SKILL.md. Then use the Skill on several real tasks. If it consistently helps, share it with your team through a Skills repository or a Plugin.<\/p>\n<\/blockquote>\n<p>Creating your first Agent Skill is easy. Make a folder, put a <code>SKILL.md<\/code> file in it, and write a few instructions.<\/p>\n<p><strong>The harder part is knowing whether that Skill actually works.<\/strong><\/p>\n<p>The agent has to find it among dozens of other instructions, invoke it for the right request, ignore similar but irrelevant requests, follow its instructions, and produce a better result than it would without the Skill.<\/p>\n<p>This guide covers tools for the full cycle: creation, improvement, validation, testing, installation, and maintenance.<\/p>\n<h3>What a Skill is in practice<\/h3>\n<p>An Agent Skill is a folder containing instructions, reference material, and, if needed, executable scripts. Only one file is required: <code>SKILL.md<\/code>.<\/p>\n<p>A minimal Skill looks like this:<\/p>\n<pre><code>review-migration\/\u2514\u2500\u2500 SKILL.md<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<pre><code>---name: review-migrationdescription: Reviews database migrations for compatibility and rollback risks. Use when a user creates or changes a database migration.---Review the migration:1. Check backward compatibility.2. Identify locks or long-running operations.3. Verify the rollback or roll-forward path.4. Report only risks introduced by this migration.<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>The open <a href=\"https:\/\/agentskills.io\/specification\" rel=\"noopener nofollow\">Agent Skills specification<\/a> requires the <code>name<\/code> and <code>description<\/code> fields. The description tells the agent when to read the full Skill for the task at hand.<\/p>\n<p>That matters because of how Skills are loaded:<\/p>\n<ol>\n<li>\n<p>The agent sees the metadata for all available Skills.<\/p>\n<\/li>\n<li>\n<p>The description helps it decide whether to read a particular Skill.<\/p>\n<\/li>\n<li>\n<p>Once the Skill is activated, it reads the full <code>SKILL.md<\/code>.<\/p>\n<\/li>\n<li>\n<p>It opens additional <code>references\/<\/code>, <code>scripts\/<\/code>, and <code>assets\/<\/code> only when needed.<\/p>\n<\/li>\n<\/ol>\n<p>Anthropic calls this <a href=\"https:\/\/platform.claude.com\/docs\/en\/agents-and-tools\/agent-skills\/overview\" rel=\"noopener nofollow\">progressive disclosure<\/a>. It manages context: the agent doesn\u2019t need the full text of every Skill in every request. It reads instructions for the relevant task and opens longer reference material when it needs it.<\/p>\n<h3>Skill, AGENTS.md, or Plugin?<\/h3>\n<p>Not every instruction should become a Skill.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">Mechanism<\/p>\n<\/th>\n<th>\n<p align=\"left\">When to use it<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">AGENTS.md<\/p>\n<\/td>\n<td>\n<p align=\"left\">Short, always-on context: project structure, working commands, non-obvious architecture decisions, and links to detailed rules<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Skill<\/p>\n<\/td>\n<td>\n<p align=\"left\">A repeatable process or knowledge needed only for a particular type of task<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Plugin<\/p>\n<\/td>\n<td>\n<p align=\"left\">A collection of Skills with agents, Hooks, MCP servers, configuration, or its own versioning lifecycle<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">MCP server<\/p>\n<\/td>\n<td>\n<p align=\"left\">Standardized access to an external system, data, or API<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Hook<\/p>\n<\/td>\n<td>\n<p align=\"left\">A predefined action triggered by an event, such as running a formatter after an edit<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>Why Skills once started replacing MCP integrations, and what changed<\/strong><\/p>\n<p>Large MCP integrations used to load descriptions for every tool into each request. A few servers could occupy a substantial share of the context window. That led people to replace narrow integrations with Skills containing CLI commands: the agent would read the instructions only when it needed them.<\/p>\n<p>Modern <a href=\"https:\/\/platform.claude.com\/docs\/en\/agents-and-tools\/tool-use\/manage-tool-context\" rel=\"noopener nofollow\">tool search with deferred loading<\/a> has changed that trade-off. Descriptions of unused MCP tools no longer have to be included in the initial request: the agent can find the tool it needs and load its description on demand. That makes discovery more similar to Skills, though their roles remain different: a Skill provides a process and knowledge, while an MCP server performs an external action or returns data.<\/p>\n<blockquote>\n<p>A good sign that you need a new Skill: you\u2019re pasting the same checklist into a chat or explaining the same process to a new session for the third time.<\/p>\n<\/blockquote>\n<h3>Tools for creating Skills<\/h3>\n<h4>1. The agent itself<\/h4>\n<p>You don\u2019t need a separate generator. Anthropic\u2019s official <a href=\"https:\/\/platform.claude.com\/docs\/en\/agents-and-tools\/agent-skills\/best-practices\" rel=\"noopener nofollow\">authoring guide<\/a> recommends completing a real task from start to finish in a normal agent session, then asking the agent to extract the repeatable process into a Skill.<\/p>\n<p>That\u2019s a better starting point than inventing a universal Skill from scratch. Real work quickly shows you:<\/p>\n<ul>\n<li>\n<p>which context you keep repeating;<\/p>\n<\/li>\n<li>\n<p>where the agent makes the wrong decision;<\/p>\n<\/li>\n<li>\n<p>what belongs in instructions and what would work better as a script;<\/p>\n<\/li>\n<li>\n<p>which examples and edge cases you need.<\/p>\n<\/li>\n<\/ul>\n<p>Your initial request can be simple:<\/p>\n<pre><code>Turn the process we just followed into an Agent Skill.Keep only the required process in SKILL.md.Move long reference material to references\/.Add examples of requests that should and should not trigger the Skill.<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h4>2. skill-creator or superpowers:writing-skills<\/h4>\n<p>Once you have a draft, you can use the <a href=\"https:\/\/github.com\/anthropics\/claude-plugins-official\/tree\/main\/plugins\/skill-creator\" rel=\"noopener nofollow\">official skill-creator<\/a>. It helps create and edit Skills, build test scenarios, compare results against an initial run without the Skill, and perform a blind A\/B comparison of two versions.<\/p>\n<p>Install it from the official Marketplace:<\/p>\n<pre><code>\u203a\/plugin install skill-creator@claude-plugins-official<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>After installation, you can ask the agent:<\/p>\n<pre><code>Evaluate my review-migration Skill using skill-creator.<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>For creating Skills, I recommend Codex and <a href=\"https:\/\/github.com\/obra\/superpowers\/blob\/main\/skills\/writing-skills\/SKILL.md\" rel=\"noopener nofollow\">superpowers:writing-skills<\/a>. Its principle is stricter: first give the agent a real scenario without the Skill and record a specific failure; then write the smallest useful Skill, repeat the same scenario, and check whether its behavior changed. If the agent consistently completes the task correctly without the Skill, a new Skill may have no purpose.<\/p>\n<p>That\u2019s enough for an early version. You don\u2019t need a CI system for an instruction you haven\u2019t even used twice.<\/p>\n<h3>Three different kinds of checks<\/h3>\n<p>The word \u201cvalidation\u201d often hides three different questions.<\/p>\n<p><code>Superpowers:writing-skills<\/code> adds a preliminary step: run a scenario without the Skill, put the agent under pressure, and observe how it behaves without extra instructions. This tests the premise itself. If the baseline run already succeeds, the Skill adds nothing; if it fails, you can see the specific behavior you need to change.<\/p>\n<h4>1. Is the structure valid?<\/h4>\n<p>For a portable Skill, use the validator for the open specification:<\/p>\n<pre><code>$skills-ref validate .\/review-migration<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>It checks the frontmatter and naming rules.<\/p>\n<p>In Claude Code, you can validate project Skills like this:<\/p>\n<pre><code>$claude plugin validate .claude\/skills<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>Or validate all user-level customizations:<\/p>\n<pre><code>$claude plugin validate ~\/.claude<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>According to the <a href=\"https:\/\/code.claude.com\/docs\/en\/plugin-marketplaces#validate-a-plugin-or-a-directory-without-a-manifest\" rel=\"noopener nofollow\">Claude Code documentation<\/a>, the validator finds problems with YAML, metadata, and Plugin structure. This checks syntax and schema. A successful result doesn\u2019t mean the agent will choose the Skill at the right time.<\/p>\n<h4>2. Does the Skill trigger?<\/h4>\n<p>Give this check to <code>superpowers:writing-skills<\/code> while creating the Skill. Include real requests that should trigger it and similar-sounding requests that should not. <code>superpowers:writing-skills<\/code> will run the scenarios and show whether the agent finds the instructions at the right moment.<\/p>\n<p>If the Skill doesn\u2019t trigger, or triggers when it shouldn\u2019t, refine its <code>description<\/code> and repeat the check. If it triggers but doesn\u2019t help, revisit the main instructions and supporting files.<\/p>\n<h4>3. Did the result improve?<\/h4>\n<p>For a Skill packaged as a Plugin, Claude Code has a separate testing tool:<\/p>\n<pre><code>$claude plugin eval init$claude plugin eval .<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><a href=\"https:\/\/code.claude.com\/docs\/en\/plugin-evals\" rel=\"noopener nofollow\">Claude plugin eval<\/a> runs each scenario in an isolated session several times with and without the Plugin. Graders can check text, tool calls, action order, created files, or criteria assessed by an LLM. The difference between <code>WITH<\/code> and <code>W\/OUT<\/code> shows the Plugin\u2019s contribution, rather than just the base model\u2019s ability to complete the task.<\/p>\n<p>This is useful for Skills that a team versions, shares, or uses in a critical process. The runs make real model calls. By default, each scenario runs three times with the Plugin and three times without it, so a suite costs both time and money.<\/p>\n<p>One detail matters: <code>skill-creator<\/code> and <code>claude plugin eval<\/code> use different test formats. The former is useful for improving one Skill through a conversation. The latter is better suited to Plugins, regression suites, and CI.<\/p>\n<h3>What \/skill-doctor tells you<\/h3>\n<p><code>\/skill-doctor<\/code> answers a different question: which Skills consume context but are rarely used?<\/p>\n<p>It shows how much context descriptions occupy, which Skills have never been invoked, and which Plugins haven\u2019t been used for a while. That helps remove noise from a large library. But <code>\/skill-doctor<\/code> doesn\u2019t assess instruction quality or replace behavior checks.<\/p>\n<h3>How to install a Skill in a project<\/h3>\n<p>The simplest option is to add it manually:<\/p>\n<pre><code>$mkdir -p .claude\/skills\/review-migration<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>Then create <code>.claude\/skills\/review-migration\/SKILL.md<\/code> and commit the folder. The Skill will load in sessions for that repository.<\/p>\n<p>For a personal Skill that you need across all your local projects:<\/p>\n<pre><code>~\/.claude\/skills\/review-migration\/SKILL.md<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>In a monorepo, you can put a Skill in <code>&lt;package&gt;\/.claude\/skills\/<\/code>. It will apply to work in that subtree.<\/p>\n<p>If a Skill is published in a Git repository and supports the open ecosystem:<\/p>\n<pre><code>$npx skills add owner\/repository --skill review-migration -a claude-code<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>Add <code>-g<\/code> to install it globally instead of in the current project.<\/p>\n<h3>When you need a Plugin and Marketplace<\/h3>\n<p>A standalone Skill works well within one repository. Use a Plugin when you want to:<\/p>\n<ul>\n<li>\n<p>distribute several Skills as one package;<\/p>\n<\/li>\n<li>\n<p>add agents, Hooks, or MCP configuration;<\/p>\n<\/li>\n<li>\n<p>have a namespace such as <code>\/database-tools:review-migration<\/code>;<\/p>\n<\/li>\n<li>\n<p>version and update the package;<\/p>\n<\/li>\n<li>\n<p>attach a formal test suite.<\/p>\n<\/li>\n<\/ul>\n<p>A minimal Plugin structure:<\/p>\n<pre><code>database-tools\/\u251c\u2500\u2500 .claude-plugin\/\u2502   \u2514\u2500\u2500 plugin.json\u2514\u2500\u2500 skills\/    \u2514\u2500\u2500 review-migration\/        \u2514\u2500\u2500 SKILL.md<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>You can test the Plugin locally with:<\/p>\n<pre><code>$claude --plugin-dir .\/database-tools$claude plugin validate .\/database-tools<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>To share it, a team can create a private Marketplace, add it at the project level, and install the Plugin from there. The official <a href=\"https:\/\/code.claude.com\/docs\/en\/plugin-marketplaces\" rel=\"noopener nofollow\">Marketplace documentation<\/a> supports a GitHub repository, Git URL, remote <code>marketplace.json<\/code>, and local path.<\/p>\n<pre><code>\u203a\/plugin marketplace add acme\/database-plugins\u203a\/plugin install database-tools@acme-database-plugins<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>The CLI equivalent supports <code>user<\/code>, <code>project<\/code>, and <code>local<\/code> scopes. At the <code>project<\/code> level, configuration is written to the repository so the team shares one Plugin source.<\/p>\n<h3>Check third-party Skills before installing them<\/h3>\n<p>There has never been an easier way for agent instructions to spread widely. One repository and one install command can put someone else\u2019s <code>SKILL.md<\/code>, scripts, or entire Plugin into hundreds of working environments.<\/p>\n<p>A Skill gives instructions to an agent with access to files and tools. A Plugin can also contain Hooks, MCP servers, and executable scripts. Popularity in a catalog doesn\u2019t automatically make that code safe.<\/p>\n<blockquote>\n<p>Before installing, check:<\/p>\n<p>the contents of SKILL.md and every reference to scripts\/; allowed-tools and shell commands; Hooks and MCP configuration inside the Plugin; whether the Skill requests secrets, unnecessary permissions, or network access; the repository owner, license, change history, and update process.<\/p>\n<\/blockquote>\n<p>For a team library, pin a reviewed version, run validation in CI, and update Skills as deliberately as you update other dependencies.<\/p>\n<h3>A practical process without extra infrastructure<\/h3>\n<p>For your first Skill:<\/p>\n<ol>\n<li>\n<p>Complete a real task without the Skill.<\/p>\n<\/li>\n<li>\n<p>Record the baseline result: exactly where the agent failed or behaved inconsistently.<\/p>\n<\/li>\n<li>\n<p>Ask the agent to extract the repeatable process.<\/p>\n<\/li>\n<li>\n<p>Write three requests that should trigger the Skill and three similar but irrelevant requests.<\/p>\n<\/li>\n<li>\n<p>Put the Skill in <code>.claude\/skills<\/code>.<\/p>\n<\/li>\n<li>\n<p>Validate its structure.<\/p>\n<\/li>\n<li>\n<p>Repeat the baseline scenario in a new session with the Skill.<\/p>\n<\/li>\n<\/ol>\n<p>For a Skill used by a team:<\/p>\n<ol>\n<li>\n<p>Add more real scenarios.<\/p>\n<\/li>\n<li>\n<p>Move unstable steps into deterministic scripts.<\/p>\n<\/li>\n<li>\n<p>Package the Skill as a Plugin.<\/p>\n<\/li>\n<li>\n<p>Add <code>claude plugin eval<\/code>.<\/p>\n<\/li>\n<li>\n<p>Run the suite after Skill changes and after switching to a new model.<\/p>\n<\/li>\n<li>\n<p>Periodically check <code>\/skill-doctor<\/code> and disable what you don\u2019t use.<\/p>\n<\/li>\n<\/ol>\n<h3>The main mistake: testing the file instead of behavior<\/h3>\n<p>The weakest success criterion is: \u201cThe agent read the Skill, and its answer looks fine.\u201d<\/p>\n<p>Better questions are:<\/p>\n<ul>\n<li>\n<p>Did the Skill trigger without its name being mentioned?<\/p>\n<\/li>\n<li>\n<p>Did it stay quiet for a similar but irrelevant request?<\/p>\n<\/li>\n<li>\n<p>Did it improve the result compared with the baseline run?<\/p>\n<\/li>\n<li>\n<p>Did it reduce repeated explanations?<\/p>\n<\/li>\n<li>\n<p>Can you reproduce the result in a new session?<\/p>\n<\/li>\n<li>\n<p>Does the new version fix a specific failure without breaking existing scenarios?<\/p>\n<\/li>\n<\/ul>\n<p>A Skill isn\u2019t a document you write once and polish. It\u2019s an executable part of the agent workflow. Treat it like code: keep it short, test it on real scenarios, version it, and don\u2019t confuse valid syntax with the right behavior.<\/p>\n<p>Try it in practice. We\u2019ve published a set of Agent Skills for generating effective unit tests. Install it in your project and try it on real code.<\/p>\n<p><a href=\"https:\/\/github.com\/mavka-ai\/unit-tests-skills\" rel=\"noopener nofollow\">Try the unit testing Skills<\/a><\/p>\n<p>In the next article, I\u2019ll show how we tested these Skills, what baseline we compared them with, and what we found during testing.<\/p>\n<p>Sources:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/code.claude.com\/docs\/en\/skills\" rel=\"noopener nofollow\">Claude Code \u2014 Extend Claude with skills<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/code.claude.com\/docs\/en\/plugin-evals\" rel=\"noopener nofollow\">Claude Code \u2014 Test plugins with evals<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/code.claude.com\/docs\/en\/plugins\" rel=\"noopener nofollow\">Claude Code \u2014 Create plugins<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/code.claude.com\/docs\/en\/plugin-marketplaces\" rel=\"noopener nofollow\">Claude Code \u2014 Plugin marketplaces<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/agentskills.io\/specification\" rel=\"noopener nofollow\">Agent Skills specification<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/platform.claude.com\/docs\/en\/agents-and-tools\/agent-skills\/best-practices\" rel=\"noopener nofollow\">Anthropic \u2014 Skill authoring best practices<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/platform.claude.com\/docs\/en\/agents-and-tools\/tool-use\/manage-tool-context\" rel=\"noopener nofollow\">Anthropic \u2014 Manage tool context<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/anthropics\/claude-plugins-official\/tree\/main\/plugins\/skill-creator\" rel=\"noopener nofollow\">Anthropic \u2014 skill-creator<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/obra\/superpowers\/blob\/main\/skills\/writing-skills\/SKILL.md\" rel=\"noopener nofollow\">Superpowers \u2014 writing-skills<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/vercel-labs\/skills\" rel=\"noopener nofollow\">Vercel Labs \u2014 skills CLI<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1089104\/\">https:\/\/habr.com\/ru\/articles\/1089104\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Originally published on Mavka.An instructor writing formulas on a large chalkboardIn short. Start with a task that keeps coming up and turn it into a Skill with superpowers:writing-skills. While creating it, test scenarios with and without the Skill, and validate the structure of SKILL.md. Then use the Skill on several real tasks. If it consistently helps, share it with your team through a Skills repository or a Plugin.Creating your first Agent Skill is easy. Make a folder, put a SKILL.md file in it, and write a few instructions.The harder part is knowing whether that Skill actually works.The agent has to find it among dozens of other instructions, invoke it for the right request, ignore similar but irrelevant requests, follow its instructions, and produce a better result than it would without the Skill.This guide covers tools for the full cycle: creation, improvement, validation, testing, installation, and maintenance.What a Skill is in practiceAn Agent Skill is a folder containing instructions, reference material, and, if needed, executable scripts. Only one file is required: SKILL.md.A minimal Skill looks like this:review-migration\/\u2514\u2500\u2500 SKILL.md&#8212;name: review-migrationdescription: Reviews database migrations for compatibility and rollback risks. Use when a user creates or changes a database migration.&#8212;Review the migration:1. Check backward compatibility.2. Identify locks or long-running operations.3. Verify the rollback or roll-forward path.4. Report only risks introduced by this migration.The open Agent Skills specification requires the name and description fields. The description tells the agent when to read the full Skill for the task at hand.That matters because of how Skills are loaded:The agent sees the metadata for all available Skills.The description helps it decide whether to read a particular Skill.Once the Skill is activated, it reads the full SKILL.md.It opens additional references\/, scripts\/, and assets\/ only when needed.Anthropic calls this progressive disclosure. It manages context: the agent doesn\u2019t need the full text of every Skill in every request. It reads instructions for the relevant task and opens longer reference material when it needs it.Skill, AGENTS.md, or Plugin?Not every instruction should become a Skill.MechanismWhen to use itAGENTS.mdShort, always-on context: project structure, working commands, non-obvious architecture decisions, and links to detailed rulesSkillA repeatable process or knowledge needed only for a particular type of taskPluginA collection of Skills with agents, Hooks, MCP servers, configuration, or its own versioning lifecycleMCP serverStandardized access to an external system, data, or APIHookA predefined action triggered by an event, such as running a formatter after an editWhy Skills once started replacing MCP integrations, and what changedLarge MCP integrations used to load descriptions for every tool into each request. A few servers could occupy a substantial share of the context window. That led people to replace narrow integrations with Skills containing CLI commands: the agent would read the instructions only when it needed them.Modern tool search with deferred loading has changed that trade-off. Descriptions of unused MCP tools no longer have to be included in the initial request: the agent can find the tool it needs and load its description on demand. That makes discovery more similar to Skills, though their roles remain different: a Skill provides a process and knowledge, while an MCP server performs an external action or returns data.A good sign that you need a new Skill: you\u2019re pasting the same checklist into a chat or explaining the same process to a new session for the third time.Tools for creating Skills1. The agent itselfYou don\u2019t need a separate generator. Anthropic\u2019s official authoring guide recommends completing a real task from start to finish in a normal agent session, then asking the agent to extract the repeatable process into a Skill.That\u2019s a better starting point than inventing a universal Skill from scratch. Real work quickly shows you:which context you keep repeating;where the agent makes the wrong decision;what belongs in instructions and what would work better as a script;which examples and edge cases you need.Your initial request can be simple:Turn the process we just followed into an Agent Skill.Keep only the required process in SKILL.md.Move long reference material to references\/.Add examples of requests that should and should not trigger the Skill.2. skill-creator or superpowers:writing-skillsOnce you have a draft, you can use the official skill-creator. It helps create and edit Skills, build test scenarios, compare results against an initial run without the Skill, and perform a blind A\/B comparison of two versions.Install it from the official Marketplace:\u203a\/plugin install skill-creator@claude-plugins-officialAfter installation, you can ask the agent:Evaluate my review-migration Skill using skill-creator.For creating Skills, I recommend Codex and superpowers:writing-skills. Its principle is stricter: first give the agent a real scenario without the Skill and record a specific failure; then write the smallest useful Skill, repeat the same scenario, and check whether its behavior changed. If the agent consistently completes the task correctly without the Skill, a new Skill may have no purpose.That\u2019s enough for an early version. You don\u2019t need a CI system for an instruction you haven\u2019t even used twice.Three different kinds of checksThe word \u201cvalidation\u201d often hides three different questions.Superpowers:writing-skills adds a preliminary step: run a scenario without the Skill, put the agent under pressure, and observe how it behaves without extra instructions. This tests the premise itself. If the baseline run already succeeds, the Skill adds nothing; if it fails, you can see the specific behavior you need to change.1. Is the structure valid?For a portable Skill, use the validator for the open specification:$skills-ref validate .\/review-migrationIt checks the frontmatter and naming rules.In Claude Code, you can validate project Skills like this:$claude plugin validate .claude\/skillsOr validate all user-level customizations:$claude plugin validate ~\/.claudeAccording to the Claude Code documentation, the validator finds problems with YAML, metadata, and Plugin structure. This checks syntax and schema. A successful result doesn\u2019t mean the agent will choose the Skill at the right time.2. Does the Skill trigger?Give this check to superpowers:writing-skills while creating the Skill. Include real requests that should trigger it and similar-sounding requests that should not. superpowers:writing-skills will run the scenarios and show whether the agent finds the instructions at the right moment.If the Skill doesn\u2019t trigger, or triggers when it shouldn\u2019t, refine its description and repeat the check. If it triggers but doesn\u2019t help, revisit the main instructions and supporting files.3. Did the result improve?For a Skill packaged as a Plugin, Claude Code has a separate testing tool:$claude plugin eval init$claude plugin eval .Claude plugin eval runs each scenario in an isolated session several times with and without the Plugin. Graders can check text, tool calls, action order, created files, or criteria assessed by an LLM. The difference between WITH and W\/OUT shows the Plugin\u2019s contribution, rather than just the base model\u2019s ability to complete the task.This is useful for Skills that a team versions, shares, or uses in a critical process. The runs make real model calls. By default, each scenario runs three times with the Plugin and three times without it, so a suite costs both time and money.One detail matters: skill-creator and claude plugin eval use different test formats. The former is useful for improving one Skill through a conversation. The latter is better suited to Plugins, regression suites, and CI.What \/skill-doctor tells you\/skill-doctor answers a different question: which Skills consume context but are rarely used?It shows how much context descriptions occupy, which Skills have never been invoked, and which Plugins haven\u2019t been used for a while. That helps remove noise from a large library. But \/skill-doctor doesn\u2019t assess instruction quality or replace behavior checks.How to install a Skill in a projectThe simplest option is to add it manually:$mkdir -p .claude\/skills\/review-migrationThen create .claude\/skills\/review-migration\/SKILL.md and commit the folder. The Skill will load in sessions for that repository.For a personal Skill that you need across all your local projects:~\/.claude\/skills\/review-migration\/SKILL.mdIn a monorepo, you can put a Skill in &lt;package&gt;\/.claude\/skills\/. It will apply to work in that subtree.If a Skill is published in a Git repository and supports the open ecosystem:$npx skills add owner\/repository &#8212;skill review-migration -a claude-codeAdd -g to install it globally instead of in the current project.When you need a Plugin and MarketplaceA standalone Skill works well within one repository. Use a Plugin when you want to:distribute several Skills as one package;add agents, Hooks, or MCP configuration;have a namespace such as \/database-tools:review-migration;version and update the package;attach a formal test suite.A minimal Plugin structure:database-tools\/\u251c\u2500\u2500 .claude-plugin\/\u2502   \u2514\u2500\u2500 plugin.json\u2514\u2500\u2500 skills\/    \u2514\u2500\u2500 review-migration\/        \u2514\u2500\u2500 SKILL.mdYou can test the Plugin locally with:$claude &#8212;plugin-dir .\/database-tools$claude plugin validate .\/database-toolsTo share it, a team can create a private Marketplace, add it at the project level, and install the Plugin from there. The official Marketplace documentation supports a GitHub repository, Git URL, remote marketplace.json, and local path.\u203a\/plugin marketplace add acme\/database-plugins\u203a\/plugin install database-tools@acme-database-pluginsThe CLI equivalent supports user, project, and local scopes. At the project level, configuration is written to the&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-496910","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/496910","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=496910"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/496910\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=496910"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=496910"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=496910"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}