vocabulary
Use when writing, reviewing, or naming any NLPM artifact (command, agent, skill, rule, workflow) — pick the canonical noun or verb from this registry rather than coining a synonym. Loaded by the scorer and checker agents to detect vocabulary drift across artifacts.
Best use case
vocabulary is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Use when writing, reviewing, or naming any NLPM artifact (command, agent, skill, rule, workflow) — pick the canonical noun or verb from this registry rather than coining a synonym. Loaded by the scorer and checker agents to detect vocabulary drift across artifacts.
Teams using vocabulary should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/vocabulary/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How vocabulary Compares
| Feature / Agent | vocabulary | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Use when writing, reviewing, or naming any NLPM artifact (command, agent, skill, rule, workflow) — pick the canonical noun or verb from this registry rather than coining a synonym. Loaded by the scorer and checker agents to detect vocabulary drift across artifacts.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
Related Guides
SKILL.md Source
# NLPM Domain Vocabulary > The canonical noun-and-verb set NLPM uses to name what it does. Every artifact name, command name, agent name, rule wording, and prose description should draw from this registry. Synonyms are flagged by `/nlpm:check` and penalized by `/nlpm:score`. > > **Sister skill:** `nlpm:conventions` holds upstream Claude Code framework terms (hook events, frontmatter fields, manifest keys). This skill holds NLPM-internal domain language. If a term is from Anthropic's docs, it belongs in `conventions`. If it is from NLPM's own corpus, it belongs here. --- ## How this registry is built Every term listed below has **literary warrant** — it appears in at least one NLPM artifact today, captured by `analysis/scripts/extract-vocabulary.py`. Re-run that script after adding or renaming artifacts; the freshest output lives at `analysis/vocabulary-extract/summary.md`. New terms enter the registry only after one of the four warrant types from `analysis/vocabulary-design-principles.md` (P6) is satisfied — literary warrant alone is the entry bar for terms already in use; new coinages need user, structural, or domain warrant. --- ## Two scopes (P1) NLPM has two declared scopes. A homonym across them is a **boundary**, not a collision. | Scope | Lives in | What it operates on | |-------|----------|---------------------| | **internal** | `commands/`, `agents/`, `skills/`, `bin/`, `scripts/`, project CLAUDE.md | NLPM's own behavior — scoring, checking, fixing, testing, listing, trending NL artifacts in the current project. | | **auditor** | `.github/workflows/auditor-*.yml`, `auditor/` | The self-evolution pipeline that audits external repos, opens contribution PRs, tracks outcomes, refines rules. | A verb that appears in both scopes (`scan`, `test`, `discover`) carries the same identity criterion in both — these are sanctioned homonyms. A verb that appears in only one scope (`audit`, `contribute`, `track` in auditor; `score`, `check`, `fix`, `ls`, `trend`, `init` in internal) is scope-bound; using it in the other scope requires either renaming or declaring a second scope-specific definition. --- ## Verbs ### Internal scope (NLPM commands) | Canonical verb | Output | Judgment? | Examples in corpus | |----------------|--------|-----------|--------------------| | `score` | number + penalty list | no (deterministic) | `commands/score.md`, `agents/scorer.md` | | `check` | consistency violation list | no (deterministic) | `commands/check.md`, `agents/checker.md` | | `test` | pass/fail against named specs | no (deterministic) | `commands/test.md`, `agents/tester.md` | | `scan` | pattern-match findings against a signature database | no (deterministic) | `commands/security-scan.md`, `agents/vague-scanner.md`, `agents/security-scanner.md` | | `fix` | mutated artifact | no (mechanical) | `commands/fix.md` | | `ls` | inventory of artifacts | no | `commands/ls.md`, `agents/scanner.md` | | `trend` | history report | no | `commands/trend.md` | | `init` | config file | no | `commands/init.md` | **Deprecated synonyms (do not use in internal scope):** - `lint`, `validate` → use `check` (structural) or `score` (quality) - `find`, `search`, `list` → use `ls` - `analyze` → use `score` (if quantitative) or pick a more specific verb - `audit` → not in internal scope; live in auditor scope only ### Auditor scope (`.github/workflows/auditor-*.yml`, `auditor/scripts/`) | Canonical verb | Output | Judgment? | Examples in corpus | |----------------|--------|-----------|--------------------| | `discover` | candidate-repo list | no | `auditor-discover.yml` | | `audit` | composite quality + security report | **yes** | `auditor-audit.yml` | | `contribute` | PR(s) to target repo | no | `auditor-contribute.yml` | | `track` | outcome events appended to `events.jsonl` | no | `auditor-track.yml` | | `classify` | categorical label on a PR comment | no (model-deterministic) | `auditor-classify.yml` | | `refine` | rule-edit PR (human-gated) | no (LLM-generated, human-merged) | `auditor-refine-rules.yml` | | `cite` | citation-edit PR (human-gated) | no | `auditor-cite-exemplars.yml`, `propose-rule-citations.py` | | `diff` | finding-by-finding comparison | no | `diff-findings.py`, `auditor-docs-diff.yml` | | `report` | rolled-up summary at a cadence | no | `auditor-daily-report.yml`, `generate-daily-report.py` | | `review` | rule-review issue body (human reads, decides) | **yes** (human) | `auditor-rule-review.yml`, `generate-rule-review-body.py` | | `propose` | a draft for human approval | no | `propose-rule-citations.py` | | `validate` | yes/no on a structural rule | no | `validate-feedback.sh`, `validate-rule-ids.py` | > **Sibling-granularity note (P1):** `report` is broader than its peers (`classify`, `refine`, `cite`, `diff`). The auditor's noun-named workflow convention absorbs this — workflows that produce reports are noun-named after the output (`auditor-daily-report`, `auditor-rule-review`), and the verb `report` is the generic act behind that family. Documented inconsistency, not a P1 violation; flagged here so future additions don't replicate the pattern without intent. **Cross-scope homonyms (same meaning in both scopes):** - `scan` — pattern-match against a signature database (used by `security-scan` command and `scan-suppressions.py`) - `test` — pass/fail against named specs (used by `/nlpm:test` and `auditor-integration-test.yml`) - `discover` — produce a candidate list (`/nlpm:ls` description text and `auditor-discover.yml`) ### Verbs proposed but not entered Per the precedence order in `analysis/vocabulary-design-principles.md` (P6 last; warrant is an entry check, not a veto), proposed terms split into two lists. **Deferred (P2–P5 satisfied; awaiting warrant):** | Proposed verb | Closure gap or judgment named | Warrant needed | |---------------|------------------------------|----------------| | `triage` | Finding-disposition (P4 closure: `finding` has no consumer verb) | User warrant — practitioner reaches for the term unprompted | | `review` (internal scope) | Human-in-the-loop reading, sanctioned cross-scope homonym with auditor `review` | User warrant — practitioner names a review act in internal artifacts | | `rationalize` | Vocabulary curation (P5: act of picking canonical from extracted frequencies has no name) | User warrant — practitioner names the curation act | Deferred terms are documented but not yet canonical. R51 does **not** flag them as deprecated — they are nameless gaps, not synonyms. **Rejected by higher principle (no entry possible regardless of warrant):** | Proposed verb | Blocking principle | Reason | |---------------|--------------------|--------| | `audit` (internal scope) | P1 | Merge test fails — `score`+`check` already cover internal-scope evaluation | | `lint` (internal scope) | P1 | Synonym of `check`; same identity criterion | | `validate` (internal scope) | P1 | Collapses to `check` in internal scope (canonical in auditor scope) | | `analyze` (internal scope) | P1 | Synonym of `score`; quantitative evaluation | --- ## Nouns ### Artifact-class nouns (rigid; survive state changes) | Canonical noun | What it is | Examples | |----------------|------------|----------| | `artifact` | any NL programming file Claude Code consumes | umbrella term | | `command` | `commands/*.md`, invoked via `/<plugin>:<command>` | `commands/score.md` | | `agent` | `agents/*.md`, invoked via Task tool with `subagent_type` | `agents/scorer.md` | | `skill` | `skills/<plugin>/<name>/SKILL.md`, auto-loaded by description match | `skills/nlpm/rules/SKILL.md` | | `rule` | a numbered item (R01–R50) inside the rules skill | inside `skills/nlpm/rules/SKILL.md` | | `hook` | shell script wired via `hooks.json` | `hooks/hooks.json` | | `manifest` | `plugin.json` or `marketplace.json` | `.claude-plugin/plugin.json` | | `frontmatter` | YAML block delimited by `---` at the top of a Markdown file | every command, agent, skill | ### Implementation-role nouns (P2/P3 — agent names ride alongside command verbs) | Role-noun | Paired verb | File | |-----------|-------------|------| | `scanner` | `ls` | `agents/scanner.md` | | `scorer` | `score` | `agents/scorer.md` | | `checker` | `check` | `agents/checker.md` | | `tester` | `test` | `agents/tester.md` | | `vague-scanner` | `score` (sub-step) | `agents/vague-scanner.md` | | `security-scanner` | `scan` | `agents/security-scanner.md` | These are **not top-level verbs in their own right** (P3). They are role-names for sub-step agents. Treat them as nouns naming the worker, not as operations on artifacts. ### Output-class nouns (produced by verbs) | Noun | Produced by | Notes | |------|-------------|-------| | `score` | `score` verb | number 0–100 + penalty breakdown | | `finding` | `score`, `check`, `scan` | one problem detected; carries a fingerprint in auditor scope | | `violation` | `check` | a finding specifically from cross-reference checking | | `penalty` | `score` | the points subtracted by a single finding | | `snapshot` | `score`, `trend` | a point-in-time record appended to `.claude/nlpm-history.json` | | `inventory` | `ls` | the list of artifacts discovered in a path | | `report` | `audit`, `report`, `trend` | a roll-up document | | `spec` | `test` | a `.nlpm-test/*.spec.md` file defining expected behavior | ### Auditor-scope nouns (only meaningful inside `auditor/`) | Noun | What it is | File evidence | |------|------------|---------------| | `case-study` | post-merge article comparing original audit to HEAD | `auditor/audits/<slug>.re-audit.md` | | `exemplar` | teaching artifact from a high-scoring audit | `auditor/exemplars/<slug>.md` | | `fingerprint` | content-hash identity of a finding across re-runs | `compute-fingerprint.sh` | | `event` | one append-only record in `events.jsonl` | `auditor/logs/events.jsonl` | | `disagreement` | self/maintainer dispute over a finding | `auditor/disagreements.jsonl` | | `registry` | the tracked-repo database | `auditor/registry/repos.json` | | `disposition` | a finding's lifecycle status | enum values inside `events.jsonl` | | `policy gate` | a pre-PR check (no-external-PRs, CLA, pushback) | `auditor-contribute.yml` | --- ## The bright-line table (P1, P5) When the evaluation cluster overlaps in practice, use this table to disambiguate: | Verb | Scope | Deterministic? | Judgment? | Output | Use when | |------|-------|----------------|-----------|--------|----------| | `score` | internal | yes | no | number + penalty list | quantifying quality with a rubric | | `check` | internal | yes | no | violation list | verifying cross-references and structural consistency | | `test` | both | yes | no | pass/fail | comparing actual behavior against a named spec | | `scan` | both | yes | no | findings against signatures | pattern-matching for a known class of problems | | `audit` | auditor | partly | **yes** | composite report | full quality assessment that combines score + scan + judgment | | `review` | auditor | no | **yes (human)** | comment trail | a human reads and forms an opinion | Two verbs share a scope and an identity criterion ⇒ one must be retired or scope-split. Two verbs share an identity criterion across scopes ⇒ that is a sanctioned homonym (declare it in this table). --- ## How to extend this registry 1. **Add a term only if it has warrant.** The four warrant types come from `analysis/vocabulary-design-principles.md` P6: literary, user, structural, domain. Literary warrant is automatic via the extraction script — if the script picks the term up, it qualifies. 2. **Re-run the extraction script.** `python3 analysis/scripts/extract-vocabulary.py` writes `analysis/vocabulary-extract/summary.md`. New terms appear there. 3. **Slot the term.** Add a row to the right table above (internal verb / auditor verb / artifact-class noun / role-noun / output-class noun / auditor-scope noun). 4. **Cite the file evidence.** Every row has an "examples" or "file evidence" column. Cite at least one path. 5. **If retiring a synonym, list it under its canonical verb's "deprecated synonyms" line.** Do not silently drop terms; deprecation is itself a vocabulary act and needs to be visible. --- ## Deferred work (documented, not yet executed) | Item | Why deferred | What unblocks it | |------|--------------|------------------| | Per-rule warrant tags on R01–R50 | Requires reading every rule + judging which warrant it earns its place by. User warrant data lives in `rule-health.py` outputs. | A separate `auditor-refine-rules` follow-up pass that combines rule-health data with this principle set. | | Adding `triage` as a `/nlpm:triage` command | P4 closure gap is real but `triage` has zero literary warrant today. User warrant is the missing evidence. | A practitioner reaching for the word unprompted in actual NLPM use. | | Resolving the agent-name-vs-command-name shadowing (`scanner`/`ls`, `scorer`/`score`) | Already documented above as a class boundary; no rename proposed. | A confirmed case of practitioner confusion. None observed today. | | (resolved 2026-05-19) Workflow filename convention | Declared as sanctioned split. See "Auditor workflow filename convention" below. | — | --- ## Auditor workflow filename convention `.github/workflows/auditor-*.yml` filenames follow a **two-rule split**, both sanctioned: | Pattern | Use when | Examples | |---------|----------|----------| | `auditor-<verb>` | The workflow changes state (gates a transition, opens a PR, classifies, moves a finding through its lifecycle) | `auditor-audit.yml`, `auditor-contribute.yml`, `auditor-track.yml`, `auditor-classify.yml`, `auditor-refine-rules.yml`, `auditor-cite-exemplars.yml`, `auditor-discover.yml` | | `auditor-<output-noun>` | The workflow's purpose is to produce a named artifact that downstream tooling consumes by name | `auditor-case-study.yml`, `auditor-exemplar.yml`, `auditor-daily-report.yml`, `auditor-suppressions.yml`, `auditor-docs-diff.yml`, `auditor-rule-review.yml` | By P3, both patterns produce or gate, so both pass the top-level-verb test. The split is genuine: noun-named workflows are named after what they write, verb-named workflows after what they do. **Outlier:** `auditor-batch-processor.yml` is named after a process role, not a verb or an output noun. Rename candidate: `auditor-promote-batch`. Deferred — git history, badge, and external references make the rename costly, and the existing name has literary warrant. --- ## Scope note This skill loads on requests to write, review, or name NLPM artifacts. For framework-level facts (hook event names, manifest field schemas, Claude Code naming conventions), see [[conventions]]. For the 50 quality rules (R01–R50), see [[rules]]. For penalty tables, see [[scoring]].