Vérification de paquet avant installation

VérifiéSûr

Vérifie l'existence et la réputation des paquets avant installation. Empêche les attaques de slop-squatting en bloquant les paquets suspects.

Spar Skills Guide Bot
SecuriteIntermédiaire
26/07/2026
Claude CodeCursorCodex
#supply-chain-security#package-verification#slopsquatting#dependency-management#install-guard

Recommandé pour

Synthèse automatique

Intercepte le moment juste avant une installation de paquet ou l'ajout d'une nouvelle dépendance/import tiers pour vérifier que le paquet existe réellement sur le registre et évaluer sa réputation, avant d'exécuter la moindre commande d'installation.

Points forts

  • Blocage explicite : toute commande d'installation est retenue tant que la vérification et l'approbation humaine n'ont pas eu lieu
  • Couvre quatre écosystèmes (npm, PyPI, crates.io, RubyGems) et sait extraire les paquets directement depuis un manifeste (requirements.txt, package.json, pyproject.toml, Cargo.toml, Gemfile)
  • Génère des commandes d'installation sûres avec version exacte, fichier de verrouillage et vérification de hachage au lieu de laisser l'agent improviser
  • Refuse d'inscrire un verdict 🔴 en liste blanche, ce qui ferme la porte à un contournement permanent du contrôle

Limites

  • Dépend du script fourni scripts/verify_packages.py et d'un accès réseau aux registres de paquets ; sans lui la procédure ne peut pas s'exécuter
  • La vérification porte sur l'existence et la réputation du nom : un paquet réel mais récemment publié et malveillant peut passer le filtre
  • Les rapports générés sont en coréen par défaut, ce qui demande une traduction pour des utilisateurs francophones
  • Ne traite que npm, PyPI, crates et RubyGems ; les autres gestionnaires de paquets ne sont pas couverts
Quand l'utiliser

À utiliser dès qu'un agent s'apprête à lancer npm/pip/yarn/pnpm/poetry/cargo/gem install, à modifier un manifeste de dépendances ou à ajouter un import de paquet tiers.

Quand l'éviter

Inutile pour les imports de la bibliothèque standard, les imports internes ou relatifs du projet, ou pour un paquet déjà figé et vérifié dans un fichier de verrouillage existant.

Analyse de sécurité

Sûr
Score qualité88/100

This is a defensive gate skill, not an offensive one: it explicitly forbids executing install commands before verification, mandates a human approval step, blocks 🔴 packages, and requires lockfile+hash-pinned installs. No destructive commands, no secret/token exfiltration, no curl|sh or obfuscated payloads. The only residual risk is the referenced verify_packages.py script (unshown, network-facing) and the allowlist state it writes, so a reviewer should confirm that script matches the described deterministic behavior before listing.

Points d'attention
  • •Instructions rely on a bundled script (scripts/verify_packages.py) that is not included in the SKILL.md text, so its actual network/registry behavior and file writes cannot be audited here
  • •'approve' subcommand persists packages into assets/allowlist.json, creating persistent state that later runs trust without re-verification (mitigated by the rule that 🔴 can never be allow-listed)
  • •Runs Bash to invoke python and package managers, and presumably performs network lookups against npm/PyPI/crates/rubygems registries
Comment cette analyse est faite

Exemples

Add a library via install
Add image processing to this project and install whatever library you need for it.
Fix module-not-found
I'm getting 'ModuleNotFoundError: No module named requests' — just pip install it for me so the script runs.
Add dependency to a manifest
Add langchain-community-helpers to my requirements.txt and install it so I can import it in the new module.

name: slopsquat-guard description: >- 패키지를 설치하거나 새 import/의존성을 추가하기 '직전'에 발동하라. "npm install", "pip install", "yarn add", "pnpm add", "poetry add", "cargo add", "gem install" 을 실행하려 할 때 / requirements.txt·package.json·pyproject.toml·Cargo.toml·Gemfile 을 고쳐 새 패키지를 넣으려 할 때 / 코드에 설치가 필요한 외부·서드파티 패키지의 import·require 를 새로 추가하려 할 때(표준 라이브러리·프로젝트 내부/상대 import 는 제외) / "module not found"·"No module named"·"Cannot find module" 오류를 설치로 해결하려 할 때, 먼저 이 스킬로 패키지의 실존·평판을 검증하라. 검증 전에는 어떤 설치 명령도 실행하지 마라. (triggers: install package, add dependency, add library, add third-party import, fix module-not-found, npm/pip/yarn/pnpm/poetry/cargo/gem install) allowed-tools: Bash, Read

