Skip to content

fix(installer): CC npx 路径补齐 hooks 注册(v1.4.0 关键修复)#29

Closed
jnMetaCode wants to merge 1 commit into
mainfrom
fix/claude-code-installer-hooks
Closed

fix(installer): CC npx 路径补齐 hooks 注册(v1.4.0 关键修复)#29
jnMetaCode wants to merge 1 commit into
mainfrom
fix/claude-code-installer-hooks

Conversation

@jnMetaCode
Copy link
Copy Markdown
Owner

你要解决什么问题?

用户社区微信群高频反馈,npx superpowers-zh 装 CC 完成后 skill 完全不会自动触发

  1. 用 npm 安装 superpowers 到 CC 为什么没有 hook?
  2. 我按在 CC 下 plugin 方式安装,skill 放在了项目级下面,然后 /skills 读取不到他们,于是我又把这些手动挪到了用户级的 skills 文件夹下结果发现根本不会自动调用,即使我用了 using-superpower 指令他也不用技能走流程
  3. plugin = skill 包 + hooks + commands + agents 的组合……如果一个 plugin(比如 superpowers-zh)只有 skills,没有 hooks、commands、agents,那是不是这个插件就不完整了?
  4. 修改 CLAUDE.md 这两个设置不能完全保证执行

根因诊断: 在 v1.3.0 及之前,bin/superpowers-zh.jsgenerateClaudeCodeBootstrap() 只做两件事:

  1. skills/ 复制到 .claude/skills/
  2. CLAUDE.md 追加 bootstrap 文本

完全没有处理 hooks/。仓库里 hooks/hooks.json 注册了 SessionStart hook(执行 \${CLAUDE_PLUGIN_ROOT}/hooks/run-hook.cmd session-start),但:

  • npx 安装路径完全跳过复制 hooks
  • 就算复制了,\${CLAUDE_PLUGIN_ROOT} 这个环境变量是 CC 从 plugin marketplace 安装时才会注入的——npx + cp 不会触发

而 SessionStart hook 是 superpowers 自动触发链路的核心——它在每次会话开始把 using-superpowers 元 skill 内容注入到对话开头。没有这个 hook,CLAUDE.md 文本是被动的,模型可能完全忽略

这个 PR 做了什么改变?

bin/superpowers-zh.js(+155 行):

  • 新增 installClaudeCodeHooks(projectDir):复制 hooks/.claude/hooks/ + 把 SessionStart hook 注册到 .claude/settings.json用绝对路径替代 \${CLAUDE_PLUGIN_ROOT}(npx 路径下后者不展开)。幂等设计,重复跑按 hooks 目录路径去重。
  • generateClaudeCodeBootstrap() 改为装 hooks 写 CLAUDE.md。
  • 新增 uninstallClaudeCodeHooks(projectDir)--uninstall 精确摘掉 settings.json 里指向我们 hooks 目录的 entry + 删 .claude/hooks/ 下我们装过的脚本,目录空就连目录一起删。其他用户自有 hooks 不动。
  • 新增 printMarketplaceHintIfNeeded(installedTargets):装 CC / Codex CLI / OpenCode / VS Code 这 4 款 "有官方 plugin marketplace 的工具" 时,主动打印 marketplace 命令作为 high-fidelity 推荐路径。npx 仍可用但 low-fidelity。

README.md(+17 行):

新增 "📌 先选对路径:marketplace vs npx" 表格,诚实标注 17 款工具里有 4 款的 npx 路径是 low-fidelity

工具 High-fidelity(推荐) Low-fidelity(npx)
CC /plugin marketplace add ... npx superpowers-zh(v1.4.0+ 已补 hooks)
Codex CLI /plugins 搜 superpowers npx superpowers-zh --tool codex
OpenCode 上游 OpenCode 安装 npx superpowers-zh --tool opencode
VS Code (Copilot) docs/README.vscode.md npx superpowers-zh(仅复制 skills)

