К основному содержанию
скилл CX Codex

check-npm — скилл для Claude Code: аудит npm, yarn и pnpm

Проверяет конфигурацию пакетного менеджера в JS/TS-репозитории: версии инструментов, lifecycle-скрипты, опасные протоколы зависимостей и минимальный возраст релиза.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add grafana/skills --skill check-npm -a claude-code
Открыть на GitHub

Что делает check-npm

Скилл читает корень рабочего пространства и ничего не меняет. Сначала он определяет пакетный менеджер: смотрит поле packageManager в package.json, потом файлы блокировок, иначе считает, что это npm. Без package.json работа останавливается сразу.

Дальше идут четыре проверки. Версия инструмента должна быть не ниже порога: npm 11.15.0, yarn 4.14.0, pnpm 11.0.0. Затем скилл ищет отключённые lifecycle-скрипты — ignore-scripts=true для npm, enableScripts: false для yarn, strictDepBuilds для pnpm. Отдельно сканируются манифесты на небезопасные протоколы: git-URL, тарболлы, file:, link: и подобное. Последний пункт — минимальный возраст релиза не меньше 3 дней, то есть 4320 минут.

На выходе таблица со статусами PASS и FAIL и готовые фрагменты конфигов для каждого провала. Учтите: pnpm 11+ игнорирует настройки скриптов в .npmrc и в package.json#pnpm, поэтому старые строки там ничего не дадут. Если всё прошло, скилл просто сообщает об этом и останавливается.

Какие задачи решает

  • проверить, что в проекте отключены lifecycle-скрипты зависимостей
  • найти git-URL и тарболлы среди зависимостей
  • убедиться, что версия npm или pnpm не ниже порога
  • выставить минимальный возраст релиза в 3 дня
  • получить готовые строки конфига для найденных провалов

Примеры запросов агенту

  • проверь npm-конфигурацию этого репозитория на supply-chain риски
  • запусти аудит пакетного менеджера и покажи таблицу PASS/FAIL
  • посмотри, отключены ли lifecycle-скрипты и есть ли git-зависимости

Как установить check-npm

1Через Skills CLI (Vercel)

npx skills add grafana/skills --skill check-npm -a claude-code

2Вручную: положить файлы

~/.claude/skills/check-npm/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/check-npm/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о check-npm

Как установить check-npm в Claude?

Выполните npx skills add grafana/skills --skill check-npm -a claude-code. Скилл окажется в ~/.claude/skills/check-npm/SKILL.md.

Что делает check-npm?

Проверяет конфигурацию npm, yarn или pnpm на четыре вещи: версия инструмента, отключённые lifecycle-скрипты, небезопасные протоколы зависимостей и минимальный возраст релиза не меньше 3 дней. Ничего не меняет, только читает.

Почему на pnpm 11 настройки в .npmrc не сработают?

pnpm 11 и новее игнорирует настройки скриптов в .npmrc и в package.json#pnpm. Проверять и править их нужно в pnpm-workspace.yaml.

Исходный текст

SKILL.md · Apache-2.0
---
name: check-npm
license: Apache-2.0
disable-model-invocation: false
description: >-
  Audit a JavaScript/TypeScript repo's npm, yarn, or pnpm configuration for
  supply-chain hardening: tool version, lifecycle scripts, unsafe dependency
  protocols, and minimum release age ≥3 days. Use when the user invokes
  /check-npm or asks to audit package manager security, lifecycle scripts, git
  dependencies, ignore-scripts, min-release-age, allow-git,
  approvedGitRepositories, strictDepBuilds, or blockExoticSubdeps in a Grafana
  plugin or JS/TS project.
---

# npm / yarn / pnpm supply-chain audit

Read-only audit of the workspace root. Do not modify any files.

## 0. Detect package manager

```bash
test -f package.json || { echo "STOP: no package.json at workspace root"; exit 1; }
jq -r '.packageManager // "unset"' package.json
ls -1 yarn.lock package-lock.json pnpm-lock.yaml 2>/dev/null || true
```

If no `package.json`, stop. Priority: `packageManager` → lockfile → default npm.

## 1. Tool version

