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 运行聚焦版本探测:
- 三个并行脚本 探测上游版本(从
mainHEAD 通过gh api)、当前加载的版本(来自插件缓存路径)和市场名称(也来自缓存路径) - 与
mainHEADplugin.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.0(main上的当前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.sh—gh api针对main上的plugins/compound-engineering/.claude-plugin/plugin.jsoncurrently-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 防止该技能在与插件版本无关的“更新计划”或“这是最新的”之类的散文上触发。更新是用户有意选择的。
另请参阅
ce-setup— 安装缺少的依赖项;版本检查的补充ce-report-bug— 报告错误;应该先建立版本ce-release-notes— 总结最近的复合工程插件版本