Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Naming framework for x-cmd modules / commands / subcommands. Subjective + scenario-driven; the skill is a thin shell, NOT a rulebook. Three layers: investigate (goal), naming.<user-task>.yml (OKR + session record, a .rule file), naming.okr-creator.yml (meta-rule that audits the session).
.claude/skills/x-cmd-naming/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 44% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 134% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 105% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 39% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 86% | 0% |
Naming is subjective + scenario-driven. This skill is a framework, not a rulebook — it does not bake in subjective naming rules.
┌─────────────────────────────────────────────────────────┐
│ 1. INVESTIGATE goal │
│ What is being named? What role? What concept? │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 2. naming.<user-task>.yml (.rule file) │
│ - goal-* (the naming task) │
│ - keyresult-* (verifiable outcomes) │
│ - task-* (task-specific constraints) │
│ - session: (audit trail on goal rule) │
│ prefer (5 init-004 answers) │
│ init_verdicts (per-candidate gate decisions) │
│ scores (D1-D7 anchored per candidate) │
│ final (pick + backup) │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 3. AUDIT with template/naming.okr-creator.yml │
│ x rule check -r <naming-dir> naming.<user-task>.yml │
└─────────────────────────────────────────────────────────┘Before writing anything, answer these questions. Do NOT skip — without answers, the scorer cannot anchor D4 (TRIAL/REAL) or D5 (RUN/TEST).
*test/*case), fake (*mock/*fake/*stub/*dry), real deployment (field*/*live*)Output: a one-line goal statement, e.g. > "Pick a standalone x-cmd module name for trial-run (Stage 1 of two-stage test) that scores 8.0+ on D1-D7, is self-explanatory at first glance, and survives all red-line / dictionary / length fast-fails."
Copy the template and crop / fill.
bashcp naming.template.yml naming.<user-task>.yml
Then fill in 4 sections (top-down):
Replace goal-TBD_task_id with a real ID. The ID suffix should reflect the task (e.g. goal-trial-run-naming, goal-mvp-prerelease-subcmd).
yamlgoal-trial-run-naming: name: <one-line goal statement from Step 1> apply: "naming.<user-task>.yml (self)" level: error desc: - <concept + role + anti-priors, from Step 1>
Replace each keyresult-kr*_TBD_short_label. Each KR is a rule that must be PASS-able. Add as many as the task has.
yamlkeyresult-kr1-top-pick-committed: name: <verifiable outcome 1> level: error desc: - <what counts as passing — concrete criterion, not "looks good">
Replace each TBD_task_id-* with a real constraint ID matching the goal's task-id suffix. Crop the ones that don't apply, add new ones as needed.
Common patterns:
must-be-X-not-Y — concept alignment (e.g. must-be-TRIAL-not-REAL)length-N-to-M-letters — D1 hard rangemust-imply-<archetype> — D7 binding<domain>-specific-acceptable / not-acceptable — narrow domain permissionmust-be-self-explanatory — D3yamltrial-run-001: name: <constraint, e.g. "must-be-TRIAL-not-REAL"> apply: "candidate words for <task-id>" level: error | warn desc: - <what the candidate must satisfy> - <which D1-D7 dimension this constrains> tldr: - wrong: <anti-example> - right: <good example>
Fill all 4 sub-sections:
prefer — MUST answer all 5 questions, even if the answer is "no / weak":
yamlprefer: vivid: yes | no | weak domain_acceptable: [<list of narrow domains OK, e.g. [naval]>] # [] = no narrow domain OK length_priority: shorter | self_explanatory origin: english | chinese | coined trade_off: single_prior_ok | hit_every_dim
init_verdicts — one entry per candidate considered, including rejects:
yamlinit_verdicts: - { name: <candidate>, gate: init-005 | init-006 | init-007 | pass, reason: "<why>" } # init-005 = red-line pattern match (auto-reject) # init-006 = dictionary first meaning contradicts target # init-007 = length out of range (< 2 or > 8) # pass = passed all init gates, eligible for scoring
scores — one entry per candidate that passed init. All scores >= 6.0. Every score MUST have anchors:
yamlscores: - name: <candidate> score: <0_to_10> anchors: - "D1: <letter count evidence>" - "D2: <dictionary first meaning evidence>" - "D3: <compound literal evidence>" - "D4: <trial vs real evidence>" - "D5: <run vs test evidence>" - "D6: <vividness evidence>" - "D7: <large equipment evidence>" misses: - "<what's missing — only list real misses, not always all 7>"
final — declare the pick + backup:
yamlfinal: pick: <winning_candidate> backup: <runner_up_or_null>
bashx rule check -r <naming-dir> naming.<user-task>.yml
The OKR-creator (at template/naming.okr-creator.yml) runs 11 checks (mix of error and warn):
| Check | Level | What it verifies | |---|---|---| | okr-creator-001 has-goal-rule | error | file has ≥1 goal-* rule | | okr-creator-002 has-keyresult-rules | error | file has ≥1 keyresult-* rule | | okr-creator-003 has-task-specific-rules | error | file has ≥1 task rule (not goal/keyresult) | | okr-creator-010 has-session-record | error | goal rule has session: field | | okr-creator-011 prefer-answers-all-five | error | all 5 init-004 questions answered | | okr-creator-012 init-verdicts-recorded | error | init_verdicts non-empty | | okr-creator-013 scores-have-anchors | error | every score has non-empty anchors list | | okr-creator-014 scores-no-below-6 | error | all scores >= 6.0 | | okr-creator-015 final-section-present | error | final.pick declared | | okr-creator-020 pick-backup-gap-le-1 | warn | score(pick) - score(backup) <= 1.0 | | okr-creator-021 top-pick-at-least-7 | warn | pick score >= 7.0 |
If any error check fails: fix the file and re-run. Common fixes:
session.preferanchors: [...]init_verdicts (rejected) or reframe the scorefinal: { pick, backup }If warn checks fail: decide whether to address or document the trade-off.
The skill proposes; the user decides. The final name is declared in session.final.pick and committed.
| File | Role | Format | |---|---|---| | SKILL.md | This file — workflow + file index | markdown | | naming.template.yml | TEMPLATE with TBD_* placeholders — copy, rename, fill | .rule | | naming.trial-run-module.yml | Worked example of a complete session record | .rule | | template/naming-concept.yml | Objective evaluation framework (D1–D7, red-lines, scoring anchors) — as .rule entries | .rule | | template/naming-brand.yml | x-cmd brand rules (length, case, prior preferences) — as .rule entries | .rule | | template/naming.okr-creator.yml | Meta-rule: audits a naming.<user-task>.yml (the 11 checks above) | .rule | | template/naming-x-cmd-mod.yml | Optional x-cmd module naming preset (starter session record) | .rule |
| Objective (in files / code) | Subjective (asked at init, not scored) | |---|---| | Dictionary first meaning | "I want vivid vs abstract" | | Letter count | "I want domain X acceptable" | | Trial / Real / Run / Test semantic class | "I want naval metaphor OK or not" | | Compound literal meaning | "I want Chinese-origin vs English-origin" | | Prior pollution (unittest testcase, dryrun) | "I want short over self-explanatory" |
naming.template.yml (TBD_ placeholders) and crop / fill as the task requires.naming.<user-task>.yml (.rule format) with goal / key results / task rules / session record.x rule check with template/naming.okr-creator.yml to audit the session record.template/naming-concept.yml — those go into the per-task session.prefer.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 22,746 | 75,373 | +231% | 1 | 1 | 0% | 5,091 | 7,317 | +44% | 0 | 0 | — |
case-02 | fail→pass | 18,580 | 23,373 | +26% | 1 | 1 | 0% | 3,124 | 7,319 | +134% | 0 | 0 | — |
case-03 | fail→pass | 25,292 | 22,572 | -11% | 1 | 1 | 0% | 3,882 | 7,954 | +105% | 0 | 0 | — |
case-04 | fail→pass | 48,880 | 9,362 | -81% | 1 | 1 | 0% | 2,390 | 3,317 | +39% | 0 | 0 | — |
case-05 | fail→pass | 12,482 | 3,046 | -76% | 1 | 1 | 0% | 1,802 | 3,349 | +86% | 0 | 0 | — |
case-06 | fail→pass | 18,766 | 3,910 | -79% | 1 | 1 | 0% | 2,984 | 3,069 | +3% | 0 | 0 | — |
case-07 | fail→pass | 14,013 | 4,721 | -66% | 1 | 1 | 0% | 2,088 | 3,563 | +71% | 0 | 0 | — |
case-08 | fail→pass | 43,520 | 3,928 | -91% | 1 | 1 | 0% | 2,373 | 3,213 | +35% | 0 | 0 | — |
case-09 | fail→pass | 14,165 | 3,740 | -74% | 1 | 1 | 0% | 2,030 | 3,280 | +62% | 0 | 0 | — |
case-10 | fail→pass | 28,818 | 4,133 | -86% | 1 | 1 | 0% | 2,429 | 3,246 | +34% | 0 | 0 | — |
case-11 | fail→pass | 22,677 | 4,578 | -80% | 1 | 1 | 0% | 1,973 | 3,377 | +71% | 0 | 0 | — |
case-12 | fail→pass | 9,083 | 4,052 | -55% | 1 | 1 | 0% | 1,240 | 3,376 | +172% | 0 | 0 | — |
case-13 | fail→pass | 104,611 | 4,549 | -96% | 1 | 1 | 0% | 4,889 | 3,155 | -35% | 0 | 0 | — |
case-14 | fail→pass | 33,837 | 3,775 | -89% | 1 | 1 | 0% | 3,082 | 3,174 | +3% | 0 | 0 | — |
case-15 | pass→pass | 13,886 | 4,510 | -68% | 1 | 1 | 0% | 1,843 | 3,347 | +82% | 0 | 0 | — |
case-16 | fail→pass | 15,088 | 6,556 | -57% | 1 | 1 | 0% | 2,212 | 3,578 | +62% | 0 | 0 | — |
case-17 | fail→pass | 8,284 | 4,442 | -46% | 1 | 1 | 0% | 1,347 | 3,162 | +135% | 0 | 0 | — |
case-18 | fail→pass | 23,488 | 5,060 | -78% | 1 | 1 | 0% | 3,850 | 3,291 | -15% | 0 | 0 | — |
case-19 | pass→pass | 15,646 | 3,518 | -78% | 1 | 1 | 0% | 2,147 | 3,263 | +52% | 0 | 0 | — |
case-20 | pass→fail | 22,452 | 27,900 | +24% | 1 | 1 | 0% | 3,415 | 7,861 | +130% | 0 | 0 | — |
case-21 | pass→pass | 23,603 | 13,898 | -41% | 1 | 1 | 0% | 2,911 | 4,740 | +63% | 0 | 0 | — |
case-22 | pass→pass | 13,278 | 45,902 | +246% | 1 | 1 | 0% | 2,000 | 4,133 | +107% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 20 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +73 percentage points is the difference between those two pass rates over the 20 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.