其余 13 款(Cursor / Trae / Kiro / Gemini / Hermes / Aider / Antigravity / Windsurf / Qwen / Claw / OpenClaw / DeerFlow)—— 它们本来就只看本地配置文件,npx 是 canonical 安装路径,没有 "更高保真" 可言。

RELEASE-NOTES.zh.md(+40 行): 新增 v1.4.0 段记录修复 + 透明度章节。

这个改变适合放在核心库中吗?

适合。本 fork 自己的 npx installer 是中文版核心增量(上游没有),其对 CC 的支持有真实 bug。修复对所有走 npx 路径的中文用户都有益,不针对特定项目/团队/工作流。

你考虑了哪些替代方案?

  1. 不修代码,只改 README: 在 README 直接说 "CC 用户请用 /plugin marketplace add,别用 npx" —— 用户体验差,过去 npx 装过的存量用户得不到修复,且 npx 名义支持 CC 但实际半残。
  2. 彻底从 TARGETS 移除 CC: npx superpowers-zh 检测到 .claude/ 时直接 abort 并提示走 marketplace —— 太极端,移除既有能力;且其他识别为 CC 的工具(如 OpenClaw 共用 .claude/skills/)会被误伤。
  3. 走 plugin marketplace JSON 注入: 让 npx 替用户跑 /plugin marketplace add —— 不可行,CC plugin marketplace 注册必须从 CC 内部走,npx 不能代办。
  4. 现方案:补齐 hooks 复制 + settings.json 注册 + README 透明度章节 + marketplace 提示 —— 既修复存量用户、又诚实标注 fidelity 差异、又主动引导新用户走 high-fidelity 路径。✓

这个 PR 是否包含多个不相关的改变?

否。三处改动都围绕同一个问题:"npx 装 CC 是 low-fidelity 路径"

  • bin/superpowers-zh.js:从 low-fidelity 升级到 "近完整"(补齐 hooks,仍不是正式 plugin)
  • README.md:诚实标注 4 款工具的 fidelity 差异,主动引导走 marketplace
  • RELEASE-NOTES.zh.md:记录这个修复

