Skip to content
Agentmart
Submit a tool

dependency-review

Supply-chain review of dependency and CI changes in an open-source pull request.

Skill by Priyank Patel

IndexedApache-2.0★ 1
Write a review

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/priyank766-dependency-review

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.

We use your email only for this newsletter. Privacy

About

Supply-chain review of dependency and CI changes in an open-source pull request. Use when a PR adds or bumps a dependency, changes a lockfile, introduces a build or postinstall script, edits a GitHub Actions workflow, changes a container base image, or when a bot-generated dependency bump needs human judgement before merge. Covers install-time code execution, package-identity and typosquat checks, artifact provenance, transitive footprint, license class, and workflow privilege changes. Ecosystem-agnostic — npm, PyPI, Go, Cargo, RubyGems, Composer, containers. Do NOT use for routine patch bumps from a trusted bot where the lockfile diff is clean, no new packages appear, and CI is green.

Use cases: devops, productivity

No 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. Checked Oct 25, 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-review

What's inside

Skill name
dependency-review
Description
Supply-chain review of dependency and CI changes in an open-source pull request. Use when a PR adds or bumps a dependency, changes a lockfile, introduces a build or postinstall script, edits a GitHub Actions workflow, changes a container base image, or when a bot-generated dependency bump needs human judgement before merge. Covers install-time code execution, package-identity and typosquat checks, artifact provenance, transitive footprint, license class, and workflow privilege changes. Ecosystem-agnostic — npm, PyPI, Go, Cargo, RubyGems, Composer, containers. Do NOT use for routine patch bumps from a trusted bot where the lockfile diff is clean, no new packages appear, and CI is green.
License
Apache-2.0
Metadata
suite: opensource-review-suite · author: Priyank Patel · domain: supply-chain · version: 1.0.0 · severity_floor: 7.5
Instructions
443 lines in SKILL.md · view on GitHub

Before installing

  • Instructions call the network
  • Instructions read files in your home folder (~/.ssh, ~/.aws…)

Files (8)

  • SKILL.md
  • CI-AND-CONTAINER-REVIEW.md · references/
  • DETECTION-PLAYBOOK.md · references/
  • IS-IT-NEEDED.md · references/
  • PACKAGE-IDENTITY.md · references/
  • PROVENANCE-AND-LICENSING.md · references/
  • QUALITY-FILTER.md · references/
  • REVIEW-VOICE.md · references/

SKILL.md (first lines)

# Dependency & Supply-Chain Review

The lens for PRs where the risk is not in the diff's own code but in the code the diff
invites in. Layered on top of [`pr-review`](https://github.com/priyank766/OpenSource-SKILL/blob/main/skills/pr-review/SKILL.md).

**Read first:** [`DETECTION-PLAYBOOK.md`](references/DETECTION-PLAYBOOK.md) ·
[`QUALITY-FILTER.md`](references/QUALITY-FILTER.md) ·
[`REVIEW-VOICE.md`](references/REVIEW-VOICE.md)

> **Where the time goes.** Finding the flaw is the review. The playbook above is the
> general flaw-hunting procedure; this file is the domain-specific lens on top of it.
> Scoring and writing the comment are the last ten minutes, not the work.

**Severity floor: 7.5** — lower than the suite default of 8.0. A malicious or compromised
dependency executes with full build and runtime privilege on every contributor's laptop
and inside CI, where the tokens live. A false positive costs one thread of discussion. A
miss costs the project's release signing key. That asymmetry justifies the lower bar; it
does not justify posting health-score trivia.

---

## The governing rule

> Adding a dependency adds every one of that package's maintainers to your project's trust
> boundary — and every maintainer of every one of its transitive dependencies too.

So the review question is never "is this library good". It is:

**What does merging this let someone else execute, and where?**

"Where" has three answers, in descending order of severity: in CI with repository
credentials, on a contributor's machine at install time, and in production at runtime.
Score against the worst reachable one.

---

## Why this exists

Dependency PRs are the ones reviewers rubber-stamp. The manifest diff is one line, the
bot's changelog link looks fine, CI is green — and green CI is exactly what an
install-time payload produces. Meanwhile the actual review surface, the lockfile, is
collapsed by default in the GitHub UI as a generated file.

The default AI pass on these PRs is worse than useless: it summarises the changelog and
notes that the package is popular. That is a 5/10 comment on a diff with a 10/10 finding
three hundred lines down.

### What each role gets out of it

| Role | Time this gives back |
| :--- | :--- |
| **Maintainer** | The lockfile read you keep postponing, done as a checklist. You get "12 new transitive packages, one with a postinstall, here it is" instead of a 3,000-line generated diff you were going to scroll past. |
| **Contributor** | A pre-flight on your own dependency addition — wrong section, duplicate major version, copyleft license — so the first maintainer reply is not a request to remove it. |
| **Project owner** | A repeatable bar for what enters the trust boundary, and a blast-radius argument you can point at when justifying pinning, `--ignore-scripts`, or SHA-pinned actions. |

---

## Procedure

```mermaid
flowchart TD
    A[Dependency or CI change detected] --> B[1. Diff the lockfile, not the manifest]
    B --> C[1b. Enumerate newly added packages, direct and transitive]
    C --> D[2. Run ecosystem vulnerability scanners]
    D --> E[3. Enumerate install-time scripts across the new tree]
    E --> F[4. Check package identity]
    F --> G[5. Check provenance, health, and license]
    G --> H[6. Review CI workflow and image changes]
    H --> I[7. Ask whether the dependency is needed at all]
    I --> J[Score against the 10-point filter]
    J -->|"score below 7.5"| K[Discard or batch into an issue]
    J -->|"score 7.5 or above"| L[Report with evidence]
    J -->|"suspected active compromise"| M[Do not comment publicly. Contact maintainers privately]
```

---

## 1. Read the lockfile diff, not the manifest

A one-line manifest change can pull forty transitive packages. The manifest states intent;
the lockfile states what actually gets installed. Only one of those is the trust boundary.

```bash
git diff base...head -- \
  package.json package-lock.json yarn.lock pnpm-lock.yaml npm-shrinkwrap.json \
  pyproject.toml uv.lock poetry.lock Pipfile.lock requirements*.txt \
  go.mod go.sum Cargo.toml Cargo.lock Gemfile Gemfile.lock composer.json composer.lock

git diff --stat base...head -- '*lock*' '*.sum'
```

Count what actually arrived. A "bump lodash" PR that adds 40 package entries is not a bump.

```bash
# npm / pnpm / yarn — new package entries in the lockfile
git diff base...head -- package-lock.json | grep -E '^\+\s+"node_modules/' | sort -u | wc -l
git diff base...head -- pnpm-lock.yaml    | grep -E '^\+\s{2}/' | sort -u

# Go — every added module line
git diff base...head -- go.sum | grep '^+' | awk '{print $1, $2}' | sort -u

# Cargo / Poetry / uv — added package stanzas
git diff base...head -- Cargo.lock  | grep -A2 '^\+name = '
git diff base...head -- poetry.lock uv.lock | grep -E '^\+name = '

# Python requirements
git diff base...head -- 'requirements*.txt' | grep -E '^\+[^-+]'
```

Then diff the resolved sets rather than the text, which removes reordering noise:

```bash
git show base:package-lock.json | jq -r '.packages | keys[]' | sort > /tmp/before.txt
jq -r '.packages | keys[]' package-lock.json | sort > /tmp/after.txt
comm -13 /tmp/before.txt /tmp/after.txt          # packages added by this PR
```

Three lockfile shapes deserve their own look, regardless of scanner output:

From priyank766/OpenSource-SKILL, Apache-2.0.

Signals

Stars
1
Forks
0
Open issues
0
Last commit (this folder)
Aug 6, 2026 (2 months ago)

From GitHub (fetched Oct 24, 2026).

Details

Version
1.0.0
License
Apache-2.0
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from Priyank Patel

Cite this page

dependency-review skill. Agent Mart. https://agentmart.dev/skills/priyank766-dependency-review (last updated 2026-10-24)