```bash
npm --version    # required ≥ 11.15.0
yarn --version   # required ≥ 4.14.0
pnpm --version   # required ≥ 11.0.0
```

Use semver comparison. Verify pinned `packageManager` meets threshold.

| Manager | Minimum |
|---------|---------|
| npm | 11.15.0 |
| yarn | 4.14.0 |
| pnpm | 11.0.0 |

## 2. Lifecycle scripts disabled

```bash
grep -E '^ignore-scripts=' .npmrc 2>/dev/null
grep -E 'enableScripts:' .yarnrc.yml 2>/dev/null
grep -E 'strictDepBuilds:|dangerouslyAllowAllBuilds:|allowBuilds:' pnpm-workspace.yaml 2>/dev/null
```

| Manager | PASS | FAIL |
|---------|------|------|
| npm | `.npmrc` has `ignore-scripts=true` | missing or `false` |
| yarn | `enableScripts: false` or key absent | `enableScripts: true` |
| pnpm ≥ 11 | `strictDepBuilds` unset/`true`, `dangerouslyAllowAllBuilds` unset/`false`, and `allowBuilds` unset/`[]` | `strictDepBuilds: false`, `dangerouslyAllowAllBuilds: true`, or `allowBuilds` non-empty |
| pnpm 10 | `.npmrc` `ignore-scripts=true` OR `strictDepBuilds: true` | neither |

pnpm 11+ ignores script settings in `.npmrc` and `package.json#pnpm`. pnpm 10 / yarn edge cases: [references/managers.md](references/managers.md).

## 3. Unsafe dependency protocols

Registry:

```bash
grep -E '^allow-git=' .npmrc 2>/dev/null
grep -E 'approvedGitRepositories:' .yarnrc.yml 2>/dev/null
grep -E 'blockExoticSubdeps:' pnpm-workspace.yaml 2>/dev/null
```

Scan workspace `package.json` files (`dependencies`, `devDependencies`, `optionalDependencies`, `peerDependencies`). Prefer workspace-member discovery (pnpm-workspace.yaml / root workspaces / lerna / rush) per [references/protocols.md](references/protocols.md), then scan only those manifests. Fallback (may overmatch non-workspace manifests):

    find . -name package.json -not -path '*/node_modules/*'

**Safe values only:** semver range, `workspace:`, `patch:`, `npm:` alias to semver. Flag everything else (git URLs, tarballs, `user/repo` shorthand, `file:`, `link:`, `exec:`, …) as `path → name → value (protocol)`.

| Manager | PASS | FAIL |
|---------|------|------|
| npm | `allow-git=none` or `root` | missing or `all` |
| yarn | `approvedGitRepositories: []` or grafana-scoped list, or omitted with policy comment + clean scan | unsafe entries or broad allow-list |
| pnpm ≥ 11 | `blockExoticSubdeps` unset/`true` | `false` |
| pnpm 10.x | `blockExoticSubdeps: true` | unset (default `false`) or `false` |

Protocol detection order and yarn posture details: [references/protocols.md](references/protocols.md).

## 4. Minimum release age ≥ 3 days

3 days = 4320 minutes. npm uses **days**; yarn and pnpm use **minutes**.

```bash
grep -E '^min(imum)?-release-age=' .npmrc 2>/dev/null
grep -E 'npmMinimalAgeGate:' .yarnrc.yml 2>/dev/null
grep -E 'minimumReleaseAge:|minimumReleaseAgeStrict:' pnpm-workspace.yaml 2>/dev/null
```

| Manager | PASS | FAIL |
|---------|------|------|
| npm | `min-release-age` ≥ `3` | missing |
| yarn | `npmMinimalAgeGate` ≥ 4320 min | missing or below |
| pnpm ≥ 11 | `minimumReleaseAge` ≥ `4320` | unset (default `1440`) or below |
| pnpm 10 | `minimum-release-age` / `minimumReleaseAge` ≥ `4320` | missing |

Flag `minimumReleaseAgeStrict: false` on pnpm 11.

## 5. Report

