Omniscio

OmniscioGuidesSkills

Claude Code skills, and how to add one

A skill in Claude Code is a folder holding a SKILL.md file: a little frontmatter that says what the skill is for and when to reach for it, then the instructions themselves. Claude loads it on its own when your request matches that description, or you run it directly with a slash and its name. This guide covers what a skill is, what one costs you before you ever use it, how to write and install one, and the four things people most often confuse it with: a slash command, a subagent, AGENTS.md, and a plugin.

Quick start: the shortest path to each of the things people want.
You wantDo this
A procedure you stop re-typingWrite ~/.claude/skills/<name>/SKILL.md with a description saying when to use it
The same procedure for a whole teamPut it in the repository at .claude/skills/<name>/SKILL.md and commit it
Something already written for youInstall a plugin that ships skills, or turn on a skill in your claude.ai account
A workflow Claude must never start on its ownAdd disable-model-invocation: true to its frontmatter
Where each question is answered on this page.
You wantRead this
To know what a skill actually isWhat is a skill in Claude Code?
To control whether Claude can start oneWho gets to invoke a skill
To know which of your skills winsWhere a skill lives, and which one wins
To write oneHow to create a skill
To find one somebody else wroteWhere to get a skill
To know how it differs from the thing it looks likeSkills, commands, subagents and AGENTS.md

Checked against Claude Code 2.1.310 documentation, October 25, 2026. By the Omniscio team. Updated .

What is a skill in Claude Code?

Anthropic's own reason to write one decides whether you need a skill at all: create one when you keep pasting the same instructions, checklist or multi-step procedure into chat, or when a section of your CLAUDE.md has grown into a procedure rather than a fact. A skill is where a procedure goes.

Every skill is a folder with a SKILL.md inside it, and that file has two parts. YAML frontmatter between two lines of three dashes tells Claude when to use the skill. The Markdown below it is what Claude follows when the skill runs. The folder's name, or a name field when you set one, becomes the command you type, and the description, plus when_to_use when you set one, is what Claude matches your request against.

The point of the packaging is cost. A skill's body is not in your conversation until the skill is used, so a long reference document, a set of conventions or a pile of examples costs almost nothing while it sits unused. That is the whole difference between a skill and a CLAUDE.md section.

What loads, and when, for one installed skill.
Part of the skillWhen it enters your context
Name and descriptionAt the start of every conversation, so Claude knows the skill exists
SKILL.md bodyWhen you run the skill or Claude decides to load it
Supporting files beside itOnly if Claude opens them while the skill runs
Scripts in the folderThey are executed, not loaded

The body is not free either, and it is delivered once. When Claude invokes a skill the rendered content enters the conversation as a single message, stays across later turns, and is not re-read from disk, so every line is a recurring cost. A body under 500 lines is the working target, with the detail moved into files the skill points at.

The listing has a budget of its own. Claude Code loads a listing of every skill's name and description, and when that listing outgrows its budget it drops descriptions, starting with the skills you invoke least, which removes the words Claude needs to match your request. The budget scales at one percent of the model's context window. /doctor estimates what the listing costs and names its biggest contributors; skillListingBudgetFraction or the SLASH_COMMAND_TOOL_CHAR_BUDGET environment variable raises the budget, and skillOverrides can drop a single skill to its name only.

Two consequences follow. Guidance that has to hold for the rest of a task belongs in the body as standing instructions rather than as one-time steps. And after a compaction only the first 5,000 tokens of each skill are re-attached, within a combined budget of 25,000, so put what matters at the top.

Who gets to invoke a skill

By default both of you can: you type a slash and the skill's name, and Claude loads it on its own when the description matches. Two frontmatter fields take one of those away, and they are the two worth learning first.

The two invocation fields, and what each one changes.
FrontmatterYou can run itClaude can start itIs its description in context
Neither field setYesYesYes
disable-model-invocation: trueYesNoNo
user-invocable: falseNoYesYes

