[BUG] /skills list shows the same skill row repeated many times and out of order while scrolling (render artifact)

Status Open
Reported on v2.1.282
Maintainer reply None cached
Activity 0 comments · opened Sep 26, 2026

Description

In the interactive /skills list, scrolling leaves stale rows on screen. The same user skill then appears many times in a row, and rows show up out of alphabetical order. The skills are loaded only once; this is a rendering problem in the list view.

Environment

  • Claude Code 2.1.282
  • macOS (Darwin 27.2), terminal 200×60 (also seen in iTerm2)
  • CLAUDE_CONFIG_DIR pointing at a profile home (the bug reproduces with a large skill set)
  • About 430 skills in the list (roughly 105 user skills, plus plugin skills and claude.ai-synced skills)

Steps to reproduce

  1. Start an interactive session with several hundred skills available: user skills, plugin skills and claude.ai-synced skills.
  2. Run /skills.
  3. Scroll through the list with PageDown/PageUp or the arrow keys.

Expected

Each skill appears once, in sorted order.

Actual

  • The same row repeats many times back to back. In one screen, agent-evaluator user · ~160 tok appeared about 25 times, followed by claude-profile locked by author · user-only · user · ~90 tok repeated about 8 times. The header read "↑ 277 more above".
  • User-skill rows get stranded between unrelated plugin rows. For example, agent-evaluator, claude-profile and kb-prime showed up directly above engineering:system-design … superpowers:*, which a sorted list can't produce.

Evidence the skills are not actually duplicated

  • The debug log reports Loaded 135 unique skills (… user: 105 …).
  • The system/init event from claude -p --output-format stream-json --verbose lists 450 skills, all with unique names.
  • On disk, the user skills directory contains exactly one agent-evaluator/SKILL.md.

So the duplication comes from the /skills TUI list rendering while it scrolls (rows not cleared or re-keyed), not from skill discovery.

View original on GitHub ↗