Plugin skill resolution loads a stale cached version despite current registration (headless -p)

Status Open
Maintainer reply None cached
Activity 0 comments · opened Aug 24, 2026

Environment

Claude Code 2.1.x (macOS, darwin 25.6.0), local marketplace (source_type github), plugin teamwork@nonoun-plugins across ~15 project registrations.

Repro observed 2026-08-24

  1. Plugin updated on the marketplace main branch; /reload-plugins run in an interactive session. ~/.claude/plugins/installed_plugins.json shows the invoking project's row (scope local, projectPath = cwd) AND the user-scope row both at the new version (2.28.45), cache dir for 2.28.45 present.
  2. Launch claude -p "/plugin-name:skill" with cwd = that same project.
  3. The session's skill expansion reads Base directory for this skill: ~/.claude/plugins/cache/.../teamwork/2.28.32/... — a version pinned only by two OTHER projects' stale local-scope rows earlier in the plugin's entry array. The new behavior shipped in 2.28.45 silently does not run.

Workaround that fixed it

Hand-editing the two stale rows (other projects' registrations) in installed_plugins.json to the current version made the next claude -p session load 2.28.45 correctly. Backup diff available.

Expected

Version resolution for a session should use the invoking project's own registration (or user scope), never another project's row. At minimum the selection should not depend on entry order across unrelated projectPaths.

Impact

Silent stale-behavior execution: tests of a just-shipped skill fix ran the old skill twice with no version indication in output; only the transcript's base-directory line revealed it.

View original on GitHub ↗