Reach for disable-model-invocation: true on anything with a side effect or a timing you care about, which is the deploy, commit and send-a-message family. If Claude tries anyway, Claude Code blocks the call and tells it not to reproduce the steps another way, so expect Claude to suggest running the skill yourself. Reach for user-invocable: false on background knowledge that is not an action anyone would type, such as an explanation of how a legacy system works.

Where the name sits in your message matters, and it surprises people. A skill name at the start of a message runs the skill. The same name later in a sentence, after other words, does not run anything: it counts as your permission for Claude to use that skill while it answers, and Claude decides from your wording whether you meant it. To write about a skill without granting it, leave the slash off.

You can also stack them. Typing two user-invocable skills at the start of one message at the terminal prompt loads both and passes the trailing text to each, and Claude Code expands up to six that way. Through the Agent SDK or a non-interactive run, only the first one loads and the rest of the line becomes its arguments.

Permission rules are the third lever. Three moves control what Claude may invoke: deny the Skill tool to switch off every skill, write allow or deny rules such as Skill(deploy) or Skill(review-pr *) to pick skills by name, or set disable-model-invocation: true on one skill so it leaves Claude's context entirely. A deny rule written against a bundled skill's alias also blocks the skill behind it, which is how Skill(review) covers the bundled /code-review.

Where a skill lives, and which one wins

Where you save a skill decides who loads it, and the folder layout is the same in every location.

Where skill folders live, and who loads each one.
LocationPathLoads in
Enterprise.claude/skills/<name>/SKILL.md in the managed settings directoryEveryone on machines where your organization deploys it
Personal~/.claude/skills/<name>/SKILL.mdAll your projects on this machine
Project.claude/skills/<name>/SKILL.mdSessions in this repository. Commit it so your team gets it too
Nested<subdir>/.claude/skills/<name>/SKILL.mdSessions started in or below that subdirectory, or ones that work on files there
Additional directory.claude/skills/<name>/SKILL.md in a directory passed with --add-dirThat session
Plugin<plugin>/skills/<name>/SKILL.mdWherever the plugin is enabled, typed as /plugin-name:skill-name
Your claude.ai accountEnabled in your account settingsTerminal sessions where you sign in with that account

Two conventions inside a folder are worth knowing before you name one. A skill entry in the enterprise, personal or project location may be a symlink to a folder somewhere else on disk, and Claude Code reads the target and loads the skill once even when several locations point at it. And two names are reserved: a folder called synced, in any capitalisation, because Claude Code uses ~/.claude/skills/synced/ for the skills it downloads from your claude.ai account, and anything called or starting with anthropic-skills, which belongs to that same download. Claude Code skips a skill you author at either name, and a session that meets an anthropic-skills one prints a notice naming the item to rename.

Names collide, and there is a fixed order. Enterprise beats personal, and personal beats project, so a deploy skill in your home folder wins over the one the repository ships. Your own skill beats a bundled command of the same name, and beats a built-in command in a local terminal session, but never beats their aliases: a project code-review skill replaces /code-review while the bundled /review alias still runs the bundled one. A skill beats a file of the same name in .claude/commands/, and plugin skills sit outside the contest entirely because they are namespaced by their plugin.

In a monorepo, Claude Code reads .claude/skills/ in the directory where you start it and in every directory above it, up to the repository root, so starting in a package still picks up the skills defined at the top. Skills in a directory below where you started do not load at startup: they arrive the first time Claude reads or edits a file down there, and until then they are not in the menu and cannot be called by name. When a nested skill shares a name with one higher up, both stay available, and the nested one is also listed under a prefixed name such as /apps/web:deploy.

You do not have to restart to pick up an edit. Claude Code watches the skills directories and takes an added, edited or removed skill within the session. The one case that needs a hand is a top-level skills folder that did not exist when the session started: run /reload-skills once, and again after later changes there, because nothing is watching it yet. Live detection covers the SKILL.md text only.

How to create a skill

You make a folder, write one file, and the session picks the skill up as soon as the file is there.

Three steps

