dependency-verification
Pre-install check that a package NAME exists and isn't a typosquat, plus intake vetting for third-party agent config (skills, MCP entries, hooks).
Skill by ajyadav013
Chalk Labs
Need help deploying dependency-verification?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/ajyadav013-dependency-verification
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: security, agent-building
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Nov 1, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/dependency-verification
What's inside
- Skill name
dependency-verification- Description
- Pre-install check that a package NAME exists and isn't a typosquat, plus intake vetting for third-party agent config (skills, MCP entries, hooks). NOT for judging worth (library-review) or CVE audits (dependency-scanner).
- License
- MIT
- Instructions
- 165 lines in SKILL.md · view on GitHub
Before installing
- Instructions call the network
Files (1)
- SKILL.md
SKILL.md (first lines)
# Dependency Verification (pre-install name check)
> A package name the model produced is a **claim**, not a fact. The registry is the fact. Verify
> before you install. Adapted (stack-agnostic) from the MIT-licensed
> [`athola/claude-night-market`](https://github.com/athola/claude-night-market) `dependency-verification` skill.
## Why this exists
Code-generating models recommend packages that **do not exist** at a measured rate of ~5% (commercial
models) to ~22% (open models), and ~58% of the hallucinated names *recur* across reruns — so an
attacker can predict a commonly-hallucinated name, register the empty slot, and ship malware. This is
**"slopsquatting"** (the LLM-era cousin of typosquatting). A proof-of-concept package registered
against a frequently-hallucinated name drew tens of thousands of installs. The rate does *not* fall to
zero with a better model. The defense is cheap: **confirm the name exists in its registry before you
install or recommend it.**
## When to use
Before any of:
- running an install command — `pip install`, `uv add`, `npm install`, `pnpm add`, `yarn add`,
`cargo add`, `go get`, `poetry add`, `gem install`, `composer require`, …
- writing a dependency into a manifest — `pyproject.toml`, `requirements.txt`, `package.json`,
`Cargo.toml`, `go.mod`, `Gemfile`, …
- **recommending a package to the user in prose** (a hallucinated recommendation is still a defect).
## The two failure signals
A candidate fails verification on **either**:
1. **Nonexistent** — the name is absent from its registry (e.g. HTTP 404). Likely a hallucination.
Do not install; find the correct name, or confirm the package was renamed/removed.
2. **Typosquat / slopsquat** — the name is one or two edits from a popular package (`reqeusts` vs
`requests`, `python-dateutil` vs a look-alike). Either a typo or deliberate impersonation —
restate the exact name you intend and confirm before proceeding.
## Three states (never fail closed on a network error)
| State | Registry result | Action |
|-------|-----------------|--------|
| **exists** | 200 / found | pass |
| **nonexistent** | 404 / not found | block — likely hallucination |
| **unverified** | timeout / rate-limit / offline / non-404 error | **warn only, never block** — don't fail closed on a network problem |
## Verification procedure
1. Extract the exact names the command or manifest edit would fetch (strip version specifiers/flags).
2. Confirm existence in the ecosystem's registry. A common, well-known package needn't be checked;
verify anything unfamiliar, freshly-suggested, or near a popular name.
3. For any name close to a popular package, restate the intended name and confirm.
4. Capture the check as evidence (registry URL + HTTP status) when the install lands in a PR.
### Registry existence endpoints
| Ecosystem | URL (`{name}` = package) | Exists / Absent |
|-----------|--------------------------|------------------|
| PyPI | `https://pypi.org/pypi/{name}/json` | 200 / 404 |
| npm | `https://registry.npmjs.org/{name}` | 200 / 404 |
| crates.io | `https://crates.io/api/v1/crates/{name}` | 200 / 404 |
| other | the ecosystem's registry/index API | found / not-found |
```bash
# Prints the HTTP status: 200 = exists, 404 = does not. (PyPI shown; swap the URL per ecosystem.)
curl -s -o /dev/null -w '%{http_code}\n' "https://pypi.org/pypi/requests/json"
```
## A confidence signal, not a second gate
Once a name clears the two signals, real-world usage is a *softer* signal that the name is the
established one, not a freshly-registered impostor: GitHub dependents / code-search hits for the exact
name, repo stars + recent activity, download history (a popular-sounding name registered yesterday is
a red flag; a modest name with years of releases is reassuring). **Low usage never blocks on its own**
— new, niche, internal, and private packages are legitimately low-usage. Use it to build confidence
and disambiguate two similar names, then hand a *real* candidate to `library-review` for the full
adopt/reject evaluation.
## Where this sits (the supply-chain layers)
```
need a dep at all? → mandatory-workflow.md §2a.5 (Reuse & YAGNI gate)
which dep, is it healthy?→ library-review skill (adopt/reject evaluation)
does this NAME exist? → THIS skill (pre-install: hallucination/typosquat) ◄── you are here
agent-config artifact? → THIS skill (agent-config supply chain — intake vetting, section below)
install
use its CURRENT api? → Context7 MCP (live docs) · library-skills (author-shipped, version-synced skills)
installed deps: CVEs? → dependency-scanner agent (post-install CVE/outdated audit)
lockfile/artifact integrity? → dependency-scanner agent (supply-chain integrity mode)
```
**The "use its current API" layer** is the same root defense as the name check, one step later: the
model's memory of a library's API is also a *claim*, and it goes stale as the library releases. Ground
usage in the source — [`library-skills`](https://library-skills.io) (MIT) installs a dependency's
*author-shipped, version-synced* skills into `.agents/skills/` (managed symlinks; `uvx library-skills`
/ `npx library-skills`) for the growing set of libraries that ship them, and the Context7 MCP (live
docs) covers the rest. Both beat reconstructing an out-of-date API from training data.
**Optional enforcement:** a `PreToolUse` hook on install commands can run this check automatically
(warn-by-default; block on nonexistent/typosquat when configured). The hook is a backstop — verify
deliberately when you add a dependency rather than waiting for the gate.
## Agent-config supply chain — vetting third-party skills, agents, MCP entries, and hooks
Everything above verifies *code* dependencies. A third-party **skill, agent definition, MCP server
entry, hook script, or slash command is a dependency too** — one whose payload is *instructions your
agent will follow with your credentials*. Installing one grants it your agent's privileges
(`agent-guardrails` §4). This section is the **canonical intake check** for any
agent-config artifact from outside your org; other skills and rules link here rather than restating it.
### Threat taxonomy — what a malicious artifact actually does
| Vector | Mechanism |
|--------|-----------|
| **Visible instruction poisoning** | The prose itself directs the agent to exfiltrate secrets, weaken checks, or add a backdoor — buried mid-file where a skim misses it. |
| **Hidden-content injection** | Instructions a human reviewer cannot see: zero-width characters, bidi overrides, Unicode Tags (U+E0000–E007F), HTML comments, data-URIs, base64 blobs the agent may later decode. |
| **Privilege-carrier abuse** | Frontmatter grants (`provider-native tool allowlist metadata`, a broad `tools:` list) far wider than the artifact's stated job needs. |
| **Executable payloads** | Hook scripts and lifecycle commands run *as your user* when triggered — deterministic execution, not "if the model decides to". |
| **Credential mis-routing** | An MCP entry requests env vars that don't belong to the service it fronts (your Git token handed to a "weather" server). |
| **Lookalike names** | The same typosquat economics as packages — a marketplace artifact one edit away from a popular one. |
### Intake procedure (before the artifact enters `.ckit/` or `.codex/config.toml`)From ajyadav013/claude-kit, MIT.
More from ajyadav013/claude-kit
- 0.602score
data-engineering-bigquery-gcs
ajyadav013
BigQuery medallion architecture (bronze/silver/gold), parameterized queries, MERGE upserts, partitioning, CDC dedup, Temporal orchestration.
SkillBFreshness: B★ 14Claude Code +9 - 0.602score
async-python-patterns
ajyadav013
Async Python for high-performance services.
SkillBFreshness: B★ 14Claude Code +9 - 0.602score
backend-repo-architecture
ajyadav013
Canonical backend repository structure for Python/FastAPI — multi-mode entrypoint, app factory, ConnectionManager, BaseDao, flat vs versioned layout.
SkillBFreshness: B★ 14Claude Code +9 - 0.602score
cron-and-scheduled-jobs
ajyadav013
Scheduled jobs across two mechanisms — Kubernetes CronJobs (schedule in Helm values, MODE=cron) and Temporal Schedules.
SkillBFreshness: B★ 14Claude Code +9 - 0.602score
api-and-interface-design
ajyadav013
Stable API and interface design patterns.
SkillBFreshness: B★ 14Claude Code +9 - 0.602score
api-pagination-filtering-sorting
ajyadav013
HTTP query parameter conventions for pagination, filtering, sorting, and search with standardized response metadata.
SkillBFreshness: B★ 14Claude Code +9 - 0.602score
code-simplification
ajyadav013
Simplifies/refactors working code for clarity without changing behavior.
SkillBFreshness: B★ 14Claude Code +9 - 0.602score
auth-and-rbac
ajyadav013
FastAPI auth patterns — session/JWT chains, argon2id hashing, pyotp TOTP/Email OTP, role-based access control, x-user-data gateway forwarding.
SkillBFreshness: B★ 14Claude Code +9 - 0.602score
docker-shared
ajyadav013
Shared Docker building blocks — base images for private registries, .dockerignore conventions, compose fragment reuse with YAML anchors.
SkillBFreshness: B★ 14Claude Code +9 - 0.602score
dockerfile-backend
ajyadav013
Multi-stage Dockerfiles for Python/FastAPI backends — builder vs runtime, slim vs alpine, system deps, layer caching, non-root users.
SkillBFreshness: B★ 14Claude Code +9 - 0.602score
anthropic-vertex-integration
ajyadav013
Claude on Vertex AI via the AnthropicVertex SDK — lazy ADC client init, env-based project/region resolution, async helpers, backoff retry.
SkillBFreshness: B★ 14Claude Code +9 - 0.602score
design-patterns-and-conventions
ajyadav013
Cross-cutting design patterns, naming, folder layout, and anti-patterns for production Python/FastAPI backends.
SkillBFreshness: B★ 14Claude Code +9
Signals
- Stars
- 14
- Forks
- 5
- Open issues
- 9
- Last commit (this folder)
- Aug 22, 2026 (2 months ago)
- Last release
- Sep 7, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/ajyadav013/claude-kit
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from ajyadav013
- 0.602score
anthropic-vertex-integration
ajyadav013
Claude on Vertex AI via the AnthropicVertex SDK — lazy ADC client init, env-based project/region resolution, async helpers, backoff retry.
SkillBFreshness: B★ 14Claude Code +9 - 0.602score
dockerfile-backend
ajyadav013
Multi-stage Dockerfiles for Python/FastAPI backends — builder vs runtime, slim vs alpine, system deps, layer caching, non-root users.
SkillBFreshness: B★ 14Claude Code +9 - 0.602score
code-simplification
ajyadav013
Simplifies/refactors working code for clarity without changing behavior.
SkillBFreshness: B★ 14Claude Code +9 - 0.602score
cron-and-scheduled-jobs
ajyadav013
Scheduled jobs across two mechanisms — Kubernetes CronJobs (schedule in Helm values, MODE=cron) and Temporal Schedules.
SkillBFreshness: B★ 14Claude Code +9 - 0.602score
docker-shared
ajyadav013
Shared Docker building blocks — base images for private registries, .dockerignore conventions, compose fragment reuse with YAML anchors.
SkillBFreshness: B★ 14Claude Code +9 - 0.602score
api-and-interface-design
ajyadav013
Stable API and interface design patterns.
SkillBFreshness: B★ 14Claude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get dependency-verification running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
dependency-verification skill. Agent Mart. https://agentmart.dev/skills/ajyadav013-dependency-verification (last updated 2026-10-24)