The 20-50 Skill Threshold Is a Heuristic, Not a Measurement — And the Real Constraint at 60 Skills Is Trigger Collision, Not Token Budget
The question
Anthropic's Complete Guide to Building Skills warns that enabling more than 20-50 skills simultaneously degrades response quality. Andrew's phData/CAF departmental target is ~60 skills. Is 20-50 empirically grounded or a rule of thumb? What published patterns exist for selective enablement, "skill packs" (grouped by role/task type), and per-session context pruning for large deployments — so CAF skills can be packaged correctly before shipping?
What we already know (from the vault)
- The guide's own framing. Per [[2026-06-30-anthropic-skill-guide-vs-brigade-comparison]], the Complete Guide (33pp, Anthropic, last modified 2026-01-26) flags "the 20-50-simultaneous-skills degradation threshold + skill packs" as a constraint that "directly hits Andrew's ~60-skill departmental grid." Our own note already earmarked "fold selective enablement / packs into the fleet/distribution design now, not later." So the constraint is real to us; what was unverified was whether 20-50 is a measured number.
- Anthropic runs hundreds of skills internally. [[2026-04-04-anthropic-skills-internally]] (Thariq): Anthropic has "hundreds in active use" across nine categories. This is the tell that "20-50 degrades" cannot be a hard capacity ceiling — the same team ships far past it. The reconciler is progressive disclosure (below).
- Progressive disclosure is the load model. The guide's three levels (frontmatter always-loaded → SKILL.md body when relevant → linked files on demand) is exactly the pattern our brigade's context bundle already uses. Only name+description sit in context until a skill triggers. This is architecturally identical to this session's own CLAUDE.md "lazy pointer" for CAPABILITIES.md.
- Context rot is the parent frame. [[2026-04-15-thariq-claude-code-session-management-1m-context]]: model performance degrades as context grows ("more context isn't free"), even inside a 1M window. Pruning tools = /rewind, /clear, /compact, and subagent routing (only conclusions return to parent). This governs conversation context, and by extension any always-on skill metadata.
- The fat-harness anti-pattern names the tool cost directly. [[2026-04-11-garry-tan-thin-harness-fat-skills]]: "a fat harness with thin skills — 40+ tool definitions eating context, god-tools with multi-second MCP round-trips." The expensive thing is tools, not skills.
- RDCO already lives at 60+ skills. [[2026-04-19-indydevdan-ditching-mcp-servers]] notes "RDCO has 60+ skills." So this is not hypothetical for CAF — it is our own current operating regime.
- CAF context. [[2026-06-25-productize-framework-armstrong-vecteris]] frames the "106-skill CAF" as service-trapped tacit expertise and argues to collapse 106 → ~15-20. [[2026-06-10-caf-current-state-teardown]] flags there is "no master
/catalystentry point" — install is a bespoke script, the root SKILL.md is a catalog, not an invokable router.
What the web says
- Progressive disclosure makes the token cost trivial. Anthropic's engineering page confirms Level-1 loads only
name+descriptionof every installed skill. Measured costs: ~80 tokens median discovery cost per skill (range ~55-235); all 17 official skills ≈ 1,700 tokens; 40 skills ≈ ~1,500 tokens total (Anthropic's own dev environment). "An agent can be aware of dozens of skills for less context than a single activated skill." Eagerly loading all 40 full bodies would cost ~13,900 tokens — a 94% reduction via progressive disclosure. Conclusion: 60 skills' worth of descriptions is ~5K tokens — a rounding error against a 200K window. Token budget is NOT the binding constraint for skills. - The empirically-measured degradation is about TOOLS, not skills. Tools inject full JSON schemas that are always in context. Documented numbers: OpenAI's API caps at 128 tools and "recommends keeping that number well below 20"; controlled Pet-Store experiment showed a cliff (10 tools = perfect, 20 tools = 19/20, 107 tools = total failure for both large and small models — "they don't degrade gracefully, they fall off"). GitHub cut Copilot's MCP integration from 40 → 13 tools and gained 2-5pp on SWE-Lancer/SWEbench-Verified plus 400ms latency. A single GitHub MCP server = 42,000 tokens of tool definitions before any work. Best-practice rule of thumb: <20 tools available, accuracy degrading past ~10.
- The mechanism is selection/attention, not tokenization. SwirlAI's analysis: "Claude selects skills through pure reasoning, with description quality directly determining routing accuracy." The bottleneck is the model's ability to pick the right item from the menu — a cognitive/attention limit — not running out of context. Poor or overlapping descriptions degrade routing independent of window size.
- Skills scale higher than tools because the per-item surface is smaller. A skill contributes one crisp description line to the selection menu; a tool contributes a full schema. Same selection mechanism, gentler curve. This is why Anthropic can run hundreds of skills but recommends <20 tools.
- No published "skill packs" spec. Neither Anthropic's engineering page, the platform docs, nor the third-party guide summaries define a formal "skill packs / selective enablement" mechanism. The concept exists in the PDF guide as advice; the implementation pattern is inherited from the tool-count literature (curate the active set) and from Claude Code plugins (bundle skills, enable per-project,
allowed-toolsscoping).
Convergences and contradictions
- Convergence — token cost is a non-issue for skills. Vault (progressive disclosure) and web (1,500 tokens for 40 skills) agree: you can install 60+ skills with negligible always-on cost. The guide's implication that 20-50 skills exhausts context is not supported by the token math.
- Convergence — the real limit is selection quality. Thariq's context-rot, Garry Tan's "40+ tool definitions eating context," and SwirlAI's "description quality determines routing accuracy" all point to the same thing: too many choices with overlapping triggers degrades the router, whether the choices are tools or skills.
- Contradiction resolved — "hundreds internally" vs "20-50 degrades." Not a contradiction once you separate installed (cheap, progressive-disclosure, hundreds OK) from simultaneously-active-in-the-selection-surface (attention-bound, keep small). The 20-50 warning is really about the second.
- Contradiction — the 20-50 number itself. The empirically-grounded numbers (<20, cliff at ~107, 40→13 win) are all tool measurements. Applying 20-50 to skills is an extrapolation. Skills are cheaper per item, so the true skills threshold is higher and softer than 20-50. The 20-50 figure conflates the two.
Synthesis for RDCO
Verdict on 20-50: it is a heuristic, not an empirical skills threshold. The measured degradation in the literature is for tools (full schema always in context): recommended <20, accuracy degrading past ~10, hard cliff at high counts, GitHub's 40→13 real-world win. Anthropic's guide borrows that guardrail and restates it for skills, but skills do not carry the same cost — progressive disclosure means 40 skills ≈ 1,500 tokens and Anthropic itself runs hundreds. So 20-50 is a conservative rule of thumb worth respecting for the simultaneously-active set, but it is not a measured skills-specific cliff, and it is not a reason to fear a 60-skill library.
The skills-vs-tools context cost, stated cleanly:
- Skills = progressive disclosure. ~80-100 tokens each, name+description only, until triggered. 60 skills ≈ ~5K tokens always-on. The cost that matters is selection accuracy over the description menu, not tokens.
- Tools = full JSON schema, always in context, every turn. 15-40 tools can be 40K+ tokens and measurably degrade both selection and reasoning. This is where a hard cap belongs.
- CAF's ceiling is therefore not its 60 skills — it is (a) any MCP/tool surface bundled alongside them, and (b) trigger collision among 60 similarly-worded skill descriptions.
Packaging recommendation for the ~60-skill CAF deployment (shippable to Andrew's team):
- Install broad, enable narrow. Ship all ~60 as a library, but never enable all 60 in one session. Target a simultaneously-active surface under ~15-20 skills — the empirically-supported comfortable range from the tool literature, applied conservatively to skills.
- Define skill packs by role AND by CAF phase. Two grouping axes both already exist in the vault:
- Role packs (maps to the Ch4 two-rail distribution): a pre-sales/use-case pack for the ~60 sales users (Cowork org-admin rail), a build/delivery pack for the ~12 engineers (Code plugin rail). A sales seat should never load engineering skills into its selection menu.
- Phase packs: the CAF 8-phase pipeline ([[2026-06-28-caf-8-phase-structure-and-skill-pipeline-mapping]]) gives natural cut lines — Phases 1-4 "half-CAF" (learn customer → use cases → C4 Build Manifest) is one pack; the delivery/skills-pipeline half is another. Enable the phase-pack for the phase the user is in.
- Ship a master router / entry-point skill per pack. Fix the gap [[2026-06-10-caf-current-state-teardown]] flagged (no
/catalystentry point). A single top-level dispatcher keeps the first-level selection surface tiny and routes to sub-skills on demand — the same lazy-pointer move CLAUDE.md uses for CAPABILITIES.md. This is the highest-leverage single fix. - Invest in description quality as the routing lever, and lint for trigger collision. Because selection is "pure reasoning over descriptions," disambiguated, non-overlapping when-to-use lines are what actually protect quality at 60 skills. The brigade's triggering critic already scores this; add a cross-skill collision check (no two enabled skills share a trigger phrase) to the deterministic lint axis alongside Reference A's mechanical rules.
- Add a composability/portability critic axis (the guide's candidate) so "works alongside the other skills in its pack" becomes a tested property, not an assumption.
- Per-session pruning is a secondary lever, not the fix. /clear, /compact, and subagent routing (Thariq) manage conversation context; they do not shrink the skill menu. The menu is shrunk by pack scoping (step 2), not by pruning. Keep them for long delivery sessions, but don't rely on them to solve the 60-skill selection problem.
One-line packaging rule for the team: A CAF user should only ever see the skills for their role and current phase — install 60, expose ~15.
Open follow-ups
- Does Anthropic's Skills API (
/v1/skills) or Cowork org-admin expose native per-role/per-workspace enablement scoping, or must packs be enforced by shipping separate plugin bundles per rail? (Determines whether "install broad, enable narrow" is a config toggle or a distribution-build decision.) - Is there a measured skills-specific degradation curve anywhere (vs the tool-count curve)? All hard numbers found are tool measurements; a skills-native A/B (10 vs 30 vs 60 active skills, selection accuracy) is exactly the kind of test the brigade's execution-eval station could run and would be a publishable RDCO artifact.
- What is the actual token cost of the CAF skill descriptions specifically (they may be longer/heavier than Anthropic's 80-token median), and does any single CAF skill bundle an MCP/tool surface that reintroduces the expensive tool-schema cost?
- Does a master-router entry-point skill measurably improve selection accuracy over a flat 60-skill menu, and by how much? (Cheap to test; would validate step 3 of the recommendation.)
Related
- [[2026-06-30-anthropic-skill-guide-vs-brigade-comparison]] — the source note where the 20-50 + skill-packs constraint was first flagged against Andrew's grid
- [[2026-04-04-anthropic-skills-internally]] — Anthropic runs "hundreds" of skills internally; the reconciler for "20-50 degrades"
- [[2026-04-15-thariq-claude-code-session-management-1m-context]] — context-rot and per-session pruning tools (the parent frame)
- [[2026-04-11-garry-tan-thin-harness-fat-skills]] — "40+ tool definitions eating context" names the tool cost directly
- [[2026-04-19-indydevdan-ditching-mcp-servers]] — RDCO's own 60+ skill regime + MCP/tool-count portability tradeoffs
- [[2026-06-28-caf-8-phase-structure-and-skill-pipeline-mapping]] — CAF phase structure = natural phase-pack cut lines
- [[2026-06-25-productize-framework-armstrong-vecteris]] — "106-skill CAF" collapse-to-15-20 argument
- [[2026-06-10-caf-current-state-teardown]] — the missing
/catalystmaster entry point (the router gap)
Sources
- Vault:
~/rdco-vault/08-tooling/2026-06-30-anthropic-skill-guide-vs-brigade-comparison.md - Vault:
~/rdco-vault/06-reference/2026-04-04-anthropic-skills-internally.md - Vault:
~/rdco-vault/06-reference/2026-04-15-thariq-claude-code-session-management-1m-context.md - Vault:
~/rdco-vault/06-reference/2026-04-11-garry-tan-thin-harness-fat-skills.md - Vault:
~/rdco-vault/06-reference/2026-04-19-indydevdan-ditching-mcp-servers.md - Vault:
~/rdco-vault/01-projects/phdata/2026-06-28-caf-8-phase-structure-and-skill-pipeline-mapping.md - Vault:
~/rdco-vault/06-reference/2026-06-25-productize-framework-armstrong-vecteris.md - Vault:
~/rdco-vault/01-projects/phdata/2026-06-10-caf-current-state-teardown.md - Web: Anthropic — Equipping agents for the real world with Agent Skills (https://www.anthropic.com/engineering/equipping-agents-for-the-real-world-with-agent-skills)
- Web: Anthropic — The Complete Guide to Building Skills for Claude, PDF (https://resources.anthropic.com/hubfs/The-Complete-Guide-to-Building-Skill-for-Claude.pdf)
- Web: SwirlAI — Agent Skills: Progressive Disclosure as a System Design Pattern (https://www.newsletter.swirlai.com/p/agent-skills-progressive-disclosure)
- Web: Microsoft Research — Tool-space Interference: An emerging problem for LLM agents (https://www.microsoft.com/en-us/research/video/tool-space-interference-an-emerging-problem-for-llm-agents/)
- Web: DEV — MCP Tool Overload: Why More Tools Make Your Agent Worse (https://dev.to/thedailyagent/mcp-tool-overload-why-more-tools-make-your-agent-worse-5a49)
- Web: KDnuggets — Anthropic's Complete Guide to Claude Skills Building (https://www.kdnuggets.com/anthropics-complete-guide-to-claude-skills-building)