Start with the folder. mkdir -p ~/.claude/skills/summarize-changes puts it in your own skills folder, which follows you into every project; the same path under a repository's .claude/skills/ shares it with everyone who works there.

Then write SKILL.md inside it. Anthropic's own first example is the template to copy, because it shows both halves of the file and the one line that lifts a skill above a saved prompt:

---
description: Summarizes uncommitted changes and flags anything risky. Use when the user asks what changed, wants a commit message, or asks to review their diff.
---

## Current changes

!`git diff HEAD`

## Instructions

Summarize the changes above in two or three bullet points, then list any risks you
notice such as missing error handling, hardcoded values, or tests that need updating.
If the diff is empty, say there are no uncommitted changes.

That !`git diff HEAD` line is dynamic context. Claude Code runs the command before Claude sees the file and puts its output in place of the line, so the instructions arrive with your actual working tree already inlined. That is the difference between telling Claude to go and look and handing it what it needs.

Third, test it. Ask something that matches the description, such as “what did I change?”, and let Claude find the skill; then run it directly by typing a slash and the folder name. Both routes should give you the summary. If only the direct one works, the description is the thing to fix, not the instructions.

The fields that matter most

Every frontmatter field is optional, and only description is recommended. A field name has to match exactly, hyphens and all: Claude Code ignores one it does not recognise without telling you, so a typo simply stops working. A handful do most of the work.

The frontmatter fields you are most likely to set, and what each does.
FieldWhat it does
descriptionWhat the skill does and when to use it. Claude matches your request against this and when_to_use, so put the words you would actually say first
when_to_useExtra trigger phrases and example requests, appended to the description in the listing
nameThe command shown in the menu. Defaults to the folder name
disable-model-invocationSet to true so only you can run it
user-invocableSet to false so only Claude can run it
allowed-toolsTools Claude may use without asking, for the turn that invokes the skill
disallowed-toolsTools removed from Claude's pool while the skill is active
argument-hintThe autocomplete hint for the arguments it expects, such as [issue-number]
contextSet to fork to run the skill in a subagent instead of your conversation
pathsGlob patterns that limit automatic loading to work on matching files
model and effortA model for the rest of the current turn, or an effort level that overrides the session's while the skill is active

Two details save an hour of confusion. The frontmatter is read only when the opening three dashes are the file's very first line; put a blank line or a heading above them and the whole file, markers included, becomes skill content. And if the YAML between the markers will not parse, the skill still loads with no fields set, which is one reason a skill that runs when you name it may never fire on its own: check that the YAML parses as well as what the description says.

Pre-approving tools, and what it means

The allowed-tools field grants permission for the tools it lists during the turn that invokes the skill, so Claude can run them without asking. The grant clears when you send your next message, though the skill's content stays. It does not restrict what else is available; every tool remains callable and your permission settings still govern the rest.

Treat that as a security decision rather than a convenience, because workspace trust does not gate it. A skill checked into a repository can grant itself broad tool access and Claude Code will apply the grant even in a non-interactive run in a folder you have never trusted. Read the allowed-tools of a repository's skills before you run Claude Code there. An organization can withhold the field from project and personal skills with allowManagedPermissionRulesOnly.

Arguments and shell output

A skill can take arguments, and the placeholders are plain. $ARGUMENTS is everything after the skill's name, $0 or $ARGUMENTS[0] is the first one, and a names list in arguments lets you write $issue instead. If your skill has no placeholder at all, Claude Code appends ARGUMENTS: and what you typed, so nothing is silently dropped.

The shell side has a sharp edge. A !`command` that fails aborts the entire skill invocation, not just its own line, and Claude never sees the content. Injected commands also never prompt for permission while the skill renders: each one is checked against your permission rules first, and outside auto mode a command whose check is anything other than allow aborts the invocation. Pre-approve it in allowed-tools if it should run. The exception is exit code 1 from a search or comparison command such as grep or git diff, which counts as a normal result.

Where to get a skill

Four routes, in the order most people hit them.

