Plugin slash commands silently dropped from agent's `user-invocable skills` list — looks like an undocumented budget trim
Summary
When a user has many plugins installed, some plugin slash commands silently fail to appear in the user-invocable skills list that Claude Code injects into the agent's system prompt at session start. The agent can't invoke or reason about these commands — including hand-offs documented in project CLAUDE.md — and often substitutes a similarly-named wrong skill.
Environment
@anthropic-ai/claude-codev2.1.119 (Windows binary)- 39 installed plugins, 81 commands + 50 skills total
Observed
| Plugin (anonymized) | Commands on disk | Exposed in session | Dropped |
|---|---|---|---|
| small-plugin-A | 4 | 4 | 0 |
| small-plugin-B | 4 | 4 | 0 |
| medium-plugin-C | 10 | 8 | 2 |
| large-plugin-D | 36 | 28 | 8 |
| small-plugin-E | 2 | 0 | 2 (100%) |
All dropped commands have valid YAML frontmatter identical in shape to surfaced ones. No errors, no warnings, no changelog mention.
What I ruled out
- Frontmatter syntax — commands parse fine
- File size / alphabetical order — no consistent pattern
- Simple prefix collision with a sibling skill — two commands in the same plugin both prefix-match the plugin's skill name, but only one drops
Evidence this is a budget trim, not a dedup pass
Binary inspection of claude.exe turned up:
- A
skillOverridessetting (settings.jsonkey with per-skill"on" | "name-only" | "user-invocable-only" | "off"options) — documented in the schema, not populated in my config. - A formatter that computes
j = Math.floor(budget / items.length)and falls back to "name only" listing whenjdrops below a minimum threshold. - A function returning
{ totalCommands, includedCommands }— explicit evidence that items are dropped before display. - No
deduplicate/dedupreferences in skill/command paths; the only matches are hook-related and network-code false positives.
So the mechanism appears to be a global item-count budget trim, not an LLM dedup and not a per-plugin cap. With 131 total items in my session, ~20 get silently cut.
Ask
- Visibility —
claude plugins list(or a--verboseflag) should show which commands/skills are being auto-dropped, with the reason. - Config knob — a setting like
skillListBudgetorplugins.exposeAll: trueto let power users opt out of the trim. - Docs — document the trim behavior in the plugin authoring guide so plugin authors know their commands may not surface to the agent in high-install-count sessions.
Happy to provide a minimal repro or run diagnostics if helpful.
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