Plugin slash commands silently dropped from agent's `user-invocable skills` list — looks like an undocumented budget trim

Resolved 💬 4 comments Opened Apr 26, 2026 by IanVand Closed Apr 29, 2026

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-code v2.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:

  1. A skillOverrides setting (settings.json key with per-skill "on" | "name-only" | "user-invocable-only" | "off" options) — documented in the schema, not populated in my config.
  2. A formatter that computes j = Math.floor(budget / items.length) and falls back to "name only" listing when j drops below a minimum threshold.
  3. A function returning { totalCommands, includedCommands } — explicit evidence that items are dropped before display.
  4. No deduplicate/dedup references 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

  1. Visibilityclaude plugins list (or a --verbose flag) should show which commands/skills are being auto-dropped, with the reason.
  2. Config knob — a setting like skillListBudget or plugins.exposeAll: true to let power users opt out of the trim.
  3. 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.

View original on GitHub ↗

This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