Some are already there. Claude Code ships bundled skills such as /doctor, /code-review, /batch, /debug, /loop and /claude-api. They behave like any other skill: you type a slash and the name, and Claude invokes some of them on its own when they fit. They are prompt-based, which is why a bundled review behaves like instructions rather than like a fixed program. Setting disableBundledSkills turns them off.

A plugin carries skills with it. A plugin is a bundle, and skills are one of the things in it. Install the plugin from a marketplace and its skills appear as /plugin-name:skill-name, namespaced so they can never collide with yours. That namespacing is also why a plugin skill never wins or loses a name contest: it is not in one.

Your claude.ai account brings its own. In a terminal session where you sign in with your claude.ai account, Claude Code downloads the skills enabled for that account into ~/.claude/skills/synced/ and keeps them current while the session runs. To change one you edit it in your account, not on disk, because a later sync can overwrite or remove the local copy. In these sessions, a skill synced from your account runs under the reserved anthropic-skills: prefix whenever another command already uses the short name.

Or you write it and commit it. That is the route this page is about, and sharing it is nothing more than committing .claude/skills/ to the repository, putting the folder in a plugin, or deploying it through managed settings.

You can also find out what your skills are costing you. /skill-doctor reports the context cost of each skill in your session, apart from bundled and enterprise skills, and how often each one is invoked, and flags the ones that have never been used, so you can turn them off in order of what they actually cost. It needs Claude Code 2.1.252 or later.

Skills, commands, subagents and AGENTS.md

These four get mixed up constantly. Three of the confusions are worth a section; the fourth fits in a sentence.

The four things a skill is not, and the one-line difference for each.
The other thingWhat it actually is
A custom slash commandThe same thing. Custom commands were merged into skills; built-in commands were not
A subagentA worker with its own context window that returns a summary. A skill runs in your conversation
AGENTS.md or CLAUDE.mdA file of standing instructions loaded every turn, with no name and no packaging
A pluginA bundle that can contain skills, commands, subagents, hooks and MCP servers together

A skill is a custom slash command

This one is settled and it is the reason a lot of old advice reads wrong. A file at .claude/commands/deploy.md and a skill at .claude/skills/deploy/SKILL.md both create the same command and work the same way, and every existing command file keeps working. A skill adds what a command file has no room for: a folder of supporting files beside it, the name and paths fields, and the ability for Claude to load it automatically when it is relevant. For anything new, write the skill. A built-in command is a different thing again: most of them execute fixed logic directly rather than handing Claude instructions.

A skill is not a subagent

A skill is instructions that run in your main conversation. A subagent is a separate worker with its own context window that does a side task and hands back a summary. Anthropic's rule for choosing is one sentence: consider a skill when you want the workflow in the main conversation, and a subagent when the work should happen away from it.

The two do meet, in both directions. Adding context: fork to a skill's frontmatter runs it inside a new subagent, of the type named in its agent field, with the skill's content as the task. That subagent does not see your conversation, so the skill has to stand on its own, and a skill holding guidelines with no actual task returns nothing useful. The other direction is a subagent that preloads skills as reference material. The subagents guide covers the worker itself, its definition file, its tools and its costs.

A skill is not AGENTS.md

This is the confusion the page exists to settle. AGENTS.md, and CLAUDE.md beside it, is a file of standing instructions. It loads every turn, it has no name, nothing invokes it, and it cannot package a script. A skill is packaged, has a description that decides when it loads, and arrives only when it is used.

The practical way to tell which you need: a rule that must hold in every turn belongs in the instruction file, and a procedure you invoke when the work calls for it belongs in a skill. Anthropic's guidance for a CLAUDE.md that has grown too large is exactly this split, moving the procedures and the reference material out into skills and nested instruction files that load on demand. The AGENTS.md guide covers which file Claude actually reads and the precedence between them.

And a skill is not a plugin. A plugin is the shipping container: it can hold skills, commands, subagents, hooks and MCP servers and be installed from a marketplace as one unit. If you are packaging something for other people, that is the shape. If you are teaching Claude one procedure, it is a skill.

