Skip to content
28/30Chapter 28 of 30

Agent Skills and SKILL.md: Progressive Disclosure, Measured

Five real skills holding 128,374 tokens of instructions occupy 253 tokens of context. Cut their descriptions back and the agent stops finding them.

On this page

Take a project with five published skills installed. Here is what they cost.

terminalBASH
ls .claude/skills/
TEXT
next-best-practices  next-cache-components  vercel-composition-patterns
vercel-react-best-practices  vercel-react-native-skills
o200k_base tokens, measuredTEXT
skill                              level 1   level 2    level 3   files
next-best-practices                     40       966     19,374      19
next-cache-components                   28     2,334          0       0
vercel-composition-patterns             59       533     10,667      13
vercel-react-best-practices             68     1,670     53,670      75
vercel-react-native-skills              58       950     37,957      41
                                    ------   -------   --------
total                                  253     6,453    121,668

One hundred and twenty-eight thousand tokens of instructions, examples and rules — more than fits in a 128,000-token context window — and the standing cost of having all five available is 253 tokens, two tenths of one per cent. Nothing else in this course has that shape. A tool definition is paid on every request whether or not it is used, and Chapter 26 measured one MCP server at 1,619 tokens before it does anything at all: thirty-two times the average level-1 line in the table above.

This chapter is about the mechanism that produces that ratio, about the two ways it breaks, and about the question that the mechanism forces and almost nobody answers: given a piece of knowledge, which of four places does it belong in.

Why this chapter has no programming language

Link to the section: Why this chapter has no programming language

Chapter 14 set the rule for the second half of this course — connections, retries and cancellation are TypeScript — and declared five exceptions. This is one of them, and the reason is not a preference.

A skill is a Markdown file. Not a file that configures a program, not a file a program compiles: a document the model reads, in the same way it reads the message you typed. Giving this chapter a programming language would mean not having understood the format, and that misunderstanding is the single most common one about skills. Everything below is Markdown and YAML, plus one small shell script that exists precisely to show where code does and does not belong inside a skill.

The bill it solves, and it is Chapter 16's arithmetic

Link to the section: The bill it solves, and it is Chapter 16's arithmetic

Here is a real instruction: how one company writes its release notes. It is a procedure, not a preference — it has an ordered set of steps, a taxonomy, a voice, a template and a script that collects the raw material.

Put all of it in the system prompt, the way most teams do, and Chapter 16's arithmetic takes over. A system prompt is a prefix, and a prefix is paid on every call. Measured with o200k_base over the folder written for this chapter:

the same instruction, two ways, 40 turnsTEXT
whole thing pasted into the system prompt   1,716 x 40  =  68,640 input tokens   $0.1373
as a skill, activated once on turn 12          46 x 40
                                            + 324 (SKILL.md body)
                                            + 665 (two reference files read)
                                                        =   2,829 input tokens   $0.0057
as a skill, never activated at all             46 x 40  =   1,840 input tokens   $0.0037

Twenty-four times cheaper when it is used, thirty-seven times cheaper when it is not. The rates are Chapter 16's: $2.00 per million input tokens.

Now the honest objection, because a chapter that skipped it would be advertising. Prompt caching mostly closes the money gap. A system prompt is stable and it sits first, which makes it the best cache candidate there is; at $0.20 per million for cached input, the same 68,640 tokens cost $0.0168 rather than $0.1373. Still three times the skill, but no longer a different order of magnitude.

The money was never the strongest argument. This is:

Caching makes a permanent prefix cheaper. It does not make it smaller.

At turn 40 the system-prompt version still has 1,716 tokens of release-note policy sitting in the window during a conversation about something else entirely, competing for what Chapter 24 called the model's attention budget. The skill version has 46. Cache the wrong thing and you have bought a discount on a distraction.

Written as a formula, with nn turns, L1L_1 the metadata, L2L_2 the body, L3L_3 the whole bundle and RR the set of bundled files actually read:

system prompt=n(L1+L2+L3)skill=nL1+1[used](L2+iRL3(i))\text{system prompt} = n\,(L_1 + L_2 + L_3) \qquad \text{skill} = n\,L_1 + \mathbb{1}[\text{used}]\left(L_2 + \sum_{i \in R} L_3^{(i)}\right)

The whole of this chapter is the difference between multiplying the second term by nn and multiplying it by one or by zero.

A skill is a directory. The specification is short enough to state completely:

