Org marketplace plugin update is not atomic: skill registers (name + description) while its files are absent from disk

Status Open
Maintainer reply None cached
Activity 0 comments · opened Jul 30, 2026

Environment

  • Claude desktop app (macOS), Cowork/local-agent sessions
  • Plugin distributed via an organization plugin marketplace synced from a private GitHub repo (relative-path source), auto-sync enabled

What happened

A teammate merged a version-bump PR adding a new skill to our org plugin. Auto-sync delivered it. On one member's machine, the app picked the update up in a non-atomic way:

  • The new skill REGISTERED: it appeared in the session's available-skills list with its full name and description.
  • Its files were ABSENT: the skill's directory (e.g. /mnt/skills/plugins/<plugin>:<skill>) did not exist on disk, so the SKILL.md body and bundled references were unreadable.

The session's Claude correctly reported it could see the skill's description but could not read its instructions. The same account on claude.ai web had the complete skill working, confirming the marketplace payload itself was fine.

Expected

Plugin updates apply atomically per version: either the previous version stays fully mounted, or the new version is fully mounted (index and files together). A state where a skill is listed but its files are missing invites the model to improvise the skill's behavior from the description alone, which silently degrades quality — the model usually works around a missing file rather than reporting it.

Repro / timing

Appears to require catching the update mid-delivery: the affected app had been open across the sync window (update merged ~5:30pm ET; the half-mounted state was observed the following morning without an app restart in between). Fully quitting and reopening the app resolved it; a plugin disable/enable cycle is the stronger reset.

Suggestion

Stage the incoming version to a temp location and atomically swap list+files together (or register the new skill list only after the payload is verified on disk). A checksum/manifest verification on mount would also let the app self-heal instead of serving a half-state.

Happy to provide more detail. This bit a non-technical team member on our org rollout; the workaround is easy but the failure mode is invisible unless the model chooses to be honest about the missing files.

View original on GitHub ↗