What people have reported

A search of Anthropic's own issue tracker on October 25, 2026 returns 1,162 issues with “skills” in the title. Five of them are worth reading before you build a shelf of them, because each names a real friction. Every report below is named by the person who filed it, with the day they filed it, and links to the issue.

Reports from Anthropic's Claude Code issue tracker, read October 25, 2026.
What was reportedFiled byDate
Support for AGENTS.md and .agents/skills/ — the request that a repository's own skills directory be read the way AGENTS.md now is, so one repository can serve every agent. Still open, labelled a duplicate, with 572 reactionskvnwolfMarch 5, 2026
Sync skills between Claude Desktop and the Claude Code CLI — the reporter found the desktop app and the command line keep their skills in different places, so the same skill has to be added twice. Open, 171 reactionsmeCodeUpJanuary 25, 2026
Add support for subdirectories in skills — a team organising its skills into subfolders inside .claude/skills found Claude stopped discovering them. Since closed as completed, 168 reactions, and worth reading if you were planning to group skills by handaran0iaOctober 24, 2025
Link a source control repo as the source for organization skills — organization skills can only be uploaded one at a time through the admin console, with no version history, no review step and no easy rollback. Open, 159 reactionsKyleNesiumFebruary 25, 2026
Skills from marketplace plugins don't appear in slash command autocomplete — the skills load and work when Claude calls them, but typing the name finds nothing. Open, 74 reactions, and the plainest example of the visibility gapallen-hsuJanuary 18, 2026

That list is a report stream, not a changelog: an issue filed in January and still open does not by itself describe the build you are running, and the subdirectory report has since closed. Read a row as one person's setup with a date on it. Anthropic's own skills page remains the reference for what Claude Code does now.

Where Omniscio fits

Plainly: Omniscio does not change how Claude Code loads a skill. A skill is Claude Code's own mechanism, and the folder you write is the folder Claude reads. What Omniscio adds is a view of the shelf: what you have, what it costs, and what you actually use.

The Skills view sits in the left sidebar as a virtual project beside Inbox and Gmail, with an Installed tab for what is already on disk and a Catalog tab for what you can install, a detail pane showing a skill's frontmatter, its body and its cost, and install, edit, update and remove actions. It includes the skills a plugin contributes, and it follows a symlinked skill folder to the real one. The feature is on unless you turn it off in Settings.

Two figures sit on that screen. Each installed row carries its usage, such as “Last used 2d ago · 45 uses” or “Never used”, read from your own session transcripts, and the list sorts by least used, never used, most used or recently used. And a summary line gives the always-on cost across everything installed, so the frontmatter tax this page describes is a number you can watch rather than a theory.

When that number gets large, an inbox card says so. The Skill Overhead alert fires on either of two things: the summed frontmatter estimate across every installed skill, or the count of skills that have gone unused for 30 days. It opens a review deck of the skills it flags, one at a time, with Keep on each and a second button that says Archive for the two kinds that have a real way back, and Remove, which asks first, for the two that have none. It labels the token figure as an estimate because it is one. The unused half of the alert stays quiet for the first 30 days, measured from your first session, since on a new machine every skill is unused and being told so is not useful.

If you run more than Claude Code, skills fan out. Sync to Other AI Tools copies them into the other engines that keep their own skills folder, such as Codex, Gemini and Cursor. The Skill Budget alert watches the other end of that: a strict engine can be handed more skills than it can carry, so each copying engine has a skill-count budget and you can hold one skill back from one engine without removing it anywhere else. An engine that reads your Claude skills folder directly needs no copy and no budget.

Two more things worth knowing. Engine sessions Omniscio launches that have no native skill surface still see your skills, but only as a metadata index in their first message, never as full bodies. And the free plan covers 8 projects and 10 agents at once, with Pro at $20/month or $192/year.

How this page was checked

