namehunt
Name your company with a closed feedback loop — and run it on your Claude subscription, no API key needed. We built namehunt to rename our own startup: 8 rounds, 210 live-checked names, one winner. Every "AI name generator" hands you names that turn out to be taken; namehunt checks real availability via RDAP inside the loop, so every round learns from what's actually free.
A local CLI that runs a closed feedback loop for naming a company:
- An LLM (Claude by default, OpenAI optional) generates candidate name stems from your brief.
- Real domain availability is checked for each stem across your TLDs via RDAP (free, keyless, authoritative).
- Results — plus your likes/dislikes/notes — feed straight back into the next generation round.
- Repeat until you have a shortlist of names whose domains are actually available.
Install
The fifteen-second way (requires uv):
uvx namehunt run --brief brief.md --provider claudecode
Or install it properly: uv tool install namehunt (also: pipx install namehunt).
From source (Python 3.11+):
git clone https://github.com/Tarabcak/namehunt && cd namehunt && uv sync
Optional OpenAI support:
uv sync --extra openai
Providers & environment variables
| Provider | Auth | Notes |
|---|---|---|
claude (default) |
ANTHROPIC_API_KEY |
Anthropic API, billed per token |
claudecode |
your existing Claude Code login | runs claude -p headless on your Pro/Max subscription — no API credits. Requires Claude Code installed & signed in. Personal use only: Anthropic does not allow shipping products on claude.ai login, and any ANTHROPIC_API_KEY in the env is withheld from the subprocess so it can never bill the API |
codexcli |
your existing Codex CLI login | runs codex exec (sandboxed read-only) on your ChatGPT subscription — no API credits. Requires the Codex CLI installed & signed in; same personal-use posture and API-key withholding as claudecode |
openai |
OPENAI_API_KEY |
needs uv sync --extra openai |
Other variables: NAMEHUNT_PROVIDER picks the default provider when --provider is
omitted; NAMEHUNT_HOME overrides the state directory (default ~/.namehunt —
sessions + RDAP bootstrap cache). Keys are read from the environment only and are
never written to disk.
# subscription-powered, no API key needed:
uv run namehunt run --brief examples/brief.md --provider claudecode
60-second quickstart
export ANTHROPIC_API_KEY=sk-ant-...
uv run namehunt run --brief examples/brief.md --tlds com,ai --session myco
Each round prints a table — ✅ available, ❌ taken, ❓ unknown — then prompts:
[a]nother round [l]ike <numbers> [d]islike <numbers> [n]ote <text> [q]uit & export
l 2 5/d 3— like/dislike rows from the table (steers the next round)n shorter, more mythic— free-text steering notea— next round;q— quit--rounds 3runs three rounds autonomously (no prompts);--debugprints the full LLM prompt
Ctrl-C is safe at any point — the session is saved, then:
uv run namehunt resume --session myco
uv run namehunt export --session myco --format md # also: csv, json
The RDAP caveat
⚠️ RDAP 'available' is a strong signal, not a guarantee — premium/reserved names can still be unregisterable. Re-check at your registrar before buying, and run a trademark search.
unknown (❓) means the check failed (timeout, rate limit, TLD without RDAP…) — namehunt
never reports a domain as available unless RDAP itself said so.
Development
uv run pytest -q # all network mocked; suite blocks real sockets
uv run ruff check .
uv run mypy src
How it was built
Spec-first, strict TDD, by Claude Code: the full product spec, the workflow
rules, and the hooks that enforced red→green live in this repo as artifacts —
see namehunt-SPEC.md and CLAUDE.md. The test
suite hard-blocks real network access, and every RDAP failure path is proven
to map to unknown, never available.
Metadata
Release files for namehunt 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| namehunt-0.1.1.tar.gz | 90.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| namehunt-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 109.9 kB
Release files / namehunt-0.1.1.tar.gz
| Download URL | namehunt-0.1.1.tar.gz |
|---|---|
| Size | 90.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fc50ed91bc6171c446e664597cf14024c2f07d3b25caaecf7f079fe47319a97e
|
|
BLAKE2b-256 checksum How to use checksums |
9ae7e0b5a8a6304b0ad08378e75642703ca7611671dcfe98abe8292e18a75800
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / namehunt-0.1.1-py3-none-any.whl
| Download URL | namehunt-0.1.1-py3-none-any.whl |
|---|---|
| Size | 19.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4e02c44c80c4d6dc8859b52d414fe4626e165380fc3fc89585b5f88590c49862
|
|
BLAKE2b-256 checksum How to use checksums |
f535e1bc48b7c14857503352a1565c702654a73c15aed8230d669963bed64b8a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|