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 domainInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
AutomationSupported Platforms
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.
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.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| domain (this skill)by coreyhaines31 | 92 | 824 | 32d ago | SKILL.md |
| Agent-Reachby Panniantong | 100 | 93.0k | 22d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 74.6k | today | CLAUDE.md |
| Scraplingby D4Vinci | 100 | 86.1k | today | MCP Server |
| crawl4aiby unclecode | 100 | 84.9k | 2d ago | MCP 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.
Skill content
View source on GitHubname: 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):
- Two real words mashed together ← preferred (Helpscout, RightMessage, ConvertKit, Paperbell, Mailchimp). Easy to spell, remember, google.
- 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.comis a brand violation even if registrable); popular bare words often havetry/use/get/joinvariants 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 + wordandword + ly/ify/labs/hq/appin one shot — ~15 variants
- Modern prefixes (B2B SaaS feel):
- One real word, slightly modified (Trello, Pinterest, Lyft) — fine.
- Made-up-sounds (Sunsama, Besedky) — only as fallback. Notoriously hard to remember.
- 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[]— theexpirationeventDate feeds the drop-watch in Step 7b.
Reading the results:
No match/no object found/ RDAP 404 (whois-confirmed) = unregistered, availableRegistrar: <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, freeactive→ registered, in usemarketed,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
Agent-Reach
93.0kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
74.6kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
Scrapling
86.1k🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scrapling_dev
crawl4ai
84.9kOpen-source web crawler and scraper for LLMs and AI agents: any website into clean, LLM-ready Markdown. Run it yourself, or use Crawl4AI Cloud with one key.
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
