SkillAgentSearch skills...

domain

When you want to brainstorm and check available .com domains for a new project — brand naming, aftermarket pricing (HugeDomains / Afternic / Sedo / Dan), USPTO trademark screening, and social handle availability.

Install / Use

npx skills add coreyhaines31/makerskills --skill domain

Installs into whichever agent you are using.

About this skill
📄

SKILL.md

Installable skill definition

Quality Score

92/100

Category

Automation

Supported Platforms

Universal

Our assessment of domain

domain scores 92/100 on our quality scale, 969th of 2,889 Automation skills we index (top 34%).

Its SKILL.md is 23 KB long, well organised into 26 sections with 17 code examples: a thorough specification that gives an agent plenty to work with.

It has 824 GitHub stars, a meaningful sign that others use it.

Substance
30/30
Structure
20/20
Description
15/15
Adoption
12/20
Freshness
15/15

Maintenance, license and trust

  • The repository was last updated 32 days ago, so domain is actively maintained.
  • It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
  • Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.

domain compared with similar skills

All 4 of these similar skills score higher than domain; compare them before choosing.

SkillScoreStarsUpdatedFormat
domain (this skill)by coreyhaines319282432d agoSKILL.md
Agent-Reachby Panniantong10093.0k22d agoCLAUDE.md
headroomby headroomlabs-ai10074.6ktodayCLAUDE.md
Scraplingby D4Vinci10086.1ktodayMCP Server
crawl4aiby unclecode10084.9k2d agoMCP Server

Frequently asked questions

How do I install domain?
Run npx skills add coreyhaines31/makerskills --skill domain. The install tabs above show the steps for each supported agent.
Which AI agents does domain work with?
It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
Is domain safe to use?
It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
Is domain still maintained?
The repository was last updated 32 days ago, so domain is actively maintained.

name: domain description: "When you want to brainstorm and check available .com domains for a new project — brand naming, aftermarket pricing (HugeDomains / Afternic / Sedo / Dan), USPTO trademark screening, and social handle availability. Built on Laura Roeder's "work backwards from availability, not from a name you fell in love with" methodology. Uses Vercel CLI + whois + Domainr API + Namecheap API + agent-browser for the pieces each tool actually reliably supports (multi-tool ensemble because no single tool covers everything cleanly). 11-step workflow: budget → brainstorm → primary availability check → whois cross-check → Domainr aggregation → Namecheap price → aftermarket sweep (+ liveness probe for parked/dead domains, drop-watch for expiring ones) → bucket → negotiate → NAME research (trademark + socials) → buy. Triggers on "/domain," "find a domain," "check domain availability," "brainstorm a domain," "what .com is available for X," "domain hunt," "name my project," "is X.com available," "aftermarket price on X.com," "trademark check for X."" metadata: version: 0.2.0

/domain — Brainstorm + check available .com domains

Multi-tool workflow to find a great, affordable, available .com for a new project. Built on Laura Roeder's rule: work backwards from what's actually available — don't fall in love with a name first (source).

Defaults to .com only. Only deviate (.dev, .co, .io, .ai) if the project is dev-tooling-only or the user explicitly asks.

Step 0 — Environment checks

