Progressive Disclosure¶
Modern agent runtimes do not load all installed skills into model context at once. Doing so would consume hundreds of thousands of prompt tokens and degrade model instruction following.
Instead, platforms like Claude Code, Google Antigravity, and OpenAI Codex use a multi-tier pattern known as progressive disclosure.
The Three-Stage Disclosure Ladder¶
graph TD
subgraph Level1 ["Level 1: Selection Surface (Startup)"]
L1Desc["YAML Frontmatter (name + description)"]
L1Tokens["~100 tokens per skill"]
end
subgraph Level2 ["Level 2: Activation (On-Demand)"]
L2Body["Markdown Body (Instructions & Examples)"]
L2Tokens["1,000 - 10,000 tokens (loaded only if triggered)"]
end
subgraph Level3 ["Level 3: Bundled Assets (As Referenced)"]
L3Assets["Scripts, templates, references"]
L3Execution["Executed or read only when referenced"]
end
Level1 -->|Model selects skill| Level2
Level2 -->|Instructions execute script| Level3
- Level 1 (discovery and selection): At session start, only the YAML frontmatter
nameanddescriptionare placed in the agent's system prompt (~50-100 tokens per skill). The body remains on disk. - Level 2 (activation): When the model decides to trigger a skill based on its description, the runtime reads the full
SKILL.mdbody and injects it into the conversation context. - Level 3 (execution): Any scripts, templates, or references bundled in the skill's directory are executed or read only as explicitly commanded by the activated skill body.
Listing Budgets and Elision Behavior¶
Because the Level 1 selection surface lives inside the system prompt, agent runtimes bound the total context allocated to catalog listings.
| Runtime | Per-Description Guidance | Whole-Catalog Budget | Exceeded Budget Behavior |
|---|---|---|---|
Claude Code (claude-code) |
1,024 characters (recommended ceiling) | ~30,000 column listing budget (1% of 1M context) | Drops descriptions entirely, listing only bare skill names (- <name>) |
Google Antigravity (antigravity-cli, antigravity-sdk) |
1,024 characters | System prompt skill listing budget | Truncates lower-ranked skills or rejects oversized system prompt extensions |
Goose (goose) |
1,024 characters | Extension declaration context window | Truncates tool/extension listing surface |
Pi (pi) |
1,024 characters | Context window allocation | Omits descriptions of overflow skills |
Offline Runtime (keyword) |
Configurable via reach.toml ([lint]) |
Unconstrained catalog fit | Evaluates all resident skills without catalog elision |
Why This Matters for Skill Developers¶
If a skill description exceeds 1,024 characters, reach lint warns of listing-overflow. Even more critically, when an installed catalog exceeds the runtime prompt budget, Claude Code does not truncate descriptions in the middle; it elides descriptions entirely for lower-priority skills, listing only bare skill names (- <name>).
Without its description in the prompt, the model has no trigger boundaries or semantic criteria to select the skill, rendering it unreachable regardless of user intent.
reach lint enforces these description boundaries before deployment (via reach.lint), and reach eval lets you test whether competitive catalogs cause description elision under real runtime constraints. To learn more about how competitive catalogs are sampled and scored, see How Reachability Works.