Skip to content
Skill Authoring
Skill

/scoring

100-point NL artifact rubric: penalty tables per artifact type, calibration cases.

BOOST
From plugin
nlpm
15317 skills8 agents15 commands1 hook
Install
$ npx -y skills add xiaolai/nlpm --skill scoring --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/scoring

Context preview

The summary Claude sees to decide when to auto-load this skill.

100-point NL artifact rubric: penalty tables per artifact type, calibration cases.

SKILL.md

scoring.SKILL.md
name: scoring
description: "100-point NL artifact rubric: penalty tables per artifact type, calibration cases."
version: 0.4.0
user-invocable: false

NLPM Quality Scoring Rubric

100-point quality scale for all NL programming artifacts. Apply penalties deterministically. Use calibration examples to anchor judgment on borderline cases.

---

Scoring Formula

base_score = 100
adjustments = sum of all applicable penalties (all penalties are negative)
final_score = max(0, min(100, base_score + adjustments))

Penalties 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.

---

Penalty Tables

The tables in this file cover every artifact type a Claude Code project contains. Tables for the remaining artifact types live in `references/`, one file per group. When the artifact you are scoring is listed below, Read that file and apply its tables as if they appeared here — they carry the same weight, and a finding cited to one of their rows is a rubric finding.

| Artifact being scored | Read | |---|---| | Codex hook events; `.codex-plugin/plugin.json`; `.agents/plugins/marketplace.json`; `agents/openai.yaml`; `.codex/config.toml` | [`references/codex.md`](references/codex.md) | | Antigravity / Gemini-lineage hook events; `gemini-extension.json`; `.gemini/commands/*.toml` | [`references/antigravity.md`](references/antigravity.md) | | Memory files (`~/.claude/projects/*/memory/*.md`); agent workflow programs (project-root `program.md`-style files) | [`references/memory-and-workflow.md`](references/memory-and-workflow.md) |

The universal Hooks checks below apply to Codex and Antigravity hook configs too.

Skills

| Rule | Check | Condition | Penalty | |------|-------|-----------|---------| | -- | `name` present | Missing | -25 | | -- | `name` matches parent directory | Frontmatter `name:` value does not equal parent directory name (per `nlpm:conventions` §5 — open spec MUST) | -15 | | R04 | `description` present | Missing | -25 | | R04 | Trigger quality | Description is generic (≤1 specific phrase) | -15 | | R04 | Description length | Description 500–800 chars | -5 | | R04 | Description length | Description >800 chars | -10 | | R05 | Body length | 400–500 lines | -5 | | R05 | Body length | >500 lines | -10 | | R06 | Code examples | Complex concepts with no examples | -5 | | R06 | Code examples | No examples at all in a technical skill | -10 | | R06 | `<example>` blocks | Zero `<example>` blocks on a user-invocable skill (`user-invocable` absent or `true`) | -10 | | R07 | Scope note | No scope note / cross-references | -3 |

> **Scope-note discipline:** R07 means "scope note when related skills exist." > Do NOT apply R07 to missing example blocks — that is the new R06 row above > (penalty -10, not -15). The 2026-05-13 lijigang/ljg-skills audit applied > R07 + −15 fourteen times for missing example blocks; both labels were > wrong (R07 is not example-related, and -15 is the agents penalty, not > the skills penalty). The validator at `auditor/scripts/validate-rule-ids.py` > catches this kind of drift in CI.

> **`<example>`-block counting discipline** (added 2026-08-01, origin: > xiaolai/cc-suite v1.3.1 remediation): an `<example>` block counts only when > it sits outside fenced code blocks — in the body or in a frontmatter > description block scalar. Tags inside a fenced template (` ```markdown … ``` `) > are illustrative content, and prose that names the string `` `<example>` `` > is a mention, not a block. A 2026-07-31 scoring pass credited a skill with > example blocks that existed only inside a fenced template, hiding a real R06 > violation across 13 files. Verify by reading the file, not by grepping for > the tag.

> **`name` matches parent directory** (added 2026-05-25, audit: > google/skills): the open Agent Skills spec at agentskills.io makes this > a MUST. Mismatch is deterministic, high-confidence, and reproducible by > single-line diff (frontmatter `name:` vs `basename($(dirname FILE))`). > Mark such findings `confidence: high` per the manifest-vs-disk-diff > principle in `agents/scorer.md` step 6. Note: this penalty did not > exist before 2026-05-25 — re-scoring past audits will yield slightly > lower scores for any corpus containing this defect, but no contribute > outcomes are retroactively affected since no PRs were ever opened > against a name-mismatch finding under the prior rubric.

---

Agents

| Rule | Check | Condition | Penalty | |------|-------|-----------|---------| | R09 | `description` present | Missing | -25 | | R09 | `<example>` blocks | Zero `<example>` blocks in the description | -15 | | R09 | Exclusion clause | Description names no situation the agent is not for (a "Not for …"/"Do not use …" sentence, or an example where the assistant declines or routes elsewhere) | -5 | | R09 | Description length | Description value over 1,200 characters, examples included | -5 | | R10 | `model` declared | Not declared | -5 | | R10 | `model` appropriate | Wrong tier for task (e.g. opus for parsing) | -5 | | R11 | `tools` declared | Not declared | -5 | | R11 | Unused tools | Each tool declared but not used in body | -3 each | | R12 | Output format | No output format spec in body | -10 | | R11 | Write on read-only | Audit/review/scan agent declares Write or Edit | -10 |

> **R09 example budget** (changed in 1.4.0): one `<example>` block is full > credit. An agent's `description` sits in the Agent tool's text on every turn > and is the only thing Claude sees when choosing an agent, so examples stay in > the description — moving them into the body hides them from routing. One > well-chosen example plus an explicit exclusion ("Not for …") carries the > routing signal at a fraction of the tokens; extra examples are allowed but > cost always-on context, which is why R09 deducts 5 points when the > description exceeds 1,200 characters.

> **`min_examp

Read more
Ships withnlpm

Natural-Language Programming Manager — score, check, fix, and test NL artifacts across Claude Code, Codex CLI, and Antigravity. Tier-aware scoring with per-tool overlays. Part of the xiaolai plugin marketplace.

Get the whole plugin

Other skills on nlpm.