Skills package specialized instructions, references and supporting files that Models load only when relevant. Instead of adding every procedure to every system prompt, an organization maintains focused skills for incident response, customer onboarding, code review, compliance checks or internal systems.
Progressive disclosure​
A skill's description is always visible to the Model; its detailed instructions are only loaded when the Model calls the skill tool for it. This keeps prompts small and helps specialists remain specialists - a Model with fifty available skills pays for fifty one-line descriptions, not fifty procedure documents.
Anatomy of a skill​
A skill is a folder containing a SKILL.md manifest and whatever supporting files it needs:
incident-response/
SKILL.md
runbooks/
database-failover.md
cache-eviction.md
templates/
postmortem.md
SKILL.md starts with YAML frontmatter:
---
name: incident-response
description: Triage and respond to a production incident, including severity
classification, comms templates and the postmortem process
license: MIT
allowed-tools: api_search, api_describe, api_call
---
## When to use this
Use when a production alert fires, a customer reports an outage, or someone
asks how to run an incident.
## Severity classification
...
| Frontmatter key | Purpose |
|---|---|
name |
Skill identifier. Defaults to the folder name |
description |
The one line the Model sees before deciding to load the skill |
license |
Optional license attribution |
allowed-tools |
Tools this skill expects to be available |
metadata.* |
Arbitrary additional properties |
The description is doing the selection work - write it as the situation the skill applies to, the same way you'd write [Tool(WhenToUse)].
Where skills live​
A user's skill overrides a shared skill of the same name. The localhost-only roots that llms.py scans (~/.claude/skills, ./.agent/skills) are deliberately not scanned on a web host.
To publish a skill to everyone in your organization, put it in App_Data/chat/.agent/skills/ and check it into source control alongside your App.
Installing skills​
Skills can be installed from a GitHub repository via a shallow clone:
The Chat UI provides browse, search, install, create and edit experiences over the same APIs.
API​
Every file path is validated against the resolving skill's own folder, so a skill cannot read or write outside itself.
The skill tool​
Skills are surfaced to Models as a single skill tool. The Model calls it with a skill name to load that skill's instructions into the conversation, then proceeds with the procedure it describes.
This means skills work with any provider and model - there's no provider-specific skills feature involved, just a tool call.
Restricting skills per profile​
An Agent Profile can limit which skills it may load:
{
"model": "Claude Sonnet 5",
"onlySkills": ["incident-response", "escalation-matrix"]
}
A Support Assistant profile that can only load support procedures won't wander into your deployment runbooks.
Skills vs Agent Profiles vs API Tools​
| Loaded | Best for | |
|---|---|---|
| Agent Profile | Chosen up front | Who the assistant is - model, persona, standing context, allowed capabilities |
| Skill | On demand, when relevant | A procedure that only some conversations need |
| API Tool | Discovered on demand | A capability - reading or changing real application data |
They compose: a profile restricted to a handful of skills and one tool group is a tightly-scoped assistant that can still do real work.
Writing effective skills​
- Lead with the situation the skill applies to, in the
description. - Keep
SKILL.mdto the decision-making - push reference material into supporting files the Model can read when it needs them. - Name the tools the procedure depends on in
allowed-tools. - Prefer several narrow skills over one that covers everything; selection is the hard part, and narrow descriptions select better.