Skip to content
Agentmart
Submit a tool

naming-is-hard

Interactive naming assistant: help the user land on a name for a project, product, repo, company, package, or feature they love AND can actually use.

Skill by jongio

IndexedMIT★ 18
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/jongio-naming-is-hard

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Interactive naming assistant: help the user land on a name for a project, product, repo, company, package, or feature they love AND can actually use. Use when the user says "name my project", "help me name this", "come up with a name", "brainstorm names", "what should I call it", "rename this project", "is this name taken", "check if a name is available", "check the domain / GitHub org / npm / handle", "is there a trademark", or "naming is hard". The skill profiles what the thing is, generates on-brief candidate names, then runs a swipe loop (Like / Pass / Super-like) where a preference model learns the user's taste and shows more of what they like, then scores the finalists against real availability (domains, GitHub, package registries, social handles) plus trademark, existing-business, and confusable-name screens. Every finalist gets one of three verdicts: Deal Breaker, It's Complicated, or Perfect Match. Do NOT use for renaming code identifiers or SEO keyword research.

Use cases: marketing, sales, research

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found
Runs as
Node.js package

Network hosts it talks to 16

  • api.github.com · found in code
  • api.nuget.org · found in code
  • branddb.wipo.int · found in code
  • bsky.app · found in code
  • codeload.github.com · found in install command
  • duckduckgo.com · found in code
  • github.com · found in code
  • instagram.com · found in code
  • opencorporates.com · found in code
  • rdap.org · found in code
  • reddit.com · found in code
  • rubygems.org · found in code
  • threads.net · found in code
  • tiktok.com · found in code
  • tmdn.org · found in code
  • tmsearch.uspto.gov · found in code

Files it touches

  • ~/.claude/skills/naming-is-hard

What's inside

Skill name
naming-is-hard
Description
Interactive naming assistant: help the user land on a name for a project, product, repo, company, package, or feature they love AND can actually use. Use when the user says "name my project", "help me name this", "come up with a name", "brainstorm names", "what should I call it", "rename this project", "is this name taken", "check if a name is available", "check the domain / GitHub org / npm / handle", "is there a trademark", or "naming is hard". The skill profiles what the thing is, generates on-brief candidate names, then runs a swipe loop (Like / Pass / Super-like) where a preference model learns the user's taste and shows more of what they like, then scores the finalists against real availability (domains, GitHub, package registries, social handles) plus trademark, existing-business, and confusable-name screens. Every finalist gets one of three verdicts: Deal Breaker, It's Complicated, or Perfect Match. Do NOT use for renaming code identifiers or SEO keyword research.
License
MIT
Metadata
version: 1.0.0
Instructions
375 lines in SKILL.md · view on GitHub

Before installing

  • Ships executable scripts

Files (34)

  • .gitignore
  • .npmrc
  • .vally.yaml
  • LICENSE
  • README.md
  • SKILL.md
  • README.md · evals/
  • eval.yaml · evals/naming-is-hard/
  • package-lock.json
  • package.json
  • availability-channels.md · references/
  • naming-strategies.md · references/
  • availability.mjs · scripts/
  • famous-marks.json · scripts/
  • features.mjs · scripts/
  • marks.mjs · scripts/
  • model.mjs · scripts/
  • naming.mjs · scripts/
  • net.mjs · scripts/
  • similarity.mjs · scripts/
  • smoke.mjs · scripts/
  • store.mjs · scripts/
  • verdict.mjs · scripts/
  • availability.test.mjs · test/
  • cli.test.mjs · test/
  • features.test.mjs · test/
  • helpers.mjs · test/
  • marks.test.mjs · test/
  • model.test.mjs · test/
  • net.test.mjs · test/
  • similarity.test.mjs · test/
  • store.test.mjs · test/
  • verdict.test.mjs · test/
  • thumbnail.png

SKILL.md (first lines)

# naming-is-hard

## When to use it

Reach for this whenever a name needs to be chosen and checked: a new project,
product, startup, open-source library, npm/PyPI package, GitHub org or repo, app,
or feature. It is equally good at "brainstorm names for X" and "is "Foo" already
taken everywhere?".

Do not use it to rename variables or functions in code (that is ordinary editing),
or for SEO keyword research.

## On invocation

When the user invokes this skill (e.g. `/naming-is-hard`), **start the naming
flow immediately**. Do not ask "What can I help you with?" or wait passively.