the whole formatTEXT
release-notes/
├── SKILL.md          # required: YAML frontmatter + Markdown instructions
├── scripts/          # optional: executable code
├── references/       # optional: documentation read on demand
├── assets/           # optional: templates, schemas, examples
└── ...               # anything else you like

SKILL.md must begin with YAML frontmatter, and exactly two fields are required: name and description.1 Four more are optional and no others are defined:

FieldRequiredConstraint
nameyes1–64 characters, lowercase letters, digits and hyphens; no leading, trailing or doubled hyphen; must match the directory name
descriptionyes1–1024 characters, non-empty; says what the skill does and when to use it
licensenoa licence name, or the name of a bundled licence file
compatibilitynoup to 500 characters: intended product, required packages, network access
metadatanoa free map of string keys to string values, for your own tooling
allowed-toolsnospace-separated list of pre-approved tools; marked experimental

Here is the release-notes skill, complete, with its body under thirty lines:

release-notes/SKILL.mdMARKDOWN
---
name: release-notes
description: Write the release notes for a tagged version in this company's house style. Use when preparing a release, drafting a changelog entry, or when someone asks for the notes for a version number or a tag.
allowed-tools: Bash(git log:*) Bash(git tag:*) Read
---

# Release notes

## Procedure

1. Run `scripts/collect.sh <previous-tag> <new-tag>`. It prints one line per merged
   pull request: number, title, author and the labels.
2. Drop every line whose labels contain `internal`, `ci` or `chore`.
3. Put each surviving line into exactly one of the four categories in
   [references/categories.md](references/categories.md). A change that seems to fit two
   belongs in the higher one; the order in that file is the order of precedence.
4. Rewrite each line as a sentence in the voice defined in
   [references/voice.md](references/voice.md). The pull request title is a note to
   the team; the release note is a note to a stranger.
5. Check the result against [references/examples.md](references/examples.md).

## The one rule that is not negotiable

Every note says what a person can now do, or what stopped happening to them. If a
sentence can only be understood by someone who has read the diff, it is not finished.

Read what that body is. It is not the policy — it is a table of contents with an order of operations. The policy lives in three files it names and does not include. And step one hands work to a script, because a script's code never enters the context window at all: only its output does.2

The loading model has a name and three stages. The specification states them with a token budget attached:1

  1. Metadata, about 100 tokens: name and description, loaded at startup for every installed skill.
  2. Instructions, recommended under 5,000 tokens: the SKILL.md body, loaded when the skill is activated.
  3. Resources, as needed: bundled files, loaded only when something requires them.

The reference documentation puts a fourth column on the same table — when loaded, token cost, content — and the row that matters is the third: none until accessed.3 The sentence that summarises the whole chapter is there too:

Files don't consume context until accessed, so Skills can include comprehensive API documentation, large datasets, or extensive examples. There's no context penalty for bundled content that isn't used.3

The measured table at the top of this chapter is that claim checked against five skills nobody wrote for this article. Two rows deserve reading against each other.

next-best-practices has a 966-token body that links to nineteen files holding 19,374 tokens. Ask it to fix a hydration error and the agent reads the body plus hydration-error.md: 1,409 tokens out of 20,340, a factor of fourteen, and the other eighteen files are never opened.

next-cache-components has a 2,334-token body and no bundled files at all. It is a valid skill and a well-written one, and it has no level 3 to disclose. That is the honest limit of the technique: progressive disclosure is only a saving if there is something to defer. A skill whose knowledge does not decompose pays its whole body on activation, and the only lever left is not activating it.

Break it: the description is the whole interface

Link to the section: Break it: the description is the whole interface

Level 1 is a routing decision made from one sentence. Nothing else about a skill influences whether it is ever opened — not the quality of the body, not the examples, not the scripts. So the description is not documentation. It is the query surface, and it can be wrong.

The specification says so in the form of a good example and a bad one, and the bad one is four words: description: Helps with PDFs.1 That is worth measuring rather than accepting.

Six skills, each with a plausible description that says what it does and when to use it. Twenty-four requests, four per skill, phrased the way a person would phrase them and never naming the skill. The model sees the six lines in its system prompt and must answer with one name or with NONE. Greedy decoding, so it reproduces. Then the same twenty-four requests with the same six skills, and the descriptions cut back to their bare subject.

the two system promptsTEXT
rich   - sql-review: Review a SQL migration for locks, missing indexes and unsafe
         defaults before it runs on the production database. Use when someone adds
         or changes a migration, an index, or a table column.
