Naming expert
Treat naming as architecture. Make each name reveal the concept, owner, role,
scope, and expected behavior with the least reader inference. Replace model
memory with a repeatable loop: observe, inventory, compare, decide, ratify, and
enforce.
Select one mode
State the selected mode and scope before acting. Do not blend modes silently.
- Use
plan for a naming proposal, roadmap, migration design, or broad rename.
Create a dated supporting artifact in the repository location selected by
audit-format.md. Do not edit product code or
claim a canonical decision.
- Use
decide when the user asks to choose, accept, ratify, or establish the
canonical name. Record the accepted definition in the smallest canonical
language or convention owner and create or update the appropriate decision
record when the choice is material. Perform a code-wide rename only when the
user also asks to implement it.
- Use
review for a naming audit, code review, diff review, or consistency
check. Review is read-only unless the user separately asks to fix findings.
- If no signal is clear, default to
review.
Read audit-format.md before creating or updating a
persistent naming artifact.
Ground the current language
- Read the nearest repository instructions and establish the dirty-tree
boundary.
- Start with
docs/architecture/domain-language.md for canonical concepts and
ownership, then docs/architecture/naming-conventions.md for repository
representations.
- Read the relevant architecture owner, feature front door, public CLI/help,
config schema, persistence contract, or runner/channel contract for the
requested scope.
- Treat architecture and accepted decisions as normative. Treat feature docs,
guides, audits, research, tasks, and Git history according to repository
precedence; do not let historical wording override current contracts.
- Preserve unrelated user changes and check existing tests or machine gates
before inventing another naming rule.
Build a machine-assisted inventory
Run the bundled inventory on the smallest complete owner chain, then use rg
for exact causal traces:
node .agents/skills/naming-expert/scripts/naming-inventory.mjs \
--query '<current-or-candidate-term>' <scope...>
Use --json when another tool consumes the result. Use --limit <n> only to
control display; never treat truncated output as a complete census.
Inventory every relevant naming location, not only exported symbols:
- domain and product wording;
- folder and file names;
- functions, variables, classes, types, interfaces, constants, props, and
registry keys;
- CLI commands and flags, config keys, persisted fields, API resources/actions,
events, errors, tests, docs, and help text;
- nearby same-owner names, imports and call paths, and files with similar symbol
signatures.
For a candidate, collect four evidence sets:
- exact existing uses;
- same-role sibling names and their prefix, suffix, plurality, and case;
- similar behavior, ownership, or lifecycle elsewhere;
- collisions, aliases, near-synonyms, and retired historical names.
The script is a scout, not a judge. Confirm similarity by reading the owner and
runtime path. Similar text does not prove shared semantics.
Classify the concept before naming it
Write a one-sentence concept card:
<name> is a <artifact role> owned by <owner> that <job> during <lifecycle>;
it is not <nearest confusing alternative>.
Answer before comparing words:
- What would the operator, channel user, or code reader call the thing or job?
- Is it domain identity, config, secret, canonical state, projection, runtime
state, command, event, capability, adapter, contract, UI copy, or proof?
- What owns its identity, lifecycle, persistence, and behavior?
- Which nearby concept must remain distinct?
- Does the folder or type already supply context that would make a prefix
redundant?
Generic does not mean vague. Generalize to the broadest stable concept that
keeps the owner and role visible. Do not encode the current prompt, screen,
provider example, implementation technique, or first consumer into a reusable
name.
Choose through the reuse ladder
Use the first level that remains semantically correct:
- Reuse the exact canonical term and existing owner.
- Reuse the established family with the required artifact-role form.
- Extend the canonical term with one role-revealing qualifier.
- Create a new term only when existing terms denote a different concept.
Share an abstraction or exact name only when meaning, owner, lifecycle,
invariants, and reasons to change align. If only syntax looks similar, keep
explicit owner-local code. If prefixed siblings reconstruct one concept, prefer
a concept folder with contextual filenames. If one broad name hides multiple
reasons to change, split by owner role.
Compare candidates using evidence:
- familiar to the intended reader;
- precise in clisbot's domain;
- consistent with same-role siblings;
- traceable across channel, agent, runner, config, control, and persistence
boundaries;
- neutral to prompt, screen, provider, and implementation where the concept is
shared;
- short after surrounding context is considered;
- distinct in search results and speech;
- safe for public CLI, configuration, persistence, and migration.
When repository evidence cannot establish familiar ecosystem wording, consult
primary specifications or official documentation. Record the sources and
trade-off; popularity never overrides an explicit clisbot domain meaning.
Plan mode
Create one supporting artifact using the reference format. Include:
- current cross-layer naming map;
- inventory commands and complete counts;
- concept cards and nearest alternatives;
- candidate matrix and recommendation;
- exact keep, reuse, merge, split, move, or rename opportunities;
- migration and compatibility impact across CLI, config, persistence, APIs,
code, tests, docs, and evidence;
- narrow enforcement plan and ordered open decisions.
Trace at least one representative call or data path for each material concept
family. A plan remains proposed until accepted in a canonical owner.
Decide mode
Use an existing plan when available; otherwise reconstruct focused evidence.
Record the accepted name, definition, owner, scope, rejected alternatives,
compatibility policy, and proof.
Update the smallest canonical owner in the same change:
- domain/public concept or meaning ->
domain-language.md;
- cross-layer case, suffix, prefix, id, or artifact rule ->
naming-conventions.md;
- repository-wide ownership decision ->
docs/architecture/decisions/;
- feature-local decision ->
docs/features/<feature>/decisions/;
- local owner term -> the relevant architecture, feature, or contract document;
- durable or externally visible identity -> migration policy and old-to-new map.
Prefer atomic cutover without aliases. Keep a compatibility name only when a
public or persisted contract requires a bounded migration, and record its
removal gate. Add a checker only for a lasting machine-detectable invariant that
existing validation cannot express.
Review mode
Review the requested code or diff, then search far enough beyond it to detect
sibling drift. Look for:
- two names for one concept or one name for multiple concepts;
- local names duplicating an existing canonical owner;
- prompt-, screen-, provider-, or implementation-biased names in shared code;
- vague containers such as
helper, util, manager, service, common, or
shared without a revealed responsibility;
- suffix, prefix, plurality, case, id, and artifact-role drift;
- redundant folder echoes and prefix-based pseudo-grouping;
- public aliases, compatibility exports, parallel paths, and retired terms;
- names whose declared role disagrees with actual ownership or lifecycle;
- docs, tests, config, CLI help, or UI copy that teach different terminology.
Report findings in severity order with exact paths, reader cost, current owner,
recommended canonical name, migration impact, and proof. State explicitly when
no material issue exists. Do not invent findings to justify the skill.
Finish every mode
Summarize mode, scope, evidence, recommendation or decision, canonical docs
changed, migration impact, verification, and unresolved questions. A naming run
succeeds when a new reader can find and explain the owner with fewer concepts
and when accepted decisions live in repository artifacts rather than only in
conversation.
1---2name: naming-expert3description: Plan, decide, or review names in clisbot with repository evidence for domain terms, APIs, CLI commands, folders, files, functions, variables, classes, types, events, config keys, persisted fields, channel concepts, runner capabilities, UI concepts, and abstractions. Use when the user invokes naming-expert, asks to propose or choose a name, requests a naming audit or implementation review, reports inconsistent or ambiguous terminology, or needs to detect naming drift, duplicate concepts, aliases, prefix/suffix inconsistency, or prompt-biased names. Supports plan, decide, and review modes.4---56# Naming expert78Treat naming as architecture. Make each name reveal the concept, owner, role,9scope, and expected behavior with the least reader inference. Replace model10memory with a repeatable loop: observe, inventory, compare, decide, ratify, and11enforce.1213## Select one mode1415State the selected mode and scope before acting. Do not blend modes silently.1617- Use `plan` for a naming proposal, roadmap, migration design, or broad rename.18 Create a dated supporting artifact in the repository location selected by19 [audit-format.md](references/audit-format.md). Do not edit product code or20 claim a canonical decision.21- Use `decide` when the user asks to choose, accept, ratify, or establish the22 canonical name. Record the accepted definition in the smallest canonical23 language or convention owner and create or update the appropriate decision24 record when the choice is material. Perform a code-wide rename only when the25 user also asks to implement it.26- Use `review` for a naming audit, code review, diff review, or consistency27 check. Review is read-only unless the user separately asks to fix findings.28- If no signal is clear, default to `review`.2930Read [audit-format.md](references/audit-format.md) before creating or updating a31persistent naming artifact.3233## Ground the current language34351. Read the nearest repository instructions and establish the dirty-tree36 boundary.372. Start with `docs/architecture/domain-language.md` for canonical concepts and38 ownership, then `docs/architecture/naming-conventions.md` for repository39 representations.403. Read the relevant architecture owner, feature front door, public CLI/help,41 config schema, persistence contract, or runner/channel contract for the42 requested scope.434. Treat architecture and accepted decisions as normative. Treat feature docs,44 guides, audits, research, tasks, and Git history according to repository45 precedence; do not let historical wording override current contracts.465. Preserve unrelated user changes and check existing tests or machine gates47 before inventing another naming rule.4849## Build a machine-assisted inventory5051Run the bundled inventory on the smallest complete owner chain, then use `rg`52for exact causal traces:5354```sh55node .agents/skills/naming-expert/scripts/naming-inventory.mjs \56 --query '<current-or-candidate-term>' <scope...>57```5859Use `--json` when another tool consumes the result. Use `--limit <n>` only to60control display; never treat truncated output as a complete census.6162Inventory every relevant naming location, not only exported symbols:6364- domain and product wording;65- folder and file names;66- functions, variables, classes, types, interfaces, constants, props, and67 registry keys;68- CLI commands and flags, config keys, persisted fields, API resources/actions,69 events, errors, tests, docs, and help text;70- nearby same-owner names, imports and call paths, and files with similar symbol71 signatures.7273For a candidate, collect four evidence sets:74751. exact existing uses;762. same-role sibling names and their prefix, suffix, plurality, and case;773. similar behavior, ownership, or lifecycle elsewhere;784. collisions, aliases, near-synonyms, and retired historical names.7980The script is a scout, not a judge. Confirm similarity by reading the owner and81runtime path. Similar text does not prove shared semantics.8283## Classify the concept before naming it8485Write a one-sentence concept card:8687```text88<name> is a <artifact role> owned by <owner> that <job> during <lifecycle>;89it is not <nearest confusing alternative>.90```9192Answer before comparing words:93941. What would the operator, channel user, or code reader call the thing or job?952. Is it domain identity, config, secret, canonical state, projection, runtime96 state, command, event, capability, adapter, contract, UI copy, or proof?973. What owns its identity, lifecycle, persistence, and behavior?984. Which nearby concept must remain distinct?995. Does the folder or type already supply context that would make a prefix100 redundant?101102Generic does not mean vague. Generalize to the broadest stable concept that103keeps the owner and role visible. Do not encode the current prompt, screen,104provider example, implementation technique, or first consumer into a reusable105name.106107## Choose through the reuse ladder108109Use the first level that remains semantically correct:1101111. Reuse the exact canonical term and existing owner.1122. Reuse the established family with the required artifact-role form.1133. Extend the canonical term with one role-revealing qualifier.1144. Create a new term only when existing terms denote a different concept.115116Share an abstraction or exact name only when meaning, owner, lifecycle,117invariants, and reasons to change align. If only syntax looks similar, keep118explicit owner-local code. If prefixed siblings reconstruct one concept, prefer119a concept folder with contextual filenames. If one broad name hides multiple120reasons to change, split by owner role.121122Compare candidates using evidence:123124- familiar to the intended reader;125- precise in clisbot's domain;126- consistent with same-role siblings;127- traceable across channel, agent, runner, config, control, and persistence128 boundaries;129- neutral to prompt, screen, provider, and implementation where the concept is130 shared;131- short after surrounding context is considered;132- distinct in search results and speech;133- safe for public CLI, configuration, persistence, and migration.134135When repository evidence cannot establish familiar ecosystem wording, consult136primary specifications or official documentation. Record the sources and137trade-off; popularity never overrides an explicit clisbot domain meaning.138139## Plan mode140141Create one supporting artifact using the reference format. Include:142143- current cross-layer naming map;144- inventory commands and complete counts;145- concept cards and nearest alternatives;146- candidate matrix and recommendation;147- exact keep, reuse, merge, split, move, or rename opportunities;148- migration and compatibility impact across CLI, config, persistence, APIs,149 code, tests, docs, and evidence;150- narrow enforcement plan and ordered open decisions.151152Trace at least one representative call or data path for each material concept153family. A plan remains proposed until accepted in a canonical owner.154155## Decide mode156157Use an existing plan when available; otherwise reconstruct focused evidence.158Record the accepted name, definition, owner, scope, rejected alternatives,159compatibility policy, and proof.160161Update the smallest canonical owner in the same change:162163- domain/public concept or meaning -> `domain-language.md`;164- cross-layer case, suffix, prefix, id, or artifact rule ->165 `naming-conventions.md`;166- repository-wide ownership decision -> `docs/architecture/decisions/`;167- feature-local decision -> `docs/features/<feature>/decisions/`;168- local owner term -> the relevant architecture, feature, or contract document;169- durable or externally visible identity -> migration policy and old-to-new map.170171Prefer atomic cutover without aliases. Keep a compatibility name only when a172public or persisted contract requires a bounded migration, and record its173removal gate. Add a checker only for a lasting machine-detectable invariant that174existing validation cannot express.175176## Review mode177178Review the requested code or diff, then search far enough beyond it to detect179sibling drift. Look for:180181- two names for one concept or one name for multiple concepts;182- local names duplicating an existing canonical owner;183- prompt-, screen-, provider-, or implementation-biased names in shared code;184- vague containers such as `helper`, `util`, `manager`, `service`, `common`, or185 `shared` without a revealed responsibility;186- suffix, prefix, plurality, case, id, and artifact-role drift;187- redundant folder echoes and prefix-based pseudo-grouping;188- public aliases, compatibility exports, parallel paths, and retired terms;189- names whose declared role disagrees with actual ownership or lifecycle;190- docs, tests, config, CLI help, or UI copy that teach different terminology.191192Report findings in severity order with exact paths, reader cost, current owner,193recommended canonical name, migration impact, and proof. State explicitly when194no material issue exists. Do not invent findings to justify the skill.195196## Finish every mode197198Summarize mode, scope, evidence, recommendation or decision, canonical docs199changed, migration impact, verification, and unresolved questions. A naming run200succeeds when a new reader can find and explain the owner with fewer concepts201and when accepted decisions live in repository artifacts rather than only in202conversation.