- If the user provided context alongside the invocation (e.g. "name my CLI tool
  that does X"), proceed directly to Act 1 (the Profile) using that context.
- If the user invoked the skill bare with no context, look at the current working
  directory for a README, package.json, or other project files. If you find a
  project, ask one focused question: "I see you're working on [project]. Would you
  like to name this, or something else?" Then proceed to Act 1.
- If there's no project context at all, ask a single question to get started:
  "What are we naming? Tell me what it is and I'll kick off the process."

## Division of labor

You (the agent) do the creative work. The engine does the deterministic,
security-sensitive, and stateful work. Stay on your side of this line.

| You (this SKILL.md) | The engine (`scripts/naming.mjs`) |
|---|---|
| Write the Naming Brief from the context | Extract feature vectors from names |
| Generate creative candidate names + a one-line pitch each | Learn taste from swipes (score / rank / pick next) |
| Present swipe cards via `ask_user` | Explain the learned "type" in plain language |
| Decide when to refill the deck and generate more | Check availability (SSRF-safe, mocked in tests) |
| Run a live `web_search` per finalist for trademarks/businesses | Block obvious offline collisions before cards; compute finalist verdict tiers |
| Narrate the matches and next actions | Persist all state across swipe turns |

**Never** hand-roll availability checks with raw `curl`, and never invent a swipe
score yourself. Call the engine. It is tested and safe.

## The engine CLI

The engine lives in `scripts/naming.mjs`. It needs no install and no network for
anything except `check`. Every command takes `--dir <state-dir>`, a working folder
where the run's state is persisted (use the session workspace, for example
`~/.copilot/session-state/<id>/files/naming-<slug>`). Node 18+.

| Command | What it does |
|---|---|
| `init --dir D [--brief-json '{...}']` | Create (or open) state; optionally set the brief |
| `brief --dir D --json '{...}'` | Set/replace the Naming Brief |
| `add --dir D --json '[{"name":..,"strategy":..,"tags":[..]}]'` | Add candidates (features extracted, ids assigned). Reports offline collisions in `blocked`; those names never enter the deck. Also reads the JSON array from stdin. |
| `next --dir D [--count N]` | Return the next card(s) to show, best first |
| `swipe --dir D --id ID --label like\|pass\|superlike\|skip` | Record a swipe and update the model |
| `rank --dir D [--limit N]` | Candidates ranked by learned fit |
| `profile --dir D` | The learned "type" in plain language |
| `suggest --dir D --name NAME [--count N]` | Morphological variants of a liked name |
| `check --dir D [--names a,b] [--github-token T]` | Availability scorecards (defaults to liked names) |
| `screen --dir D --names a,b,c [--preset P]` | Availability-FIRST: bucket names into clear / contested / blocked by key channels |
| `variants --name NAME` | Decorated handle/org variants (get<X>/<X>hq/<X>dev), screened for GitHub/npm/.dev |
| `similar --name NAME --against a,b,c` | Confusability report against a corpus you supply (from your live search) |
| `duel --dir D --winner ID --loser ID` | Decision mode: record a head-to-head result so the winner's traits outrank the loser's |
| `report --dir D [--names a,b] [--preset P] [--as-json]` | Ranked matches with verdict tiers (human text by default) |
| `state --dir D` | Dump the full state as JSON |
| `reset --dir D` | Clear the state |

All commands print JSON (so you can parse the result) except `report`, which prints
a human-readable card by default and JSON with `--as-json`.

## Act 1: the Profile (Naming Brief)

Never brainstorm from nothing. First understand the thing being named.

**Sources**, in order of richness:
- A **repo or directory path**: read the `README`, `package.json`/manifests, and a
  couple of entry files to infer what it does.
- A **URL** (a PRD, a landing page, a GitHub repo): fetch it with `web_fetch` and
  synthesise.
- **Free text**: use it directly.

Then fill the brief. Keep it tight:

```json
{
  "name": "working title or null",
  "what": "one sentence: what it is and does",
  "willBe": "where it is heading (the ambition)",
  "audience": "who it is for",
  "tone": ["playful", "trustworthy", "technical", ...],
  "keywords": ["concepts", "metaphors", "differentiators"],
  "constraints": [".com-able", "one word", "pronounceable", "<= 8 letters", ...]
}
```

If the context is thin, ask **at most two or three** quick `ask_user` questions to
fill the biggest gaps (usually audience and tone). Do not interrogate. Store it
with `init --brief-json` or `brief --json`.

**Ask what channel matters most** (one quick question). Use `ask_user` with these
options and let their answer pick the verdict `--preset` passed to `report`/`screen`:

| User says | Preset | Key channels (in priority order) |
|---|---|---|
| "npm / CLI / package name" | `cli-first` (default) | npm > `.dev` > GitHub org |
| "`.dev` domain (developer landing page)" | `domain-first` | `.dev` > npm > GitHub org |
| "`.com` domain (website / product)" | `website-first` | `.com` > `.dev` > npm |
| "Brand (domain + social)" | `brand-first` | `.com` > X handle > `.dev` |
| "Social handles" | `social-first` | X > `.dev` > npm |
| "No strong preference" | `balanced` | `.dev` > GitHub org > npm |

**Do not assume a default.** The user's answer fundamentally changes which names are
"Perfect Match" vs "It's Complicated." If they say `.com`, then `.com` availability is
the gating signal — do not dismiss it as "always parked." If they say npm/CLI, then
`.com` is background noise. Respect their stated priority throughout the entire flow.

Also ask whether GitHub org availability matters to them (yes/no). If they say no, do

From jongio/skills, MIT.

More from jongio/skills

Signals

Stars
18
Forks
5
Open issues
2
Last commit (this folder)
Oct 22, 2026 (5 days ago)

From GitHub (fetched Oct 24, 2026).

Details

Version
1.0.0
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from jongio

Cite this page

naming-is-hard skill. Agent Mart. https://agentmart.dev/skills/jongio-naming-is-hard (last updated 2026-10-24)