thin   - sql-review: Helps with SQL.
24 requests, Qwen2.5-0.5B-Instruct, greedy decodingTEXT
rich   295 tokens of level 1 for six skills   18/24 correct = 75.0 %  [55.1, 88.0]
thin    81 tokens of level 1 for six skills   10/24 correct = 41.7 %  [24.5, 61.2]

paired: rich only 9, thin only 1, two-sided sign test p = 0.0215
answered NONE: rich 1 of 24, thin 9 of 24

Read the intervals first, as Chapter 4 insisted and Chapter 29 will insist again: they overlap, and twenty-four cases cannot rank two systems on their aggregates alone. The paired comparison is what settles it, and it is Chapter 15's instrument: of the ten cases where the two arms disagreed, nine went to the rich descriptions and one to the thin ones. That is established at the usual threshold.

Now read the last line, which is the actual finding. With thin descriptions the model answered NONE on nine of twenty-four requests. Not the wrong skill: no skill. Here are four of them, verbatim:

TEXT
"Check this migration before I run it against production."     -> release-notes
"Will this CREATE INDEX lock writes?"                          -> NONE
"Is this ALTER TABLE safe to deploy at peak traffic?"          -> NONE
"Is 'seamless and powerful' allowed in the app store listing?" -> next-best-practices

A perfect sql-review skill was installed, with a body and examples and a checklist, and it was never opened, three times in a row, on the three questions it was written for. Levels 2 and 3 are irrelevant to a skill that level 1 never reaches.

The cost of fixing it: 214 tokens, the difference between 295 and 81, spread over six skills. Which is Chapter 18's finding arriving from the other side. There, changing only a tool's description took date formatting from 2 correct out of 24 to 24 out of 24. Here, changing only a skill's description takes activation from 10 out of 24 to 18. In both cases the cheapest fix in the system is a sentence, and in both cases the sentence has to name the trigger and not just the subject: not what the thing is, but what the user will have just said when it applies.

One caveat this chapter owes its own standards. This is a half-billion-parameter model, and a frontier model routes far better than 75 %. Read the mechanism, not the magnitude: the routing signal is one sentence long whatever model reads it, and no model can select on information you did not put in that sentence.

Break it again: the escape hatch that costs 26,362 tokens

Link to the section: Break it again: the escape hatch that costs 26,362 tokens

The second failure is the opposite of the first. The skill is found, the levels are correctly split, and the agent reads all of it anyway.

vercel-react-best-practices is a genuinely well-built skill. Its 1,670-token body is a priority table of eight categories and a quick reference naming 70 rule files, one line each. The rules are on disk beside it: 70 files, smallest 132 tokens, median 319, largest 1,052. Ask it one question about barrel imports and the honest cost is the body plus one file — under 2,400 tokens against a bundle of 53,670.

Then the last line of the body says this:

the final section of SKILL.mdTEXT
## Full Compiled Document

For the complete guide with all rules expanded: `AGENTS.md`

AGENTS.md is 26,362 tokens. It is the 70 rule files concatenated: their sum is 25,784, and the difference is the headings between them. So the skill offers the agent a choice between reading one median rule at 319 tokens and reading the same content, all of it, at eighty-three times the price — and it offers that choice in a sentence with no cost attached and no condition on when to take it.

That is not a bug and the file is not wrong; a compiled document is genuinely useful to a human, and to an agent that has been asked to audit an entire codebase. It is a level-3 file with a level-2 invitation, and the lesson generalises past this one skill: every path out of a SKILL.md should say what it costs and when it is worth it, because the model has no way to know that a filename is eighty-three times more expensive than the filename above it.

The same folder carries a smaller lesson in staleness. The body says "70 rules across 8 categories" and lists 70; the rules/ directory holds 72 files, of which two are scaffolding (_template.md and _sections.md); and the sidecar metadata.json says "40+ rules". Three counts of the same set in one folder, one of them right, one of them arithmetic, and one of them left over from an earlier version. A skill is a document, and documents rot exactly like a code comment that has drifted away from the code beside it — with the difference that this one is read by a machine that will not raise an eyebrow.

The fields the reference implementation adds, and the portability trap

Link to the section: The fields the reference implementation adds, and the portability trap

The open specification defines six frontmatter fields. The reference implementation, Claude Code, accepts twenty.2 Five groups are worth knowing by name, because they are where the format stops being only a document:

Permission and invocation. allowed-tools pre-approves tools for the turn that invoked the skill and the grant clears on the next message; disallowed-tools removes them. disable-model-invocation stops the model from loading it on its own, which turns the skill into a command a person runs. user-invocable: false does the opposite: hidden from people, available only to the model, for background knowledge.

Isolation and cost. context: fork runs the skill in a separate sub-agent context with its own window — Chapter 25's sub-agent boundary as one line of YAML — with agent choosing which kind and background deciding whether the turn waits. model and effort change which model runs while the skill is active, for that turn only.

Arguments (arguments, argument-hint) let a person pass values that are substituted into the body, which is what makes a skill usable as a slash command. Scoping (paths) limits activation to files matching a glob. And dynamic context injection is the one that changes the mental model: a line of the form !`git diff HEAD` runs before the body is sent, and its output is substituted into the text. The document is a template, and part of it is computed at read time.

Now the trap, and it is stated in the same documentation: outside Claude Code — on the web product, through the Skills API, in packaging — only the six specified fields are allowed, and any other field is a hard error on upload.2 So a skill that works perfectly in one product fails to install in another belonging to the same vendor, and it fails at the frontmatter rather than at anything you could test by reading the prose. If you intend a skill to be portable, the six fields are the whole budget. If you do not, say so in compatibility, which exists for exactly this.

Four things get confused with each other constantly, and the confusion is not vocabulary pedantry: choosing wrong costs money on every turn, or costs you a guarantee you thought you had.

System promptSkillToolMCP server
What it istext in every requesta folder whose root is a SKILL.mda JSON Schema plus an endpoint in your codea process or service speaking a protocol
What the model doesreads it, alwaysreads it, when it decides the description matchescalls it, and waits for your resultcalls it, through the host, one client per server
What it costsits full length, every turn, foreverabout 50 tokens a turn; the body once, if usedits schema, every turn; execution when calledevery schema plus the server's instructions, every turn
What it can guaranteenothing — it is advicenothing — it is advice the model may skipeverything your code enforces before actingeverything the server enforces
Who writes ityouyou, a colleague, or a vendoryousomebody else, for many hosts
Chapter15this one1826 and 27

The two rows in bold are the whole distinction. A skill is read; a tool is invoked. A skill is prose that arrives in the context window and competes for attention with everything else there; the model can follow it, misread it, or ignore it, and nothing in the system notices. A tool is a call that leaves the model's hands entirely: your code receives arguments, validates them, checks permissions and decides. Chapter 18 put it as the model proposing and your code disposing, and that division is exactly what a skill does not have.

So six real cases, resolved:

"Answer in the user's language. Never state a price you have not been given."

Link to the section: "Answer in the user's language. Never state a price you have not been given."

System prompt. It applies on every turn, it is a constraint rather than a procedure, and it is two sentences long. Something that always applies has nothing to disclose progressively, and paying for a discovery line on every turn in order to avoid paying for two sentences on every turn is not a saving.

Skill. Procedural, needed on perhaps one turn in forty, decomposable into voice, taxonomy and examples, and it is prose that a person will edit. This is the shape the format was designed for, and the measurement above is what it saves.

"Look up an order by its identifier in the warehouse database."

Link to the section: "Look up an order by its identifier in the warehouse database."

Tool. There is a deterministic function behind it and the model must not improvise the query. Writing this as a skill — a document explaining how to query the warehouse — hands the model the schema and hopes. A schema plus an endpoint hands it an answer.

"Read and write issues in our tracker, from every agent product the company uses."

Link to the section: "Read and write issues in our tracker, from every agent product the company uses."

MCP server. The capability is not yours, several hosts need it, and it has an authentication story. That is the N×MN \times M problem Chapter 26 opened with, a protocol is the answer to it, and Chapter 27 ships one twice. A skill cannot be discovered by a host that has never seen your filesystem — which is precisely the gap the standards work at the end of this chapter is closing.

None of the four. It is knowledge to look up, not a procedure to follow, and it belongs in an index the agent searches: Chapter 19. Bundling it as level 3 is permitted and tempting and wrong, because the model would need to guess which of forty files holds the answer from their names alone. What is a good skill is the two-page procedure telling the agent when to search that index, what a low similarity score means, and how to cite what it finds.

"Never refund more than two hundred euros without a human."

Link to the section: "Never refund more than two hundred euros without a human."

A tool with an approval gate, and never a skill. This is the case that matters. Written into a SKILL.md, the limit is a sentence the model reads and usually respects; written into the refund tool, it is a branch that runs before any money moves. A limit that would embarrass you if it were crossed is not documentation. The rule, worth memorising: if the consequence of ignoring the instruction is worse than a badly formatted answer, the instruction does not belong in a document.

