1实现原理 · 为什么它能做到
先跑诊断脚本做机械排查:diagnose_plugins.py 读本地 ~/.claude 插件状态文件(installed_plugins.json、settings.json 的 enabledPlugins、known_marketplaces.json),比对‘已装未启用’清单并检查缓存新鲜度。
Run the diagnostic script to identify common issues: ```bash python3 scripts/diagnose_plugins.py
诊断核心判据:以 known_marketplaces.json 的 lastUpdated 为唯一新鲜度来源(严格 ISO-8601 带时区解析,缺失/畸形/无时区/未来时间戳都算无效),不信任 cache 目录 mtime。
never guess freshness from the unreliable cache-directory mtime.
修复路径分两层:官方 CLI(claude plugin enable/disable/update)与直接编辑 settings.json 的 enabledPlugins;并提供批量启用脚本 enable_all_plugins.py(按 marketplace 后缀匹配,写前交互确认)。
claude plugin enable plugin-name@marketplace-name
知识库支撑:references/architecture.md 描述插件生命周期与激活流(装→拷 cache→注册→手动 enable→启动读 enabledPlugins),references/known_issues.md 追踪 GitHub 上游 issue(#17832 等),SKILL.md 内嵌 4 个 Common Issues 的根因与解法。
https://github.com/anthropics/claude-code/issues/17832
对‘Skill 与 Command 两套扩展’做了架构澄清:skills/ 自动按描述匹配激活,commands/ 需 /command-name 显式调用,若要显式可调需补 command 文件。
If a skill should be explicitly invocable, add a corresponding command file.
2核心能力
3外部依赖
| 类型 | 依赖 |
|---|---|
| cli | python3 |
| cli | claude(官方 CLI:plugin enable/disable/install/uninstall/marketplace update) |
| cli | jq(诊断命令参考中读 JSON) |
| network | GitHub(issue 引用与 marketplace 内容源) |
4风险提醒 风险提醒:黄色 · 留意使用
- 状态模型依赖特定 Claude Code 版本行为 — issue 驱动的结论(如 installed 与 enabled 分离、known_marketplaces 结构)随官方版本演进可能过时;known_issues.md 是静态快照需人工更新
- 整文件回写 settings.json — enable_all 用 json.load→改→json.dump 回写整个 settings.json;若文件含 env 明文 token 或复杂注释/格式,回写有格式归一化与并发覆盖风险(建议先备份)
- 文档建议 rm -rf 清 marketplace cache — Issue 3 解法含 rm -rf ~/.claude/plugins/cache/<mkt> 再 update——属用户手动执行、可重建目录,但仍是破坏性命令,agent 执行前应确认
- 网络动作由官方 CLI 代行 — claude plugin marketplace update 会访问已注册 marketplace(通常 GitHub);对未审查 marketplace 的信任等同对插件源的信任
5第二遍独立确认
- [ok] 无网络外发(脚本层) — 两脚本零网络;https 只出现在 SKILL/known_issues 文档链接
- [ok] diagnose 只读声明属实 — 全文仅 json.load + print,无写文件路径
- [ok] enable_all 写前确认属实 — 写入前 input("Enable all these plugins? [y/N] "),非 y 即取消
- [ok] lastUpdated 唯一新鲜度来源规则三方一致 — SKILL.md / architecture.md / diagnose_plugins.py 同口径(时区必需、mtime 不可信、7 天过期、未来时间戳无效)
- [ok] 诊断退出码语义 — main() 末尾 missing/stale/invalid 任一成立打印 Action needed 并 return 1,与 SKILL 'exits nonzero' 一致
- [ok] settings.json 含密钥时的接触面 — enable_all 整文件 json.load/json.dump 回写;密钥字段原样保留不处理——按统一分档‘接触即 orange’上浮边界,本档定 yellow 因脚本从不读取/传递密钥字段,reason 已注明触发条件
6结论
3f56dc20d44cb7a1…d5c4678cb5