Skip to content

Skill/CLI version drift between npm and Claude Code plugin install paths #274

Description

@ankitranjan7

Summary

Webcmd ships the same skills/ through two independent distribution channels. They are stamped with the same version at release time but update on separate triggers, so a user can end up running a CLI and skills from different releases.

Channel Transport How skills land Update trigger
npm @agentrhq/webcmd tarball symlink into the installed package (src/skills.ts:179) webcmd update
Claude Code plugin git clone of this repo copy into ~/.claude/plugins/cache/webcmd/webcmd/<ver>/ claude plugin update webcmd@webcmd

The npm path cannot drift — webcmd skills add symlinks into the package, so a global npm install updates the skills for free.

The plugin path can. Claude Code copies the repo into a version-pinned cache directory it owns, keyed on .claude-plugin/plugin.json $.version. Verified empirically: a skill edit committed without a version bump does not propagate even after claude plugin marketplace update + claude plugin update (reports "already at the latest version"); with a version bump it lands in a fresh cache dir. Updates are version-gated, not commit-gated.

Why it bites

src/update-check.ts nags every 24h about a new CLI version and nothing else. A user who follows that prompt lands on CLI 0.6.1 + plugin skills 0.6.0 — precisely the mismatch the lockstep versioning was meant to prevent. Since skills emit webcmd commands and flags, a skill newer or older than the CLI produces confidently wrong commands.

Proposed work

  1. webcmd update passthrough — after the global install, detect a plugin-cache install and shell out to claude plugin update webcmd@webcmd. Narrow in scope: the symlink install needs nothing.
  2. webcmd doctor drift check — report when plugin-cache skills and symlinked skills are both present, and when their versions differ from the running CLI. Cheaper than (1) and catches the actual broken state.
  3. Release-trigger hygiene — a skill edit only reaches plugin users if it triggers a release. docs:/chore: commits do not cut a version under release-please, so a skill fix landed under those prefixes stays invisible to plugin users indefinitely. Worth a CONTRIBUTING.md note that skill changes use fix:/feat:.

Related

Surfaced while adding the Claude Code plugin manifests in #273.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions