namekit

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

namekit

namekit

Name a project against a convention rather than a blank page, and hand back only names that are actually free. Two explicit modes:
  • generate
    .
    Turn a project description into a ranked shortlist of names built to the user's naming convention, then probe the two or three the user picks against the domain, npm, and GitHub namespaces and crown one.
  • check
    .
    Take names the user already has and report whether each one is free. No generation.
The reason this is a skill and not a one-line ask: left alone, a model returns ten spellings of one idea, invents a convention nobody uses, and never checks whether any candidate is taken. namekit fixes all three, in that order.
按照命名规则而非凭空为项目命名,只返回真正可用的名称。本工具有两种明确的模式
  • generate
    .
    根据用户的命名规则,将项目描述转化为一份排序后的候选名称短名单,然后对用户挑选的2-3个名称,在域名、npm和GitHub命名空间中进行可用性检测,最终确定一个可用名称。
  • check
    .
    接收用户提供的名称,报告每个名称是否可用,不生成新名称。
本工具之所以是一个实用技能而非简单的一次性请求工具,原因在于:如果没有约束,AI模型会返回同一想法的十种不同拼写形式,创造出无人使用的命名规则,且从不检查候选名称是否已被占用。namekit依次解决了这三个问题。

When this fires

触发场景

  • generate. "Name this project", "what should I call this", "give me name ideas", "come up with a name for X", "I need a name for my new SaaS".
  • check. "Is
    growaloy
    taken", "check if this name is available", "did anyone grab this npm package".
An ask that supplies a description gets
generate
. An ask that supplies names gets
check
. When the user supplies both, run
check
on their names first, then offer
generate
, because a name they already like outranks anything you invent.
  • generate模式:当用户说“为这个项目命名”“我该叫它什么”“给我一些名称建议”“为X想个名字”“我需要为新SaaS产品起个名字”时触发。
  • check模式:当用户说“
    growaloy
    被占用了吗”“检查这个名称是否可用”“有没有人抢注这个npm包”时触发。
如果用户提供了项目描述,则触发
generate
模式;如果用户提供了名称,则触发
check
模式。如果用户同时提供了描述和名称,先对用户给出的名称执行
check
模式,再提供
generate
模式的结果,因为用户自己喜欢的名称优先级高于任何生成的名称。

The probes (both modes)

检测流程(两种模式通用)

Three namespaces, three commands. Each one is a public HTTP contract, so it is safe to pin.
sh
undefined
涉及三个命名空间,对应三个检测命令。每个命令都是公开的HTTP协议,因此可以安全固定使用。
sh
undefined

domain registration: 404 = not registered, 200 = registered

域名注册检测:404表示未注册,200表示已注册

curl -s -o /dev/null -w '%{http_code}' -L --max-time 10 https://rdap.org/domain/<name>.com
curl -s -o /dev/null -w '%{http_code}' -L --max-time 10 https://rdap.org/domain/<name>.com

npm package: 404 = free

npm包检测:404表示可用

curl -s -o /dev/null -w '%{http_code}' --max-time 10 https://registry.npmjs.org/<name>
curl -s -o /dev/null -w '%{http_code}' --max-time 10 https://registry.npmjs.org/<name>

GitHub org or user handle: exit non-zero / 404 = free

GitHub组织或用户账号检测:返回非零退出码/404表示可用

gh api /users/<name>

Check `.com` plus whichever second TLD the project's surface implies (`.dev` for a developer tool, `.ai` for a model product, the country TLD for a local audience). Skip a namespace the project will never occupy: a CLI-only tool does not need an npm name, and an internal tool needs no domain.

**Probe two or three names at a time.** RDAP answers a small batch and returns 429 to a burst, and a 429 is not a verdict. A bulk sweep of dozens of names throws away its own domain results.

**Report each result as that probe's own claim.** A 404 from RDAP means the domain is not registered. It does not mean the domain is for sale, is affordable, or is free of a trademark. Say "not registered", and let the user find out the price.

**Degrade rather than block.** With no shell, no network, or no `gh`, say which probes were skipped and hand back the ranked shortlist on the four rubric criteria alone. A shortlist with a stated gap beats no shortlist.

---
gh api /users/<name>

除了`.com`域名,还需根据项目类型检测对应的二级域名(比如开发者工具检测`.dev`,AI模型产品检测`.ai`,面向本地用户的项目检测对应国家域名)。跳过项目永远不会涉及的命名空间:仅CLI工具无需检测npm名称,内部工具无需检测域名。

**每次检测2-3个名称**。RDAP接口对小批量请求正常响应,批量请求过多会返回429状态码,而429不代表最终结果。一次性检测几十个名称会导致域名检测结果失效。

**如实报告每个检测结果**。RDAP返回404仅表示域名未被注册,不代表该域名可购买、价格合适或无商标纠纷。只需说明“未注册”,由用户自行查询价格等信息。

**降级处理而非直接阻断**。如果没有Shell环境、网络或`gh`命令,说明跳过了哪些检测,仅根据四项评分标准返回排序后的短名单。有明确说明缺失信息的短名单总比没有好。

---

Mode:
generate

模式:
generate

1. Restate, then interview

1. 重述需求,然后询问补充信息

Reflect the project description back in one sentence before asking anything. A misread costs one correcting line here and a whole shortlist later.
Then interview. Six items make the pool; ask only the ones the description leaves open, cap the round at five questions, and ask them in a single batch:
  1. What it does. The domain and the outcome.
  2. Who it is for, and what language they read. A Bangla-reading audience opens roots an English-only audience closes.
  3. Tone. Plain, technical, or playful.
  4. Words to include or avoid. A founder usually has one of each.
  5. Where the name gets typed. Domain, package name, CLI command, org handle. This sets the length tolerance and decides which probes run.
  6. How permanent it is. A throwaway internal tool and a product you will defend for a decade deserve different effort.
Done when every unanswered pool item has an answer or an explicit "does not matter", and the restatement stands uncorrected.
先将项目描述重述为一句话,再提出问题。如果理解错误,此时只需一句修正即可避免后续生成整个无效的短名单。
然后进行询问。以下六个维度构成信息池,仅询问描述中未明确的内容,单次询问最多五个问题,且一次性提出:
  1. 功能定位:项目的领域和实现效果。
  2. 目标用户及使用语言:如果目标用户使用孟加拉语,那么可选用的词根范围与仅面向英语用户的项目不同。
  3. 风格调性:平实、技术感或趣味性。
  4. 需包含或避免的词汇:创始人通常会有明确的偏好。
  5. 名称使用场景:域名、包名、CLI命令、组织账号。这决定了名称的长度限制以及需要执行哪些检测。
  6. 使用周期:临时内部工具和需要长期维护的产品,所需的命名投入程度不同。
完成标志:信息池中所有未明确的维度都得到了回答或明确表示“无关紧要”,且重述的需求未被用户修正。

2. Resolve the convention

2. 确定命名规则

Work down this ladder and stop at the first rung that answers:
  1. Stated. The user names the convention outright ("suffix everything with
    aloy
    ").
  2. Derived from examples. The user cites their own names ("like
    codealoy
    ,
    growaloy
    ,
    saasaloy
    "), and the shared tail is the convention.
  3. Read from their repos, on request. Only when the user points at them:
    gh repo list <owner> --limit 100 --json name
    . Sample the projects, not the forks, because a fork's name is somebody else's convention.
  4. Ask. Offer suffix, prefix, portmanteau, or none.
State the resolved convention in the output, so a wrong read costs one correcting line rather than a discarded shortlist.
Done when the convention is written down as an affix plus its position, or the user has chosen to work without one.
按照以下优先级依次确认,找到第一个可行的规则后停止:
  1. 用户明确指定:用户直接说出命名规则(比如“所有名称都以
    aloy
    为后缀”)。
  2. 从示例推导:用户给出自己的项目名称示例(比如“像
    codealoy
    growaloy
    saasaloy
    这样”),共同的后缀即为命名规则。
  3. 从用户仓库提取(需用户授权):仅当用户指向自己的仓库时,执行
    gh repo list <owner> --limit 100 --json name
    。仅统计用户自己的项目,不统计分支,因为分支名称遵循的是他人的命名规则。
  4. 主动询问:提供后缀、前缀、混成词或无规则四种选项供用户选择。
在输出中明确说明确定的命名规则,这样如果理解错误,只需一句修正即可避免生成被用户丢弃的短名单。
完成标志:命名规则以“词缀+位置”的形式确定,或用户选择不使用任何规则。

3. Mine roots and build candidates

3. 挖掘词根,生成候选名称

Draw roots from four separate sources, so the set is genuinely plural instead of one idea in ten hats:
  • The domain noun. What the thing is about:
    code
    ,
    saas
    ,
    ledger
    .
  • The outcome verb. What it does for someone:
    grow
    ,
    ship
    ,
    learn
    .
  • The user or their material. Who holds it:
    dev
    ,
    shop
    ,
    desk
    .
  • The metaphor, or a non-English root when the interview named a non-English audience.
A non-English root passes one gate: a single Latin transliteration dominates in common use. When a root has two spellings people genuinely both write, drop it rather than scoring it down, because a name the audience types three ways fails on the one job a name has.
Join each root to the affix with the seam rule, score it against the rubric, then cut. Generate 25 or more raw candidates, and rank the best 12 into the shortlist. The width is deliberate: the user probes two or three names per batch, so the list has to feed several batches before it needs regenerating.
Done when the ranked 12 draw roots from at least three of the four sources, and each carries a one-line rationale plus its rubric verdict.
四个独立来源挖掘词根,确保候选名称多样化,而非同一想法的不同变体:
  • 领域名词:项目核心领域相关词汇,如
    code
    saas
    ledger
  • 效果动词:项目能为用户带来的价值,如
    grow
    ship
    learn
  • 用户相关词汇:目标用户或其所属场景,如
    dev
    shop
    desk
  • 隐喻或非英语词根:如果询问阶段确定目标用户使用非英语,则选用对应语言的词根。
非英语词根需满足一个条件:在通用场景中只有一种拉丁转写形式。如果某个词根有两种被广泛使用的拼写形式,则放弃该词根,因为用户可能会有多种拼写方式,这会导致名称无法完成其核心作用。
根据Seam规则将每个词根与词缀拼接,再根据评分标准打分,然后筛选。生成25个以上的原始候选名称,将排名前12的名称纳入短名单。这个长度是经过设计的:用户每次检测2-3个名称,因此短名单需要支持多轮检测,无需频繁重新生成。
完成标志:排名前12的候选名称至少来自四个词根来源中的三个,每个名称都附带一句说明理由和评分结果。

4. Show the shortlist, then probe what the user picks

4. 展示短名单,检测用户选中的名称

Print the ranked 12 before you probe anything. The names come first, in a table of name, root and source, seam case, and rubric verdict, with no availability column yet. The user reads the whole list, reacts to the ideas, and keeps the creative half of the job in front of them.
Then ask the user to pick two or three names to probe. Use
AskUserQuestion
when it is available, and a plain one-line ask when it is not. Probe only the names the user picks. An unpicked name stays unprobed, however good its rubric score.
Run the probes over the picks. Any hit removes that name. Availability is a verdict here, not a score, because a name the user cannot have is not a candidate.
One exception: a namespace the user already owns passes, and reads yours. Resolve their owner from the git remote when a repo exists (
gh repo view --json owner
), from the repos that sourced the convention otherwise, and by asking once when neither answers. Without this exception a house convention rejects its own portfolio, which is how
codealoy
fails a
codealoy
filter.
When a batch returns nothing free, report each pick with the probe that killed it, reprint the candidates still unprobed, and ask for the next batch of two or three. Repeat the loop until one name is free or the user stops it. Never auto-select the next batch, because the pick is the user's.
Regenerate only when the list runs out. Once every one of the 12 is probed and taken, run Mine roots and build candidates again with the taken roots excluded, and show the new list the same way. Two generation passes is the cap.
Done when at least one probed name is free, or the user stops the loop, and every probed name carries a result for every probe that ran.
先展示排名前12的名称,再进行任何检测。名称优先展示,表格包含名称、词根及来源、拼接方式、评分结果,暂不显示可用性列。让用户完整浏览列表,对创意内容做出反应,始终将创意环节放在首位。
然后请用户选择2-3个名称进行检测。如果支持
AskUserQuestion
功能则使用该功能,否则直接用一句话询问。仅检测用户选中的名称。未被选中的名称无论评分多高,都不进行检测。
对选中的名称执行检测流程只要有一个命名空间被占用,该名称就被排除。可用性是决定性结果,而非评分项,因为用户无法使用的名称不能作为候选。
例外情况:用户已拥有的命名空间标记为“已拥有”。如果项目已有仓库,从git远程仓库获取所有者信息(
gh repo view --json owner
);否则从用于推导命名规则的仓库中获取;如果两者都无法获取,则询问用户一次。没有这个例外的话,自定义命名规则会排除用户自己已有的项目,比如
codealoy
会被
codealoy
规则过滤掉。
如果一轮检测后没有可用名称,报告每个被选中名称的失败原因,重新打印未被检测的候选名称,再请用户选择下一轮的2-3个名称。重复此循环,直到找到可用名称或用户停止。永远不要自动选择下一轮的名称,选择权在用户手中。
仅当短名单耗尽时重新生成。当12个名称都被检测且全部被占用时,重新执行挖掘词根,生成候选名称步骤,排除已被占用的词根,以相同方式展示新的短名单。最多重新生成两次
完成标志:至少有一个被检测的名称可用,或用户停止循环,且每个被检测的名称都附带所有执行检测的结果。

5. Crown, then search once

5. 确定最终名称,再进行一次搜索

Crown the free name that ranks highest on the rubric. Then run one web search, on that name alone, for the existing product or live trademark the registries miss. Fetch the top hit when the search result is ambiguous about what the thing is.
A hit re-crowns the next free name and states the conflict in a line. When the batch left no runner-up, say so and send the user back to the pick loop. This is the only search in the run: the registries are exact-match and cheap, the web is fuzzy and expensive, so it earns one call at the point the answer changes a decision.
Done when the crowned name has been searched and either survives or has been replaced.
选择评分最高的可用名称作为最终名称。然后对该名称进行一次网页搜索,查找注册机构未收录的现有产品或有效商标。如果搜索结果模糊不清,则获取最相关的结果。
如果发现冲突,则选择下一个可用名称作为最终名称,并说明冲突情况。如果没有备选名称,则告知用户并回到选择环节。这是整个流程中唯一的网页搜索:注册机构的检测是精确匹配且成本低,而网页搜索是模糊匹配且成本高,因此仅在可能改变决策时执行一次。
完成标志:最终名称经过搜索验证,要么确认无冲突,要么已更换为其他可用名称。

6. Hand off

6. 交付结果

Write every hand-off in this skill in the procedural register: one instruction per sentence, active voice, present tense, no metaphor.
Print the probed names as a ranked table before the three beats:
NameRoot (source)SeamRubric
.com
npmGitHub
growaloy
grow (outcome verb)hard join4/4freefreefree
What changed. Report the resolved convention, the crowned name and the one-sentence reason, how many batches the user probed, and whether a second generation pass ran. Name each probed name the registries took, with the probe that killed it. List the candidates that stayed unprobed, so the user can come back to them.
Where it landed. namekit writes no file by default. Write
docs/names/names-<slug>-YYYY-MM-DD.md
only when the user asks, where
<slug>
is the project's short kebab-case name and the date is the file's creation date. Keep that date stable on a later edit. Follow the host repository's own artifact convention when it documents one. With no filesystem, print the document as a codeblock and give the filename.
Next. Crown one move. The name is chosen and nothing owns it yet, so the move is to claim the namespaces the project actually needs, in the order the interview's typed-surface answer implies. Name repokit to set a new repo's About panel and topics when it is installed, otherwise
gh repo create
. When the name came out of an idea session, name ideakit as the runner-up so the decision lands back in that idea's log. namekit never registers a domain, publishes a package, or creates an org.
本工具的所有交付内容均采用流程化表述:每句一个指令,主动语态,现在时态,无隐喻。
先打印带检测结果的排名表格,再包含以下三个部分:
名称词根(来源)拼接方式评分
.com
npmGitHub
growaloy
grow(效果动词)直接拼接4/4可用可用可用
变更说明:报告确定的命名规则、最终名称及理由、用户检测的轮次、是否进行了二次生成。列出所有被注册机构占用的名称及其失败原因。列出未被检测的候选名称,方便用户后续使用。
结果存储:namekit默认不写入文件。仅当用户要求时,写入
docs/names/names-<slug>-YYYY-MM-DD.md
,其中
<slug>
是项目的短横线式简称,日期为文件创建日期。后续编辑时保持日期不变。如果仓库有自己的文档规范,则遵循该规范。如果没有文件系统,则将文档内容打印为代码块并给出文件名。
下一步操作:给出一个明确的行动建议。名称已确定且未被占用,因此行动是按照询问阶段确定的使用场景顺序,注册所需的命名空间。如果安装了repokit,则使用它设置新仓库的About面板和主题;否则使用
gh repo create
。如果名称来自创意会议,则使用ideakit将结果记录回会议日志。namekit永远不会注册域名、发布包或创建组织。

The seam rule

Seam规则

The join is where bad names come from, and three cases cover every convention, because the rule is about the letters meeting at the seam rather than about any one affix.
  • Hard join. The root's tail and the affix's head do not collide, so concatenate.
    code
    +
    aloy
    codealoy
    . Prefix form:
    open
    +
    forge
    openforge
    .
  • Elision. They overlap, so drop the duplicate.
    data
    +
    aloy
    dataloy
    , not
    dataaloy
    . Prefix form:
    auto
    +
    optimize
    autoptimize
    .
  • Reject. The seam makes a vowel pileup or a syllable nobody says aloud, and no elision saves it.
    idea
    +
    aloy
    elides to
    idealoy
    , which reads as "ideal-oy". Drop the root and pick another.
名称拼接是产生糟糕名称的重灾区,以下三种情况覆盖所有命名规则,因为规则关注的是拼接处的字母组合,而非特定词缀。
  • 直接拼接:词根末尾与词缀开头无重复字母,直接连接。
    code
    +
    aloy
    codealoy
    。前缀形式:
    open
    +
    forge
    openforge
  • 省略重复:词根末尾与词缀开头有重复字母,删除重复部分。
    data
    +
    aloy
    dataloy
    ,而非
    dataaloy
    。前缀形式:
    auto
    +
    optimize
    autoptimize
  • 拒绝使用:拼接处出现元音堆积或无法发音的音节,且无法通过省略重复部分修复。比如
    idea
    +
    aloy
    省略后变为
    idealoy
    ,读作“ideal-oy”,不符合要求。此时应放弃该词根,选择其他词根。

The rubric

评分标准

Four criteria, scored pass, weak, or fail. Rank by the count of passes, and break a tie on semantic fit.
  • Semantic fit. The root says what the thing does.
  • Sound. Three to four syllables, and it reads correctly on first sight.
  • Seam quality. A clean hard join or a clean elision, per the seam rule.
  • Spell-on-hearing. Someone who hears the name spells it one way.
Availability is deliberately absent. It is a verdict in Show the shortlist, then probe what the user picks, not a fifth criterion, because the rubric ranks names the user has not probed yet.

包含四个评分维度,每个维度分为通过、较弱、失败三个等级。根据通过的维度数量排名,若数量相同则根据语义匹配度排序。
  • 语义匹配:词根能体现项目功能。
  • 发音效果:3-4个音节,第一眼就能正确读出。
  • 拼接质量:符合Seam规则的直接拼接或省略重复。
  • 听音拼写:听到名称后能准确拼写。
可用性未纳入评分标准。它是展示短名单,检测用户选中的名称环节的决定性结果,而非第五个评分维度,因为评分标准是对用户未检测的名称进行排名。

Mode:
check

模式:
check

Run the probes over the names the user supplies. Generate nothing, rank nothing, and filter nothing, because there is no shortlist to cut down to.
Apply the same owner exception: a namespace resolving to the user's own owner reads yours, not taken. That is the common case here, since people check names they already half-own.
对用户提供的名称执行检测流程。不生成新名称、不排名、不筛选,因为无需缩减短名单。
同样适用所有者例外规则:属于用户自身的命名空间标记为“已拥有”,而非“已占用”。这是常见情况,因为用户通常会检查自己已部分拥有的名称。

Hand off

交付结果

What changed. Report one line per name with its result in each namespace, and mark the namespaces the user already owns. Name the probes that were skipped.
Where it landed. Nothing was written and nothing was registered. Say so plainly.
Next. Crown one move from the results. When a name is free, the move is to claim it, so name repokit for a new repo's metadata when it is installed, otherwise
gh repo create
. When every name is taken, the move is
generate
, which mines new roots around the same idea.

变更说明:每个名称对应一行结果,包含各命名空间的状态,并标记用户已拥有的命名空间。说明跳过的检测项。
结果存储:未写入任何文件,未注册任何命名空间。直接说明这一点。
下一步操作:根据结果给出一个明确的行动建议。如果有可用名称,行动是注册该名称;如果安装了repokit,则使用它设置新仓库的元数据,否则使用
gh repo create
。如果所有名称都被占用,则建议使用
generate
模式,围绕同一想法挖掘新的词根生成名称。

Notes

注意事项

  • namekit names the thing and stops. No logo, no tagline, no positioning, no brand identity, and no renaming of an existing codebase's identifiers.
  • The
    kit
    naming convention belongs to
    skillkit
    .
    namekit works to whatever convention the user resolves and never teaches that one, so the rule stays in one place.
  • No config file and no environment variable. The convention lives in the prompt or in names the user already has. State that is not visible in the conversation is state that goes stale.
  • Social handles stay out. Headless checks against social platforms are rate-limited and return false negatives, and a wrong "taken" is worse than no answer.
  • Prefer a probe's status code over scraping a page, because the status code is a stable contract and the page is not.
  • namekit仅负责命名,之后停止操作:不设计Logo、不撰写标语、不进行定位、不打造品牌形象、不重命名现有代码库的标识符。
  • kit
    命名规则属于
    skillkit
    :namekit遵循用户确定的任何命名规则,从不推广自身的
    kit
    规则,确保规则统一管理。
  • 无配置文件和环境变量:命名规则来自用户的提示或已有的名称。对话中不可见的状态会失效。
  • 不检测社交平台账号:对社交平台的无界面检测会触发限流,且可能返回假阴性结果,错误的“已占用”比无结果更糟糕。
  • 优先使用检测接口的状态码而非页面抓取,因为状态码是稳定的协议,而页面内容可能变化。