Every statement here about Claude Code comes from Anthropic's own documentation, read in its Markdown form on October 25, 2026, from the pages listed below. The version line comes from Anthropic's own changelog: the newest release listed is 2.1.310, dated October 23, 2026. No skill was written or run on this machine to produce the page, so the behaviour described is Anthropic's account of it and, where noted, the account of the people who reported it.

The issue reports were read the same day through GitHub's API, in Anthropic's anthropics/claude-code repository, and each row carries the login of the person who filed it and the day they filed it. We quote what the report says, not what the product does, which is why the open ones are labelled open.

What this page says about Omniscio comes from our own library, which is verified against the application's source. If Anthropic's page and this one ever disagree about Claude Code, Anthropic's page is right, because this part of Claude Code changes on nearly every release.

One thing this page does not carry. The research behind it also found a large discussion of skills on Reddit, and reddit.com refused this machine, so no figure from there appears here. A number we could not read is not a number we repeat.

Sources

Anthropic's Claude Code documentation, read October 25, 2026, at Claude Code 2.1.310:

  • Extend Claude with skills: what a skill is, the bundled set, the folder and the file, where skills load and which wins, frontmatter, invocation control, arguments, dynamic context, supporting files, subagent execution, permission rules, the listing budget, the content lifecycle and the troubleshooting order
  • Where skills live: the enterprise, personal, project, nested, additional-directory, plugin and account locations, the symlink rule and the two reserved names
  • Run skills in a subagent: context: fork, the agent field, and the table of how a skill and a subagent work together
  • Skill descriptions are cut short: the listing budget, which descriptions are dropped first, and the settings that raise it
  • Create custom subagents: what a subagent is, which the skills page defers to for that decision
  • The changelog: release 2.1.310, the newest listed, and the versions the skills page pins its own behaviour to
  • Anthropic's Claude Code issue tracker: the five reports above, read through GitHub's API on the same day

Omniscio's own pages, for what this section says about this app:

  • Use Skills in the library: the Installed and Catalog tabs, install, edit, update and remove, the usage figures and the token breakdown
  • Skill Overhead alert in the library: the two legs, their defaults, the review deck, and the 30-day warm-up on the unused half
  • Skill Budget alert in the library: the per-engine budget, which engines it covers, and holding one skill back from one engine
  • Pricing: the free plan and the Pro price

Common questions

What is a Claude Code skill?

A skill is a folder holding a SKILL.md file: YAML frontmatter that says what the skill does and when to use it, then Markdown instructions Claude follows. Claude loads it on its own when the description matches what you asked, and you can run it directly by typing a slash followed by its name.

Where do Claude Code skills live?

A skill folder in ~/.claude/skills/ works in all of your projects, one in a project's .claude/skills/ reaches everyone who works in that repository, and a plugin carries its own. Where two skills share a name, enterprise beats personal and personal beats project.

Are slash commands the same as skills?

They were separate and are now one thing. A command file at .claude/commands/deploy.md and a skill at .claude/skills/deploy/SKILL.md both create the same command and work the same way, and existing command files keep working. A skill adds a folder of supporting files, the name and paths fields, and the ability for Claude to load it automatically.

What is the difference between a skill and AGENTS.md?

AGENTS.md and CLAUDE.md are files of standing instructions that load every turn, with no name, no invocation and no packaging. A skill is packaged, has a description that decides when it loads, and its body arrives only when Claude uses it, so a long procedure costs almost nothing until the moment it is needed.

Do skills cost context even when I never use them?

The frontmatter does. Every installed skill's name and description are loaded into the skill list at the start of a conversation so Claude knows the skill exists, and that is a cost you pay whether or not it is ever invoked. The body and any supporting files load only when the skill runs.

Why is my skill not being used?

The usual cause is the description. Claude matches your request against the description and when_to_use, so they need the words you would naturally type rather than a summary of the skill. After that, check the skill appears in the session's list of available skills, and check its name holds no invisible characters, because Claude Code refuses a name it cannot type.

See what your skills actually cost, and which ones you use

Install Omniscio and the Skills view lists everything installed, what each one costs in every conversation, and when you last ran it. The features page lists what else is in it today.