ce-update

检查安装的compound-engineering插件是否是最新的,如果不是则推荐更新命令。仅克劳德代码。

ce-update插件版本检查技能。它将您的 Claude Code 会话加载的版本与 main(市场安装位置)上的 plugin.json 进行比较,并告诉您是否是最新的,如果不是,则为您提供要运行的确切 claude plugin update 命令。

它是 Claude 代码,只是因为它依赖于插件线束缓存布局 (~/.claude/plugins/cache/<marketplace>/compound-engineering/<version>/...) 进行版本检测。在其他平台上或在 claude --plugin-dir 本地开发下,该技能会识别这种情况并告诉您无需采取任何操作。


TL;DR

问题 回答
它有什么作用? 将加载的插件版本与 main 上的 plugin.json 进行比较;如果命令过时,建议更新
何时使用它 “更新复合工程”、“CE 是最新的”,或者当 bug 行为表明插件过时时
它生产什么 “最新”或带有确切 claude plugin update 命令的 out of date 消息
状态 仅克劳德代码 (disable-model-invocation: true)

## 问题

插件版本漂移导致令人困惑的故障模式:

  • 针对已修复错误的错误报告 — 用户报告了两个版本前已修复的问题,但他们的插件已过时
  • 技能的行为类似于旧版本 - 用户运行技能并获得与当前文档不匹配的行为
  • 没有明显的方法来检查 - “我使用的是哪个版本”在克劳德代码中没有明显出现
  • 错误的更新命令建议 - claude plugin update 发布之前的手动缓存扫描/市场刷新建议
  • 市场名称混淆 - 该插件以多个市场名称分发(公共安装与内部/团队安装);对于一半的受众来说,更新命令中的硬编码名称是错误的

解决方案

ce-update 运行聚焦版本探测:

  • 三个并行脚本 探测上游版本(从 main HEAD 通过 gh api)、当前加载的版本(来自插件缓存路径)和市场名称(也来自缓存路径)
  • main HEAD plugin.json 进行比较,而不是最新的 GitHub 发布标签 - 市场从 main 安装,因此只要 main 领先,发布标签就会误报
  • 哨兵驱动的故障处理__CE_UPDATE_VERSION_FAILED__(gh 不可用/速率受限)和 __CE_UPDATE_NOT_MARKETPLACE__(在标准缓存外部加载,例如 claude --plugin-dir 本地开发)是技能识别的明确情况
  • 推荐的更新命令使用检测到的市场名称,而不是硬编码的名称 - 适用于公共、内部和团队市场
  • 仅 Beta 式显式调用 - 不会因散文提及“更新”而自动触发

是什么让它如此新颖

1. 与 main HEAD 比较,而不是释放标签

市场从 main HEAD 安装插件内容,而不是从最新版本标签安装。每当 main 位于最后一个标签之前时,与标签进行比较就会出现误报——这是版本之间的正常状态。该技能直接通过 gh api 读取 main 上的 plugins/compound-engineering/.claude-plugin/plugin.json

2. 从技能路径中检测到的市场名称,未硬编码

该插件以多个市场名称分发 - compound-engineering-plugin 用于公共安装(根据自述文件),以及用于内部或团队市场的其他名称。对于一半的观众来说,将名称硬编码到更新命令中是错误的。相反,该技能会根据市场缓存布局 (~/.claude/plugins/cache/<marketplace>/compound-engineering/<version>/skills/ce-update) 解析 ${CLAUDE_SKILL_DIR} 并从路径中提取市场名称。推荐的 claude plugin update compound-engineering@<marketplace> 命令使用检测到的名称。

3. 具有显式哨兵的三个并行探测器

三个脚本通过 Bash 工具并行运行:

  • scripts/upstream-version.sh — 通过 gh api 读取 main 上的 plugin.json;打印版本或 __CE_UPDATE_VERSION_FAILED__
  • scripts/currently-loaded-version.sh — 解析 ${CLAUDE_SKILL_DIR} 以获得版本段;打印版本或 __CE_UPDATE_NOT_MARKETPLACE__
  • scripts/marketplace-name.sh — 解析市场细分的 ${CLAUDE_SKILL_DIR} ;打印名称或 __CE_UPDATE_NOT_MARKETPLACE__

哨兵使故障模式变得结构化——技能知道上游获取是否失败(不同的恢复)与技能是否在标准缓存之外加载(不同的消息)。

4. --plugin-dir 本地开发模式被识别

scripts/currently-loaded-version.sh 返回 __CE_UPDATE_NOT_MARKETPLACE__ 时,两种情况会崩溃为相同的处理:

  • claude --plugin-dir 本地开发会话(从本地结帐加载的技能,而不是市场缓存)
  • 非Claude-Code平台(该技能仅限Claude Code)

该技能告诉用户:“从市场缓存外部加载。使用 claude --plugin-dir 进行本地开发时正常。此会话不执行任何操作。您的市场安装(如果有)不受影响 - 在常规 Claude 代码会话(无 --plugin-dir)中运行 /ce-update 来检查该缓存。”