| # | Check | Status | Detail |
|---|---|---|---|
| 0 | Package manager | (npm / yarn / pnpm) | version: x.y.z (pinned: y.y.y if set) |
| 1 | Tool version ≥ threshold | PASS / FAIL | `actual` vs `required` |
| 2 | Scripts disabled | PASS / FAIL | config line or "missing" |
| 3 | Unsafe dep protocols | PASS / FAIL | registry state + flagged entries |
| 4 | Min release age ≥ 3 days | PASS / FAIL | config + value |

Use `PASS` / `FAIL` only — no emojis.

For each FAIL, one paste-ready fix:

```ini
# npm — .npmrc
ignore-scripts=true
allow-git=none
min-release-age=3
```

```yaml
# pnpm 11 — pnpm-workspace.yaml
strictDepBuilds: true
dangerouslyAllowAllBuilds: false
allowBuilds: []
minimumReleaseAge: 4320
blockExoticSubdeps: true
```

```yaml
# yarn — .yarnrc.yml
npmMinimalAgeGate: 4320
```

More fixes (tool upgrades, yarn git allow-list, pnpm 10): [references/fix-snippets.md](references/fix-snippets.md).

If all PASS: "All checks passed." and stop.

© grafana · Apache-2.0 · grafana/skills

Похожие скиллы

Всё по теме «Безопасность» →
dependency-upgrade secondsky Помогает обновлять зависимости без риска: настраивает карантин для новых версий, блокирует postinstall-скрипты и ведёт обновления поэтапно. CX Codex +1 404установок npm-security-best-practices reason-machines Помогает защищать npm-зависимости от атак на цепочку поставок и настраивать безопасную установку пакетов. Пригодится для Node.js-проектов. CX Codex +1 919установок link-workspace-packages nrwl Скилл добавляет зависимости между пакетами монорепозитория через workspace-команды npm, yarn, pnpm или bun. Пригодится, когда импорт из соседнего пакета падает с ошибкой резолва. CX Codex +1 3 100установок dependencies-audit cognitedata Скилл находит уязвимости, устаревшие и заброшенные пакеты, проблемы с лицензиями и чинит их, а не просто составляет отчёт. CX Codex +1 1 900установок dependency-check ruvnet Сканирует зависимости проекта на известные уязвимости и CVE. Запускается перед релизом, после изменения lockfile или при расследовании Advisory. CX Codex +1 748установок updating-npm-package spencerpauly Инструмент помогает обновлять npm-пакеты без скрытых поломок в коде. Он сверяет версии через npmjs.com и строит отчёт о миграции при мажорных релизах. CX Codex +1 398установок

Из того же набора47

prometheus-label-strategy Помогает спроектировать схему меток Prometheus, оценить кардинальность и убрать лишние лейблы в коде приложения или таргетах сбора до отправки в хранилище. CX Codex +1 3 800установок k6-perf-test-website Разворачивает гибридные нагрузочные тесты сайта на k6, связывает протокольные сценарии с проверками в браузере и следит за нагрузкой генератора. CX Codex +1 3 300установок datasources-provisioning Генерирует готовые файлы провижининга источников данных Grafana в формате YAML или Terraform по официальной схеме плагина из CDN. CX Codex +1 3 000установок k6-manage Управляет нагрузочными тестами, логами и метриками в Grafana Cloud k6 через утилиту gcx или прямые запросы curl. CX Codex +1 2 900установок audit-and-reduce-dependencies Очищает дерево зависимостей JavaScript в проектах с pnpm и сокращает размер lockfile без изменения структуры воркспейса. Пригодится при оптимизации плагинов Grafana и монорепозиториев. CX Codex +1 2 800установок k6-cloud-investigate-test Ведёт агента по девяти шагам разбора теста или прогона Grafana Cloud k6: скрипт, история запусков, статус, метрики и логи. CX Codex +1 2 600установок k6-trend-analysis Анализирует динамику прогонов тестов Grafana Cloud k6 и выявляет медленную деградацию метрик до срабатывания порогов. Пригодится для оценки запаса производительности и аудита тестов. CX Codex +1 2 600установок k6-test-maintenance Скилл для сопровождения уже написанных k6-тестов: подтягивает пороги по данным трендов, переносит скрипты на новую версию k6, чинит тесты после изменений в сервисе. CX Codex +1 2 700установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой