Startup Design
ferdinandobons/startup-skill
Design, validate, and plan a startup from scratch. An agent skill from ferdinandobons/startup-skill.
Generate a product or company name through structured brief, multi-model candidate generation, and two-layer evaluation.
$ npx skills add hanamizuki/solopreneur --skill naming -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install hanamizuki/solopreneur naming --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/hanamizuki/solopreneur.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/marketer/naming .claude/skills/naming && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "naming" agent skill from https://github.com/hanamizuki/solopreneur/tree/main/skills/marketer/naming into .claude/skills/naming/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "naming", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/hanamizuki/solopreneur/tree/main/skills/marketer/namingType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add hanamizuki/solopreneur --skill naming -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install hanamizuki/solopreneur naming --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hanamizuki/solopreneur.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/marketer/naming .agents/skills/naming && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "naming" agent skill from https://github.com/hanamizuki/solopreneur/tree/main/skills/marketer/naming into .agents/skills/naming/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "naming", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add hanamizuki/solopreneur --skill naming -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install hanamizuki/solopreneur naming --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hanamizuki/solopreneur.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/marketer/naming .cursor/skills/naming && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "naming" agent skill from https://github.com/hanamizuki/solopreneur/tree/main/skills/marketer/naming into .cursor/skills/naming/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "naming", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/hanamizuki/solopreneur.git --path skills/marketer/naming--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add hanamizuki/solopreneur --skill naming -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install hanamizuki/solopreneur naming --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hanamizuki/solopreneur.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/marketer/naming .gemini/skills/naming && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "naming" agent skill from https://github.com/hanamizuki/solopreneur/tree/main/skills/marketer/naming into .gemini/skills/naming/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "naming", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install hanamizuki/solopreneur namingInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add hanamizuki/solopreneur --skill naming -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/hanamizuki/solopreneur.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/marketer/naming .github/skills/naming && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "naming" agent skill from https://github.com/hanamizuki/solopreneur/tree/main/skills/marketer/naming into .github/skills/naming/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "naming", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add hanamizuki/solopreneur --skill naming -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install hanamizuki/solopreneur naming --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hanamizuki/solopreneur.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/marketer/naming .opencode/skills/naming && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "naming" agent skill from https://github.com/hanamizuki/solopreneur/tree/main/skills/marketer/naming into .opencode/skills/naming/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "naming", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
namingGenerate a product or company name through structured brief, multi-model candidate generation, and two-layer evaluation.
Naming is an agent skill from hanamizuki/solopreneur. Generate a product or company name through structured brief, multi-model candidate generation, and two-layer evaluation. Supports greenfield (new name) and rebrand (rename existing) modes. Grounded in Lexicon / Interbrand / Siegel+Gale methodology plus processing fluency, sound symbolism, and iconicity research. Auto-reuses docs/gtm/ if present. Use when: "naming", "取名", "命名", "品牌名", "產品名字", "公司名字", "rebrand", "改名", "幫產品命名", "幫公司取名".
Its SKILL.md is about 9.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including reference files (for example `references/methodology.md`, `references/out-of-scope.md` and `references/rebrand-announcement.md`).
It sits in Marketing & SEO, covering Brand strategy and identity and Go-to-market strategy. The repository describes itself as: Skills and agents for solopreneurs — ship, review, debug, and think through problems with AI. The licence is MIT.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit f43f001. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitcodexFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Naming loads about 9.3k tokens when it runs, and up to ~14k if it reads all its reference files. Until then it costs about 112 tokens; SKILL.md has 4,285 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from hanamizuki/solopreneur at commit f43f001, republished under its MIT licence (© hanamizuki). 4,285 words, ~9,267 tokens.
.claude/skills/naming/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.A structured workflow for naming one product, one company, or one brand where product and company share the same name. Uses multi-model ensemble (Claude + optional Codex / Gemini) to generate diverse candidates, filters through a two-layer rubric (Gate + Score), tests with real humans, and produces a finalist.
references/out-of-scope.md.5 Markdown files in {repo}/docs/naming/ plus a state file and test kit:
docs/naming/
├── naming-state.yaml # Session state (internal)
├── 01-brief.md # Benefit ladder, personality, constraints
├── 02-namescape.md # Competitive naming map + no-go zones
├── 03-candidates.md # All candidates grouped by taxonomy + source model
├── 04-evaluation.md # Gate survivors + score rubric
├── test-kit.md # Phase 5 tension test materials (printable)
├── 05-decision.md # Final choice, rationale, limitations, announcement
└── .raw/ # Raw model outputs + briefs (per-session, timestamped)Document schemas — see references/templates.md for the full markdown
template of each output file. Every phase output must match the template
so outputs are consistent across sessions and can be audited or diffed.
Full definitions and examples: references/taxonomy.md. Phases 2 and 3
both depend on this list:
Phase 2 uses it to classify competitors. Phase 3 uses it as the generation
palette. Always load references/taxonomy.md before either phase runs.
The state file can only be created after the user tells us whether this is a greenfield or a rebrand. Order of operations on first run:
mode from the Starting Context answer: A or B → greenfield,
C → rebrand.docs/naming/naming-state.yaml with:mode: derived from step 3entity_scope: from step 2 answeroverall_status: matching the mode (brief for greenfield,
rebrand_audit for rebrand)
Do not hard-code any of these before the user answers.docs/gtm/gtm-state.yaml (see GTM Integration).What's your situation?
- A) I have an idea but no code yet.
- B) I have code (or a working product) but no name — or just a placeholder.
- C) I have code and a name, but I want to consider a rebrand.
mode: greenfield, skip codebase scan, go to Phase 1.mode: greenfield, light codebase scan (README, package.json,
top-level dirs) to pre-fill product description, then Phase 1.mode: rebrand, run Phase 0 first.What are you naming?
- product — one specific product. Company already has a name.
- company — the company / parent brand. Products stay separate.
- both_same_name — company and flagship product share a single name (e.g., Notion, Linear, Figma). Treated as one naming exercise.
Record the answer in entity_scope. This shapes Phase 1 brief framing
(company-level mission/vision vs product-level feature focus) and Phase 6
Final Selection deliverables.
| Mode | Trigger |
|---|---|
| Greenfield | First run, user answered A or B |
| Rebrand | First run, user answered C |
| Resume | State file exists with overall_status not complete / ended_no_change |
After the Starting Context answer, create docs/naming/naming-state.yaml:
project: {repo name}
repo_path: {absolute path}
created: {YYYY-MM-DD}
last_updated: {YYYY-MM-DD}
mode: {greenfield|rebrand} # derived from Starting Context
entity_scope: product # product | company | both_same_name
starting_context: B # A | B | C
has_gtm_docs: false
# Top-level enum — must be exactly one of:
# rebrand_audit | brief | namescape | generate | evaluate | tension_test |
# decision | complete | ended_no_change
#
# Initial value depends on mode:
# - greenfield → overall_status: brief
# - rebrand → overall_status: rebrand_audit (Phase 0 must run first)
overall_status: brief # or rebrand_audit when mode: rebrand
# Available model ensemble for Phase 3 generation (filled after detection)
models_available:
claude: true
codex: false
gemini: false
models_selected: [claude] # user's choice from available models
candidates_per_model: 100 # user-tunable
phases:
rebrand_audit: # only in rebrand mode
status: pending
triggers_confirmed: []
decision: null # keep | change
brief:
status: pending
namescape:
status: pending
generate:
status: pending
candidate_count: 0
by_model: {} # claude: 100, codex: 100, ...
evaluate:
status: pending
gate_survivors: 0
scored: 0
tension_test:
status: pending # pending | kit_ready | awaiting_user_results | complete | skipped_low_sample
tester_count: 0
decision:
status: pending
findings:
benefit_ladder: {} # feature / functional / emotional / ultimate
ultimate_concept: "" # 1-2 word creative springboard
personality: {}
constraints: {}
competitors: []
no_go_patterns: []
winner: ""
disputes: [] # any user disagreement; see Dispute Handling
# Fallback flags — any "unverified" entry bubbles up to 05-decision.md Limitations
unverified:
trademark: []
domain: []
handles: []
cross_cultural: []Naming note: the top-level field is overall_status; per-phase status
fields (e.g. phases.tension_test.status) share the simpler name status
because they live under their phase namespace. Read/write consistently.
overall_status MUST be advanced at each phase boundary. If a run pauses
between phases, overall_status is what Resume mode reads to pick up at
the right place. Leaving it stale corrupts Resume.
| Leaving phase | New overall_status |
|---|---|
| Rebrand audit → keep | ended_no_change (terminal) |
| Rebrand audit → change | brief |
| Phase 1 Brief | namescape |
| Phase 2 Namescape | generate |
| Phase 3 Generate | evaluate |
| Phase 4 Evaluate | tension_test |
| Phase 5 Tension Test | decision |
| Phase 6 Decision | complete |
Each phase section below repeats its specific transition for in-context reference. This table is the authoritative contract.
At the start of every session:
naming-state.yaml.After each meaningful exchange:
findings and phase status.last_updated.references/templates.md.When the user re-runs phase N, everything downstream is stale. Before executing, the skill MUST:
phases.{N+1..}.status: pending and zero their counters..vN.md for that phase file and archive to .v(N+1).md
(e.g. if 03-candidates.v1.md and 03-candidates.v2.md exist,
archive current to 03-candidates.v3.md). Never silently overwrite.git rev-parse --is-inside-work-tree succeeds), check git status
for the file. If it has uncommitted changes, warn the user and ask
whether to commit or discard before proceeding. In non-git
projects, skip the git check and instead ask the user directly:
"The current 0N-*.md will be archived as .v(N+1).md. Any unsaved
edits? Confirm proceed."findings keys owned by downstream phases.Dirty state at decision time is a failure mode — not a feature.
After the state file is created, check for {repo}/docs/gtm/gtm-state.yaml.
Do not trust file existence alone — check the state file for
status: complete.
If gtm-state.yaml exists AND status: complete:
01-brand-strategy.md → Mission, Values, Personality, Positioning02-market-landscape.md → ICP archetypes, competitors, JTBD03-messaging-framework.md → Voice, tone, content pillarshas_gtm_docs: true.If gtm-state.yaml is missing, incomplete, or unreadable:
Before any naming work, decide if renaming is actually the right move. Default answer is no — brand equity is expensive to rebuild.
Present these 4 triggers. Ask the user which apply:
Decision rule:
overall_status: ended_no_change. Write summary to 01-brief.md.
Skill ends cleanly.disputes and proceed.overall_status: brief.Record the triggers and decision in phases.rebrand_audit. On
overall_status: ended_no_change, naming-state.yaml is preserved so the
user can re-enter later by manually setting overall_status: brief.
One question at a time. Skip overlapping questions if GTM docs are loaded.
Climb feature → functional → emotional → ultimate. This produces the creative springboard — 1-2 words the entire generation phase pivots on.
Push once if the user stops at feature level:
"That's what it does. How does it make them feel after they use it — not in marketing words, in their own words?"
Example (project management tool):
"Clarity" gives 100× more creative fuel than "project management."
.com? Or .io / .ai / .co acceptable?Distill to 1–2 words. Write into findings.ultimate_concept.
Output: 01-brief.md (see templates). Advance state:
overall_status: namescape.
has_gtm_docs: true): reuse competitor list from
02-market-landscape.md.references/taxonomy.md). This step runs regardless of GTM state —
GTM does not produce taxonomy classifications.If the user disagrees with a taxonomy classification, record in
disputes and accept the user's classification. Agent taxonomy is
advisory.
Output: 02-namescape.md. Advance state:
overall_status: generate.
Divergent creativity benefits from model diversity. Different models have different priors for "good name."
Run these availability probes, then (separately) auth probes:
# Codex CLI — availability
command -v codex && codex --version
# Antigravity CLI (agy) — availability. Serves the Gemini-family model
# for the `gemini` slot (see the note under models_available below).
command -v agy && agy --versionAvailability check answers "is the binary installed and runnable?" If that passes, try a cheap authenticated smoke test (e.g. a trivial prompt with a 1-token max output, or the vendor's recommended auth-check command). If the smoke test fails, report the specific reason and instruct the user:
codex login."agy --print when not authenticated prints a Google
authorization URL instead of answering. Smoke-test with a trivial
prompt and treat empty output, or output that contains an authorization
/ sign-in URL (e.g. an accounts.google.com link), as a gate failure —
it is an auth prompt, not a model answer. Instruct: "agy installed but
not authenticated — run agy once interactively to sign in with
Google." Both not-installed (probe above) and not-authenticated leave
the slot unavailable.Populate models_available.{claude,codex,gemini} based on the combined
availability + auth result. Claude is always true. The gemini key
names the model family — agy fills that slot with a Gemini-family
model, so the key name is retained even though the CLI is now agy.
I detected the following models: [list]. Pick generation ensemble:
- Claude only (~100 candidates) — fastest, lower diversity
- Claude + 1 other (~200 candidates) — recommended baseline
- All three (~300 candidates) — maximum diversity
You can also pick a custom model set.
Record in models_selected. Default candidates_per_model: 100
(user-tunable).
All selected models receive the same full brief. Diversity comes from
model priors, not from forced taxonomy assignments. Each model generates
candidates_per_model candidates across whichever taxonomy types it
considers fit for the brief.
The brief (markdown). All placeholder paths are relative to
naming-state.yaml — use the full dotted path when substituting.
Ultimate concept: {findings.ultimate_concept}
Personality axes: {findings.personality}
Target markets: {findings.constraints.markets}
Syllable preference: {findings.constraints.syllable_preference}
No-go patterns (skip these): {findings.no_go_patterns}
Taxonomy palette: see references/taxonomy.md (11 types)
Target count: {candidates_per_model}Never let the brief reach the shell as unquoted, re-evaluated text.
The brief contains free-form user input. Always write it to a file first
with the Write tool, then feed the CLI from that file. Preferred: stdin
heredoc or a --file flag. When a CLI supports neither and only takes the
prompt as an argument (agy --print reads no stdin), embed the file with a
double-quoted command substitution, written on its own line:
"$(cat brief.md)"Double quoting is load-bearing: bash inserts the substituted file content
literally and does not re-scan it, so any $(...), backticks, or ; in
the brief stay inert (verified). Never use the unquoted form, and never
eval the brief.
TS=$(date +%Y%m%dT%H%M%S)..raw/ directory exists before any writes:
mkdir -p docs/naming/.raw. On first run the project may only have
naming-state.yaml; without this step the brief write and CLI stdout
redirect both fail with "No such file or directory".docs/naming/.raw/brief-${TS}.md using the Write
tool — not via shell echo/cat <<EOF. Use ${TS} throughout —
the Write path MUST match the read paths in Step 4.--skip-git-repo-check. Detect:
git rev-parse --is-inside-work-tree 2>/dev/null — falsy means add
the flag.# Detect git workspace once
git rev-parse --is-inside-work-tree >/dev/null 2>&1 && CODEX_GIT_FLAG="" \
|| CODEX_GIT_FLAG="--skip-git-repo-check"
# Codex — read brief from file via stdin
codex exec $CODEX_GIT_FLAG - < docs/naming/.raw/brief-${TS}.md \
> docs/naming/.raw/codex-${TS}.txt
CODEX_EXIT=$?
# Antigravity CLI (agy) — Gemini-family model. Print mode reads no stdin,
# so embed the brief in the prompt argument via double-quoted "$(cat ...)"
# (safe — see Step 4). Pin the Gemini model for family diversity vs Claude
# (main loop) and Codex (GPT-family). No --dangerously-skip-permissions:
# candidate generation is text-only and needs no tools, and the brief is
# user-controlled — auto-approving tool use would turn a prompt injection in
# the brief into real file/command execution. Headless --print with default
# permissions still answers (verified); if the model ever tries a tool it
# stalls until --print-timeout and degrades, which is the safe outcome.
# --print-timeout explicit (matches the default) so a stalled model can't
# block generation indefinitely — don't rely on an implicit default.
agy --model "Gemini 3.1 Pro (High)" --print-timeout 5m --print \
"Generate the target number of brand-name candidates from the brief below.
Output one candidate per line, no numbering or commentary.
$(cat docs/naming/.raw/brief-${TS}.md)" \
> docs/naming/.raw/gemini-${TS}.txt
GEMINI_EXIT=$?Claude (the skill executor) generates in-session against the same brief.
External CLIs fail for many reasons (rate limit, auth expiry, network, model outage). Never silently proceed on failure. After each invocation, in this order:
--print has a known non-TTY stdout-drop issue
(exit 0 but blank output), so a zero-length gemini-${TS}.txt means the
branch produced nothing. [ -s file ] catches it.accounts.google.com link) into the file. That output is non-empty, so it
slips past [ -s ] and would be parsed as candidate names. Reuse the
Step 1 auth-URL match here: if the raw output contains such a URL, treat
the branch as failed, not as candidates.wc -l. The brief instructs models to output one candidate per
line (see Step 3 brief template), but tolerate the common
alternatives: strip bullets/numbering, split on commas inside a
wrapped paragraph, merge multi-line bullets. Require at least
candidates_per_model * 0.5 parsed candidates (e.g., 100
requested → 50 minimum, 30 requested → 15 minimum). Fewer than
that → truncation or error response.models_selected by removing the failed
model; (b) notify the user explicitly with the reason; (c) ask
whether to retry, drop the model, or abort Phase 3. Do not merge the
failed model's output into 03-candidates.md.Claude reads all successful outputs and dedupes. Dedupe rules:
Apply in order — first rule that matches wins:
04-evaluation.md for human review.Write 03-candidates.md grouped by taxonomy type. Each entry records its
source model so later analysis can see which model tends to win.
During generation, do not self-judge. LLM-failure-mode penalties (generic suffixes, stitched portmanteaus, etc.) are applied in Phase 4 Gate — not here. This preserves the approximate-thinking zone.
Use these angles when generating:
Output: 03-candidates.md. Advance state:
overall_status: evaluate.
Cut any candidate that fails. No scoring — pass or cut.
| Gate | Rule |
|---|---|
| Pronounceability | Say the name aloud 3 times. If it still stumbles, cut. |
| Spelling-on-hearing | Can you spell it after hearing once? If not, cut. |
| Competitor echo | Sounds similar to a direct competitor? Cut. |
| Literal description | Just names the function? Cut (unless brief required descriptive). |
| Cross-cultural red flag (quick pass) | Quick LLM-based check across Spanish, French, Chinese, German, Japanese. LLM knowledge is unreliable here — mark unverified liberally rather than cutting. Known case: Mitsubishi Pajero = Spanish slur. ⚠ Urban-legend warning: Chevy Nova → "no va" is documented false (Snopes). Do not cut on superficial syllable overlap. The authoritative cross-cultural check runs at Phase 5 entry via WebSearch. |
| Core domain unavailable | If brief requires .com and no reasonable modifier works, cut. Otherwise flag unverified and keep. |
| Trademark knockout | USPTO Public Search for exact matches and confusing similarity in target class. If you lack tooling to query, mark unverified and keep. |
LLM-failure-mode auto-penalties (cut at Gate):
| Failure mode | Signal |
|---|---|
| Too generic | Uses overused stems: Hub, Flow, Sync, Verse, Lab, Stack, Box, ly-suffix |
| Too stitched | Obvious portmanteau seams (InnoLyze, TechVerse, AIify) |
| Sound-deaf | Phonetic profile contradicts brand intent |
| Over-invented | Random consonant soup with no semantic hook |
| Trend-chasing | Copies a pattern peaking now (every 2026 AI startup ending in .ai) |
| Culture-blind | Cross-cultural gate was skipped without unverified flag |
Expected survivors: 30–50 out of 100–300.
Score each gate survivor 1–10 on each dimension × weight:
| Dimension | Weight | Definition |
|---|---|---|
| Strategy fit | 25 | Connects to positioning + ultimate benefit |
| Memorability / fluency | 20 | Easy to say, spell, recall (Alter & Oppenheimer 2006; Lewis & Frank 2016) |
| Sound symbolism fit | 15 | Phonetic profile matches desired perception (Klink 2000) |
| Extensibility | 15 | Survives future pivots + line extensions |
| Ownability | 10 | Trademark + domain + handle realistically achievable |
| Cross-cultural portability | 10 | No obvious landmines in target markets |
| Aesthetic / vibe | 5 | "Do I want to say this every day?" |
Weight rationale: Strategy fit and memorability dominate because those are the hardest dimensions to retrofit after launch — you can re-skin aesthetics and chase ownability with modifiers, but a name that doesn't connect to positioning or that people can't remember is a permanent tax. Aesthetic sits lowest because personal taste is the least predictive signal for market success. If your category has different priors (e.g. consumer fashion where aesthetic is load-bearing), adjust the weights and record the deviation.
100–300 candidates
→ Gate filter → 30–50 survivors
→ Score (weighted 100 pt) → rank all survivors
→ Take top 15 → user picks 10 for tension testOutput only: top 15 scored, user picks 10 to advance. The winner is NOT selected in this phase — that happens in Phase 6 after the tension test.
Output: 04-evaluation.md — full rubric for top 15, shortlist of 10 for
tension testing. Advance state: overall_status: tension_test.
Skill cannot execute this — it requires real humans reacting cold. Skill produces a test kit, pauses, and interprets returns.
Before emitting the test kit, for each of the top 10–15 survivors from the Score rubric, run WebSearch for:
{name} meaning in {language} for each target market language.{name} slang {language} for each target market language.This is the authoritative cross-cultural check. Phase 4's Gate pass was
LLM-knowledge-only and deliberately conservative; this step catches things
like regional slang, cultural associations, and trademark collisions the
LLM did not know. Only names that come back clean (or clean-with-context)
proceed to the tension test. Flagged names move to unverified.cross_cultural
or are cut here depending on severity.
Do NOT run this search on all 30–50 gate survivors — it's expensive and unnecessary before the Score filter narrows the field.
test-kit.md)Set phases.tension_test.status: awaiting_user_results. This phase can
pause for days or weeks.
| Pattern | Interpretation | Action |
|---|---|---|
| Half love, half hate | Tension zone — energy is real | SHORTLIST |
| Uniform "yeah it's fine" | Invisible zone | CUT |
| Uniform negative | Dead on arrival | CUT |
| Imagined as wrong category | Category mismatch | CUT |
| Imagined as correct category + positive feeling | Strong candidate | SHORTLIST |
| Nobody remembers next day | Fails memorability | CUT |
When patterns conflict, use this precedence:
Phase 5 is done when either:
tester_count ≥ 3 AND the user confirms no more responses are
coming.Never auto-advance based on tester count alone. Waiting is the default; the user decides when to close the window.
If only 3 testers responded and user closes: set
phases.tension_test.status: complete with tester_count: 3 and note in
Limitations. Weight tension test signals less heavily in final decision.
If fewer than 3: set phases.tension_test.status: skipped_low_sample.
Final decision proceeds on Score rubric alone, with explicit "not
validated with users" warning in 05-decision.md.
Narrow to top 3 finalists. Advance state:
overall_status: decision.
For each of the top 3:
.com, then .co / .io / .ai, then
modifiers (get{name}.com, {name}hq.com, {name}app.com).
⚠ .io faces long-term uncertainty. The UK announced in October
2024 the transfer of Chagos Islands sovereignty to Mauritius, which
could eventually trigger ISO 3166-1 removal of the BIOT code and
ICANN's ccTLD retirement policy. As of ICANN's November 2024 blog, IO
still persists in ISO 3166-1 — no immediate action required, but watch
the space before committing .io as primary.Any field that can't be verified → mark unverified and bubble to
Limitations.
The winner is NOT the highest average. A balanced 7-across-the-board name is the invisible zone — safe, forgettable, friction.
The winner meets ALL three criteria:
Exception — skipped_low_sample runs: when Phase 5 was skipped
because fewer than 3 testers responded, criterion 3 cannot be evaluated.
Waive it and decide on criteria 1 + 2 alone, but explicitly add
"Not validated with users — tension zone unverified" to the
05-decision.md Limitations block so the user treats the pick as
provisional.
If no candidate meets all three (or both, in the low-sample case), present the closest matches and escalate to the user — do not silently pick the highest total. Remarkable beats balanced (Placek / Andy Grove on Pentium).
Present the 3 finalists. User picks. Skill produces 05-decision.md:
unverified field with
explicit instruction: "Before filing trademark / launching, do X."references/rebrand-announcement.md for the three-stage rollout
playbook and equity-preservation guidance by company stage.Update state: overall_status: complete.
This skill is an accelerant, not a replacement for professional services. Be explicit with the user about what it does NOT do:
Every unverified field in state must appear in 05-decision.md
Limitations with a clear "you need to X before doing Y" instruction.
Users can disagree with agent judgment at any phase. The skill must:
disputes[] with phase, topic, agent position,
user position.05-decision.md under a "Decisions you
overrode" section, so future rebrand audits have the history.Common dispute points:
references/templates.md — per-phase markdown schemas.references/taxonomy.md — 11 naming taxonomy types (used by Phase 2 + 3).references/methodology.md — practitioners, books, and research behind
the rubric.references/out-of-scope.md — multi-product brand architecture pointers.references/rebrand-announcement.md — three-stage rollout + equity
preservation by company stage (rebrand mode only).© hanamizuki, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 5 other files (references) in skills/marketer/naming of hanamizuki/solopreneur.
Open the folder on GitHubat commit f43f001
Naming next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Naming this skillhanamizuki/solopreneur | 152 | — | ~9.3k | Automated safety check: Pass | MIT | |
| Startup Designferdinandobons/startup-skill | 1.2k | — | ~8.1k | Automated safety check: Pass | MIT | |
| B2b Brand Marketingarnabbagxd/Brand-building-skills | 724 | — | ~2.4k | Automated safety check: Pass | MIT | |
| Positioning BasicsBrianRWagner/ai-marketing-claude-code-skills | 440 | — | ~1.9k | Automated safety check: Pass | None | |
| D2c Marketingarnabbagxd/Brand-building-skills | 724 | — | ~2.3k | Automated safety check: Pass | MIT | |
| Whatsapp Marketingarnabbagxd/Brand-building-skills | 724 | — | ~2.4k | Automated safety check: Pass | MIT |
ferdinandobons/startup-skill
Design, validate, and plan a startup from scratch. An agent skill from ferdinandobons/startup-skill.
arnabbagxd/Brand-building-skills
Build and execute brand marketing strategy for B2B companies — thought leadership, ABM brand layer, trust signals, LinkedIn presence, long sales cycle brand touchpoints, and enterprise credibility.
BrianRWagner/ai-marketing-claude-code-skills
Walks founders and marketers through five specific questions to produce a positioning statement, and optionally a full messaging hierarchy or competitive differentiation map.
arnabbagxd/Brand-building-skills
Build and execute marketing strategy for Direct-to-Consumer (DTC) brands — customer acquisition, retention, email flows, social proof, subscription models, and repeat purchase mechanics.
arnabbagxd/Brand-building-skills
Build a WhatsApp marketing strategy — WhatsApp Business setup, broadcast campaigns, automated flows, customer service, drip sequences, and conversational marketing.
minhnv0807/ai-business-skills
A skill your agent uses when starting work on a PERSONAL brand — a founder, coach, or creator, not a company: creates .agents/personal-brand-context-global.md covering story, expertise, audience…
hanamizuki/solopreneur
Create an interactive HTML preview of any proposal, plan, idea, doc, brief, or spec and land it in the browsable local Preview Library by default (opens under file:// with a catalog sidebar and…
hanamizuki/solopreneur
A skill your agent uses when building iOS/macOS apps with SwiftUI — covers localization (String Catalogs), date/time formatting, JSON date decoding, Previews, state management, sheet/navigation…
hanamizuki/solopreneur
LinkedIn organic growth consultant — diagnoses profiles, discusses goals, and co-creates a personalized 90-day growth plan.
hanamizuki/solopreneur
Switch perspectives to think through problems using the mental models of ten iconic thinkers: Elon Musk, Richard Feynman, Charlie Munger, Naval Ravikant, Steve Jobs, Nassim Taleb, Ilya Sutskever…
hanamizuki/solopreneur
Create brand-aware presentations using frontend-slides or reveal.js.
hanamizuki/solopreneur
X/Twitter growth consultant — diagnoses profiles, discusses goals, and co-creates a personalized growth plan.
Categories
Generate a product or company name through structured brief, multi-model candidate generation, and two-layer evaluation. Naming is an agent skill from hanamizuki/solopreneur. Generate a product or company name through structured brief, multi-model candidate generation, and two-layer evaluation.
Naming fits situations like: tasks that involve Brand strategy and identity; tasks that involve Go-to-market strategy.
Run `npx skills add hanamizuki/solopreneur --skill naming -a claude-code`. Or copy the skill folder (skills/marketer/naming in hanamizuki/solopreneur) into .claude/skills/naming in your project. Claude Code loads it when a task matches its description.
Run `npx skills add hanamizuki/solopreneur --skill naming -a codex`. Or copy the skill folder (skills/marketer/naming in hanamizuki/solopreneur) into .agents/skills/naming in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add hanamizuki/solopreneur --skill naming -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/naming, .gemini/skills/naming, .github/skills/naming and .opencode/skills/naming in your project.
Going by SKILL.md and its folder, Naming needs the command-line tools its instructions call (git and codex).
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Naming is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 9.3k tokens (SKILL.md is roughly 37k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 4.9k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Naming: Startup Design (ferdinandobons/startup-skill, 1.2k stars), B2b Brand Marketing (arnabbagxd/Brand-building-skills, 724 stars), Positioning Basics (BrianRWagner/ai-marketing-claude-code-skills, 440 stars) and D2c Marketing (arnabbagxd/Brand-building-skills, 724 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
hanamizuki (a GitHub user) maintains it in hanamizuki/solopreneur, which has 152 GitHub stars. The repository holds 31 skills in this directory. The repository was last updated on September 26, 2026.
Source: hanamizuki/solopreneur on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.