[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-81229":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":11,"openIssues":12,"contributorsCount":12,"subscribersCount":12,"size":12,"stars1d":12,"stars7d":12,"stars30d":12,"stars90d":12,"forks30d":12,"starsTrendScore":12,"compositeScore":12,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":13,"fork":13,"defaultBranch":14,"hasWiki":15,"hasPages":13,"topics":16,"createdAt":9,"pushedAt":9,"updatedAt":17,"readmeContent":18,"aiSummary":19,"trendingCount":12,"starSnapshotCount":12,"syncStatus":20,"lastSyncTime":21,"discoverSource":22},81229,"skill-review","Liu-PenPen\u002Fskill-review","Liu-PenPen","给  Skill 做 code review 的 Skill",null,"JavaScript",23,0,false,"main",true,[],"2026-06-12 02:04:12","# skill-reviewer\n\n> 给 Agent Skill 做 code review 的 Skill。\n> 用 **10 条 rubric + 1 个零依赖 lint 脚本** 检测一个 Skill 是否符合高质量规范，按 **P0–P3 分级** 输出报告；也能 `--template` 生成符合规范的新 Skill 骨架。\n\n核心理念：**这个 Skill 必须遵守它自己要检查的每一条规则**——不然就是用 Slop 检测 Slop。\n\n---\n\n## 它能做什么\n\n| 场景 | 用法 | 输出 |\n| ---- | ---- | ---- |\n| **审查现有 Skill** | `\u002Fskill-reviewer \u003Cpath>` | P0–P3 分级报告 + 可选的修复 |\n| **生成新 Skill 骨架** | `\u002Fskill-reviewer --template \u003Cname>` | 已经过 lint 自检的新 Skill 目录 |\n| **CI \u002F 命令行 lint** | `node scripts\u002Flint-skill.mjs \u003Cpath>` | JSON，含 `summary.verdict` |\n| **聚焦特定规则** | `\u002Fskill-reviewer \u003Cpath> --rules R1,R3` | 只跑指定 rubric |\n| **快速 lint（跳过软评）** | `\u002Fskill-reviewer \u003Cpath> --quick` | 只跑脚本硬指标 |\n\n它检查的不是「文字写得好不好」，而是 10 条**可检测的工程规范**：渐进式加载、description 关键词密度、工作流 checklist、确认节点、脚本封装、参数系统、references 组织、Pre-Delivery、CLI+Skill 模式、反 Slop。\n\n---\n\n## Install（安装）\n\n**一行安装**：\n\n```bash\nnpx skills add Liu-PenPen\u002Fskill-review\n```\n\n常用选项：\n\n| 选项 | 含义 |\n| ---- | ---- |\n| `--list` | 只列出本仓库里可被识别的 skill，不安装 |\n| `-a cursor` | 只安装到 Cursor（若你只用 Cursor，可加上） |\n| `-g` | 安装到用户目录，所有项目共用（默认多为「当前项目」范围，视 CLI 提示为准） |\n| `-y` | 跳过确认，适合脚本\u002FCI |\n\n安装完成后，会在对应的 skills 目录下出现本 skill（`SKILL.md` 里 `name` 为 `skill-reviewer`，目录名一般与该 id 一致）。之后在聊天里用 `\u002Fskill-reviewer` 或自然语言触发即可；命令行 lint 路径见下文「直接调用 lint 脚本」，把路径换成你机器上实际安装目录下的 `scripts\u002Flint-skill.mjs`。\n\n---\n\n## 三种使用方式\n\n### 1. 斜杠命令（最常用）\n\n在 Cursor 聊天框里输入：\n\n```text\n\u002Fskill-reviewer \n\u002Fskill-reviewer xxx --quick\n\u002Fskill-reviewer xxx --rules R1,R3,R7\n\u002Fskill-reviewer --template my-new-skill\n```\n\n### 2. 自然语言触发\n\ndescription 里有关键词网，下面任意一种说法都能自动触发：\n\n- \"帮我 review 一下 `.cursor\u002Fskills\u002Fsuperdesign`\"\n- \"审查这个 skill 写得怎么样：`\u003Cpath>`\"\n- \"看看 `\u003Cpath>` 这个 skill 是不是 slop\"\n- \"audit my skill at `\u003Cpath>`\"\n- \"check the SKILL.md at `\u003Cpath>`\"\n- \"生成一个叫 `xxx` 的 skill 模板\"\n\n### 3. 直接调用 lint 脚本\n\nCI、git hook、命令行调试都用这个：\n\n```bash\nnode .cursor\u002Fskills\u002Fskill-reviewer\u002Fscripts\u002Flint-skill.mjs .cursor\u002Fskills\u002Fmy-skill --json\n```\n\n详见 [lint-skill.mjs CLI 参考](#lint-skillmjs-cli-参考)。\n\n---\n\n## Review 模式\n\n### 工作流（来自 `SKILL.md`）\n\n```text\n- [ ] Step 0  Confirm mode & target           ⚠️ REQUIRED\n- [ ] Step 1  Run lint-skill.mjs              (hard facts)\n- [ ] Step 2  Soft review per rubric          (per-step reference load)\n- [ ] Step 3  Aggregate findings by P0–P3\n- [ ] Step 4  Ask user how to proceed         ⚠️ REQUIRED\n- [ ] Step 5  Deliver report \u002F apply fixes\n- [ ] Step 6  Pre-delivery self-check\n```\n---\n\n## Template 模式\n\n### 工作流\n\n```text\n- [ ] Step T0 Gather skill intent             ⚠️ REQUIRED\n- [ ] Step T1 Generate scaffold from template-skeleton.md\n- [ ] Step T2 Run lint on the new scaffold    (self-verify)\n- [ ] Step T3 Report scaffold + lint result\n```\n\n### 使用\n\n```text\n\u002Fskill-reviewer --template code-reviewer\n```\n\n会被问到：\n\n1. Skill 名（kebab-case）\n2. 一句话用途\n3. 5–10 个真实用户会说的触发短语\n4. 是否需要脚本 \u002F 是否产生输出 \u002F 是否需要确认节点\n\n然后生成：\n\n```text\n.cursor\u002Fskills\u002F\u003Cname>\u002F\n├── SKILL.md           # 已经填好 frontmatter、工作流、Pre-Delivery、Options 表\n├── scripts\u002F           # 只在你说\"需要脚本\"时创建\n│   └── .gitkeep\n└── references\u002F\n    └── .gitkeep\n```\n\n最后 **自动跑 lint** 验证骨架本身合格（verdict ≥ `OK_WITH_NOTES`），不合格就当场修。\n\n---\n\n## 10 条 Rubric\n\n| ID  | 名称                | 关键检查项                                                       | 详细文档 |\n| --- | ------------------- | ---------------------------------------------------------------- | -------- |\n| R1  | Progressive Loading | SKILL.md 行数、长代码块、references 是否按需加载                 | [rubric-progressive-loading.md](references\u002Frubric-progressive-loading.md) |\n| R2  | Description         | 关键词密度、触发短语、长度（≥ 120 字符）                         | [rubric-description.md](references\u002Frubric-description.md) |\n| R3  | Workflow Checklist  | `- [ ]` 步骤、`⚠️ REQUIRED` \u002F `⛔ BLOCKING` 标记、宏观→微观顺序 | [rubric-workflow-checklist.md](references\u002Frubric-workflow-checklist.md) |\n| R4  | Scripts Pattern     | 确定性操作是否封装、长内嵌代码是否提取                           | [rubric-scripts-pattern.md](references\u002Frubric-scripts-pattern.md) |\n| R5  | Good Questions      | 用具体可回答的问题代替\"注意质量\"这种空指令                       | [rubric-good-questions.md](references\u002Frubric-good-questions.md) |\n| R6  | Confirmation        | 不可逆操作前是否有结构化确认节点                                 | [rubric-confirmation.md](references\u002Frubric-confirmation.md) |\n| R7  | Pre-Delivery        | 交付前是否有可验证的自检 checklist                               | [rubric-pre-delivery.md](references\u002Frubric-pre-delivery.md) |\n| R8  | Arguments           | `$ARGUMENTS` 解析、`argument-hint`、Options 表、部分运行 flag    | [rubric-arguments.md](references\u002Frubric-arguments.md) |\n| R9  | References Org      | 按领域分组、无 orphan、无 broken link、嵌套 ≤ 1 层               | [rubric-references-org.md](references\u002Frubric-references-org.md) |\n| R10 | CLI + Skill         | `allowed-tools` 收紧、CLI 文档简洁、不重复造 MCP                 | [rubric-cli-pattern.md](references\u002Frubric-cli-pattern.md) |\n\n聚焦特定 rubric：\n\n```text\n\u002Fskill-reviewer \u003Cpath> --rules R1,R2,R7\n```\n\n---\n\n\n## lint-skill.mjs CLI 参考\n\n### 命令格式\n\n```bash\nnode .cursor\u002Fskills\u002Fskill-reviewer\u002Fscripts\u002Flint-skill.mjs \u003Ctarget> [--json] [--quiet]\n```\n\n- `\u003Ctarget>` — Skill 目录（推荐），或者直接指向 `SKILL.md` 文件。\n- `--json`（默认开启）— stdout 输出 JSON。\n- `--quiet` — 抑制非 JSON 输出。\n\n### 输出 JSON 结构\n\n```jsonc\n{\n  \"summary\": {\n    \"counts\": { \"P0\": 0, \"P1\": 0, \"P2\": 2, \"P3\": 1 },\n    \"verdict\": \"OK_WITH_NOTES\"          \u002F\u002F BLOCKED | NEEDS_WORK | OK_WITH_NOTES | GOOD\n  },\n  \"facts\": {\n    \"skillMdPath\": \"...\",\n    \"lineCount\": 248,\n    \"hasFrontmatter\": true,\n    \"frontmatter\": { \"name\": \"...\", \"description\": \"...\", \"argument-hint\": \"...\", ... },\n    \"hasReferencesDir\": true,\n    \"hasScriptsDir\": true,\n    \"referencesFiles\": [ \"rubric-...md\", ... ],\n    \"scriptsFiles\":   [ \"lint-skill.mjs\" ],\n    \"mentionedRefs\":  [ \"rubric-...md\", ... ],   \u002F\u002F SKILL.md 里引用的\n    \"orphanRefs\":     [],                         \u002F\u002F 存在但未被引用\n    \"missingRefs\":    [],                         \u002F\u002F 被引用但不存在\n    \"maxReferencesDepth\": 0,\n    \"checklistItems\": 17,\n    \"blockingMarkers\": 15,\n    \"asksUser\": true,\n    \"hasPreDelivery\": true,\n    \"longCodeBlocks\": 0\n  },\n  \"findings\": [\n    {\n      \"id\": \"F1\",\n      \"severity\": \"P2\",\n      \"rule\": \"argument-hint-missing\",\n      \"message\": \"SKILL.md references CLI-style options but frontmatter has no `argument-hint`...\",\n      \"evidence\": null\n    }\n  ]\n}\n```\n\n### 退出码\n\n| 码 | 含义                                                        |\n| -- | ----------------------------------------------------------- |\n| 0  | 脚本正常运行（包括有 finding 的情况，**verdict 在 JSON 里**） |\n| 2  | 命令行参数错误（没传 target）                               |\n\n> **注意**：脚本不会用退出码区分 verdict。CI 里需要用 `jq` 或类似工具读 `summary.verdict`，见下面 [CI 章节](#在-ci-里使用)。\n\n### 检测项一览（脚本侧）\n\n| Rule ID                       | 触发条件                                          | Severity |\n| ----------------------------- | ------------------------------------------------- | -------- |\n| `skill-md-missing`            | SKILL.md 不存在                                   | P0       |\n| `frontmatter-missing`         | 没有 `---` 包围的 frontmatter                     | P0       |\n| `description-missing`         | frontmatter 缺 description                        | P0       |\n| `description-too-short`       | description \u003C 80 字符                             | P1       |\n| `description-no-trigger-cue`  | description 没有\"use when \u002F 触发 \u002F when user\"     | P1       |\n| `frontmatter-no-name`         | 缺 name                                           | P2       |\n| `argument-hint-missing`       | 用了 CLI flag 但没声明 argument-hint              | P2       |\n| `allowed-tools-unset`         | 跑 shell 但没声明 allowed-tools                   | P3       |\n| `skill-md-too-long`           | SKILL.md > 500 行                                 | P1       |\n| `skill-md-getting-long`       | SKILL.md 350–500 行                               | P2       |\n| `references-nested-too-deep`  | references 嵌套超过 1 层                          | P2       |\n| `references-orphan`           | references 文件未被 SKILL.md 引用                 | P2       |\n| `references-broken-link`      | SKILL.md 引用了不存在的 reference                 | P1       |\n| `workflow-checklist-missing`  | `- [ ]` checklist 项少于 3 个                     | P2       |\n| `no-confirmation-node`        | 没有 `AskUserQuestion` \u002F `⚠️ REQUIRED` \u002F `⛔ BLOCKING` | P2       |\n| `no-pre-delivery-checklist`   | 没有 Pre-Delivery \u002F quality gate                  | P3       |\n| `long-inline-code`            | SKILL.md 内嵌代码块超过 30 行                     | P2       |\n| `vague-directives`            | 出现 ≥ 2 处\"注意质量\"这种空指令                   | P3       |\n\n---\n\n## 示例：完整 Review 流程\n\n```text\nYou:  \u002Fskill-reviewer .cursor\u002Fskills\u002Fsuperdesign\n\nSkill: (Step 0)\n       请确认审查范围：\n       1) 全量 rubric\n       2) 只跑 lint（--quick）\n       3) 指定 rule IDs\n       请选择并确认目标路径。\n\nYou:  全量\n\nSkill: (Step 1) 运行 lint-skill.mjs ...\n       Hard facts:\n       - lineCount: 50\n       - hasReferencesDir: false\n       - checklistItems: 0\n       - hasPreDelivery: false\n       Findings (硬): F1 (P2), F2 (P2), F3 (P3)\n\n       (Step 2) 加载 R1, R2, R3, R6, R7 ...\n       软评新增 finding：R3 工作流没有 `⚠️ REQUIRED` 标记 → P2\n\n       (Step 3) 汇总：P0=0 P1=0 P2=3 P3=1\n       Verdict: OK_WITH_NOTES\n\n       (Step 4)\n       要怎么处理？\n       1) 修全部\n       2) 修 P0+P1（这次没有）\n       3) 指定 ID 修\n       4) 只看不改（默认）\n\nYou:  只看不改\n\nSkill: (Step 5) 输出报告 ...\n       (Step 6) Pre-delivery 自检通过 ✓\n```\n\n---\n\n## 在 CI 里使用\n\n### npm script\n\n```jsonc\n\u002F\u002F package.json\n{\n  \"scripts\": {\n    \"lint:skill\": \"node .cursor\u002Fskills\u002Fskill-reviewer\u002Fscripts\u002Flint-skill.mjs\",\n    \"lint:skills:all\": \"node .cursor\u002Fskills\u002Fskill-reviewer\u002Fscripts\u002Flint-skill.mjs .cursor\u002Fskills\u002Fskill-reviewer\"\n  }\n}\n```\n\n### GitHub Actions（按 verdict 做闸门）\n\n```yaml\n- name: Lint all skills\n  shell: bash\n  run: |\n    set -e\n    for d in .cursor\u002Fskills\u002F*\u002F; do\n      echo \"::group::lint $d\"\n      out=$(node .cursor\u002Fskills\u002Fskill-reviewer\u002Fscripts\u002Flint-skill.mjs \"$d\" --json)\n      verdict=$(echo \"$out\" | jq -r .summary.verdict)\n      echo \"$out\" | jq .\n      echo \"::endgroup::\"\n      case \"$verdict\" in\n        BLOCKED|NEEDS_WORK) echo \"❌ $d -> $verdict\"; exit 1 ;;\n        *) echo \"✅ $d -> $verdict\" ;;\n      esac\n    done\n```\n\n### pre-commit hook\n\n```bash\n#!\u002Fusr\u002Fbin\u002Fenv bash\n# .git\u002Fhooks\u002Fpre-commit\nchanged=$(git diff --cached --name-only | grep -E '\\.cursor\u002Fskills\u002F[^\u002F]+\u002FSKILL\\.md$' || true)\nfor f in $changed; do\n  dir=$(dirname \"$f\")\n  v=$(node .cursor\u002Fskills\u002Fskill-reviewer\u002Fscripts\u002Flint-skill.mjs \"$dir\" --json | jq -r .summary.verdict)\n  [ \"$v\" = \"BLOCKED\" ] && { echo \"Skill $dir is BLOCKED, fix before commit.\"; exit 1; }\ndone\n```\n\n---\n\n\n## FAQ\n\n**Q1：脚本会修改我的 Skill 文件吗？**\n不会。`lint-skill.mjs` 是纯只读的，只输出 JSON。修改只发生在 Skill 工作流 Step 5，且必须经过 Step 4 你明确同意。\n\n**Q2：检测器自己是 `GOOD` 还是带 finding？**\n当前是 `GOOD`，0 finding。每次改完 `SKILL.md` 或加新 rubric，都应该重新跑一次自检：\n\n```bash\nnode .cursor\u002Fskills\u002Fskill-reviewer\u002Fscripts\u002Flint-skill.mjs .cursor\u002Fskills\u002Fskill-reviewer\n```\n\n**Q3：怎么验证 lint 脚本不是\"全 GOOD 一刀切\"？**\n拿同仓库的 `.cursor\u002Fskills\u002Fsuperdesign` 跑一下，应该报出 3 个真实问题（`argument-hint-missing`、`workflow-checklist-missing`、`no-pre-delivery-checklist`），verdict `OK_WITH_NOTES`。\n\n**Q4：能用来约束 AI 生成 Skill 的过程吗？**\n两种用法：\n- **事后审查**：AI 写完后跑 `\u002Fskill-reviewer \u003Cpath>`，按报告改。\n- **事前约束**：让 AI 生成新 Skill 时 `\u002Fskill-reviewer --template \u003Cname>`，由本 Skill 套着模板生成，最后自动 lint 自检。\n\n**Q5：脚本依赖什么 Node 版本？**\nNode 18+。只用了 `node:fs` \u002F `node:path` 内置模块，零外部依赖。\n\n**Q6：能在 Windows \u002F WSL \u002F macOS \u002F Linux 都跑吗？**\n能。脚本里所有路径都用 `node:path` 拼接，跨平台 OK。\n\n**Q7：如果我的 Skill 是放在 `~\u002F.agents\u002Fskills\u002F` 用户级目录下，怎么 lint？**\n直接传绝对路径：\n\n```bash\nnode .cursor\u002Fskills\u002Fskill-reviewer\u002Fscripts\u002Flint-skill.mjs \"$HOME\u002F.agents\u002Fskills\u002Fcode-reviewer\" --json\n```\n\n**Q8：能针对一个 PR 里改过的 Skill 增量 lint 吗？**\n能，配合 `git diff --name-only origin\u002Fmain...HEAD`：\n\n```bash\ngit diff --name-only origin\u002Fmain...HEAD | grep -E '\\.cursor\u002Fskills\u002F[^\u002F]+\u002F' \\\n  | sed -E 's|(.cursor\u002Fskills\u002F[^\u002F]+\u002F).*|\\1|' | sort -u \\\n  | xargs -I{} node .cursor\u002Fskills\u002Fskill-reviewer\u002Fscripts\u002Flint-skill.mjs {} --json\n```\n\n**Q9：rubric 是终版了吗？**\n不是。这 10 条是总结的核心套路。\n\n---\n\n","skill-review 是一个用于审查 Agent Skill 代码质量的工具。它通过10条工程规范和一个零依赖的 lint 脚本，对Skill进行P0-P3级别的质量评估，并能生成符合规范的新Skill骨架。该工具特别适用于开发过程中确保Skill代码质量，支持多种使用场景，包括审查现有Skill、生成新的Skill模板、CI集成或命令行直接调用等。其核心优势在于能够自我遵守所设定的质量标准，从而避免了“用Slop检测Slop”的情况发生，保证了检查结果的一致性和可靠性。",2,"2026-06-11 04:03:59","CREATED_QUERY"]