5. 固定窄 allowed-tools

该技能在 allowed-tools 中声明了三个特定脚本 - Bash(bash *upstream-version.sh)Bash(bash *currently-loaded-version.sh)Bash(bash *marketplace-name.sh) - 因此,没有 bypassPermissions 的用户在技能运行时会跳过批准提示。按文件名固定,而不是广泛的 Bash(bash *)

6. 仅 Beta 式显式调用

disable-model-invocation: true 防止该技能在提及“更新”或版本相关讨论的散文中自动触发。插件更新是用户有意选择的 — 直接调用 /ce-update


简单示例

您怀疑技能行为与文档所述不符。您想知道您的插件是否已过时。您调用 /ce-update

该技能并行运行三个脚本:

  • upstream-version.sh 返回 2.42.0main 上的当前 plugin.json
  • currently-loaded-version.sh 返回 2.40.0 (从您加载的技能路径解析)
  • marketplace-name.sh 返回 compound-engineering-plugin (从同一路径解析)

当前加载≠上游→过时。技能回复:

复合工程在 v2.40.0 上,但 v2.42.0 可用。

更新为:
  克劳德插件更新compound-engineering@compound-engineering-plugin

然后重启Claude Code即可应用。

您运行命令,重新启动,下一个会话将具有新版本。


何时去实现它

在以下情况下使用 ce-update

  • 你说“更新复合工程”、“ce更新”、“ce是最新的”
  • 技能的行为与文档描述的不同
  • 您正在提交错误并希望首先确认您使用的是当前版本
  • 您即将使用最近添加的功能并想要验证它是否可用

在以下情况下跳过 ce-update

  • 您处于非 Claude-Code 平台上 — 技能停止并显示“无操作”消息;更新通过该平台的机制进行
  • 您处于 claude --plugin-dir 本地开发会话中 — 该技能识别出这种情况并停止
  • 您想要检查特定组件版本,而不是整个插件 → 直接读取 plugin.json

用作工作流程的一部分

ce-update 是一个独立的实用程序 - 它不位于链内。当怀疑版本漂移时会调用它:

  • 来自 /ce-report-bug — 检查版本是错误报告应该建立的第一件事
  • 直接来自用户当代理的行为闻起来陈旧时

输出由用户直接读取——没有下游技能消耗它。


使用独立版

直接调用:

  • /ce-update — 运行版本检查

没有争论。该技能进行探测、比较和报告。如果上游获取失败(gh 不可用或速率受限),它会这样说并停止,而不建议部分答案。


## 参考

哨兵 意义
__CE_UPDATE_VERSION_FAILED__ __CE_UPDATE_VERSION_FAILED__ gh api 无法获取上游 plugin.json(gh 不可用,速率受限)— 技能因该消息而停止
__CE_UPDATE_NOT_MARKETPLACE__ 技能在 ~/.claude/plugins/cache/ 外部加载 - 通常是 claude --plugin-dir 本地开发。技能停止并显示“无操作”消息

脚本(在 scripts/ 中):

  • upstream-version.shgh api 针对 main 上的 plugins/compound-engineering/.claude-plugin/plugin.json
  • currently-loaded-version.sh — 解析 ${CLAUDE_SKILL_DIR} 以获得版本段
  • marketplace-name.sh — 解析市场细分的 ${CLAUDE_SKILL_DIR}

所有三个都仅使用 Python 3 stdlib 和 gh — 没有 PyYAML 或其他 deps。


## 常问问题

为什么要与 main HEAD 进行比较,而不是与最新版本标签进行比较? 因为市场从 main HEAD 安装插件内容,而不是从发布标签安装。每当 main 位于最后一个标签之前时,与标签进行比较就会出现误报——这是版本之间的正常状态。

为什么从路径中检测到市场名称? 由于该插件以多个市场名称分发 - 公共安装使用 compound-engineering-plugin,内部/团队市场使用其他名称。对于一半的观众来说,将名称硬编码到更新命令中是错误的。从缓存路径中检测它可以保证您所在的市场的推荐正确无误。

为什么只有克劳德代码? 因为版本检测依赖于 Claude Code 插件harness 缓存布局 (~/.claude/plugins/cache/<marketplace>/compound-engineering/<version>/...)。其他平台有自己的更新机制;这项技能遵循那些。当技能检测到它不在标准缓存中时,它会清楚地说明并停止。

如果 gh api 受到速率限制怎么办? 该技能告诉您无法获取上游版本并停止。它不会猜测或推荐部分答案。等待速率限制,或通过 GitHub UI 手动检查版本。

--plugin-dir 本地开发怎么样? 该技能识别这种情况(来自路径解析脚本的 __CE_UPDATE_NOT_MARKETPLACE__ )并告诉您:使用 --plugin-dir 时这是正常的,此会话不执行任何操作,您的市场安装(如果有)不受影响。

为什么不自动调用? disable-model-invocation: true 防止该技能在与插件版本无关的“更新计划”或“这是最新的”之类的散文上触发。更新是用户有意选择的。


另请参阅