slopsquat-guard — 설치 직전 패키지 검증 게이트

AI가 생성한 코드의 약 20%는 존재하지 않는 패키지를 참조하고, 그렇게 지어낸 이름의 약 43%는 같은 이름으로 반복 등장한다. 반복된다는 건 공격자가 그 이름을 미리 악성 패키지로 선점해 둘 수 있다는 뜻이다(슬롭스쿼팅). 비개발자는 module not found 오류가 뜨면 의심 없이 시키는 대로 설치한다 — 이 스킬은 바로 그 순간을 가로채 막는다.

🛑 절대 규칙 (HARD RULES)

  1. 검증되지 않은 패키지를 자동 설치하지 않는다. 항상 사람 승인 게이트를 거친다.
  2. 설치 명령을 먼저 실행하지 않는다. 검증 → 리포트 → (필요시) 승인 순서를 지킨다.
  3. 🔴(차단)/🟡(주의)가 하나라도 있으면 설치를 멈추고 사용자 승인을 먼저 받는다.
  4. 🔴는 사용자가 **"위험을 이해했고 그래도 진행한다"**고 명시적으로 답하기 전엔 진행 불가.
  5. 설치는 잠금파일 고정 + 해시 검증으로만 한다(package-lock.json / requirements 해시 / poetry.lock / pnpm-lock.yaml / Cargo.lock 등).
  6. 코드엔 있는데 레지스트리엔 없는 이름이면 **"AI가 지어낸 이름일 수 있다"**고 먼저 알린다.
  7. 🔴는 화이트리스트에 넣지 않는다. 사용자가 위험을 감수하고 강제 진행하더라도 그건 '이번 한 번'일 뿐이며, approve로 영구 등록하는 것은 🟢/🟡 승인에만 허용된다(🔴를 등록하면 슬롭스쿼팅 우회로가 된다).

동작 절차 (이 순서를 지킨다)

참고: 아래 명령의 scripts/·references/·assets/ 경로는 모두 이 SKILL.md 가 있는 스킬 폴더 기준이다. 사용자 프로젝트 루트에서 실행할 때는 스킬 폴더의 절대경로를 앞에 붙여라 (예: python "<스킬폴더>/scripts/verify_packages.py" ... — Windows 등 경로에 공백이 있으면 큰따옴표로 감싼다).

  1. 개입 시점 — 패키지를 설치하거나 코드에 새 import/의존성을 추가하기 직전에 멈춘다. 설치 명령을 먼저 실행하지 않는다.
  2. 추출 — 추가하려는 패키지 이름과 생태계(npm / pypi / crates / rubygems)를 모은다.
  3. 검증 — scripts/verify_packages.py 를 실행한다.
    python scripts/verify_packages.py --report --ecosystem pypi  <패키지...>
    python scripts/verify_packages.py --json '[{"name":"react","ecosystem":"npm"}]'
    python scripts/verify_packages.py --report --manifest requirements.txt   # 매니페스트 전체 자동 추출
    
    (--report = 한국어 리포트 텍스트, 인자 없이 = JSON. 종료코드: 🔴=2, 🟡=1, 전부 🟢=0. 매니페스트 파일을 수정해 새 패키지를 넣으려 할 땐 --manifest <파일> 로 한 번에 검사한다.)
  4. 리포트 — 결과를 references/REPORT_FORMAT.md 형식의 한국어로 사용자에게 보여준다.
  5. 게이트 — 🔴 또는 🟡가 하나라도 있으면 설치를 멈추고 명시적 승인을 요청한다. 승인 전까지 어떤 설치 명령도 실행하지 않는다.
  6. 승인 후 설치 — 잠금파일 + 해시로만 설치한다. 화이트리스트(approve) 등록은 🟢/🟡 판정을 사용자가 승인한 경우에만 한다. 🔴를 강제 진행하면 이번 한 번만 설치하고 등록하지 않는다(다음에 다시 검증받게 둔다 — 스크립트도 기본적으로 🔴 등록을 거부한다. 의도적 강제 옵션이 있으나 일반 절차에서는 쓰지 않는다).
    python scripts/verify_packages.py approve <패키지> <생태계>           # 🟢/🟡 승인 기록 (🔴엔 쓰지 않는다)
    python scripts/verify_packages.py install-cmd <패키지> <생태계> [버전]  # 안전 설치 명령(잠금+해시) 생성
    
    install-cmd 가 출력한 명령을 그대로 실행한다(직접 설치 명령을 지어내지 않는다).

승인 후 안전 설치 명령 (잠금파일 고정 + 해시 검증)

  • pip : pip-compile --generate-hashes 로 해시 박힌 requirements 생성 → pip install --require-hashes -r requirements.txt
  • npm : npm install <pkg>@<정확한버전> --save-exact → 이후 npm ci (lockfile 무결성 검증)
  • pnpm : pnpm add <pkg>@<버전> --save-exact → pnpm install --frozen-lockfile
  • yarn : yarn add <pkg>@<버전> --exact → yarn install --immutable
  • poetry : poetry add <pkg>@<버전> (poetry.lock 에 해시 기록) → poetry install
  • cargo : cargo add <pkg>@<버전> (Cargo.lock 에 체크섬 기록)

워크드 예시

사용자: "이미지 처리 기능 추가해줘" → AI가 pip install image-utils-pro 를 실행하려 함. → 스킬 발동: 설치를 멈추고 python scripts/verify_packages.py --report --ecosystem pypi image-utils-pro 실행. → PyPI에 image-utils-pro 없음. → 리포트(스크립트 실제 출력):

📦 패키지 안전 점검 결과

🔴 차단 — image-utils-pro : Python(pip) 공식 패키지 목록(앱을 받는 공식 앱스토어 같은 곳)에 이런 이름이 없습니다(AI가 이름을 지어냈을 가능성). → 설치를 멈췄습니다. 진행하려면 승인이 필요합니다.

※ 이 중 하나라도 🔴/🟡가 있으면 제가 임의로 설치하지 않습니다.

→ "정확한 이미지 라이브러리(예: Pillow)를 찾아드릴까요?"라고 묻고, 승인 없이는 설치하지 않는다.

동봉 파일

  • scripts/verify_packages.py — 실존·평판·타이포스쿼팅·교차 레지스트리·보안경고 검증(결정적 로직).
  • assets/allowlist.json — 사전 승인 패키지 화이트리스트(재검증 없이 통과, deprecated·보안 취약점이면 예외).
  • assets/denylist.json — 알려진 악성·사칭 차단 목록(존재해도 항상 🔴).
  • references/REPORT_FORMAT.md — 사용자에게 보여줄 한국어 리포트 포맷.

Du fichier au premier essai

Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.

Consulter la source et ses fichiers annexes

Ce téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.

1. Télécharger le fichier

Télécharger SKILL.md

Depuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/pre-install-package-verification-ms1aw3sz/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.

Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.

mkdir -p '.skill-downloads/pre-install-package-verification-ms1aw3sz' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/pre-install-package-verification-ms1aw3sz/download' --output '.skill-downloads/pre-install-package-verification-ms1aw3sz/SKILL.md.part' && mv '.skill-downloads/pre-install-package-verification-ms1aw3sz/SKILL.md.part' '.skill-downloads/pre-install-package-verification-ms1aw3sz/SKILL.md'

2. Vérifier les prérequis

Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.

Outils déclarés par l’auteur (à vérifier dans votre agent) : Bash, Read

Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.

Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.

3. Charger la skill

Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.

Claude Code
test -f '.skill-downloads/pre-install-package-verification-ms1aw3sz/SKILL.md' && test -s '.skill-downloads/pre-install-package-verification-ms1aw3sz/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/slopsquat-guard' && cp -R '.skill-downloads/pre-install-package-verification-ms1aw3sz' '.claude/skills/slopsquat-guard'

Cursor
test -f '.skill-downloads/pre-install-package-verification-ms1aw3sz/SKILL.md' && test -s '.skill-downloads/pre-install-package-verification-ms1aw3sz/SKILL.md' && mkdir -p '.cursor/skills' && test ! -e '.cursor/skills/slopsquat-guard' && cp -R '.skill-downloads/pre-install-package-verification-ms1aw3sz' '.cursor/skills/slopsquat-guard'

Codex
test -f '.skill-downloads/pre-install-package-verification-ms1aw3sz/SKILL.md' && test -s '.skill-downloads/pre-install-package-verification-ms1aw3sz/SKILL.md' && mkdir -p '.agents/skills' && test ! -e '.agents/skills/slopsquat-guard' && cp -R '.skill-downloads/pre-install-package-verification-ms1aw3sz' '.agents/skills/slopsquat-guard'

OpenSkills

OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.

Installation officielle d’OpenSkills
openskills install './.skill-downloads/pre-install-package-verification-ms1aw3sz'

openskills read 'pre-install-package-verification-ms1aw3sz'

La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.

Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.

openskills sync

Mode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.

4. Faire un premier essai

Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :

Lis .skill-downloads/pre-install-package-verification-ms1aw3sz/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.

Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.

Skills similaires