Dependency Check
Your job is to help the user decide whether adding this dependency is a good idea — or whether they'd be better off writing 30 lines themselves. Every dependency is a long-term liability. Default to skepticism.
Step 1 — Identify the package
- The user will name a package (
left-pad, lodash, requests, etc.) and an ecosystem (npm, PyPI, crates.io, Go modules).
- If the ecosystem is unclear, infer from the project: look at
package.json, requirements.txt, pyproject.toml, go.mod, Cargo.toml.
- If the user is evaluating multiple candidates, check each in turn.
Step 2 — Gather the facts
Use WebFetch or the registry CLI to answer these. If offline, ask the user to paste the info.
What it does
- The first paragraph of the README. In your own words, one sentence.
- The core API surface — what you actually call.
Maintenance health
- Last release date. Six months = fine. Two years = be careful. Five years = probably unmaintained.
- Open issues vs. closed issues.
- Open PRs sitting stale.
- Number of maintainers. A bus factor of 1 on a package you depend on is a risk.
Popularity
- Weekly downloads (npm) / stars / dependents. Not a quality signal on its own, but very low numbers + recent changes = experimental.
- Are any well-known projects depending on it?
Supply chain
- How many transitive dependencies does it pull in? Run
npm view <pkg> dependencies or equivalent.
- Any recent security advisories? (
npm audit, pip-audit, GitHub Security Advisories.)
- Is it published by a known author/org, or a freshly-created account?
- Does it run install scripts? Post-install scripts are a classic supply-chain attack vector.
License
- Compatible with your project's license? GPL in an MIT project is a problem. Unlicensed / "no license" = you don't have rights to use it.
Size
- Bundle size (for frontend).
bundlephobia.com or similar.
- Install footprint (server). Does it pull in 400MB of native deps for a 10-line utility?
Step 3 — Evaluate the need
Ask honestly: could the user write this themselves in under an hour?
- If the package is <100 lines and the API is small → probably write it.
- If the package handles genuinely hard things (cryptography, parsing, timezones, HTTP) → don't reinvent, use a well-maintained one.
- If a closer alternative already exists in the project's stdlib or existing deps → use that.
Step 4 — Output
## Verdict
Add it / Don't add it / Maybe, with caveats.
## What it does
One sentence.
## Health
- Last release: [date]
- Maintainers: [n]
- Open issues / PRs: [n / n]
- Transitive deps: [n]
- License: [license]
- Known vulns: [yes/no, which]
## Alternatives
- [alt 1] — why it might be better/worse
- [alt 2] — ...
- Rolling your own — rough LoC estimate and what you'd have to handle
## Risks
- [concrete risk 1]
- [concrete risk 2]
## Recommendation
One paragraph. If "add it": pin to what version and why. If "don't": what to do instead.
Rules
- Be blunt about abandonware. A package whose last commit was 2019 is a yes-or-no decision, not a maybe.
- Supply chain is not paranoia. Left-pad, event-stream, ua-parser-js — these were real incidents. A dependency with one maintainer and install scripts is a real risk.
- Count transitive deps.
is-odd pulling in is-number pulling in kind-of is a meme for a reason.
- Don't recommend "just write it yourself" for things that are genuinely hard. Crypto, date/time, HTTP, parsing — use the library.
- If the user has already added it and wants a retroactive check: give them a path to removal or replacement if warranted, not just a grade.
1---2name: dependency-check3description: This skill should be used when the user types /dependency-check, is about to add a package, or asks whether they should pull in a library.4---56# Dependency Check78Your job is to help the user decide whether adding this dependency is a good idea — or whether they'd be better off writing 30 lines themselves. Every dependency is a long-term liability. Default to skepticism.910## Step 1 — Identify the package1112- The user will name a package (`left-pad`, `lodash`, `requests`, etc.) and an ecosystem (npm, PyPI, crates.io, Go modules).13- If the ecosystem is unclear, infer from the project: look at `package.json`, `requirements.txt`, `pyproject.toml`, `go.mod`, `Cargo.toml`.14- If the user is evaluating multiple candidates, check each in turn.1516## Step 2 — Gather the facts1718Use `WebFetch` or the registry CLI to answer these. If offline, ask the user to paste the info.1920### What it does21- The first paragraph of the README. In your own words, one sentence.22- The core API surface — what you actually call.2324### Maintenance health25- Last release date. Six months = fine. Two years = be careful. Five years = probably unmaintained.26- Open issues vs. closed issues.27- Open PRs sitting stale.28- Number of maintainers. A bus factor of 1 on a package you depend on is a risk.2930### Popularity31- Weekly downloads (npm) / stars / dependents. Not a quality signal on its own, but very low numbers + recent changes = experimental.32- Are any well-known projects depending on it?3334### Supply chain35- How many transitive dependencies does it pull in? Run `npm view <pkg> dependencies` or equivalent.36- Any recent security advisories? (`npm audit`, `pip-audit`, GitHub Security Advisories.)37- Is it published by a known author/org, or a freshly-created account?38- Does it run install scripts? Post-install scripts are a classic supply-chain attack vector.3940### License41- Compatible with your project's license? GPL in an MIT project is a problem. Unlicensed / "no license" = you don't have rights to use it.4243### Size44- Bundle size (for frontend). `bundlephobia.com` or similar.45- Install footprint (server). Does it pull in 400MB of native deps for a 10-line utility?4647## Step 3 — Evaluate the need4849Ask honestly: could the user write this themselves in under an hour?5051- If the package is <100 lines and the API is small → probably write it.52- If the package handles genuinely hard things (cryptography, parsing, timezones, HTTP) → don't reinvent, use a well-maintained one.53- If a closer alternative already exists in the project's stdlib or existing deps → use that.5455## Step 4 — Output5657```58## Verdict59Add it / Don't add it / Maybe, with caveats.6061## What it does62One sentence.6364## Health65- Last release: [date]66- Maintainers: [n]67- Open issues / PRs: [n / n]68- Transitive deps: [n]69- License: [license]70- Known vulns: [yes/no, which]7172## Alternatives73- [alt 1] — why it might be better/worse74- [alt 2] — ...75- Rolling your own — rough LoC estimate and what you'd have to handle7677## Risks78- [concrete risk 1]79- [concrete risk 2]8081## Recommendation82One paragraph. If "add it": pin to what version and why. If "don't": what to do instead.83```8485## Rules8687- **Be blunt about abandonware.** A package whose last commit was 2019 is a yes-or-no decision, not a maybe.88- **Supply chain is not paranoia.** Left-pad, event-stream, ua-parser-js — these were real incidents. A dependency with one maintainer and install scripts is a real risk.89- **Count transitive deps.** `is-odd` pulling in `is-number` pulling in `kind-of` is a meme for a reason.90- **Don't recommend "just write it yourself" for things that are genuinely hard.** Crypto, date/time, HTTP, parsing — use the library.91- **If the user has already added it** and wants a retroactive check: give them a path to removal or replacement if warranted, not just a grade.