{"id":358812,"date":"2026-07-30T18:15:28","date_gmt":"2026-07-30T18:15:28","guid":{"rendered":"https:\/\/peraltafinancing.com\/analytics\/how-to-build-and-use-custom-skills-in-claude\/"},"modified":"2026-07-30T18:15:28","modified_gmt":"2026-07-30T18:15:28","slug":"how-to-build-and-use-custom-skills-in-claude","status":"publish","type":"post","link":"https:\/\/fivemor.com\/?p=358812","title":{"rendered":"How to Build and Use Custom Skills in Claude"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div id=\"article-start\">\n<p>Claude can review data, check code, write reports, and prepare presentations, but teams still end up repeating the same structure, validation rules, company standards, and final-check instructions in every conversation. That repetition wastes time and often leads to inconsistent results.<\/p>\n<p>Custom Skills solve this by packaging reusable instructions, workflows, templates, scripts, examples, and reference files that Claude automatically loads for matching tasks. In this article, we\u2019ll explore how Claude Skills works, examine the configuration options, and build a practical CSV auditing skill step by step.<\/p>\n<h2 class=\"wp-block-heading\" id=\"h-what-are-custom-skills-in-claude\">What Are Custom Skills in Claude?<\/h2>\n<p>A skill is a directory. It contains instructions for Claude, and optionally extra resources that help Claude complete a specific task.<\/p>\n<p>Every skill needs one file:<\/p>\n<p><strong>SKILL.md<\/strong><\/p>\n<p>This file defines what the skill does, when it should be used, and the steps Claude should follow. It can define the output format and point to scripts, templates, examples, or reference files.<\/p>\n<p>A more advanced skill may look like this:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2026\/07\/image-1-3z965g-scaled.webp\" alt=\"Directory structure of the data-quality-auditor project\"\/><\/figure>\n<\/div>\n<p>Only <strong>SKILL.md<\/strong><strong> <\/strong>is required. Everything else is optional.<\/p>\n<p>Skills follow the <strong>Agent Skills open standard<\/strong> <a href=\"https:\/\/agentskills.io\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">agentskills.io<\/a>, which means the portable core: <strong>name<\/strong><strong>, <\/strong><strong>description<\/strong>, and plain Markdown works across Claude apps, Claude Code, the Claude Agent SDK, and the Claude Developer Platform. Individual products then extend the standard with their own features, and this is where most confusion comes from. We will map those differences carefully later in the article.<\/p>\n<h2 class=\"wp-block-heading\" id=\"h-skills-and-custom-commands-are-now-the-same-thing\">Skills and custom commands are now the same thing<\/h2>\n<p>If you have used Claude Code before, you probably have files sitting in <strong>.claude\/commands\/<\/strong><strong>.<\/strong> Custom commands have been merged into skills. A file at <strong>.claude\/commands\/deploy.md<\/strong><strong> <\/strong>and a skill at <strong>.claude\/skills\/deploy\/SKILL.md<\/strong> both create <strong>\/deploy<\/strong> and behave the same way.<\/p>\n<p>Your existing command files keep working. Skills simply add optional capabilities on top: a directory for supporting files, frontmatter that controls whether you or Claude invokes them, and automatic loading when the task is relevant.<\/p>\n<p>If a skill and a command share the same name, the skill takes precedence.<\/p>\n<h2 class=\"wp-block-heading\" id=\"h-is-coding-required-to-create-a-claude-skill\">Is Coding Required to Create a Claude Skill?<\/h2>\n<p>No. A basic custom skill needs nothing but Markdown.<\/p>\n<p>For example:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2026\/07\/image-2-3z965g-scaled.webp\" alt=\"Directory structure of my-skill containing SKILL.md file\"\/><\/figure>\n<\/div>\n<p>That is already complete, working skill.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2026\/07\/image-3-3z965g-scaled.webp\" alt=\"Meeting notes formatter configuration and instructions in code format\"\/><\/figure>\n<\/div>\n<h3 class=\"wp-block-heading\" id=\"h-when-is-code-useful-then\">When is code useful then?<\/h3>\n<p>Code becomes useful when your skill needs to analyse data, process files, validate outputs, generate visualisations, transform structured information, call command-line utilities, perform deterministic calculations, create or modify documents, or automate development workflows.<\/p>\n<p>A simple rule:<\/p>\n<ol class=\"wp-block-list\">\n<li>Instructions-only workflow \u2192 no code required<\/li>\n<li>Deterministic processing or automation \u2192 code helps<\/li>\n<li>External system integration \u2192 usually needs tools, scripts, or MCP<\/li>\n<\/ol>\n<p>Start with Markdown. Add code only when instructions alone cannot produce reliable execution.<\/p>\n<h2 class=\"wp-block-heading\" id=\"h-how-claude-skills-work\">How Claude Skills Work<\/h2>\n<p>Skills use <strong>progressive disclosure<\/strong>. Instead of loading every skill and every file into the context window, Claude loads information in stages.<\/p>\n<h3 class=\"wp-block-heading\" id=\"h-stage-1-discovery\">Stage 1: Discovery<\/h3>\n<p>At startup, Claude reads only the metadata from each available skill essentially the <strong>name<\/strong><strong> <\/strong>and<strong> <\/strong><strong>description<\/strong><strong>:<\/strong><\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2026\/07\/image-4-3z965g-scaled.webp\" alt=\"YAML metadata for data-quality-auditor skill\"\/><\/figure>\n<\/div>\n<p>Claude uses the description to decide whether the skill matches your request.<\/p>\n<p>This should activate the skill:<\/p>\n<p><em>Can you check this customer dataset for <\/em><em>data quality<\/em><em> problems?<\/em><\/p>\n<p>This should not:<\/p>\n<p><em>Write an email announcing the product launch.<\/em><\/p>\n<p>The description is the single most important field in the file, because it is the only thing Claude sees before deciding whether to load anything else.<\/p>\n<h3 class=\"wp-block-heading\" id=\"h-stage-2-instruction-loading\">Stage 2: Instruction loading<\/h3>\n<p>Once Claude decides the skill is relevant, it loads the Markdown body of <strong>SKILL.md<\/strong>. This is where the workflow, rules, constraints, validation checks, and output format live.<\/p>\n<h3 class=\"wp-block-heading\" id=\"h-stage-3-supporting-resources\">Stage 3: Supporting resources<\/h3>\n<p>Claude then reads scripts, examples, references, and templates only as needed:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2026\/07\/image-5-3z965g-scaled.webp\" alt=\"File paths for data quality rules, profile script, and report\"\/><\/figure>\n<\/div>\n<p>Reference files and data cost no context tokens until they are actually read. Scripts cost even less: they execute through bash, and only their output consumes context.<\/p>\n<h3 class=\"wp-block-heading\" id=\"h-one-important-consequence-skill-content-persists\">One important consequence: skill content persists<\/h3>\n<p>When a skill is invoked in Claude Code, the rendered <strong>SKILL.md<\/strong> enters the conversation as a single message and <strong>stays there for the rest of the session<\/strong>. Claude Code does not re-read the file on later turns.<\/p>\n<p>Two practical implications:<\/p>\n<ol class=\"wp-block-list\">\n<li>Write guidance that should apply throughout a task as <strong>standing instructions<\/strong>, not one-time steps.<\/li>\n<li>Every line in <strong>SKILL.md<\/strong> is a recurring token cost. Keep the body lean and push detail into reference files.<\/li>\n<\/ol>\n<p>During auto-compaction, Claude Code re-attaches the most recent invocation of each skill after the summary, keeping the first 5,000 tokens of each within a combined 25,000-token budget. The skills you invoked long ago can be dropped entirely. If a skill seems to stop influencing behaviour after a long session, re-invoke it.<\/p>\n<h2 class=\"wp-block-heading\" id=\"h-anatomy-of-a-claude-skill\">Anatomy of a Claude Skill<\/h2>\n<p>A typical skill directory:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2026\/07\/image-6-3z965g-scaled.webp\" alt=\"Directory structure of a Claude skill folder\"\/><\/figure>\n<\/div>\n<p><strong>SKILL.md<\/strong> is the entry point: YAML frontmatter between markers, followed by Markdown instructions.<\/p>\n<ul class=\"wp-block-list\">\n<li><code>references\/ <\/code>holds detailed information Claude may need coding standards, business rules, validation checklists.<\/li>\n<li><code>examples\/<\/code> shows what a good and a bad result looks like.<\/li>\n<li><code>templates\/<\/code> provides a fixed output structure.<\/li>\n<li><code>scripts\/<\/code> performs deterministic processing.<\/li>\n<\/ul>\n<p>Bundling a file is not enough on its own. Reference it explicitly from <strong>SKILL.md<\/strong> so Claude knows what it contains and when to open it:<\/p>\n<p>Keep <strong>SKILL.md<\/strong> under about 500 lines.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2026\/07\/image-7-3z965g-scaled.webp\" alt=\"Additional resources section with file paths for rules and examples\"\/><\/figure>\n<\/div>\n<h2 class=\"wp-block-heading\" id=\"h-the-frontmatter-reference\">The Frontmatter Reference<\/h2>\n<p>This is where the products diverge, so it is worth being precise.<\/p>\n<h3 class=\"wp-block-heading\" id=\"h-the-portable-core\">The portable core<\/h3>\n<p>These two fields work everywhere:<\/p>\n<div style=\"overflow-x:auto;margin:1em 0;\">\n<table style=\"border-collapse:collapse;width:100%;border:1px solid #cccccc;\">\n<thead>\n<tr>\n<th style=\"border:1px solid #cccccc;padding:8px 10px;background-color:#eeeeee;text-align:left;font-weight:bold;vertical-align:top;\"><strong>Field<\/strong><\/th>\n<th style=\"border:1px solid #cccccc;padding:8px 10px;background-color:#eeeeee;text-align:left;font-weight:bold;vertical-align:top;\"><strong>Purpose<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">name<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">Identifier \/ display name for the skill<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">description<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">What the skill does and when to use it<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3 class=\"wp-block-heading\" id=\"h-claude-code\">Claude Code<\/h3>\n<p>In Claude Code, <strong>all frontmatter fields are optional<\/strong>. Only <strong>description<\/strong> is recommended, and if you omit it, Claude Code falls back to the first paragraph of the Markdown body. <strong>name<\/strong> defaults to the directory name.<\/p>\n<div style=\"overflow-x:auto;margin:1em 0;\">\n<table style=\"border-collapse:collapse;width:100%;border:1px solid #cccccc;\">\n<thead>\n<tr>\n<th style=\"border:1px solid #cccccc;padding:8px 10px;background-color:#eeeeee;text-align:left;font-weight:bold;vertical-align:top;\"><strong>Field<\/strong><\/th>\n<th style=\"border:1px solid #cccccc;padding:8px 10px;background-color:#eeeeee;text-align:left;font-weight:bold;vertical-align:top;\"><strong>Description<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">name<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">Display name in skill listings. Defaults to the directory name.<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">description<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">What does the skill do and when to use it. Claude matches against this.<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">when_to_use<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">Extra trigger phrases or example requests, appended to the description.<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">argument-hint<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">Autocomplete hint, e.g. [csv-file-path].<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">arguments<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">Named positional arguments for $name substitution.<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">disable-model-invocation<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">true prevents Claude from loading the skill automatically.<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">user-invocable<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">false hides the skill from the \/ menu.<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">allowed-tools<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">Tools Claude may use without a permission prompt during the invoking turn.<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">disallowed-tools<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">Tools removed from Claude\u2019s pool while the skill is active.<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">model<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">Model to use while the skill is active.<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">effort<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">Effort level: low, medium, high, xhigh, max.<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">context<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">Set to fork to run in a subagent context.<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">agent<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">Which subagent type to use with context: fork.<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">background<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">With context: fork, false waits for the result in the invoking turn.<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">hooks<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">Hooks scoped to this skill\u2019s lifecycle.<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">paths<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">Glob patterns limiting when the skill auto-activates.<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">shell<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">bash (default) or powershell for inline shell commands.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Two of these deserve more attention than they usually get.<\/p>\n<ul class=\"wp-block-list\">\n<li><code>when_to_use<\/code> is where trigger phrases belong. Putting them in <strong>description <\/strong>bloats the field; when_to_use keeps the primary description clean while still feeding the matcher.<\/li>\n<li><code>paths<\/code><strong> <\/strong>limits automatic activation to files matching a glob. A skill for React conventions that only activates when Claude touches <strong>src\/**\/*.tsx<\/strong> will not fire during a database migration.<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\" id=\"h-claude-ai-uploaded-skills\">Claude.ai (uploaded skills)<\/h3>\n<p>The web and desktop app is stricter, and this trips people up:<\/p>\n<ol class=\"wp-block-list\">\n<li><code>name<\/code> and <code>description<\/code> are <strong>both required<\/strong><\/li>\n<li><code>name<\/code>: 64 characters maximum<\/li>\n<li><code>description<\/code>: <strong>200 characters maximum<\/strong><\/li>\n<li><code>dependencies<\/code> is an optional field for required packages, e.g. python&gt;=3.8, pandas&gt;=1.5.0<\/li>\n<\/ol>\n<p>That 200-character description limit is a real constraint. Write it as one tight sentence covering what the skill does and when it applies.<\/p>\n<h2 class=\"wp-block-heading\" id=\"h-how-a-skill-gets-its-command-name-in-claude-code\">How a skill gets its command name in Claude Code<\/h2>\n<div style=\"overflow-x:auto;margin:1em 0;\">\n<table style=\"border-collapse:collapse;width:100%;border:1px solid #cccccc;\">\n<thead>\n<tr>\n<th style=\"border:1px solid #cccccc;padding:8px 10px;background-color:#eeeeee;text-align:left;font-weight:bold;vertical-align:top;\"><strong>Location<\/strong><\/th>\n<th style=\"border:1px solid #cccccc;padding:8px 10px;background-color:#eeeeee;text-align:left;font-weight:bold;vertical-align:top;\"><strong>Command name comes from<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">~\/.claude\/skills\/deploy-staging\/SKILL.md<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">Directory name \u2192 \/deploy-staging<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">.claude\/commands\/deploy.md<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">File name \u2192 \/deploy<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">my-plugin\/skills\/review\/SKILL.md<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">Plugin-namespaced \u2192 \/my-plugin:review<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">Nested skill with a name clash<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">Directory-qualified \u2192 \/apps\/web:deploy<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>For personal and project skills, the frontmatter <strong>name<\/strong> sets only on the display label. The command still comes from the directory name. For plugin skills, <strong>the name<\/strong> replaces the last segment of the command.<\/p>\n<h2 class=\"wp-block-heading\" id=\"h-where-skills-live\">Where Skills Live<\/h2>\n<div style=\"overflow-x:auto;margin:1em 0;\">\n<table style=\"border-collapse:collapse;width:100%;border:1px solid #cccccc;\">\n<thead>\n<tr>\n<th style=\"border:1px solid #cccccc;padding:8px 10px;background-color:#eeeeee;text-align:left;font-weight:bold;vertical-align:top;\"><strong>Location<\/strong><\/th>\n<th style=\"border:1px solid #cccccc;padding:8px 10px;background-color:#eeeeee;text-align:left;font-weight:bold;vertical-align:top;\"><strong>Path<\/strong><\/th>\n<th style=\"border:1px solid #cccccc;padding:8px 10px;background-color:#eeeeee;text-align:left;font-weight:bold;vertical-align:top;\"><strong>Applies to<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">Enterprise<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">Managed settings<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">All users in your organization<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">Personal<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">~\/.claude\/skills\/<skill-name>\/SKILL.md<\/skill-name><\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">All your projects<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">Project<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">.claude\/skills\/<skill-name>\/SKILL.md<\/skill-name><\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">This project only<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">Plugin<\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\"><plugin>\/skills\/<skill-name>\/SKILL.md<\/skill-name><\/plugin><\/td>\n<td style=\"border:1px solid #cccccc;padding:8px 10px;vertical-align:top;\">Wherever the plugin is enabled<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>When names collide, enterprise overrides personal, and personal overrides project. A skill at any of these levels also overrides a bundled skill of the same name so a <strong>code-review<\/strong> skill in your project replaces the built-in <strong>\/code-review<\/strong><strong>.<\/strong><\/p>\n<p>Three behaviours worth knowing:<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>Parent and nested discovery<\/strong>: Project skills load from <strong>.claude\/skills\/<\/strong> in your starting directory and in every parent directory up to the repository root. When Claude works on files in a subdirectory, skills from that subdirectory\u2019s <strong>.claude\/skills\/<\/strong> also become available. This is what makes monorepo package-level skills work.<\/li>\n<li><strong>Live change detection<\/strong>: Editing a skill takes effect within the current session without restarting. Creating a brand-new top-level skills directory does require a restart.<\/li>\n<li><strong>Cowork and cloud sessions do not read your local ~\/.claude\/skills\/<\/strong>: They load the skills enabled for your claude.ai account instead. If a scheduled routine reports that a skill was not found, this is usually why. Enable the skill for your account or commit it to the repository\u2019s <code>.claude\/skills\/<\/code>.<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\" id=\"h-hands-on-project-building-a-data-quality-auditor\">Hands-On Project: Building a Data Quality Auditor<\/h2>\n<p>We will build a skill that analyses CSV datasets and checks row and column counts, missing values, duplicate records, column data types, high-cardinality columns, constant columns, numeric summaries, and other suspicious patterns.<\/p>\n<h3 class=\"wp-block-heading\" id=\"h-prerequisites\">Prerequisites<\/h3>\n<ol class=\"wp-block-list\">\n<li>Claude Code installed<\/li>\n<li>Python 3.9 or above<\/li>\n<li>Pandas <strong>(<\/strong><strong>pip install pandas<\/strong><strong>)<\/strong><\/li>\n<li>A project directory and a CSV file for testing<\/li>\n<\/ol>\n<h3 class=\"wp-block-heading\" id=\"h-step-1-create-the-skill-directory\">Step 1: Create the skill directory<\/h3>\n<p>For a project-level skill:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2026\/07\/image-8-3z965g-scaled.webp\" alt=\"Commands to create directory structure for data-quality-auditor skill\"\/><\/figure>\n<\/div>\n<p>Resulting structure:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2026\/07\/image-9-3z965g-scaled.webp\" alt=\"Directory structure for a data-quality-auditor skill\"\/><\/figure>\n<\/div>\n<p>For personal skills available across all projects, use <strong>~\/.<\/strong><strong>claude<\/strong><strong>\/skills\/<\/strong> instead.<\/p>\n<h3 class=\"wp-block-heading\" id=\"h-step-2-create-skill-md\">Step 2: Create SKILL.md<\/h3>\n<p>Create <strong>.claude\/skills\/data-quality-auditor\/SKILL.md:<\/strong><\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2026\/07\/image-10-3z965g.webp\" alt=\"Configuration file for a data quality auditor skill\"\/><\/figure>\n<\/div>\n<p>Notice the <strong>allowed-tools<\/strong> line. It uses <code>${CLAUDE_SKILL_DIR}<\/code> in the permission rule *and* in the command the body tells Claude to run. Because both expand to the same path, the rule matches the exact command, and the script runs without a permission prompt. This is much narrower than a blanket <strong>Bash(python3 *)<\/strong>, which would pre-approve every Python invocation for that turn.<\/p>\n<h3 class=\"wp-block-heading\" id=\"h-step-3-create-the-data-quality-rules\">Step 3: Create the data-quality rules<\/h3>\n<p>Create <strong>.clau<\/strong><strong>de\/skills\/data-quality-auditor\/references\/data-quality-rules.md<\/strong><strong>:<\/strong><\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2026\/07\/image-11-3z965g.webp\" alt=\"Markdown code block defining data quality rules for missing values\"\/><\/figure>\n<\/div>\n<h3 class=\"wp-block-heading\" id=\"h-step-4-create-the-python-profiling-script\">Step 4: Create the Python profiling script<\/h3>\n<p>Create <strong>.claude\/skills\/data-quality-auditor\/scripts\/profile_csv.py<\/strong><strong>:<\/strong><\/p>\n<pre class=\"wp-block-code\"><code>from __future__ import annotations\n\nimport argparse\nimport json\nfrom pathlib import Path\nfrom typing import Any\n\nimport pandas as pd\n\ndef profile_csv(file_path: Path) -&gt; dict[str, Any]:\n    \"\"\"Generate a structured data-quality profile for a CSV file.\"\"\"\n\n    if not file_path.exists():\n        raise FileNotFoundError(f\"File not found: {file_path}\")\n    if file_path.suffix.lower() != \".csv\":\n        raise ValueError(\"The supplied file must have a .csv extension.\")\n\n    try:\n        dataframe = pd.read_csv(file_path)\n    except pd.errors.EmptyDataError as exc:\n        raise ValueError(\"The CSV file is empty.\") from exc\n    except pd.errors.ParserError as exc:\n        raise ValueError(\n            \"The CSV file could not be parsed. Check its delimiter and structure.\"\n        ) from exc\n\n    row_count = len(dataframe)\n    column_count = len(dataframe.columns)\n\n    missing_count = dataframe.isna().sum()\n    missing_percentage = (\n        dataframe.isna().mean().mul(100).round(2)\n        if row_count &gt; 0\n        else pd.Series(0.0, index=dataframe.columns)\n    )\n\n    missing_values = {\n        column: {\n            \"count\": int(missing_count[column]),\n            \"percentage\": float(missing_percentage[column]),\n        }\n        for column in dataframe.columns\n        if missing_count[column] &gt; 0\n    }\n\n    duplicate_count = int(dataframe.duplicated().sum())\n    duplicate_percentage = (\n        round((duplicate_count \/ row_count) * 100, 2) if row_count &gt; 0 else 0.0\n    )\n\n    data_types = {\n        column: str(dtype) for column, dtype in dataframe.dtypes.items()\n    }\n\n    unique_counts = {\n        column: int(dataframe[column].nunique(dropna=True))\n        for column in dataframe.columns\n    }\n\n    # A constant column has exactly one distinct non-null value.\n    # A column with zero distinct values is empty, which is a different problem.\n    constant_columns = [\n        column for column, count in unique_counts.items() if count == 1\n    ]\n    empty_columns = [\n        column for column, count in unique_counts.items() if count == 0\n    ]\n\n    numeric_columns = set(dataframe.select_dtypes(include=\"number\").columns)\n\n    high_cardinality_columns = []\n    possible_encoded_identifiers = []\n\n    for column in dataframe.columns:\n        non_null_count = int(dataframe[column].notna().sum())\n        if non_null_count == 0:\n            continue\n\n        uniqueness_ratio = unique_counts[column] \/ non_null_count\n        if uniqueness_ratio  None:\n    parser = argparse.ArgumentParser(\n        description=\"Profile a CSV file for common data-quality issues.\"\n    )\n    parser.add_argument(\"file_path\", type=Path, help=\"Path to the CSV file\")\n    arguments = parser.parse_args()\n\n    try:\n        profile = profile_csv(arguments.file_path)\n        print(json.dumps(profile, indent=2))\n    except (FileNotFoundError, ValueError) as exc:\n        print(json.dumps({\"success\": False, \"error\": str(exc)}, indent=2))\n        raise SystemExit(1) from exc\n\n\nif __name__ == \"__main__\":\n    main()<\/code><\/pre>\n<h3 class=\"wp-block-heading\" id=\"h-what-the-script-does\">What the script does<\/h3>\n<p>The script performs the deterministic work: validating the file, loading it with Pandas, counting rows and columns, calculating missing-value percentages, detecting duplicates, extracting data types, finding constant and empty columns, separating high-cardinality categoricals from near-unique numeric columns, generating descriptive statistics, and returning everything as JSON.<\/p>\n<p>Note how the script and the rules file agree. Earlier versions of this kind of skill often flag every near-unique column as \u201chigh cardinality,\u201d including integer primary keys, and then contradict a rules file that says the check applies to text columns. When the deterministic layer and the interpretive layer disagree, Claude produces confusing reports. Keep them aligned.<\/p>\n<p>The division of responsibility is the point:<\/p>\n<p><strong><em>Python handles deterministic calculations. Claude handles interpretation and recommendations.<\/em><\/strong><\/p>\n<h3 class=\"wp-block-heading\" id=\"h-step-5-test-the-script-directly\">Step 5: Test the script directly<\/h3>\n<pre class=\"wp-block-code\"><code>python3 .claude\/skills\/data-quality-auditor\/scripts\/profile_csv.py data\/customers.csv<\/code><\/pre>\n<p>Example output:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2026\/07\/image-12-3z965g.webp\" alt=\"JSON output of data quality audit for customers.csv\"\/><\/figure>\n<\/div>\n<p>Resolve script errors before testing the skill through Claude Code.<\/p>\n<h2 class=\"wp-block-heading\" id=\"h-using-the-skill-in-claude-code\">Using the Skill in Claude Code<\/h2>\n<p>Start Claude Code inside the project:<\/p>\n<pre class=\"wp-block-code\"><code>claude<\/code><\/pre>\n<p>Invoke it directly:<\/p>\n<pre class=\"wp-block-code\"><code>\/data-quality-auditor data\/customers.csv<\/code><\/pre>\n<p>Or use natural language and let Claude decide:<\/p>\n<p>Audit data\/customers.csv and tell me whether it is ready for machine learning.<\/p>\n<p>You can also stack skills at the start of a message. Typing <strong>\/write-tests \/fix-issue 123<\/strong> loads both skills and passes <strong>123<\/strong> as the arguments to each. Expansion stops at the first token that is not an inline user-invocable skill.<\/p>\n<h2 class=\"wp-block-heading\" id=\"h-uploading-the-skill-to-claude-web-and-desktop\">Uploading the Skill to Claude (Web and Desktop)<\/h2>\n<p>You can also package the skill and upload it to claude.ai.<\/p>\n<h3 class=\"wp-block-heading\" id=\"h-enable-the-prerequisites\">Enable the prerequisites<\/h3>\n<p>Skills require code execution.<\/p>\n<ol class=\"wp-block-list\">\n<li><strong>Free, Pro, Max:<\/strong> turn on \u201cCode execution and file creation\u201d in <strong>Settings \u2192 Capabilities<\/strong>.<\/li>\n<li><strong>Team:<\/strong> enabled by default at the organization level. Skill sharing is off by default.<\/li>\n<li><strong>Enterprise:<\/strong> an Owner must enable both \u201cCode execution and file creation\u201d and Skills in <strong>Organization settings \u2192 Skills<\/strong>. Owners can also provision skills organization-wide, which then appear automatically for all users.<\/li>\n<\/ol>\n<h3 class=\"wp-block-heading\" id=\"h-package-the-skill\">Package the skill<\/h3>\n<p>The ZIP must contain the skill folder as its root not the loose files, and not a wrapper directory.<\/p>\n<p><strong>Correct:<\/strong><\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2026\/07\/image-13-3z965g-scaled.webp\" alt=\"Directory structure of data-quality-auditor.zip file contents\"\/><\/figure>\n<\/div>\n<p><strong>Incorrect:<\/strong> files sitting directly in the ZIP root.<\/p>\n<p>Make sure the folder name matches the skill\u2019s name.<\/p>\n<h3 class=\"wp-block-heading\" id=\"h-upload\">Upload<\/h3>\n<ol class=\"wp-block-list\">\n<li>Open Claude.<\/li>\n<li>Go to <strong>Customize \u2192 Skills<\/strong>.<\/li>\n<li>Click <strong>+<\/strong>, then <strong>Create skill<\/strong>.<\/li>\n<li>Upload the ZIP.<\/li>\n<li>Toggle the skill on.<\/li>\n<li>Test it with a relevant prompt.<\/li>\n<\/ol>\n<p>Skills you upload are private to your individual account unless an Owner provisions them organization-wide.<\/p>\n<h3 class=\"wp-block-heading\" id=\"h-iterating-in-the-app\">Iterating in the app<\/h3>\n<p>When you work on a skill with Claude in chat, the skill files open beside the conversation. Highlight the text you want changed, click <strong>Edit with Claude<\/strong>, and describe the change. For multi-file skills you can leave requests across several files and send them together, and Claude applies them in one pass.<\/p>\n<h3 class=\"wp-block-heading\" id=\"h-recording-a-skill-instead-of-writing-one\">Recording a skill instead of writing one<\/h3>\n<p>On Pro, Max, and Team plans, in Cowork in Claude for Mac, you can record yourself performing a task and let Claude build the skill from the recording. Start it from the <strong>+<\/strong> button in the composer or from <strong>Customize \u2192 Skills \u2192 Add \u2192 Record your screen<\/strong>. Narrate as you work  the commentary gives Claude context the screen alone does not.<\/p>\n<p>Recordings run about ten minutes. Do not display passwords, secrets, or private conversations while recording; everything on screen is captured. The video and audio are not retained, but a set of screenshots is saved in the Cowork task.<\/p>\n<p>This is not available in chat, on Windows, or on Free and Enterprise plans.<\/p>\n<h2 class=\"wp-block-heading\" id=\"h-conclusion\">Conclusion<\/h2>\n<p>Custom Skills turn Claude from a general assistant into a system that follows your specific workflows.<\/p>\n<p>A skill can be as simple as one Markdown file. No programming is required for basic workflows. For more advanced cases, it can bundle Python scripts, shell scripts, JavaScript utilities, templates, reference documents, validation logic, and example outputs.<\/p>\n<p>The most effective approach is to start with one focused workflow audit a CSV dataset then write a clear description, define the workflow, specify the output format, test both relevant and irrelevant prompts, add code only where deterministic execution is required, and improve the skill based on actual failures rather than imagined ones.<\/p>\n<p>The goal is not to store everything you know inside one skill. The goal is to capture one repeatable process and make it reliable.<\/p>\n<p><strong>Read more:<\/strong> <a href=\"https:\/\/www.analyticsvidhya.com\/blog\/2026\/07\/connect-mcp-servers-claude-desktop-code\/\" target=\"_blank\" rel=\"noreferrer noopener\">How to Connect MCP Servers with Claude (Claude Desktop and Claude Code)<\/a><\/p>\n<div class=\"border-top py-3 author-info my-4\">\n<div class=\"author-card d-flex align-items-center\">\n<div class=\"flex-shrink-0 overflow-hidden\">\n                                    <a href=\"https:\/\/www.analyticsvidhya.com\/blog\/author\/janvikumari01\/\" class=\"text-decoration-none active-avatar\"><br \/>\n                                                                       <img decoding=\"async\" src=\"https:\/\/av-eks-lekhak.s3.amazonaws.com\/media\/lekhak-profile-images\/converted_image_ToTu2tx.webp\" width=\"48\" height=\"48\" alt=\"Janvi Kumari\" loading=\"lazy\" class=\"rounded-circle\"\/><br \/>\n                                                                <\/a>\n                                <\/div>\n<\/p><\/div>\n<p>Hi, I am Janvi, a passionate data science enthusiast currently working at Analytics Vidhya. My journey into the world of data began with a deep curiosity about how we can extract meaningful insights from complex datasets.<\/p>\n<\/p><\/div>\n<\/p><\/div>\n<p><h4 class=\"fs-24 text-dark\">Login to continue reading and enjoy expert-curated content.<\/h4>\n<p>                        <button class=\"btn btn-primary mx-auto d-table\" data-bs-toggle=\"modal\" data-bs-target=\"#loginModal\" id=\"readMoreBtn\">Keep Reading for Free<\/button>\n                    <\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>Claude can review data, check code, write reports, and prepare presentations, but teams still end up repeating the same structure, validation rules, company standards, and final-check instructions in every conversation. That repetition wastes time and often leads to inconsistent results. Custom Skills solve this by packaging reusable instructions, workflows, templates, scripts, examples, and reference files [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":358813,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12033],"tags":[5293,13259,834,3910],"dealstore":[],"offerexpiration":[],"class_list":["post-358812","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-analytics","tag-build","tag-claude","tag-custom","tag-skills"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to Build and Use Custom Skills in Claude - Som2ny Network<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fivemor.com\/?p=358812\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Build and Use Custom Skills in Claude - Som2ny Network\" \/>\n<meta property=\"og:description\" content=\"Claude can review data, check code, write reports, and prepare presentations, but teams still end up repeating the same structure, validation rules, company standards, and final-check instructions in every conversation. That repetition wastes time and often leads to inconsistent results. Custom Skills solve this by packaging reusable instructions, workflows, templates, scripts, examples, and reference files [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fivemor.com\/?p=358812\" \/>\n<meta property=\"og:site_name\" content=\"Som2ny Network\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-30T18:15:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/How-to-create-custom-claude-code-skills.webp.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"825\" \/>\n\t<meta property=\"og:image:height\" content=\"473\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fivemor.com\/?p=358812#article\",\"isPartOf\":{\"@id\":\"https:\/\/fivemor.com\/?p=358812\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371\"},\"headline\":\"How to Build and Use Custom Skills in Claude\",\"datePublished\":\"2026-07-30T18:15:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fivemor.com\/?p=358812\"},\"wordCount\":2421,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fivemor.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/?p=358812#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/How-to-create-custom-claude-code-skills.webp.webp\",\"keywords\":[\"Build\",\"Claude\",\"Custom\",\"Skills\"],\"articleSection\":[\"Analytics\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fivemor.com\/?p=358812#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fivemor.com\/?p=358812\",\"url\":\"https:\/\/fivemor.com\/?p=358812\",\"name\":\"How to Build and Use Custom Skills in Claude - Som2ny Network\",\"isPartOf\":{\"@id\":\"https:\/\/fivemor.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fivemor.com\/?p=358812#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/?p=358812#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/How-to-create-custom-claude-code-skills.webp.webp\",\"datePublished\":\"2026-07-30T18:15:28+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fivemor.com\/?p=358812#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fivemor.com\/?p=358812\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/?p=358812#primaryimage\",\"url\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/How-to-create-custom-claude-code-skills.webp.webp\",\"contentUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/How-to-create-custom-claude-code-skills.webp.webp\",\"width\":825,\"height\":473},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fivemor.com\/?p=358812#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fivemor.com\/?bp_activities=1\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Build and Use Custom Skills in Claude\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fivemor.com\/#website\",\"url\":\"https:\/\/fivemor.com\/\",\"name\":\"Som2ny Network\",\"description\":\"Daily Deals\",\"publisher\":{\"@id\":\"https:\/\/fivemor.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fivemor.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/fivemor.com\/#organization\",\"name\":\"Som2ny Network\",\"url\":\"https:\/\/fivemor.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png\",\"contentUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png\",\"width\":300,\"height\":86,\"caption\":\"Som2ny Network\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png\",\"caption\":\"admin\"},\"sameAs\":[\"https:\/\/fivemor.com\"],\"url\":\"https:\/\/fivemor.com\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to Build and Use Custom Skills in Claude - Som2ny Network","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fivemor.com\/?p=358812","og_locale":"en_US","og_type":"article","og_title":"How to Build and Use Custom Skills in Claude - Som2ny Network","og_description":"Claude can review data, check code, write reports, and prepare presentations, but teams still end up repeating the same structure, validation rules, company standards, and final-check instructions in every conversation. That repetition wastes time and often leads to inconsistent results. Custom Skills solve this by packaging reusable instructions, workflows, templates, scripts, examples, and reference files [&hellip;]","og_url":"https:\/\/fivemor.com\/?p=358812","og_site_name":"Som2ny Network","article_published_time":"2026-07-30T18:15:28+00:00","og_image":[{"width":825,"height":473,"url":"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/How-to-create-custom-claude-code-skills.webp.webp","type":"image\/webp"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"admin","Est. reading time":"14 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fivemor.com\/?p=358812#article","isPartOf":{"@id":"https:\/\/fivemor.com\/?p=358812"},"author":{"name":"admin","@id":"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371"},"headline":"How to Build and Use Custom Skills in Claude","datePublished":"2026-07-30T18:15:28+00:00","mainEntityOfPage":{"@id":"https:\/\/fivemor.com\/?p=358812"},"wordCount":2421,"commentCount":0,"publisher":{"@id":"https:\/\/fivemor.com\/#organization"},"image":{"@id":"https:\/\/fivemor.com\/?p=358812#primaryimage"},"thumbnailUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/How-to-create-custom-claude-code-skills.webp.webp","keywords":["Build","Claude","Custom","Skills"],"articleSection":["Analytics"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fivemor.com\/?p=358812#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fivemor.com\/?p=358812","url":"https:\/\/fivemor.com\/?p=358812","name":"How to Build and Use Custom Skills in Claude - Som2ny Network","isPartOf":{"@id":"https:\/\/fivemor.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fivemor.com\/?p=358812#primaryimage"},"image":{"@id":"https:\/\/fivemor.com\/?p=358812#primaryimage"},"thumbnailUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/How-to-create-custom-claude-code-skills.webp.webp","datePublished":"2026-07-30T18:15:28+00:00","breadcrumb":{"@id":"https:\/\/fivemor.com\/?p=358812#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fivemor.com\/?p=358812"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/?p=358812#primaryimage","url":"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/How-to-create-custom-claude-code-skills.webp.webp","contentUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/How-to-create-custom-claude-code-skills.webp.webp","width":825,"height":473},{"@type":"BreadcrumbList","@id":"https:\/\/fivemor.com\/?p=358812#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fivemor.com\/?bp_activities=1"},{"@type":"ListItem","position":2,"name":"How to Build and Use Custom Skills in Claude"}]},{"@type":"WebSite","@id":"https:\/\/fivemor.com\/#website","url":"https:\/\/fivemor.com\/","name":"Som2ny Network","description":"Daily Deals","publisher":{"@id":"https:\/\/fivemor.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fivemor.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/fivemor.com\/#organization","name":"Som2ny Network","url":"https:\/\/fivemor.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/#\/schema\/logo\/image\/","url":"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png","contentUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png","width":300,"height":86,"caption":"Som2ny Network"},"image":{"@id":"https:\/\/fivemor.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png","caption":"admin"},"sameAs":["https:\/\/fivemor.com"],"url":"https:\/\/fivemor.com\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts\/358812","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=358812"}],"version-history":[{"count":0,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts\/358812\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/media\/358813"}],"wp:attachment":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=358812"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=358812"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=358812"},{"taxonomy":"dealstore","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fdealstore&post=358812"},{"taxonomy":"offerexpiration","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fofferexpiration&post=358812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}