From house jargon to a standard, with the numbers

Link to the section: From house jargon to a standard, with the numbers

The history is short, unusually well dated, and it is the part almost nobody tells.

Agent Skills were published on 16 October 2025 as one vendor's feature, defined in that announcement as "organized folders of instructions, scripts, and resources that agents can discover and load dynamically to perform better at specific tasks", with the three levels described through an analogy worth keeping: "like a well-organized manual that starts with a table of contents, then specific chapters, and finally a detailed appendix".4

On 18 December 2025 the same page was updated to announce the format as an open standard, with a specification of its own at agentskills.io, governance open to contributions, and a reference validator.3 Read on 7 September 2026, the standard's client showcase lists forty-six products — editors, terminals, cloud platforms and mobile runtimes, including the first-party coding agents of Anthropic, OpenAI, Google and Mistral — each linking to its own setup documentation.1

The convergence with MCP is being done in the open, with numbers you can check:

What it isOpenedState on 7 Sep 2026
SEP-2076Agent Skills as a First-Class MCP Primitive: new skills/list and skills/get methods, a skills capability, a list_changed notification13 January 2026closed, 24 February 2026
Skills Over MCP working groupdefines how skills are "discovered, distributed, and consumed through MCP"; meets weekly; seventeen listed members, two of them leadsinterest group 1 February 2026; working group 16 April 2026active
SEP-2640Skills Extension, Extensions Track: a skill:// resource convention, extension identifier io.modelcontextprotocol/skills, discovery through skills/list and content through resources/read23 April 2026in review

The interesting part is the closure, not the proposals. SEP-2076 asked for a fourth primitive beside tools, resources and prompts. The working group that formed out of it decided the answer was no: skills ride on the resources primitive that already exists, as an opt-in extension.5 Chapter 26 measured the same instinct in the protocol's own changelog, where sampling, roots and logging were deprecated rather than kept. A standards body that removes a proposal it authored is behaving well, and the reason to tell this story with the numbers in front is that the summaries you will read elsewhere still describe skills as an MCP primitive.

You can now write a SKILL.md, split it into three levels that pay for themselves, read the frontmatter of somebody else's skill and know which fields will not survive being uploaded somewhere else, and answer the question the whole chapter was built around — system prompt, skill, tool, or server — with a reason rather than a habit.

What you cannot do is tell whether yours works.

Every claim in this chapter that mattered was a measurement, and the one that mattered most was an accuracy: 18 out of 24 against 10 out of 24, with an interval on each and a paired test between them, because two aggregates that overlap decide nothing. That instrument was borrowed. A skill's description is a routing key, its body is a procedure the model may or may not follow, and both of those are properties you can only find out about by running the thing many times and scoring what came back — which is a golden set, a grader you wrote before the run, and the metric that asks whether it worked every time rather than at least once.

Chapter 29 is that, and it opens with the number this chapter's method depends on: an agent that succeeds seven times out of ten looks like 70 %, and its pass^10 — the chance it succeeds on all ten — is zero. It also measures three graders on the same two hundred transcripts and gets 0 %, 13 % and 26 % without regenerating a single token. Before you trust the sentence you just wrote into a description, you need the instrument that can tell you it is worse than the one you replaced.


Every token count in this chapter was produced locally with tiktoken 0.14.0 and the o200k_base encoding, on 7 September 2026: over the five third-party skills listed at the top of this chapter, and over the release-notes skill written for this chapter, whose complete text is reproduced above in part. Level 1 is measured as the single line - name: description that a host renders into the system prompt; level 2 is the SKILL.md body after the frontmatter; level 3 is every other file in the folder. The costs use Chapter 16's measured rates for gpt-5.6-terra, $2.00 per million input tokens and $0.20 per million cached input tokens, applied to those counts — they are arithmetic on measured tokens, not observations of a live bill. No paid API was called to write this chapter.

The activation experiment ran Qwen/Qwen2.5-0.5B-Instruct in half precision on one consumer GPU, greedy decoding, 24 requests over six skills, twice — once with descriptions that state what the skill does and when it applies, once with the descriptions cut to a bare subject in the style of the specification's own "poor example". Intervals are Wilson at 95 %; the paired comparison is a two-sided exact sign test over the ten discordant cases; the Wilson interval is Chapter 4's and the exact paired sign test is Chapter 15's, both reused unchanged. Read the magnitudes as a property of a very small model and the method as transferable.

