---
name: affix-domains
description: Attach popular brand prefixes/suffixes to a seed word and check availability against the authoritative registry. Starts at `.com`; if the seed word's own `.com` is taken, escalates the whole sweep to .com/.net/.org/.ai/.io/.co/.app/.cc. Use when the user names a word and asks for prefix/suffix domain variants, or wants domains generated by adding endings like -labs/-ify/-ly or beginnings like deep-/open-/get-. Catalogs are ranked by 2025–26 hot-AI-startup evidence; scan and surface in rank order.
---

# affix-domains

**Affix** a seed word with common brand prefixes and suffixes, check each candidate live against the authoritative registry, and prompt the user to register the free ones.

## Steps

1. **Gate on the bare seed's `.com`.** Before generating anything, check `<seed>.com` alone. It decides the scope of everything below:

   - **Free** → the seed itself is winnable. Say so up front, then run the affix sweep on **`.com` only** — the original contract. Nothing else is needed.
   - **Taken** → escalate. Every check from here on runs across the **full TLD set**: `.com .net .org .ai .io .co .app .cc`. Also sweep the **bare seed** across the other seven — `mate.ai` is worth more than `matebuddy.com`, and it costs eight lookups to find out.

2. **Generate candidates.** For seed `W`, produce `W` + each suffix and each prefix + `W` from the catalog below. Lowercase. Dedupe. Always drop triple-letter runs (`mateee`) and a suffix that repeats the seed (`matemate`).

   The English-word filter is **mode-dependent**: in `.com`-only mode, drop any combination that spells an existing English word (e.g. `getup`, `openbox`) — its `.com` is almost certainly taken and burns a lookup. In **escalated mode, keep them** — that rationale is `.com`-specific, and a real word gone in `.com` says nothing about `.ai` or `.cc`. (`mately` is a dictionary adverb *and* the flagship `-ly` SaaS pattern; it is free in six TLDs.) If the user hints a style (playful, techy, marketplace…), weight the matching categories; default is every category.

3. **Check availability** with the bundled script, which already encodes the per-TLD endpoint, parallelism, and retry rules. It lives in this skill's `scripts/` dir — invoke it by absolute path:

   ```bash
   ~/.claude/skills/affix-domains/scripts/check_domains.sh \
     --tlds com,net,org,ai,io,co,app,cc  cand1 cand2 cand3 ...
   ```

   With many candidates, pass them on stdin instead: `printf '%s\n' "${cands[@]}" | … --stdin`.

   Pass **bare names, not domains** — the script forms `name.tld` itself. Output is one `<domain>\tFREE|TAKEN|UNKNOWN` line per lookup. A full 67-affix escalated sweep is ~540 lookups and takes roughly 30–60s, paced by the serial `.app` path.

   **`UNKNOWN` is not `FREE`.** It means the registry never gave a clean answer. Never show it as available; re-run those few names, and if they stay UNKNOWN, say so explicitly.

4. **Surface the survivors.** In `.com`-only mode, list one line per free `.com`, in catalog rank order (note each name's category).

   In escalated mode the raw cross-product is far too long to dump. Instead, order surviving names by their affix's catalog rank, breaking ties by best available TLD in this preference order:

   `.com` > `.ai` > `.io` > `.co` > `.net` > `.org` > `.app` > `.cc`

   Show the best one or two TLDs per name, and offer the complete matrix only if the user asks. Note when a name is free across *many* TLDs — that usually means it is genuinely unclaimed rather than merely available in the leftovers.

5. **Prompt the user to register.** Ask which they want to take. Point them to Cloudflare Registrar (or their preferred one) — note that Cloudflare Registrar does not sell every TLD in this set, so a second registrar may be needed. Do not enter payment on their behalf — registration is the user's action.

## TLD endpoints

Verified 2026-08-27, each against a known-taken and a known-free control. The script holds these; the table is here so a human can audit it.

| TLD | Method | Endpoint | Notes |
|---|---|---|---|
| `.com` | RDAP | `rdap.verisign.com/com/v1/domain/` | Verisign, authoritative |
| `.net` | RDAP | `rdap.verisign.com/net/v1/domain/` | Verisign |
| `.cc` | RDAP | `tld-rdap.verisign.com/cc/v1/domain/` | Verisign, but a **different host** than `.com`/`.net` |
| `.org` | RDAP | `rdap.publicinterestregistry.org/rdap/domain/` | PIR |
| `.ai` | RDAP | `rdap.identitydigital.services/rdap/domain/` | Identity Digital |
| `.io` | RDAP | `rdap.identitydigital.services/rdap/domain/` | same host as `.ai`; **not in the IANA bootstrap** |
| `.app` | RDAP | `pubapi.registry.google/rdap/domain/` | Google Registry; **rate-limited**, see below |
| `.co` | **WHOIS** | `whois.registry.co` | **No RDAP service exists.** Free ⇔ `DOMAIN NOT FOUND` |

**`.app` rate limiting is a rolling quota, not a concurrency cap.** Dropping to `-P 2` does not help — once the budget is spent, every request 429s regardless of parallelism. The only fix is serial requests plus backoff-and-retry, which is what the script does. Treat `429` as *retry*, never as an answer.

### Endpoints that look right and are wrong

Both of these return **HTTP 404 for domains that are definitely registered** — a silent false-available that would tell the user to go buy a taken domain. Do not substitute them:

- `rdap.godaddy.com/v1/domain/` — 404s on `t.co`. It is the *registrar's* RDAP, not the registry's.
- `rdap.org/domain/` — a bootstrap proxy; 404s on both `.co` and `.io` because neither is in the IANA bootstrap file.

## Catalog ranking

Both catalogs are **ranked by evidence**: how often the hottest AI startups actually use each affix
in their brand names — a 433-company corpus (Forbes AI 50 2026+2025, CB Insights AI 100 2026, YC,
a16z Top-100 consumer apps, LinkedIn Top Startups US, 2025–26 mega-rounds, AI dev-tools peer group;
snapshot 2026-08-28) — blended with fusability and meaning (Score = 2·E + F + M). Generate
candidates from **every** row, but check and surface them **in rank order**. The full evidence
tables (scores, old-vs-new ranks, corpus examples) are in
[references/ranking-2026-08.md](references/ranking-2026-08.md). Known catalog gap, deliberately not
auto-added: the era's dominant suffix is a trailing "AI" word (~60 hot companies), plus -lab, -0,
-gpt, applied- — see the reference before extending the catalog.

## Prefix catalog — ranked

| # | Affix | Category | Hot uses 2025–26 | Feel · exemplars |
|---|---|---|---|---|
| 1 | deep- | Scale & depth | 4 | serious tech (DeepMind, DeepSeek) |
| 2 | open- | Newness & openness | 4 | transparent/community (OpenAI, OpenTable) |
| 3 | super- | Scale & depth | 2 | boosted (Superhuman) |
| 4 | live- | Newness & openness | 2 | real-time (LiveChat) |
| 5 | agent- | AI & agents | 2 | autonomous doer (Agentforce) |
| 6 | ai- | AI & agents | 3 | AI-native signal (AI21) |
| 7 | up- | Scale & depth | 1 | rising (Upwork) |
| 8 | hey- | Call-to-action | 1 | friendly hail (Hey.com) |
| 9 | chat- | AI & agents | 1 | conversational (ChatGPT) |
| 10 | the- | Possessive | 1 | definitive (TheVerge) |
| 11 | go- | Call-to-action | 0 | momentum (GoDaddy, GoPro) |
| 12 | fast- | Speed & ease | 0 | velocity (Fastly) |
| 13 | get- | Call-to-action | 0 | grab it (GetResponse) |
| 14 | next- | Newness & openness | 0 | successor (NextDoor) |
| 15 | quick- | Speed & ease | 0 | instant (QuickBooks) |
| 16 | smart- | Speed & ease | 0 | intelligent (SmartThings) |
| 17 | my- | Possessive | 0 | personal (MySpace, MyFitnessPal) |
| 18 | easy- | Speed & ease | 0 | frictionless (EasyJet) |
| 19 | ever- | Scale & depth | 0 | permanence (Evernote) |
| 20 | real- | Newness & openness | 0 | authentic (RealPage) |
| 21 | neo- | Newness & openness | 0 | new wave (Neobank) |
| 22 | use- | Call-to-action | 0 | utility (Usebutton) |
| 23 | try- | Call-to-action | 0 | low-commitment invite |
| 24 | ultra- | Scale & depth | 0 | extreme |
| 25 | meta- | Newness & openness | 0 | beyond (Meta) |
| 26 | meet- | Call-to-action | 0 | introduction (MeetUp-style) |
| 27 | agentic- | AI & agents | 0 | agent-native workflows (agentic AI wave) |
| 28 | join- | Call-to-action | 0 | community invite |
| 29 | every- | Scale & depth | 0 | universality (Everlane-like) |

## Suffix catalog — ranked

| # | Affix | Category | Hot uses 2025–26 | Feel · exemplars |
|---|---|---|---|---|
| 1 | -labs | Tool & hub | 12 | R&D shop (Bell Labs) |
| 2 | -o | Vowel endings | 11 | punchy (Venmo) |
| 3 | -a | Vowel endings | 10 | smooth (Tesla, Zara) |
| 4 | -er | Doer | 4 | actor/agent (Uber, Tinder) |
| 5 | -ia | Vowel endings | 3 | name-like (Nvidia, Expedia) |
| 6 | -base | Tool & hub | 2 | foundation/platform (Coinbase, Firebase, Supabase) |
| 7 | -ly | Short & modern | 3 | SaaS all-rounder (Bitly, Calendly, Grammarly) |
| 8 | -r | Short & modern | 3 | drop-vowel web-2.0 (Tumblr, Flickr) |
| 9 | -us | Vowel endings | 4 | Latin gravitas (Prius) |
| 10 | -ify | Verbifier | 1 | turns the word into a service (Spotify, Shopify) |
| 11 | -kit | Tool & hub | 1 | toolkit (ConvertKit) |
| 12 | -bot | Companion | 1 | automated agent |
| 13 | -ora | Vowel endings | 1 | elegant Latin (Pandora) |
| 14 | -cast | Vertical positioning | 1 | media/broadcast (Podcast) |
| 15 | -verse | Stylized & meme | 1 | a whole universe (metaverse) |
| 16 | -app | Vertical positioning | 1 | application (Cash App) |
| 17 | -hub | Tool & hub | 0 | gathering point (GitHub) |
| 18 | -stack | Tool & hub | 0 | tech stack (Substack) |
| 19 | -or | Doer | 1 | mechanical (Vector) |
| 20 | -ee | Vowel endings | 1 | soft (Renee-like) |
| 21 | -box | Tool & hub | 0 | packaged tool (Dropbox) |
| 22 | -mate | Companion | 0 | sidekick (Mailmate) |
| 23 | -works | Tool & hub | 0 | workshop (SolidWorks) |
| 24 | -pal | Companion | 0 | trusted friend (PayPal) |
| 25 | -pad | Tool & hub | 0 | workspace (Launchpad) |
| 26 | -ize | Verbifier | 0 | systematize (Rentalize) |
| 27 | -ist | Doer | 0 | specialist (Stylist) |
| 28 | -space | Tool & hub | 0 | room to work (Squarespace) |
| 29 | -buddy | Companion | 0 | friendly helper (GasBuddy) |
| 30 | -ix | Vowel endings | 0 | techy (Netflix) |
| 31 | -matic | Stylized & meme | 0 | machine-magic (Instamatic) |
| 32 | -bay | Vertical positioning | 0 | marketplace (eBay) |
| 33 | -ex | Vowel endings | 0 | sharp, techy (FedEx) |
| 34 | -y | Short & modern | 0 | cute, casual (Etsy) |
| 35 | -ate | Verbifier | 0 | automate/activate (Automate) |
| 36 | -zilla | Stylized & meme | 0 | monster-big (Mozilla) |
| 37 | -oo | Vowel endings | 0 | round, cute (Yahoo) |
| 38 | -aroo | Stylized & meme | 0 | bouncy-cute (Kangaroo) |

## Rules

- **Live lookups only** — never claim availability from cached knowledge or prior turns of this conversation. Domains get registered between checks.
- **Only an explicit negative means available.** RDAP `404`, or WHOIS `DOMAIN NOT FOUND`. Anything else — `429`, `5xx`, a timeout, an empty body — is `UNKNOWN`, which is reported as unknown and never as free.
- **Use the bundled script rather than hand-rolled `curl`.** The per-TLD hosts, the `.co` WHOIS special case, and the `.app` retry loop are all easy to get wrong in a way that fails silently toward false-available.
- **The escalated TLD set is fixed**: `.com .net .org .ai .io .co .app .cc`. If the user wants a TLD outside it, check it explicitly and say the endpoint was not pre-verified.
- **No payment on the user's behalf.** Prompt them to register; they check out.
