amagi-name-check
Check a name for your next package or repo on PyPI, npm, crates.io, Homebrew, GitHub and six domain TLDs in one command, and see which existing projects it is too close to.
Install
pipx install amagi-name-check
Python 3.9 or newer. No dependencies outside the standard library.
Usage
amagi-name-check vidscan
We wrote this after "vidscan", the first name we picked for one of our video tools, turned out to be taken. This is the check we had done by hand, as one command (output from 2026-10-21):
amagi-name-check: vidscan
CHECK NAME STATUS DETAIL
PyPI vidscan taken 1.0.0 - Concurrent media library scanner - folder and...
npm vidscan available
crates.io vidscan available
Homebrew formula vidscan available
Homebrew cask vidscan available
GitHub user/org vidscan taken User vidscan
GitHub repos vidscan in use 7 repos; top ompatel-io/vidscan (5 stars)
Domain vidscan.com taken registered 2018-05-14 (RDAP)
Domain vidscan.dev available not registered (RDAP)
Domain vidscan.io available not registered (WHOIS)
Domain vidscan.app taken registered 2026-06-04 (RDAP)
Domain vidscan.ai available not registered (RDAP)
Domain vidscan.org available not registered (RDAP)
Summary: 8 available, 4 taken, 1 in use
The exit code is 1 because something is taken.
Names a registry will refuse
An exact-name lookup says data-classes is free on PyPI and npm. Neither registry will accept it:
amagi-name-check data-classes --only pypi,npm,crates
amagi-name-check: data-classes
CHECK NAME STATUS DETAIL
PyPI data-classes available
npm data-classes available
crates.io data-classes taken 0.0.0-19 - Abbreviation of #[derive(xxx)]
Near-collisions:
BLOCK PyPI dataclasses: PyPI treats it as your name (ignores - _ . and l/i/1, o/0)
BLOCK npm dataclasses: npm treats it as your name (ignores - _ .)
warn npm dataclass (80.1k downloads/month): 2 edits away
Summary: 2 available, 1 taken; 2 look-alikes will block registration; 1 near-collision warning
PyPI rejects a new name that matches an existing project once -, _ and . are removed and l, i, 1 and o, 0 are treated as the same character. It also rejects standard-library module names. npm rejects names that match once punctuation is removed. amagi-name-check applies both rules and reports a hit as BLOCK.
Typos of popular packages
amagi-name-check chalkk --only npm
amagi-name-check: chalkk
CHECK NAME STATUS DETAIL
npm chalkk taken 0.0.1-security - security holding package
Near-collisions:
warn npm chalk (2.1B downloads/month): 1 edit away
Summary: 0 available, 1 taken; 1 near-collision warning
Warnings come from the registries' search APIs, from probing every one-letter deletion of your name, and from stripping common affixes (py-, -cli, -js and others). requests-cli is free on PyPI, and amagi-name-check still warns that it is requests plus a suffix. To keep the list short, it drops projects under 1,000 npm downloads a month, 5,000 crate downloads or 10 GitHub stars, and shows at most three warnings per registry.
What it checks
- PyPI: the JSON API, confirmed against the simple index so a registered project with no files still counts as taken.
- npm: the registry. A name whose package was unpublished still shows as taken, because npm keeps a record of it.
- crates.io: crates.io treats
-and_as the same, soserde-jsonreports as taken byserde_json. - Homebrew: formulae and casks.
- GitHub: whether a user or org owns the name, and how many repos use it as their exact name. An exact-name repo with 100 or more stars marks the name as taken. Smaller ones show as
in use. - Domains:
.com,.dev,.io,.app,.aiand.orgthrough RDAP, with a WHOIS fallback for TLDs that have no RDAP server. A name with separators also gets its joined.com(amagi-name-checkchecksamaginamecheck.comtoo).
Each name takes 30 to 40 lookups, run in parallel. Full checks of three names finished in one to three seconds each.
Options
amagi-name-check quillo tessel marrow # compare several candidates
amagi-name-check quillo --json # machine-readable output
amagi-name-check quillo --markdown # a table to paste into an issue or chat
amagi-name-check quillo --only pypi,github # pypi, npm, crates, brew, github, domains
amagi-name-check quillo --skip domains
amagi-name-check quillo --tlds com,dev,sh # a different domain list
amagi-name-check quillo --no-similar # exact-name checks only, fewer requests
amagi-name-check quillo --links # print the URL under each row
Exit codes: 0 means available everywhere checked with no blocking look-alike, 1 means taken, invalid or blocked somewhere, 2 means a usage error, and 3 means nothing was taken but some lookups failed.
GitHub rate limits
GitHub allows 10 unauthenticated searches a minute, and each name uses one. To check more names than that, set a token. It needs no scopes:
export GITHUB_TOKEN=your-token
GH_TOKEN works too. When the limit is hit, the GitHub rows show unknown with a hint, and the rest of the report still runs. A rejected token also shows as unknown, with a note to check it.
Use it from Claude Code
This repo ships a skill at .claude/skills/amagi-name-check/SKILL.md. Copy that folder into your own .claude/skills/, and Claude Code will check its name ideas while you brainstorm and tell you which ones are clear.
Limits
- No tool can list every look-alike a registry might object to. PyPI also keeps a private list of prohibited names, so
availableon PyPI means no project and no detected look-alike. Registration can still fail. - The standard-library name check needs Python 3.10 or newer. On 3.9 it is skipped.
- Typo detection catches deletions directly. Swapped or substituted letters are caught only when a registry's search returns them.
- WHOIS replies have no standard format. Replies the parser doesn't recognize show as
unknowninstead of a guess. availablefor a domain means it isn't registered. It says nothing about price; premium domains can cost far more.- Results reflect the moment you ran it. Someone can register the name a minute later.
If this saved you time
A star helps other people find it.
More from AmagiLabs
- amagilabs: other small open source dev tools from the same lab.
- amagi-watch: turn a video URL into a Claude-readable transcript and frame index.
- amagi-legal-review-skills: Claude Code skills for contract and lease review.
License
MIT, see LICENSE. Copyright (c) 2026 Amagisolutionsgroup, Inc. (AmagiLabs)
Metadata
Release files for amagi-name-check 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| amagi_name_check-0.1.0.tar.gz | 29.0 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| amagi_name_check-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 51.0 kB
Release files / amagi_name_check-0.1.0.tar.gz
| Download URL | amagi_name_check-0.1.0.tar.gz |
|---|---|
| Size | 29.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0674393a3454924af775e4878c602902d4acfe45f7bfb5117a48c056e710ceb6
|
|
BLAKE2b-256 checksum How to use checksums |
bfe13fb2414d28d39022892f746f4c20782dcd82c9de62d7ad450d075003f066
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.4
|
Release files / amagi_name_check-0.1.0-py3-none-any.whl
| Download URL | amagi_name_check-0.1.0-py3-none-any.whl |
|---|---|
| Size | 22.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5699f3756b33fa1766b1930136f138ceb523e6eaf6b030ac961569161a4140f9
|
|
BLAKE2b-256 checksum How to use checksums |
a62464867376d0ff386e4489888e2020837eb8868a81165d51255916d45f1c26
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.4
|
Security for amagi-name-check 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.