The five skills measured here are third-party packages, not written for this chapter: next-best-practices and next-cache-components from vercel-labs/next-skills, and vercel-composition-patterns, vercel-react-best-practices and vercel-react-native-skills from vercel-labs/agent-skills. Their internal counts — 70 rule files, AGENTS.md at 26,362 tokens, metadata.json dated January 2026 and claiming "40+ rules" — were read from the files on disk on 7 September 2026 and are properties of that published version, not criticisms of its authors: every one of them is the kind of drift that appears in any documentation tree that is edited more often than it is counted.

  1. Agent Skills Specification and Overview, agentskills.io/specification and agentskills.io, read 7 September 2026. Source of the directory layout; the frontmatter table reproduced above with every constraint (name 1–64 characters and matching the directory, description 1–1024 characters, compatibility up to 500, allowed-tools marked experimental); the good and poor description examples; the three-stage progressive-disclosure description with its token budget (metadata about 100 tokens, instructions under 5,000 recommended, resources as needed) and the advice to keep SKILL.md under 500 lines; the note that "the agent will load this entire file once it's decided to activate a skill"; the scripts/, references/ and assets/ conventions; the skills-ref validate command; the statement that the format "was originally developed by Anthropic, released as an open standard, and has been adopted by a growing number of agent products"; and the client showcase, which listed forty-six products on the date of reading. 2 3 4

  2. Skills in the Claude Code documentation, code.claude.com/docs/en/skills, read 7 September 2026. Source of the full field table used in the "fields the reference implementation adds" section — when_to_use, argument-hint, arguments, disable-model-invocation, user-invocable, allowed-tools, disallowed-tools, model, effort, context, agent, background, hooks, paths, shell, metadata, license, compatibility — of the description of dynamic context injection with !`command` running before the body is sent, of the rule that an allowed-tools grant clears on the next message, and of the compliance note that outside Claude Code only the six specified fields are accepted and any other causes a hard error in upload or packaging. 2 3

  3. Agent Skills overview, platform.claude.com/docs/en/agents-and-tools/agent-skills/overview, read 7 September 2026. Source of the level table with its four columns (Level 1 metadata, always, about 100 tokens per skill; Level 2 instructions, when triggered, under 5k tokens; Level 3+ resources, as needed, none until accessed); of the sentence quoted in full about bundled content carrying no context penalty; of "until a Skill is triggered, only its name and description occupy context"; of the statement that a script's code never enters the context window and only its output does; and of the security section, which tells you to use skills only from trusted sources and warns that a malicious skill "can direct Claude to invoke tools or execute code in ways that don't match the Skill's stated purpose" — Chapter 30's subject, arriving through a document rather than through a tool description. 2 3

  4. Anthropic, Equipping agents for the real world with Agent Skills, 16 October 2025, anthropic.com/engineering/equipping-agents-for-the-real-world-with-agent-skills, read 7 September 2026. Source of the definition quoted above, of the table-of-contents/chapters/appendix analogy, of the three levels as originally described, and of the framing that agents need "more composable, scalable, and portable ways" to be given domain expertise. The companion product announcement at claude.com/blog/skills carries the publication date of 16 October 2025 and the update of 18 December 2025 that introduced organisation-wide management and the open standard.

  5. Skills Over MCP Charter, modelcontextprotocol.io/community/working-groups/skills-over-mcp, read 7 September 2026. Source of the mission statement quoted above, of the changelog dates (interest group formed 1 February 2026, initial charter 14 April 2026, converted to a working group 16 April 2026, SEP-2640 linked 25 April 2026), of the leadership and the seventeen listed members, of the weekly meeting cadence, and of the success criterion naming the draft Skills Extension as "a formal extension using existing Resources primitives". SEP-2076, Agent Skills as a First-Class MCP Primitive, github.com/modelcontextprotocol/modelcontextprotocol/pull/2076, was opened on 13 January 2026 and closed on 24 February 2026; it proposed skills/list, skills/get, a skills server capability and a skills/list_changed notification, and defined a skill as "a named bundle of instructions plus references to tools, prompts, and resources that together teach an agent how to perform a domain-specific workflow". SEP-2640, Skills Extension, .../pull/2640, was opened on 23 April 2026 on the Extensions Track and carries the skill:// resource convention and the extension identifier io.modelcontextprotocol/skills. Chapter 26 lists the same working group among the protocol's optional extensions.

Ready to let LIA do the choosing?

Build with every AI model in one place — start free today.