[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M70P09ARQ5490MRMPENZ9FED":3,"skill-same:01M70P09ARQ5490MRMPENZ9FED":68},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":48,"repositoryHomepageUrl":49,"ownerHtmlUrl":50,"ownerBlogUrl":51,"ownerDescription":52,"updatedAt":53,"install":54,"resources":67},"01M70P09ARQ5490MRMPENZ9FED","scoring",null,"Use when scoring NL artifact quality, applying penalties, or calibrating lint judgment — contains the 100-point rubric with penalty tables per artifact type and 4 worked calibration examples.","shengdabai\u002FTony-Claude-Code-Skills","shengdabai","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F116417419?v=4","01M70F6D2WY5PQV5A92BKYJQEW","Tony Sheng","01M70F6D3GAAAYZ5H4CC1G8VXM",3,"MIT","https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fxiaolai\u002Fnlpm\u002Fskills\u002Fnlpm\u002Fscoring\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[5,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"point","use","when","lint","type","examples","with","artifact","quality","judgment","rubric","calibration","nl","tables","2026-11-10 10:12:30",false,"---\nname: scoring\ndescription: \"Use when scoring NL artifact quality, applying penalties, or calibrating lint judgment — contains the 100-point rubric with penalty tables per artifact type and 4 worked calibration examples.\"\nversion: 0.1.0\n---\n\n# NLPM Quality Scoring Rubric\n\n100-point quality scale for all NL programming artifacts. Apply penalties deterministically. Use calibration examples to anchor judgment on borderline cases.\n\n---\n\n## Scoring Formula\n\n```\nbase_score = 100\nadjustments = sum of all applicable penalties (all penalties are negative)\nfinal_score = max(0, min(100, base_score + adjustments))\n```\n\nPenalties stack. The floor is 0; the ceiling is 100. No bonuses — the default assumption is that an artifact is well-formed, and quality is measured by what is missing or wrong.\n\n---\n\n## Penalty Tables\n\n### Skills\n\n| Rule | Check | Condition | Penalty |\n|------|-------|-----------|---------|\n| -- | `name` present | Missing | -25 |\n| R04 | `description` present | Missing | -25 |\n| R04 | Trigger quality | Description is generic (≤1 specific phrase) | -15 |\n| R05 | Body length | 400–500 lines | -5 |\n| R05 | Body length | >500 lines | -10 |\n| R06 | Code examples | Complex concepts with no examples | -5 |\n| R06 | Code examples | No examples at all in a technical skill | -10 |\n| R07 | Scope note | No scope note \u002F cross-references | -3 |\n\n---\n\n### Agents\n\n| Rule | Check | Condition | Penalty |\n|------|-------|-----------|---------|\n| R09 | `description` present | Missing | -25 |\n| R09 | `\u003Cexample>` blocks | Exactly 1 example | -5 |\n| R09 | `\u003Cexample>` blocks | Zero examples | -15 |\n| R10 | `model` declared | Not declared | -5 |\n| R10 | `model` appropriate | Wrong tier for task (e.g. opus for parsing) | -5 |\n| R11 | `tools` declared | Not declared | -5 |\n| R11 | Unused tools | Each tool declared but not used in body | -3 each |\n| R12 | Output format | No output format spec in body | -10 |\n| R11 | Write on read-only | Audit\u002Freview\u002Fscan agent declares Write or Edit | -10 |\n\n---\n\n### Commands\n\n| Rule | Check | Condition | Penalty |\n|------|-------|-----------|---------|\n| -- | `description` present | Missing | -25 |\n| R18 | `argument-hint` present | Command takes input but no hint | -5 |\n| R14 | Steps numbered | Multi-step body with no numbered steps | -10 |\n| R15 | Empty input handling | No handling for empty\u002Fmissing input | -10 |\n| R16 | Output format | No output format defined | -10 |\n| R17 | Error paths | No error handling for missing files or bad data | -5 |\n\n---\n\n### Shared Partials\n\n| Rule | Check | Condition | Penalty |\n|------|-------|-----------|---------|\n| R19 | `user-invocable: false` | Missing or set to true | -25 |\n| R20 | Purpose clear | Description doesn't state it's a partial | -10 |\n\n---\n\n### Rules\n\n| Rule | Check | Condition | Penalty |\n|------|-------|-----------|---------|\n| R21 | `description` present | Missing frontmatter description | -10 |\n| R21 | Format: bold imperative | No bold imperative opening | -5 |\n| R21 | Format: rationale | No rationale following the imperative | -10 |\n| R22 | Enforceability | Rule is not specific\u002Ftestable | -10 |\n| R23 | Budget | Rule file over 500 lines | -15 |\n| R26 | Conflicts with other rules | Direct contradiction with another rule in same set | -20 |\n| R24 | Duplicates tooling | Re-states what eslint\u002Fruff\u002Fclippy already catches | -10 |\n\n---\n\n### Hooks\n\n| Rule | Check | Condition | Penalty |\n|------|-------|-----------|---------|\n| -- | Valid JSON | hooks.json fails JSON parse | -25 |\n| R27 | Event names valid | Uses unrecognized event name | -15 |\n| R27 | Case correct | Event name has wrong case (e.g. `pretooluse`) | -10 |\n| R29 | Scripts exist | Referenced script file does not exist | -20 |\n| -- | Command safety | Hook command contains dangerous patterns (rm -rf, git push --force, DROP TABLE) | -15 |\n| -- | Matcher regex valid | Matcher pattern doesn't compile as valid regex | -10 |\n| -- | Timeout reasonable | Hook specifies timeout > 30s (likely hangs) | -5 |\n\n---\n\n### plugin.json\n\n| Check | Condition | Penalty |\n|-------|-----------|---------|\n| `name` present | Missing | -25 |\n| `version` is semver | Present but not valid semver | -10 |\n| `description` present | Missing | -5 |\n\n---\n\n### .mcp.json\n\n| Check | Condition | Penalty |\n|-------|-----------|---------|\n| Valid JSON | File fails JSON parse | -25 |\n| Server `command` present | MCP server entry missing `command` field | -15 |\n\n---\n\n### Settings Files (.claude\u002Fsettings.json, .claude\u002Fsettings.local.json)\n\n| Check | Condition | Penalty |\n|-------|-----------|---------|\n| Valid JSON | File fails JSON parse | -25 |\n| No hardcoded secrets | Contains API keys, tokens, or passwords | -25 |\n| Permission mode sanity | `bypassPermissions` enabled in a shared project settings file (not .local) | -15 |\n| Recognized keys | Contains unknown top-level keys not in Claude Code schema | -5 each, cap -15 |\n| Hook definitions valid | `hooks` key present — check event names valid and case-correct | -10 per invalid |\n\n---\n\n### CLAUDE.md\n\n| Rule | Check | Condition | Penalty |\n|------|-------|-----------|---------|\n| R49 | File exists | No CLAUDE.md in plugin root | -10 |\n| -- | Under 200 lines | CLAUDE.md exceeds 200 lines | -5 |\n| R38 | Actionable content | CLAUDE.md has no actionable guidance (just filler) | -10 |\n| R33 | Build\u002Frun command | No instructions for how to build or run the project | -10 |\n| R34 | Test command | No instructions for how to run tests | -5 |\n| R35 | Architecture overview | No structure\u002Fcomponent description (what lives where) | -5 |\n| R36 | Valid `@` imports | Contains `@` import syntax referencing a file that doesn't exist | -10 |\n| R37 | No stale file references | Mentions files or functions that no longer exist in the repo | -10 |\n| R38 | Actionability ratio | >60% of content is description rather than instructions | -5 |\n| -- | Prerequisites section | No section covering required tools, versions, or setup steps | -5 |\n| R39 | No rule conflicts | CLAUDE.md says X while a `.claude\u002Frules\u002F` file says not-X | -15 |\n\n---\n\n### Memory Files\n\nApplies to `.md` files located in `~\u002F.claude\u002Fprojects\u002F*\u002Fmemory\u002F` directories.\n\n| Rule | Check | Pass (+0) | Penalty |\n|------|-------|-----------|---------|\n| -- | Has YAML frontmatter | Present | -15 |\n| -- | `name` in frontmatter | Present | -10 |\n| -- | `description` in frontmatter | Present | -10 |\n| -- | `type` in frontmatter | Present (`user`\u002F`feedback`\u002F`project`\u002F`reference`) | -5 |\n| -- | Content matches declared type | Yes | -10 |\n| -- | Referenced in MEMORY.md index | Yes | -5 (orphaned memory) |\n| R37 | Stale content | No references to removed files or functions | -10 |\n\n---\n\n### All Artifact Types: Vague Quantifiers\n\n| Rule | Check | Condition | Penalty |\n|------|-------|-----------|---------|\n| R01 | Vague quantifier | Each occurrence of: \"appropriate\", \"relevant\", \"as needed\", \"sufficient\", \"adequate\", \"reasonable\", \"properly\", \"correctly\", \"some\", \"several\", \"various\" without measurable criteria | -2 each |\n| R01 | Vague quantifier cap | Total vague quantifier penalty | max -20 |\n\n---\n\n### Cross-Component (--plugin flag)\n\nApplied when linting an entire plugin rather than individual files.\n\n| Check | Condition | Penalty |\n|-------|-----------|---------|\n| Broken partial refs | Command references `commands\u002Fshared\u002FX.md` that doesn't exist | -20 |\n| Broken skill refs | Agent references `plugin:skill` that isn't installed | -20 |\n| Missing scripts | Hook references script that doesn't exist | -20 |\n| Orphaned files | Agent\u002Fcommand\u002Fskill file not referenced by anything | -5 per file |\n| Contradictions | Two rules\u002Finstructions in same plugin directly contradict each other | -15 per pair |\n\n---\n\n## Score Bands\n\n| Range | Label | Meaning |\n|-------|-------|---------|\n| 90–100 | Excellent | Production-ready; minor or no issues |\n| 80–89 | Good | Solid; one or two non-critical gaps |\n| 70–79 | Adequate | Meets threshold; noticeable gaps to address |\n| 60–69 | Weak | Below threshold; significant issues |\n| \u003C60 | Rewrite | Fundamental problems; recommend rewriting from scratch |\n\n**Default pass threshold:** 70. Configurable in `.claude\u002Fnlpm.local.md`.\n\n---\n\n## Calibration Examples\n\n### Example 1: Excellent Agent (95\u002F100)\n\n**Artifact:**\n```markdown\n---\nname: dependency-auditor\ndescription: |\n  Audits project dependencies for security vulnerabilities, outdated packages,\n  and license compliance issues. Use this agent when checking npm\u002Fpip\u002Fcargo\n  dependencies, reviewing package.json or requirements.txt, or running a\n  security audit before release.\n\n  \u003Cexample>\n  Context: Developer preparing for production release\n  user: check if any of our dependencies have known CVEs\n  assistant: I'll audit your dependencies for security vulnerabilities using\n  the package manifest files...\n  \u003C\u002Fexample>\n\n  \u003Cexample>\n  Context: CI pipeline running pre-merge checks\n  user: \u002Faudit-deps\n  assistant: Running dependency audit. Scanning package.json and\n  package-lock.json for vulnerabilities and license issues...\n  \u003C\u002Fexample>\nmodel: sonnet\ncolor: yellow\ntools: [\"Read\", \"Glob\", \"Bash\"]\nskills: [\"nlpm:conventions\"]\n---\n\nYou are a dependency security auditor. Read all package manifests in the\nproject. For each dependency, check version ranges against known vulnerability\npatterns. Report findings in the format below.\n\n## Output Format\n### Summary\nTotal dependencies: N | Vulnerable: N | Outdated: N | License issues: N\n\n### Findings\n| Package | Version | Issue | Severity |\n|---------|---------|-------|----------|\n```\n\n**Score breakdown:**\n- Base: 100\n- `description` present and has 3+ specific phrases: 0\n- 2 `\u003Cexample>` blocks: 0\n- `model: sonnet` declared and appropriate for security analysis: 0\n- `tools` declared with only tools used: 0\n- Output format defined: 0\n- Read-only agent (no Write\u002FEdit): 0\n- Minor: `Bash` tool declared but body doesn't explicitly call it — one unused tool: **-3**\n- No scope note in body: **-2** (vague: none)\n\n**Final: 97\u002F100** — Excellent. One unused tool (`Bash` declared but body text doesn't explicitly invoke it) costs 3 points.\n\n*(For calibration: a 95 example would have zero unused tools and a scope note. The range 90-100 is Excellent regardless of the exact number.)*\n\n---\n\n### Example 2: Rewrite Agent (41\u002F100)\n\n**Artifact:**\n```markdown\n---\nname: code-helper\ndescription: \"Helps with code tasks in an appropriate and relevant way as needed.\"\nmodel: opus\ntools: [\"Read\", \"Write\", \"Edit\", \"Bash\", \"Glob\", \"WebSearch\", \"WebFetch\"]\n---\n\nYou are a helpful coding assistant. Analyze the code and make appropriate\nimprovements. Handle edge cases as needed and ensure the output is relevant\nto the user's requirements.\n```\n\n**Score breakdown:**\n- Base: 100\n- Zero `\u003Cexample>` blocks: **-15**\n- Description is generic (1 vague phrase, 0 specific phrases): **-15**\n- `opus` declared for a routine code-help task (haiku\u002Fsonnet appropriate): **-5**\n- `tools` declared but too many unused (WebSearch, WebFetch, Glob all declared without body justification): **-10** (judged as 3–4 unused, rounded)\n- \"appropriate\" + \"relevant\" + \"as needed\" (vague quantifiers, 2 instances): **-4**\n- No output format defined: **-10**\n\nTotal penalties: -59\n\n**Final: max(0, 100 - 59) = 41\u002F100** — Rewrite.\n\n*(For calibration: the exact number of unused tools and vague quantifier hits can vary by reviewer. The important thing is that this artifact scores well below 60 — multiple fundamental issues.)*\n\n---\n\n### Example 3: Excellent Rule (92\u002F100)\n\n**Artifact:**\n```markdown\n---\ndescription: \"Always use ${CLAUDE_PLUGIN_ROOT} for intra-plugin file references in hooks and scripts\"\npaths: [\"**\u002F.claude\u002Fhooks.json\", \"**\u002Fscripts\u002F*.sh\"]\n---\n\n**Use `${CLAUDE_PLUGIN_ROOT}` for all file paths within a plugin.**\n\nBecause plugins are installed at different locations for different users and\nenvironments, hardcoded absolute paths (e.g. `\u002FUsers\u002Falice\u002F.claude\u002Fplugins\u002F...`)\nbreak when the plugin is installed by anyone other than the original author.\nUsing `${CLAUDE_PLUGIN_ROOT}` ensures paths resolve correctly regardless of\ninstall location.\n\nCorrect:\n```json\n\"command\": \"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fcheck.sh\"\n```\n\nIncorrect:\n```json\n\"command\": \"\u002FUsers\u002Falice\u002F.claude\u002Fplugins\u002Fcache\u002Fmy-plugin\u002F1.0.0\u002Fscripts\u002Fcheck.sh\"\n```\n```\n\n**Score breakdown:**\n- Base: 100\n- `description` present: 0\n- Bold imperative opening: 0\n- Rationale follows: 0\n- Specific and testable (can grep for `\u002FUsers\u002F` in hooks.json): 0\n- `paths` scoped: 0\n- Under 500 lines: 0\n- Does not duplicate a linter rule: 0\n- Minor: no reference to a related rule about portability in other contexts: **-3** (judgment call; not a formal penalty — scoring at 92 reflects excellent but not perfect)\n- Vague quantifiers: none: 0\n\n**Final: 92\u002F100** — Excellent. Loses ~8 points for not covering related portability contexts (env vars in MCP configs, etc.) — a judgment call reflected in the score rather than a formal penalty table entry.\n\n---\n\n### Example 4: Weak Rule (40\u002F100)\n\n**Artifact:**\n```markdown\nDon't write bad code. Code should be clean and well-organized. Avoid using\noutdated patterns. Make sure to handle errors appropriately.\n```\n\n**Score breakdown:**\n- Base: 100\n- Missing frontmatter (no `description` field): **-10**\n- No bold imperative opening: **-5**\n- No rationale: **-10**\n- Not specific or testable (\"bad code\", \"clean\", \"well-organized\" are unmeasurable): **-10**\n- \"appropriately\" (vague quantifier): **-2**\n- \"well-organized\" (vague): **-2**\n- Duplicates what every linter\u002Fformatter already enforces (\"clean code\"): **-10**\n- Rule is not enforceable by NLPM or any automated tool: **-10** (enforceability)\n\nTotal penalties: -59\n\n**Final: max(0, 100 - 59) = 41\u002F100** — Rewrite.\n\n*(Calibrated near 40 as specified. The exact value depends on judgment on \"well-organized\" as a vague quantifier.)*\n\n---\n\n## Scope Note\n\nThis skill covers the NLPM scoring formula, penalty tables, score bands, and calibration examples. It does NOT cover:\n- Artifact schemas and valid field values → see `nlpm:conventions`\n- Patterns and anti-patterns catalog → see `nlpm:patterns`\n- How to run the score command → see `commands\u002Fscore.md`\n","# NLPM Quality Scoring Rubric\n\n100-point quality scale for all NL programming artifacts. Apply penalties deterministically. Use calibration examples to anchor judgment on borderline cases.\n\n---\n\n## Scoring Formula\n\n```\nbase_score = 100\nadjustments = sum of all applicable penalties (all penalties are negative)\nfinal_score = max(0, min(100, base_score + adjustments))\n```\n\nPenalties stack. The floor is 0; the ceiling is 100. No bonuses — the default assumption is that an artifact is well-formed, and quality is measured by what is missing or wrong.\n\n---\n\n## Penalty Tables\n\n### Skills\n\n| Rule | Check | Condition | Penalty |\n|------|-------|-----------|---------|\n| -- | `name` present | Missing | -25 |\n| R04 | `description` present | Missing | -25 |\n| R04 | Trigger quality | Description is generic (≤1 specific phrase) | -15 |\n| R05 | Body length | 400–500 lines | -5 |\n| R05 | Body length | >500 lines | -10 |\n| R06 | Code examples | Complex concepts with no examples | -5 |\n| R06 | Code examples | No examples at all in a technical skill | -10 |\n| R07 | Scope note | No scope note \u002F cross-references | -3 |\n\n---\n\n### Agents\n\n| Rule | Check | Condition | Penalty |\n|------|-------|-----------|---------|\n| R09 | `description` present | Missing | -25 |\n| R09 | `\u003Cexample>` blocks | Exactly 1 example | -5 |\n| R09 | `\u003Cexample>` blocks | Zero examples | -15 |\n| R10 | `model` declared | Not declared | -5 |\n| R10 | `model` appropriate | Wrong tier for task (e.g. opus for parsing) | -5 |\n| R11 | `tools` declared | Not declared | -5 |\n| R11 | Unused tools | Each tool declared but not used in body | -3 each |\n| R12 | Output format | No output format spec in body | -10 |\n| R11 | Write on read-only | Audit\u002Freview\u002Fscan agent declares Write or Edit | -10 |\n\n---\n\n### Commands\n\n| Rule | Check | Condition | Penalty |\n|------|-------|-----------|---------|\n| -- | `description` present | Missing | -25 |\n| R18 | `argument-hint` present | Command takes input but no hint | -5 |\n| R14 | Steps numbered | Multi-step body with no numbered steps | -10 |\n| R15 | Empty input handling | No handling for empty\u002Fmissing input | -10 |\n| R16 | Output format | No output format defined | -10 |\n| R17 | Error paths | No error handling for missing files or bad data | -5 |\n\n---\n\n### Shared Partials\n\n| Rule | Check | Condition | Penalty |\n|------|-------|-----------|---------|\n| R19 | `user-invocable: false` | Missing or set to true | -25 |\n| R20 | Purpose clear | Description doesn't state it's a partial | -10 |\n\n---\n\n### Rules\n\n| Rule | Check | Condition | Penalty |\n|------|-------|-----------|---------|\n| R21 | `description` present | Missing frontmatter description | -10 |\n| R21 | Format: bold imperative | No bold imperative opening | -5 |\n| R21 | Format: rationale | No rationale following the imperative | -10 |\n| R22 | Enforceability | Rule is not specific\u002Ftestable | -10 |\n| R23 | Budget | Rule file over 500 lines | -15 |\n| R26 | Conflicts with other rules | Direct contradiction with another rule in same set | -20 |\n| R24 | Duplicates tooling | Re-states what eslint\u002Fruff\u002Fclippy already catches | -10 |\n\n---\n\n### Hooks\n\n| Rule | Check | Condition | Penalty |\n|------|-------|-----------|---------|\n| -- | Valid JSON | hooks.json fails JSON parse | -25 |\n| R27 | Event names valid | Uses unrecognized event name | -15 |\n| R27 | Case correct | Event name has wrong case (e.g. `pretooluse`) | -10 |\n| R29 | Scripts exist | Referenced script file does not exist | -20 |\n| -- | Command safety | Hook command contains dangerous patterns (rm -rf, git push --force, DROP TABLE) | -15 |\n| -- | Matcher regex valid | Matcher pattern doesn't compile as valid regex | -10 |\n| -- | Timeout reasonable | Hook specifies timeout > 30s (likely hangs) | -5 |\n\n---\n\n### plugin.json\n\n| Check | Condition | Penalty |\n|-------|-----------|---------|\n| `name` present | Missing | -25 |\n| `version` is semver | Present but not valid semver | -10 |\n| `description` present | Missing | -5 |\n\n---\n\n### .mcp.json\n\n| Check | Condition | Penalty |\n|-------|-----------|---------|\n| Valid JSON | File fails JSON parse | -25 |\n| Server `command` present | MCP server entry missing `command` field | -15 |\n\n---\n\n### Settings Files (.claude\u002Fsettings.json, .claude\u002Fsettings.local.json)\n\n| Check | Condition | Penalty |\n|-------|-----------|---------|\n| Valid JSON | File fails JSON parse | -25 |\n| No hardcoded secrets | Contains API keys, tokens, or passwords | -25 |\n| Permission mode sanity | `bypassPermissions` enabled in a shared project settings file (not .local) | -15 |\n| Recognized keys | Contains unknown top-level keys not in Claude Code schema | -5 each, cap -15 |\n| Hook definitions valid | `hooks` key present — check event names valid and case-correct | -10 per invalid |\n\n---\n\n### CLAUDE.md\n\n| Rule | Check | Condition | Penalty |\n|------|-------|-----------|---------|\n| R49 | File exists | No CLAUDE.md in plugin root | -10 |\n| -- | Under 200 lines | CLAUDE.md exceeds 200 lines | -5 |\n| R38 | Actionable content | CLAUDE.md has no actionable guidance (just filler) | -10 |\n| R33 | Build\u002Frun command | No instructions for how to build or run the project | -10 |\n| R34 | Test command | No instructions for how to run tests | -5 |\n| R35 | Architecture overview | No structure\u002Fcomponent description (what lives where) | -5 |\n| R36 | Valid `@` imports | Contains `@` import syntax referencing a file that doesn't exist | -10 |\n| R37 | No stale file references | Mentions files or functions that no longer exist in the repo | -10 |\n| R38 | Actionability ratio | >60% of content is description rather than instructions | -5 |\n| -- | Prerequisites section | No section covering required tools, versions, or setup steps | -5 |\n| R39 | No rule conflicts | CLAUDE.md says X while a `.claude\u002Frules\u002F` file says not-X | -15 |\n\n---\n\n### Memory Files\n\nApplies to `.md` files located in `~\u002F.claude\u002Fprojects\u002F*\u002Fmemory\u002F` directories.\n\n| Rule | Check | Pass (+0) | Penalty |\n|------|-------|-----------|---------|\n| -- | Has YAML frontmatter | Present | -15 |\n| -- | `name` in frontmatter | Present | -10 |\n| -- | `description` in frontmatter | Present | -10 |\n| -- | `type` in frontmatter | Present (`user`\u002F`feedback`\u002F`project`\u002F`reference`) | -5 |\n| -- | Content matches declared type | Yes | -10 |\n| -- | Referenced in MEMORY.md index | Yes | -5 (orphaned memory) |\n| R37 | Stale content | No references to removed files or functions | -10 |\n\n---\n\n### All Artifact Types: Vague Quantifiers\n\n| Rule | Check | Condition | Penalty |\n|------|-------|-----------|---------|\n| R01 | Vague quantifier | Each occurrence of: \"appropriate\", \"relevant\", \"as needed\", \"sufficient\", \"adequate\", \"reasonable\", \"properly\", \"correctly\", \"some\", \"several\", \"various\" without measurable criteria | -2 each |\n| R01 | Vague quantifier cap | Total vague quantifier penalty | max -20 |\n\n---\n\n### Cross-Component (--plugin flag)\n\nApplied when linting an entire plugin rather than individual files.\n\n| Check | Condition | Penalty |\n|-------|-----------|---------|\n| Broken partial refs | Command references `commands\u002Fshared\u002FX.md` that doesn't exist | -20 |\n| Broken skill refs | Agent references `plugin:skill` that isn't installed | -20 |\n| Missing scripts | Hook references script that doesn't exist | -20 |\n| Orphaned files | Agent\u002Fcommand\u002Fskill file not referenced by anything | -5 per file |\n| Contradictions | Two rules\u002Finstructions in same plugin directly contradict each other | -15 per pair |\n\n---\n\n## Score Bands\n\n| Range | Label | Meaning |\n|-------|-------|---------|\n| 90–100 | Excellent | Production-ready; minor or no issues |\n| 80–89 | Good | Solid; one or two non-critical gaps |\n| 70–79 | Adequate | Meets threshold; noticeable gaps to address |\n| 60–69 | Weak | Below threshold; significant issues |\n| \u003C60 | Rewrite | Fundamental problems; recommend rewriting from scratch |\n\n**Default pass threshold:** 70. Configurable in `.claude\u002Fnlpm.local.md`.\n\n---\n\n## Calibration Examples\n\n### Example 1: Excellent Agent (95\u002F100)\n\n**Artifact:**\n```markdown\n---\nname: dependency-auditor\ndescription: |\n  Audits project dependencies for security vulnerabilities, outdated packages,\n  and license compliance issues. Use this agent when checking npm\u002Fpip\u002Fcargo\n  dependencies, reviewing package.json or requirements.txt, or running a\n  security audit before release.\n\n  \u003Cexample>\n  Context: Developer preparing for production release\n  user: check if any of our dependencies have known CVEs\n  assistant: I'll audit your dependencies for security vulnerabilities using\n  the package manifest files...\n  \u003C\u002Fexample>\n\n  \u003Cexample>\n  Context: CI pipeline running pre-merge checks\n  user: \u002Faudit-deps\n  assistant: Running dependency audit. Scanning package.json and\n  package-lock.json for vulnerabilities and license issues...\n  \u003C\u002Fexample>\nmodel: sonnet\ncolor: yellow\ntools: [\"Read\", \"Glob\", \"Bash\"]\nskills: [\"nlpm:conventions\"]\n---\n\nYou are a dependency security auditor. Read all package manifests in the\nproject. For each dependency, check version ranges against known vulnerability\npatterns. Report findings in the format below.\n\n## Output Format\n### Summary\nTotal dependencies: N | Vulnerable: N | Outdated: N | License issues: N\n\n### Findings\n| Package | Version | Issue | Severity |\n|---------|---------|-------|----------|\n```\n\n**Score breakdown:**\n- Base: 100\n- `description` present and has 3+ specific phrases: 0\n- 2 `\u003Cexample>` blocks: 0\n- `model: sonnet` declared and appropriate for security analysis: 0\n- `tools` declared with only tools used: 0\n- Output format defined: 0\n- Read-only agent (no Write\u002FEdit): 0\n- Minor: `Bash` tool declared but body doesn't explicitly call it — one unused tool: **-3**\n- No scope note in body: **-2** (vague: none)\n\n**Final: 97\u002F100** — Excellent. One unused tool (`Bash` declared but body text doesn't explicitly invoke it) costs 3 points.\n\n*(For calibration: a 95 example would have zero unused tools and a scope note. The range 90-100 is Excellent regardless of the exact number.)*\n\n---\n\n### Example 2: Rewrite Agent (41\u002F100)\n\n**Artifact:**\n```markdown\n---\nname: code-helper\ndescription: \"Helps with code tasks in an appropriate and relevant way as needed.\"\nmodel: opus\ntools: [\"Read\", \"Write\", \"Edit\", \"Bash\", \"Glob\", \"WebSearch\", \"WebFetch\"]\n---\n\nYou are a helpful coding assistant. Analyze the code and make appropriate\nimprovements. Handle edge cases as needed and ensure the output is relevant\nto the user's requirements.\n```\n\n**Score breakdown:**\n- Base: 100\n- Zero `\u003Cexample>` blocks: **-15**\n- Description is generic (1 vague phrase, 0 specific phrases): **-15**\n- `opus` declared for a routine code-help task (haiku\u002Fsonnet appropriate): **-5**\n- `tools` declared but too many unused (WebSearch, WebFetch, Glob all declared without body justification): **-10** (judged as 3–4 unused, rounded)\n- \"appropriate\" + \"relevant\" + \"as needed\" (vague quantifiers, 2 instances): **-4**\n- No output format defined: **-10**\n\nTotal penalties: -59\n\n**Final: max(0, 100 - 59) = 41\u002F100** — Rewrite.\n\n*(For calibration: the exact number of unused tools and vague quantifier hits can vary by reviewer. The important thing is that this artifact scores well below 60 — multiple fundamental issues.)*\n\n---\n\n### Example 3: Excellent Rule (92\u002F100)\n\n**Artifact:**\n```markdown\n---\ndescription: \"Always use ${CLAUDE_PLUGIN_ROOT} for intra-plugin file references in hooks and scripts\"\npaths: [\"**\u002F.claude\u002Fhooks.json\", \"**\u002Fscripts\u002F*.sh\"]\n---\n\n**Use `${CLAUDE_PLUGIN_ROOT}` for all file paths within a plugin.**\n\nBecause plugins are installed at different locations for different users and\nenvironments, hardcoded absolute paths (e.g. `\u002FUsers\u002Falice\u002F.claude\u002Fplugins\u002F...`)\nbreak when the plugin is installed by anyone other than the original author.\nUsing `${CLAUDE_PLUGIN_ROOT}` ensures paths resolve correctly regardless of\ninstall location.\n\nCorrect:\n```json\n\"command\": \"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fcheck.sh\"\n```\n\nIncorrect:\n```json\n\"command\": \"\u002FUsers\u002Falice\u002F.claude\u002Fplugins\u002Fcache\u002Fmy-plugin\u002F1.0.0\u002Fscripts\u002Fcheck.sh\"\n```\n```\n\n**Score breakdown:**\n- Base: 100\n- `description` present: 0\n- Bold imperative opening: 0\n- Rationale follows: 0\n- Specific and testable (can grep for `\u002FUsers\u002F` in hooks.json): 0\n- `paths` scoped: 0\n- Under 500 lines: 0\n- Does not duplicate a linter rule: 0\n- Minor: no reference to a related rule about portability in other contexts: **-3** (judgment call; not a formal penalty — scoring at 92 reflects excellent but not perfect)\n- Vague quantifiers: none: 0\n\n**Final: 92\u002F100** — Excellent. Loses ~8 points for not covering related portability contexts (env vars in MCP configs, etc.) — a judgment call reflected in the score rather than a formal penalty table entry.\n\n---\n\n### Example 4: Weak Rule (40\u002F100)\n\n**Artifact:**\n```markdown\nDon't write bad code. Code should be clean and well-organized. Avoid using\noutdated patterns. Make sure to handle errors appropriately.\n```\n\n**Score breakdown:**\n- Base: 100\n- Missing frontmatter (no `description` field): **-10**\n- No bold imperative opening: **-5**\n- No rationale: **-10**\n- Not specific or testable (\"bad code\", \"clean\", \"well-organized\" are unmeasurable): **-10**\n- \"appropriately\" (vague quantifier): **-2**\n- \"well-organized\" (vague): **-2**\n- Duplicates what every linter\u002Fformatter already enforces (\"clean code\"): **-10**\n- Rule is not enforceable by NLPM or any automated tool: **-10** (enforceability)\n\nTotal penalties: -59\n\n**Final: max(0, 100 - 59) = 41\u002F100** — Rewrite.\n\n*(Calibrated near 40 as specified. The exact value depends on judgment on \"well-organized\" as a vague quantifier.)*\n\n---\n\n## Scope Note\n\nThis skill covers the NLPM scoring formula, penalty tables, score bands, and calibration examples. It does NOT cover:\n- Artifact schemas and valid field values → see `nlpm:conventions`\n- Patterns and anti-patterns catalog → see `nlpm:patterns`\n- How to run the score command → see `commands\u002Fscore.md`\n",{"name":5,"version":43,"description":7},"0.1.0","main","7850740bd837adb32f0a109ab2af82482196c6f2","skills\u002Fxiaolai\u002Fnlpm\u002Fskills\u002Fnlpm\u002Fscoring",1,"https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills","https:\u002F\u002Fzturnsgo.com","https:\u002F\u002Fgithub.com\u002Fshengdabai","https:\u002F\u002Fzturnsgo.com\u002F","AI × education creator — producer, not consumer. Taught 6,000+ learners; shipping learning tools & daily essays with Claude Code, practicing @xiaolai's way 🥋","2026-11-01 21:28:23",{"source":8,"skillName":5,"commands":55,"prompt":65,"zipAvailable":66},[56,59,62],{"tool":57,"command":58},"npx","npx skills add shengdabai\u002FTony-Claude-Code-Skills --skill scoring",{"tool":60,"command":61},"bunx","bunx skills add shengdabai\u002FTony-Claude-Code-Skills --skill scoring",{"tool":63,"command":64},"pnpm","pnpm dlx skills add shengdabai\u002FTony-Claude-Code-Skills --skill scoring","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fxiaolai\u002Fnlpm\u002Fskills\u002Fnlpm\u002Fscoring\u002FSKILL.md",true,[],[69,86,118,143,165,185],{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":78,"publishedAt":38},"01M70P17DAD4C1C47NPH6A96EM","xiaolai-methodology","以李笑来(Li Xiaolai)的思考方式、方法论与表达风格,为用户做全方位 1-on-1 教练指导,覆盖创业、赚钱、投资、学习、自学、读书写作、用 AI、以及人生心态与自我管理。当用户提到 \"李笑来\"、\"笑来\"、\"笑来老师\"、\"扮演李笑来\"、\"找笑来聊聊\"、\"笑来怎么看\"、\"xiaolai\"、\"把时间当作朋友\"、\"通往财富自由之路\"、\"定投改变命运\"、\"韭菜的自我修养\"、\"自学是门手艺\"、\"让时间陪你慢慢变富\"、\"七年就是一辈子\"、\"元认知\"、\"活在未来\"、\"复利\u002F长期主义\"、\"践行\"、\"痴迷改进\"、\"个人商业模式\u002F出售时间\"、\"睡后收入\"、\"定投\"、\"财富自由\"、\"操作系统升级\"、\"最少必要知识\"、\"北极星提示词\"、\"用 AI 该怎么学\u002F思考\" 等任一触发词,或当用户带着关于创业\u002F赚钱\u002F投资\u002F学习\u002F职业\u002F重大人生决策的困惑、希望被人用笑来式的「逻辑 + 大白话 + 类比 + 重新定义 + 践行导向」来点醒和指导时,自动进入李笑来教练模式。","https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fxiaolai-methodology\u002FSKILL.md",[75],{"categoryNo":76,"categoryName":77,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",[79,80,81,82,83,84,85],"methodology","xiaolai","xiaolai methodology","朋友","投资","writing","收入",{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":98,"publishedAt":38},"01M70P13NB9YP7ACJR1S861CDS","zread","Produce and consume a wiki-style knowledge base for a code repository via the `zread` CLI and its on-disk output under `.\u002F.zread\u002Fwiki\u002F`. Use this skill whenever the user wants to understand, onboard onto, explore, summarize, map, or get an overview of an unfamiliar codebase; asks for architecture docs, a project wiki, a repo walkthrough, module\u002Fpackage explanations, or \"what does this repo do\"; wants to generate, regenerate, resume, browse, or serve code documentation locally; or mentions zread \u002F zread.ai directly. Also use it proactively before diving into a large unknown repo — if `.\u002F.zread\u002Fwiki\u002Fcurrent` exists, read the generated pages instead of crawling source file-by-file; if it doesn't, consider offering to run `zread generate`. The trigger is the intent (understand a codebase through generated docs), not the literal word \"zread\".","https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fzread\u002FSKILL.md",[92,93],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":94,"categoryName":95,"taxonomyType":96,"taxonomyTypeDesc":97},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[88,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117],"knowledge","wiki","explore","walkthrough","project","get","knowledge base","run","generate","intent","cli","map","documentation","project wiki","disk","architecture","code","unknown","generated",{"skillNo":119,"name":120,"nameZh":6,"description":121,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":128,"publishedAt":38},"01M70P10S4SWMZQ8BJAFBFDRW3","youtube","Launch the YouTube Creator Agent to auto-generate videos.\nUse when: user types \u002Fyoutube, wants to create YouTube videos,\ngenerate video content, or upload to YouTube.\nKeywords: youtube, video, 视频, 创作视频, 发布视频","https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fyoutube\u002FSKILL.md",[124,125],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":126,"categoryName":127,"taxonomyType":96,"taxonomyTypeDesc":97},"01JBSEEDCAT000000000000036","内容创作者",[120,129,130,131,132,133,134,135,107,136,137,138,26,25,139,140,141,142],"user","content","视频","creator","generate video","videos","launch","video content","create","upload","auto","types","Video","创作",{"skillNo":144,"name":145,"nameZh":6,"description":146,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":150,"publishedAt":38},"01M70P0YE95D8BACZCGV8BK90K","youtube-script-sync","Sync, update, or optimize Tony's GetNote knowledge base `Youtube视频逐字稿` by turning each parent recording or first-person idea note into an idempotent child note containing a directly recordable YouTube long-video or Shorts script. Use when the user says “更新\u002F同步\u002F优化 Youtube视频逐字稿知识库”, or says “更新\u002F同步\u002F优化该知识库” while this knowledge base is the active context.","https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fyoutube-script-sync\u002FSKILL.md",[149],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[151,152,120,153,154,141,155,156,157,158,159,160,161,162,105,163,26,25,99,164],"sync","script","youtube script sync","recording","shorts","first","base","person","update","active","child","optimize","idempotent","long",{"skillNo":166,"name":167,"nameZh":6,"description":168,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":169,"categories":170,"keywords":175,"publishedAt":38},"01M70P0WMV5XT0EEC0N445PW07","writing-skills","How to write SKILL.md files that trigger reliably and teach effectively. Use when creating, improving, or reviewing Claude Code skills.","https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fxiaolai\u002Fnlpm\u002Fskills\u002Fnlpm\u002Fwriting-skills\u002FSKILL.md",[171,172,173,174],{"categoryNo":76,"categoryName":77,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":94,"categoryName":95,"taxonomyType":96,"taxonomyTypeDesc":97},{"categoryNo":126,"categoryName":127,"taxonomyType":96,"taxonomyTypeDesc":97},[176,84,177,178,179,180,115,26,25,181,182,183,184],"writing skills","how","teach","write skill","write","claude code skills","files","how to","trigger",{"skillNo":186,"name":187,"nameZh":6,"description":188,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":189,"categories":190,"keywords":193,"publishedAt":38},"01M70P0SJFR4YVJQBGMHKGSKXT","writing-rules","How to write .claude\u002Frules\u002F files that Claude actually follows. Use when creating, improving, or reviewing project rules.","https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fxiaolai\u002Fnlpm\u002Fskills\u002Fnlpm\u002Fwriting-rules\u002FSKILL.md",[191,192],{"categoryNo":76,"categoryName":77,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":126,"categoryName":127,"taxonomyType":96,"taxonomyTypeDesc":97},[194,84,195,103,196,182,26,177,180,25,183],"Rules","writing rules","project rules"]