Check Plugin Version
Verify the installed compound-engineering plugin version matches the upstream `plugin.json` on `main`, and recommend the update command if it doesn't. Claude Code only.
Overview
Check Plugin Version
Verify the installed compound-engineering plugin version matches the upstream
plugin.json on main, and recommend the update command if it doesn't.
Claude Code only.
Pre-resolved context
Only the Skill directory determines whether this session is Claude Code — if empty or unresolved, the skill requires Claude Code. The other sections may contain error sentinels even in valid Claude Code sessions; the decision logic below handles those cases.
${CLAUDE_SKILL_DIR} is a Claude Code-documented substitution that resolves
at skill-load time. For a marketplace-cached install it looks like
~/.claude/plugins/cache/<marketplace>/compound-engineering/<version>/skills/ce-update,
so the currently-loaded version is the basename two dirname levels up.
The upstream version comes from plugins/compound-engineering/.claude-plugin/plugin.json
on main rather than the latest GitHub release tag, because the marketplace
installs plugin contents from main HEAD. Comparing against release tags
false-positives whenever main is ahead of the last tag (the normal state
between releases).
Skill directory:
!echo "${CLAUDE_SKILL_DIR}"
Latest upstream version:
!version=$(gh api repos/EveryInc/compound-engineering-plugin/contents/plugins/compound-engineering/.claude-plugin/plugin.json --jq '.content | @base64d | fromjson | .version' 2>/dev/null) && [ -n "$version" ] && echo "$version" || echo '__CE_UPDATE_VERSION_FAILED__'
Currently loaded version:
!case "${CLAUDE_SKILL_DIR}" in */plugins/cache/*/compound-engineering/*/skills/ce-update) basename "$(dirname "$(dirname "${CLAUDE_SKILL_DIR}")")" ;; *) echo '__CE_UPDATE_NOT_MARKETPLACE__' ;; esac
Marketplace name:
!case "${CLAUDE_SKILL_DIR}" in */plugins/cache/*/compound-engineering/*/skills/ce-update) basename "$(dirname "$(dirname "$(dirname "$(dirname "${CLAUDE_SKILL_DIR}")")")")" ;; *) echo '__CE_UPDATE_NOT_MARKETPLACE__' ;; esac
Decision logic
1. Platform gate
If Skill directory is empty or unresolved: tell the user this skill requires Claude Code and stop. No further action.
2. Handle failure cases
If Latest upstream version contains __CE_UPDATE_VERSION_FAILED__: tell
the user the upstream version could not be fetched (gh may be unavailable or
rate-limited) and stop.
If Currently loaded version contains __CE_UPDATE_NOT_MARKETPLACE__: this
session loaded the skill from outside the standard marketplace cache (typical
when using claude --plugin-dir for local development, or for a non-standard
install). Tell the user (substituting the actual path):
"Skill is loaded from
{skill-directory}— not the standard marketplace cache at~/.claude/plugins/cache/. This is normal when usingclaude --plugin-dirfor local development. No action for this session. Your marketplace install (if any) is unaffected — run/ce-updatein a regular Claude Code session (no--plugin-dir) to check that cache."
Then stop.
3. Compare versions
Up to date — {currently loaded} == {latest upstream}:
"compound-engineering v{version} is installed and up to date."
Out of date — {currently loaded} != {latest upstream}:
"compound-engineering is on v{currently loaded} but v{latest upstream} is available.
Update with:
claude plugin update compound-engineering@{marketplace-name}Then restart Claude Code to apply."
The claude plugin update command ships with Claude Code itself and updates
installed plugins to their latest version; it replaces earlier manual cache
sweep / marketplace-refresh workarounds. The marketplace name is derived from
the skill path rather than hardcoded because this plugin is distributed under
multiple marketplace names (for example, compound-engineering-plugin for
public installs per the README, or other names for internal/team marketplaces).