Verify these before proceeding (surface install commands if missing, don't try to install silently):

| Tool | Check | Install if missing | |---|---|---| | Vercel CLI | vercel whoami | npm i -g vercel && vercel login | | whois | which whois | brew install whois (macOS) | | Domainr API key | [ -n "$DOMAINR_API_KEY" ] | Get free key at rapidapi.com/domainr/api/domainr, add to ~/.zshenv | | Namecheap API | [ -n "$NAMECHEAP_API_KEY" ] && [ -n "$NAMECHEAP_API_USER" ] && [ -n "$NAMECHEAP_CLIENT_IP" ] | Enable API at ap.www.namecheap.com/settings/tools/apiaccess/, add 3 env vars, whitelist your IP |

Domainr + Namecheap are optional — the workflow degrades gracefully without them (skips the corresponding cross-check steps).

Step 1 — Set the budget

Ask: what would you pay for a great .com on this project? Anchor defaults:

| Budget | What it buys | |---|---| | $0 | Only unregistered domains (rare for anything good) | | $250–$1k | Aftermarket sweet spot (HugeDomains is the standout — Laura found "a ton of great .com's available for less than $1k") | | $1k–$2k | Laura's Paperbell.com range — plenty of brandable options | | $2k+ | Premium |

Filter all candidates to under-budget BEFORE falling in love.

Step 2 — Seed words for "branded" combos

Ask what the product does + the feeling/category. Brainstorm 20–40 candidate domains using these preferences (in order):

  1. Two real words mashed together ← preferred (Helpscout, RightMessage, ConvertKit, Paperbell, Mailchimp). Easy to spell, remember, google.
  2. Prefix/suffix the bare word — grab the .com when the bare word is taken or over budget. "I love word X, X.com is gone, what qualifier unlocks the .com?"
    • Modern prefixes (B2B SaaS feel): try (TryGamma, TryRoam), use (UseMotion, UseChalk), with (WithCove, WithFrame), join (JoinHomebase, JoinHonor)
    • Classic prefixes (still work): get (GetMagic, GetResponse), go (GoCardless, GoFundMe), hey (HeyMarvin, HeyHenry), the (TheBrowserCompany, TheDyrt — editorial vibe)
    • Dated — avoid unless intentional: my (MyFitnessPal), meet (MeetEdgar)
    • Suffixes: +ly (Calendly, Grammarly — battle-tested but reads "2015 startup"), +ify (Spotify, Shopify — rare, hard to land authentically), +labs (AI/research positioning), +hq / +app (mostly informal)
    • Watch: trademark collision (UseSlack.com is a brand violation even if registrable); popular bare words often have try/use/get/join variants pre-grabbed by the same owner; longer URLs cost spelling-on-phone bandwidth
    • Full grid: if the user loves a bare word, generate all try/use/with/join/get/go/hey/the + word and word + ly/ify/labs/hq/app in one shot — ~15 variants
  3. One real word, slightly modified (Trello, Pinterest, Lyft) — fine.
  4. Made-up-sounds (Sunsama, Besedky) — only as fallback. Notoriously hard to remember.
  5. Common single-word objects (Clubhouse, Spoke, Blush, Finder) — AVOID. Ungoogleable, .com always taken, collides with other products.

Surface a numbered candidate list before checking — don't burn cycles checking obvious losers.

Step 3 — Primary availability check (Vercel CLI)

Use vercel domains check for availability and vercel domains price for registrar quotes. Loop candidates:

for domain in candidate1.com candidate2.com candidate3.com; do
  echo -n "$domain: "
  vercel domains check "$domain" 2>&1 | grep -E "available|not available|Error" || echo "checking..."
done

For pricing on the candidates that came back available:

vercel domains price candidate1.com candidate2.com candidate3.com

For a single deeper check on a taken domain (registrar status, expiration, nameservers if the domain is already Vercel-managed):

vercel domains inspect candidate.com

TLD reliability: Vercel CLI is rock-solid for .com and most gTLDs, but returns errors for .ai, .dev, .io, .app (Vercel doesn't sell those registrar-side). Skip Step 3 for non-.com candidates and go straight to Step 4.

Step 4 — Cross-check with whois

Ground truth for registration status. Query the right server per TLD — pinning -h whois.verisign-grs.com to a non-.com produces silent false negatives.

Classification order matters (stolen from unclaimed): check for REGISTERED signals first, then available signals. A parked domain's whois/lander can contain "this domain is available for sale" — grepping for "available" first turns a taken name into a false positive. And reserved ≠ available: "is reserved", "not available for registration", "blocked for registration" all mean taken, even though RDAP often 404s these names.

  • Registered signals: creation date, registrar:, registry expiry, registrant, name server
  • Reserved signals (treat as taken): is reserved, reserved by, not available for registration, blocked for registration
  • Available signals: no match, not found, no entries found, no object found, not registered, available for registration

.com / .net — Verisign:

for domain in candidate1.com candidate2.com; do
  result=$(whois -h whois.verisign-grs.com "$domain" 2>&1)
  if echo "$result" | grep -qiE "registrar:|creation date"; then
    expiry=$(echo "$result" | grep -i "registry expiry" | head -1 | sed 's/.*: //')
    echo "$domain → TAKEN (expires $expiry)"
  elif echo "$result" | grep -qiE "is reserved|reserved by|not available for registration|blocked for registration"; then
    echo "$domain → RESERVED (not registrable)"
  elif echo "$result" | grep -qi "no match"; then
    echo "$domain → AVAILABLE"
  else
    echo "$domain → UNKNOWN (do not treat as available)"
  fi
done

Any other TLD — don't hardcode servers; ask IANA for the authoritative whois host, then query it (whois.nic.<tld> is the fallback convention):

tld=ai
server=$(whois -h whois.iana.org "$tld" 2>/dev/null | grep -i "^whois:" | awk '{print $2}')
server=${server:-whois.nic.$tld}
whois -h "$server" candidate.$tld

Caveat: some registries have no port-43 whois at all (Google's .dev/.app/.page — IANA lists nothing and whois.nic.dev doesn't resolve). For those, RDAP below IS the ground truth.

RDAP for .dev / .app / .io and other modern TLDs — JSON-native, cleaner than whois when the TLD supports it:

UA="domain-skill/0.1 (availability check)"
for domain in candidate.dev candidate.app; do
  code=$(curl -sL -o /dev/null -w "%{http_code}" -A "$UA" "https://rdap.org/domain/$domain")
  case "$code" in
    404) echo "$domain → probably available (confirm via whois — see caveat)" ;;
    200) echo "$domain → TAKEN" ;;
    429) echo "$domain → rate-limited, sleep + retry" ;;
    *)   echo "$domain → UNKNOWN (do not treat as available)" ;;
  esac
  sleep 1  # rdap.org rate-limits aggressively
