Skill deduplication bug: local skills shown twice in skill menu

Open 💬 0 comments Opened Jun 15, 2026 by tarasinghrajput

Description

Skills from ~/.claude/skills/ are appearing twice in the skill menu (when pressing / and typing a skill name), even though only one copy exists on disk.

Environment

  • Claude Code version: 2.1.170
  • OS: Linux (WSL2)
  • Enabled plugins: voltagent-core-dev, voltagent-dev-exp, voltagent-qa-sec, voltagent-domains, voltagent-infra, voltagent-lang (from awesome-claude-code-subagents)

Reproduction Steps

  1. Have local skills in ~/.claude/skills/ (e.g., gh-issue-create, gh-issue-resolver)
  2. Have Voltagent plugins enabled in ~/.claude/settings.json
  3. Press / in Claude Code
  4. Type gh to filter skills

Expected Behavior

Skills should appear once in the skill menu, with no duplicates.

Actual Behavior

When typing /gh, users see each skill listed twice:

  • gh-issue-create appears twice
  • gh-issue-resolver appears twice

The system-reminder even shows both versions with different descriptions (one says "spawns sub-agents", the other says "spawns Volt sub-agents").

Investigation Results

Verified on disk:

  • Local skills exist: ~/.claude/skills/gh-issue-create and gh-issue-resolver
  • Only one copy per skill: npx skills list | grep gh-issue returns ONE entry per skill ✓
  • Voltagent plugins don't contain these skills: Searched all plugin directories, no gh-issue skills found ✓

The duplication is not a filesystem issue — it's happening in Claude Code's skill indexing/discovery layer.

Root Cause Hypothesis

Claude Code's skill discovery mechanism is announcing the same skill twice from different sources:

  1. From the local ~/.claude/skills/ directory
  2. From enabled plugins (possibly with modified metadata like "Volt sub-agents")

Without proper deduplication, both announcements reach the skill menu.

Impact

This creates a confusing UX where users see phantom duplicates that don't actually exist on disk, and it's unclear which version will be used when invoked.

View original on GitHub ↗