skills/skill-dev/plugin-dev/SKILL.md
创建与优化 Claude Code 插件的方法论框架。流程 A 新建 (plugin.json manifest + 接线 commands/agents/skills/hooks/MCP/LSP + 挂 marketplace),流程 B 优化现有 (8 维: manifest 合规/接线完整/hook 健壮/marketplace 一致)。单组件路由 /skill-dev。仅手动 /plugin-dev。
npx skillsauth add lazygophers/ccplugin plugin-devInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
教如何搭建与打磨整个 Claude Code 插件(manifest / 组件接线 / hook / 高级组件 / marketplace)。单组件级编写与评分优化归 /skill-dev;本 skill 管插件级。基于官方 plugins / plugins-reference / plugin-marketplaces 三篇规范 + 本仓库 docs/ + plugins/tools/* 真实插件。
细节分文件(按需读,禁全读):
| 禁 (elephant) | 正例 (target) |
|---|---|
| 组件塞进 .claude-plugin/ 目录 | 组件在插件根;.claude-plugin/ 仅放 plugin.json |
| hook command 写死绝对路径 / 漏 timeout | ${CLAUDE_PLUGIN_ROOT}/scripts/x.sh + 每 hook 带 timeout |
| guard hook exit 1(语义模糊)| guard 用 exit 2 阻断;副作用 hook 失败 exit 0 兜底 |
| MCP env / secrets 硬编码 | ${ENV_VAR} 引用环境变量 |
| 凭空替用户设计插件功能 / 纯文本代替 AskUserQuestion | brainstorm 逐问 + 关键分歧用 AskUserQuestion 拍板 |
| 自动 push | 改完 git add(项目规则)+ commit,禁 push 等明确指令 |
| 改 SKILL.md / agent.md 跳过质量门 | 改完过 claude -p 质量门(项目 CLAUDE.md 强制)|
质量门命令(端点抖动 400 时重试循环 8 次,见记忆 claude-p-endpoint-flaky;仍败 → 人工验 + 小步可回滚提交,标「待端点恢复补跑」):
claude -p "<待测内容>" --output-format stream-json | jq -r 'select(.type=="result" and .subtype=="success") | .result'
| 输入信号 | 走 |
|---|---|
| 「新建插件 / 从零做个插件 / 搭插件脚手架」 | 流程 A · 创建 |
| 「优化 / 审查 / 检查这个插件 / 插件为什么不加载」 | 流程 B · 优化 |
| 只写单个 skill / agent / command | 🛑 停,路由 /skill-dev(本 skill 是插件级,不做单组件) |
| 单个 SKILL.md 纯质量评分 | 🛑 停,路由 /skill-dev(其流程 B 做单 skill 深度评估) |
一句话职责:搭一个装得上、加载得了、接线零悬挂的插件骨架,深度质量交 /skill-dev。
逐问用户:插件解决什么问题 / 目标用户 / 要哪些组件(command / agent / skill / hook / MCP / LSP / monitor)。关键分歧用 AskUserQuestion 拍板。
Done when: 组件清单 + 每个组件一句话职责,用户点头(用 AskUserQuestion,禁纯文本)。
目录建在 plugins/tools/<name>/(对齐本仓库约定):
mkdir -p plugins/tools/<name>/.claude-plugin
# 按清单只建需要的:commands/ agents/ skills/ hooks/ scripts/ bin/ monitors/
单 skill 插件可省 skills/,SKILL.md 直接放根。
Done when: 清单中每个组件目录都已创建,无多余空目录。
.claude-plugin/plugin.json(全字段 + namespace + version 语义见 references/manifest-and-wiring.md):
{
"name": "<name>", // 必填, kebab-case, = 目录名, = namespace 前缀
"description": "<做什么 + 差异化核心>",
"author": { "name": "...", "email": "...", "url": "..." },
"homepage": "...", "repository": "...", "license": "AGPL-3.0-or-later",
"keywords": ["..."],
"skills": ["./skills/<name>-x"], // 数组=逐条挂, 或 "./skills/" 挂整目录
"agents": ["./agents/<name>-y.md"],
"commands": ["./commands/<name>-z.md"],
"hooks": { /* 见 references/hooks.md */ },
"userConfig": { /* 可选, 见 references/advanced-components.md */ }
// version 省略则走 git commit SHA;正式发布再加 semver
}
Done when: jq . 通过;name kebab-case = 目录名;description 含「做什么 + 差异化」。
每个组件的具体写法委托 /skill-dev,本 skill 只保证接线。
传递要求:目标插件组件默认正向表述,仅必要硬护栏场景保留反例(命名被拒模式 + 原因 + 正例)。 组件(command / agent / skill 正文)写成「该做什么」而非「别做什么」。
commands/*.md,frontmatter description / argument-hint / allowed-tools / model;正文用 $ARGUMENTS / $1。agents/*.md,frontmatter name(必填)/ description(必填)/ tools / model / skills。skills/<skill>/SKILL.md(大写)。plugin.json 内联 hooks 或独立 hooks/hooks.json;事件 / matcher / 退出码 / payload / async / timeout 必读 references/hooks.md。claude plugin add 不编译不装依赖。Done when: 体检 #3 #4 零悬挂零漏挂(挂载路径都有真实文件 + 每个组件文件都被挂载)。
jq . plugins/tools/<name>/.claude-plugin/plugin.json # JSON 合法
claude plugin validate # 官方校验(提交前必跑)
claude --plugin-dir ./plugins/tools/<name> # 开发加载(非安装)
# 进会话后 /reload-plugins 重载改后生效
Done when: 逐个跑一遍 command / 触发 skill(/<name>:<skill>)/ 调 agent / 打 hook 事件,确认真加载(观察到实际触发,非「应该能跑」)。
在仓库根 .claude-plugin/marketplace.json 的 plugins[] 追加条目(全 schema + source 5 类型见 references/marketplace.md):
{ "name": "<name>", "source": "./plugins/tools/<name>",
"description": "...", "author": {...},
"homepage": "...", "repository": "...", "license": "...", "keywords": [...] }
Done when: marketplace.json 条目 name/source/description/author/license/keywords 与 plugin.json 逐字段对齐。
README.md(推荐);变更自动 git add(项目规则),commit 遵 feat(<name>): ...,禁 push。
Done when: 填完下面的创建报告交用户。
<plugin-creation-report-template> ## 插件创建报告 · <name>AskUserQuestion):<列表>| 组件 | 路径 | 一句话职责 | |---|---|---| | command | commands/<x>.md | ... | | skill | skills/<y>/SKILL.md | ... | | agent | agents/<z>.md | ... | | hook | hooks/... | ... |
jq .:✓ / ✗claude plugin validate:✓ / ✗--plugin-dir 实测加载 + 逐组件触发:✓ / ✗claude -p(改了 .md 才跑):✓ / 待端点恢复补跑
</plugin-creation-report-template>
一句话职责:先机械体检定位硬伤,再按 8 维 rubric 打分排优先级,validation-gate 循环收敛到触顶。体检命令 + 完整 rubric 见 references/optimize-rubric.md。
8 维速览(权重):① Manifest 合规(16) ② 组件接线完整(20) ③ 结构规范(12) ④ Hook 健壮性(14) ⑤ 组件质量(14, 深评交 /skill-dev) ⑥ Marketplace 一致性(12) ⑦ 文档完整(6) ⑧ 命名元数据一致(6)。
跑 optimize-rubric.md 体检命令 9 项。维度 1/2/3 命中(JSON 非法 / 悬挂漏挂 / 组件误放)= P0,先修。
Done when: 体检 9 项全绿或仅剩非阻断 ⚠️。
按 rubric 每维 1-10 × 权重打分;记 before 分 + 方向轴 + 完成准则底线状态。独立验证:spawn 独立子 agent 跑评分(禁同 context 自评,自评 +1 偏乐观)。
Done when: 8 维 before 分齐全,最低维度(且方向轴未达标)锁定为本轮目标。
传递要求:本轮若改组件正文(skill/agent/command body),目标组件默认正向表述,仅必要硬护栏场景保留反例(命名被拒模式 + 原因 + 正例)。
AskUserQuestion 交用户确认,禁「我觉得更好」直落。git revert HEAD(禁 git reset --hard,保留历史可审计)。Done when: 触顶 break 或所有维度达完成准则底线;填完下面的优化报告交用户。
<plugin-optimization-report-template> ## 插件优化报告 · <name>| # | 维度 | 权重 | 方向 | 理想值 | before | after | Δ | 完成底线达 ✓/✗ | |---|---|---|---|---|---|---|---|---| | 1 | Manifest 合规 | 16 | ↑ | 10 | | | | | | 2 | 组件接线完整 | 20 | ↑ | 10 | | | | | | 3 | 结构规范 | 12 | ↑ | 10 | | | | | | 4 | Hook 健壮性 | 14 | ↑ | 10 | | | | | | 5 | 组件质量 | 14 | ↑ | 8 | | | | | | 6 | Marketplace 一致 | 12 | ↑ | 10 | | | | | | 7 | 文档完整 | 6 | ↑ | 8 | | | | | | 8 | 命名元数据一致 | 6 | ↑ | 10 | | | | | | Σ/100 | | | | | | | | |
| 轮次 | 维度 | gross Δ | 方向轴 | gate (gross+人审) | 留/滚 | 原因 | |---|---|---|---|---|---|---| | 1 | | | | | | |
/skill-dev 深评)复制 templates/result-card.html,填插件名 / before-after-Δ 加权分 / 体检 P0 硬伤 / 8 维 before▸after / 爬山轮次 / 改进摘要 / 日期,浏览器打开或截图。模板自带 3 风格(swiss/terminal/newspaper,URL hash 切换),8 维加权(权重 ×16/20/12/14/14/12/6/6 = 100),JS 自动算加权分与条宽,无需外部脚本。
| 触发 | 一线修复 | 仍失败兜底 |
|---|---|---|
| claude plugin add / --plugin-dir 装载失败 | jq . 验 manifest JSON + 体检查悬挂 | 逐组件二分:先只挂 skills 再逐个加,定位坏组件 |
| 组件不生效(命令/skill 不出现)| 查漏挂 + 大小写 + SKILL.md 大写;调用名是 /<plugin>:<skill> | 查是否误放 .claude-plugin/ 内;/reload-plugins 或重启会话 |
| hook 报错阻断会话 | 加 timeout + 改 ${CLAUDE_PLUGIN_ROOT} + 失败 exit 0;guard 用 exit 2 | 先从 manifest 摘掉该 hook 恢复可用,再单独调 |
| hook 不触发 | 查 matcher 拼写(大小写敏感)/ event 名(PostToolUse 非 post_tool_use)/ command 路径 / 脚本 +x | claude --debug 看触发实况 |
| marketplace source relative 失效 | 用户从 URL 加 marketplace 时 relative 不解析 → 改 github/url/npm source | git/本地加 marketplace 才用 relative |
| 质量门 claude -p 返 400/空 | 重试循环 8 次(端点抖动) | 仍败 → 人工审 + 小步可回滚提交,标「待端点恢复补跑」|
| 优化后不确定是否更好 | 独立子 agent 重跑体检对比 + 过质量门 | 分数 fine-grained 不可信 → 破坏性/接线变更交用户确认 |
exit 1 作 guard 阻断」 — 语义模糊(既非成功也非阻断),Claude Code 不识别为 guard。正例:guard 用 exit 2;副作用 hook 失败 exit 0 兜底。.claude-plugin/ 内整齐」 — .claude-plugin/ 是 manifest 专用,放组件会被忽略。正例:组件在插件根,.claude-plugin/ 仅 plugin.json。${CLAUDE_PLUGIN_ROOT}/scripts/x.sh。claude plugin add 会帮我编译/装依赖」 — add 只拷贝不构建。正例:预编译二进制入 bin/,或 uvx/解释型分发,见 multi-language.md。marketplace.json 条目并逐字段对齐。/skill-dev。正例:路由 /skill-dev。docs/plugin-development.md — 结构 / 组件格式 / 发布流程教程。plugins/tools/*(skein / notify / version / cortex / deepresearch / novelist / trellisx)— 真实插件范例。.claude-plugin/marketplace.json — 市场条目真实字段模板。{/* min-version: x.y.z */} 依赖用户 Claude Code 版本。/skill-dev,本 skill 维度 5 只做门槛检查。tools
UI/UX 与布局设计——做界面布局/结构/导航/组件/交互的设计决策。触发:做UI/UX/布局/排版/导航/组件/交互/栅格/响应式/图表选型/字体配对。按媒介路由 HTML/Web、原生 App(iOS/Android/桌面)、CLI、TUI。需后端动态系统不适用;配色/主题/色板走姊妹 skill design-color。
tools
主题与配色设计——做颜色搭配/调色板/主题/品牌色阶/暗模式的设计决策。触发:选配色/调色/主题/色板/品牌色/暗模式/对比度/色盲/UI风格。按媒介路由 HTML/Web(CSS变量)、原生App(平台token)、CLI(ANSI)、TUI(真彩/256/16降级)。保证可访问性(对比度/色盲安全)。需后端动态系统不适用;UI/UX 布局/组件/交互走姊妹 skill design-uiux。
tools
跨任意组件(plugin/skill/agent/command)的验证驱动优化循环纪律 skill。当用户要优化某个已有组件却无明确方向、或要防止改了反而更差(自评乐观偏差 / 多维同改归因失效 / 为凑分加废话膨胀)、或要把一套通用「评分→单变量改→改后验证严格更好才留否则回滚→触顶停」的纪律套到任意组件上时使用。管优化过程本身的纪律(validation gate / ratchet / 独立验证 / 触顶停),不评单组件深度(交 skill-dev),不查插件接线(交 plugin-dev)。仅手动 /optimize-any 触发。
data-ai
两层规则记忆 (基于 .skein/spec)。planning 时 recall 召回相关规则、task finish 后 sediment 沉淀学习 + prune 自动精简过期/重复/断链规则。core 常驻硬规 + recall 按需召回, 经判定门自动写盘 (不逐次问用户)。产出 .skein/spec 下 core/recall 规则文件 + index。另支持空仓 bootstrap 播种规则基线、记忆大面积失效 (大重构/换栈) 时 reconstruct 可逆归档后按项目类型分型重建、maintain 手动体检 (超预算/stale/断链/重复/废弃, --apply 自动修复)、auto-fix (Stop hook 写 .pending-fix 标记 → main 派 skein-specer bg 跑 maintain --apply 全自动修, 断链只报告)。