done

RDAP gotchas (all verified by the unclaimed project):

  • Always send a User-Agent — rdap.org (and some registry servers) 403 bare requests, and a 403 read naively looks like "not 404 = taken."
  • 404 ≠ proof of availability. Registry-reserved, blocked, and premium-unsold names also 404 on RDAP. Before reporting a name available on RDAP evidence alone, confirm with a whois query (Step 4 above) — if whois says reserved, it's taken.
  • rdap.org only routes TLDs in the IANA bootstrap (https://data.iana.org/rdap/dns.json). For a TLD outside it, an rdap.org 404 is meaningless — fall back to whois. Two useful direct endpoints not in the bootstrap: .io → https://rdap.identitydigital.services/rdap/domain/<domain>, .so → https://rdap.nic.so/domain/<domain>.
  • A 200 body includes events[] — the expiration eventDate feeds the drop-watch in Step 7b.

Reading the results:

  • No match / no object found / RDAP 404 (whois-confirmed) = unregistered, available
  • Registrar: <name> / RDAP 200 = taken, check the aftermarket
  • Timeout / rate-limit / weird output = UNKNOWN — never bucket as available. Retry later instead.

Bulk multi-TLD sweeps — if the hunt widens beyond a dozen candidates or beyond .com, don't hand-roll the loop; unclaimed does RDAP+whois with correct classification, resumable SQLite caching, and pricing (Node 24+):

npx unclaimed check orbit --tlds com,io,ai,dev
npx unclaimed sweep --words-file ./candidates.txt --tlds com
npx unclaimed available --sort commercial --limit 50

Its three states map to ours: available / registered / unknown (it never reports a timeout as available either).

Step 5 — Domainr cross-check (aftermarket signal)

Domainr aggregates registrar + marketplace status across many TLDs. Skip if DOMAINR_API_KEY unset — otherwise:

for domain in candidate1.com candidate2.com; do
  curl -s "https://domainr.p.rapidapi.com/v2/status?domain=$domain" \
    -H "X-RapidAPI-Key: $DOMAINR_API_KEY" \
    -H "X-RapidAPI-Host: domainr.p.rapidapi.com" \
    | jq -r --arg d "$domain" '.status[] | "\($d): \(.status) — \(.summary)"'
done

Status codes:

  • undelegated inactive → unregistered, free
  • active → registered, in use
  • marketed, parked, priced → for sale on aftermarket (Domainr surfaces price hint when available)
  • premium → registry premium (often $500+/yr)

marketed or priced = high-signal flag to dig into HugeDomains/Afternic in Step 7.

Step 6 — Namecheap price check

Fallback registrar — sometimes cheaper than Vercel on year-1 promo pricing. Skip if NAMECHEAP_API_* unset — otherwise:

DOMAINS="candidate1.com,candidate2.com,candidate3.com"
curl -s "https://api.namecheap.com/xml.response?ApiUser=$NAMECHEAP_API_USER&ApiKey=$NAMECHEAP_API_KEY&UserName=$NAMECHEAP_API_USER&Command=namecheap.domains.check&ClientIp=$NAMECHEAP_CLIENT_IP&DomainList=$DOMAINS" \
  | xmllint --xpath '//*[local-name()="DomainCheckResult"]' - 2>/dev/null \
  | grep -oE 'Domain="[^"]+" Available="[^"]+"( IsPremiumName="[^"]+")?( PremiumRegistrationPrice="[^"]+")?'

Available="true" = registrable at Namecheap registrar prices (typically $9–$15/yr for .com). IsPremiumName="true" = registry premium tier (skip unless under budget).

Reconcile Vercel + Domainr + Namecheap + whois. If they disag

Truncated for display — read the full file on GitHub.

Related Skills

View on GitHub
GitHub Stars824
CategoryAutomation
Updated1mo ago
Forks67

Trust signals

100/100

From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.

No cautions