明确不在本 PR 范围(应分别独立 PR 处理):

  • Codex CLI / OpenCode / VS Code 的 installer 代码修复(本 PR 仅 README 标注,代码修复留作未来 PR——机制差异大,需要逐个调研)
  • 上游 v5.1.0 review loop 简化 / brainstorm server 同步(issue tracking: 同步上游 superpowers v5.0.6 / v5.1.0 关键 skill 变更 #19 其他批次)
  • 加 CI 级 installer smoke test(应单独 PR 引入测试框架)

已有的 PR

测试环境

工具 工具版本 模型 模型版本/ID
CC latest Claude Opus claude-opus-4-7

本地烟测(mktemp 测试目录):

TEST_DIR=$(mktemp -d) && cd \"$TEST_DIR\"
node /path/to/bin/superpowers-zh.js --tool claude
# ✅ skills + hooks + settings.json + CLAUDE.md 都到位

node /path/to/bin/superpowers-zh.js --tool claude  # 第二次
# ✅ 幂等,settings.json 仍只有 1 个 SessionStart entry

node /path/to/bin/superpowers-zh.js --uninstall
# ✅ skills + hooks + settings.json + CLAUDE.md 段全清
# .claude/ 顶层目录保留(可能含用户其他内容)

未做的 eval(留给 merge 后由用户验证):

  • 真实 CC v2.x 装本 PR 修复后,确认 SessionStart hook 实际触发、using-superpowers 元 skill 在每次会话被注入
  • 确认 /skills 命令在非 marketplace 安装下是否能列出我们的 skills(如不能则 README 提示走 marketplace 的论据更强)
  • 跟 marketplace 安装做并行对照,体感差异有多大

评估

不适用 —— 本 PR 是 installer 代码修复 + 文档同步,不改任何 skill 内容、不改任何 prompt、不改模型行为

修复正确性由 installer smoke test 验证(commit message 已附 mktemp 测试结果),不需要 skill 对抗式 eval。

严格性

  • 这不是 skill 内容改变,无需对抗式压力测试
  • 没有修改任何精心调优的 skill 内容(红旗表、合理化描述、"人类伙伴" 用语等)
  • 修改的是 fork 自有 installer 代码 + fork 自有 README + fork 自有 RELEASE-NOTES

人工审核

  • 提交前已有人工审核过 diff 范围(installer 函数清单、settings.json 格式、README 表格内容)
  • 完整文本 review 待你在 GitHub PR diff 视图 inline 评论

v1.3.0 及之前,`npx superpowers-zh` 装 CC 目标只复制 skills/ + 改
CLAUDE.md,完全没装 hooks。结果用户社区高频反馈:

- skills 静静躺在 .claude/skills/ 但 AI 从不主动调用
- using-superpowers 指令也不进流程
- /skills 命令读不到,挪到用户级也不自动调用

根因:上游 hooks/hooks.json 的 ${CLAUDE_PLUGIN_ROOT} 只有走 CC plugin
marketplace 时才会注入,npx 路径下根本不会展开。而 SessionStart hook
是 superpowers 自动触发链路的核心——CLAUDE.md 文本是被动的,模型可能
完全忽略。

修复(bin/superpowers-zh.js):

- 新增 installClaudeCodeHooks() — 复制 hooks/ 到 .claude/hooks/,并把
  SessionStart hook 注册到 .claude/settings.json,用绝对路径替代
  ${CLAUDE_PLUGIN_ROOT}(npx 路径下后者不展开)
- 幂等:重复跑不会重复注册(按 hooks 目录路径去重)
- generateClaudeCodeBootstrap() 改为先装 hooks 再写 CLAUDE.md
- 新增 uninstallClaudeCodeHooks() — --uninstall 精确摘 settings.json
  entry + 删 .claude/hooks/ 下我们装过的脚本,目录空就连目录删

- 新增 printMarketplaceHintIfNeeded() — 装 CC / Codex CLI / OpenCode /
  VS Code 这 4 款"有官方 plugin marketplace 的工具"时,主动打印
  marketplace 命令作为 high-fidelity 推荐路径。
  npx 仍可用但是 low-fidelity(不走 plugin 注册)。

README 新增"📌 先选对路径:marketplace vs npx"表格,诚实标注 17 款
工具里这 4 款的 npx 路径是 low-fidelity。其余 13 款(Cursor/Trae/Kiro/
Gemini/Hermes 等只看本地配置文件的工具)npx 是 canonical 安装路径。

RELEASE-NOTES.zh.md 新增 v1.4.0 段记录修复内容。

本地烟测:
- mktemp 测试目录 → npx --tool claude → ✅ skills + hooks + settings.json
  + CLAUDE.md 都到位
- 第二次跑 → ✅ 幂等,settings.json 仍只有 1 个 SessionStart entry
- --uninstall → ✅ 清干净(skills + hooks + settings.json + CLAUDE.md 段)

向后兼容:v1.3.0 已装的用户重新跑 npx superpowers-zh 即可补齐 hooks。

不影响上游 plugin marketplace 安装路径(仍按上游正常工作)。
@jnMetaCode
Copy link
Copy Markdown
Owner Author

按维护者方针 "主站没有的暂时不改了" 关闭此 PR。

CC installer 补 hooks 注册是 fork 自己加的 npx 入口的修补,主站没有 npx 路径——主站 CC 用户走 /plugin marketplace add 即可(fork 的 marketplace 路径完整可用)。

替代方案(不需要代码改动,文档层即可):在 README 引导 CC/Codex/OpenCode/VS Code 用户走各自官方 plugin marketplace,npx 路径仅为没有 marketplace 的工具(Cursor/Trae/Kiro/等 13 款)服务。

主站同步类的 P0 工作已经在 #30#28 处理。

@jnMetaCode jnMetaCode closed this May 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant