
AI 코딩 어시스턴트를 위한 자동화된 의존성 보안 계층으로, npm, PyPI, RubyGems, Maven, Go 및 Rust 생태계 전반에서 패키지의 CVE, 타이포스쿼트, 유기, 버전 수명 문제 및 해시 무결성을 감사합니다.
Claude와 같은 AI 코딩 어시스턴트가 프로젝트에 패키지를 추가할 때, 알려진 보안 취약점이 있는지, 패키지가 여전히 활발히 유지 관리되는지, 또는 이름이 악성 유사 패키지와 오타 하나 차이인지 확인하지 않고 그럴듯해 보이는 버전을 선택하는 경우가 많습니다.
safer-dependencies는 Claude Code용 보안 계층입니다. Claude와 매니페스트 파일 사이에 위치하여 보안 검사를 자동으로 실행합니다. 취약한 설치가 실행되기 전에 차단되고, 매니페스트에 기록된 위험한 버전은 기록 직후 디스크에서 수정됩니다. npm, PyPI, RubyGems, Maven, Go, Rust, PHP(Composer) 전반에 걸쳐 CVE, 타이포스쿼팅, 유지 관리 중단된 패키지, 버전 노후화 문제, 그리고 새로 출시된 버전에 대한 쿨다운 기간 등 위험한 의존성을 감지하고 수정합니다. 정확히 무엇이 포함되고 포함되지 않는지는 CAPABILITIES.md를 참조하세요.
처음이신가요? GETTING-STARTED.md가 약 5분 만에 설치 완료 상태까지 안내합니다.
보안 및 개인정보: SECURITY.md(취약점 공개), PRIVACY.md(데이터 외부 전송, 텔레메트리 없음), CAPABILITIES.md(도구가 방어하는 것과 방어하지 않는 것)를 참조하세요.
라이선스(소스 공개 — OSI "오픈소스" 아님): 자신의 목적을 위해 무료로 사용 및 수정할 수 있습니다. 영리 목적/회사 내부 사용 및 판매하는 제품 구축을 포함합니다. 별도의 유료 라이선스는 소프트웨어 자체를 수익화하는 경우에 만 필요합니다 — 판매, 판매되는 제품이나 서비스에 포함하여 배포, 또는 유료로 제3자에게 기능 제공(호스팅/SaaS/API 포함). 재배포 및 파생물은 라이선스를 유지하고 이 프로젝트를 출처로 표시해야 합니다. LICENSE 참조(상업적 제한은 섹션 4); 상업용 라이선스 요청은 github.com/robert-auger를 통해.
**GETTING-STARTED.md**가 약 5분 만에 설치 완료 상태까지 안내합니다 — 사전 요구 사항, 대화형 설치, 검증. 전체 설치 참조(전역/프로젝트/수동 설치, Windows 관련 사항, 권한 허용 목록, 업데이트, 제거)는 **INSTALLATION.md**를 참조하세요.
일상적인 사용: 훅이 설치되면 실행할 것이 없습니다 — safer-dependencies는 백그라운드에서 자동으로 작동합니다. Claude가 패키지를 추가하거나 설치할 때, 위험한 의존성에 플래그를 지정하고 취약한 버전을 안전한 버전으로 제자리에서 업그레이드하며 — 알려진 취약점이 있는 설치는 실행 전에 차단합니다 — 따라서 안전하지 않은 패키지는 요청하지 않아도 감지되고 수정됩니다. 언제든지 직접 호출할 수도 있습니다: "[email protected]이 안전한가요?", "safer-dependencies 설정 확인", "safer-dependencies 통계 표시".
Claude가 프로젝트에 패키지를 추가하려고 할 때, safer-dependencies가 차단하고 5가지 검사를 실행합니다:
--hash=sha256:... 고정이 있는 PyPI requirements.txt 줄의 경우, 선언된 해시가 PyPI의 게시된 해시와 대조 검증됩니다. 불일치 시 WARNING이 발생합니다paperclip, request, pycrypto, github.com/dgrijalva/jwt-go)는 대체 패키지 제안과 함께 즉시 하드 차단됩니다. 2년 이상 안정 릴리스가 없는 패키지는 권고 STALE: 경고를 받습니다. 하드 차단된 패키지는 매니페스트에서 제거되고 Claude가 진행 방법을 묻습니다. 오래된 패키지만 있는 경우는 그대로 둡니다.문제가 발견되면 Claude가 경고를 발생시키고 더 안전한 버전으로 되돌아갈 수 있습니다. 모든 검사는 ~/.claude/safer-dependencies-audit-YYYY-MM.log에 기록됩니다(월별 파일 하나).
이 스킬은 Claude가 다음 작업을 수행할 때 자동으로 실행됩니다:
매니페스트 / 설치 작업
package.json, requirements.txt, Gemfile, pom.xml, build.gradle, Cargo.toml, go.mod 또는 기타 지원되는 매니페스트에서 패키지를 추가하거나 업데이트import, require 또는 use 작성npm install, bundle install, poetry install, uv sync, go mod tidy 등) — 설치 전은 명령 인수를 감사하고, 설치 후는 결과 잠금 파일을 감사Dockerfile 또는 CI 워크플로(.github/workflows/*.yml 등) 작성선택 및 추천 질문
사용 의도 표현(추가 전)
패키지 상태 및 신뢰 질문
스캐폴딩 명령
npx create-react-app, npm create vite@latest, django-admin startproject, rails new, cargo new + cargo add, "새 FastAPI 프로젝트 부트스트랩"암시적 패키지 추가(새 의존성을 암시하는 기능 요청)
마이그레이션 및 포팅
다음 경우에는 실행되지 않습니다:
os, fs, java.util.* 등)이것은 스킬 + 훅 번들이며, 단일 스킬 파일이 아닙니다. 완전한 설치는 다음 구성 요소를 배포합니다:
| 파일 | 역할 |
|---|---|
skills/safer-dependencies.md | 스킬(설치 시 SKILL.md). 감사 절차를 설명하고 설치/통계를 위한 관리 모드를 포함합니다. |
skills/safer-dependencies-shim.sh | PostToolUse:Write/Edit 훅 — 매니페스트 및 잠금 파일 쓰기를 감사하고 취약한 버전을 제자리에서 자동 수정합니다(차단 모드). |
skills/safer-dependencies-pretooluse-bash.sh | PreToolUse:Bash 훅 — 패키지 관리자 설치 명령의 사전 OSV 감사. 설치가 실행되기 전에 취약한 구체적 고정을 거부합니다(설치 전 모드). |
skills/safer-dependencies-posttooluse-bash.sh | PostToolUse:Bash 훅 — Bash 명령 후 사후 감사. 새로 작성된 잠금 파일, sed/jq/스크립트로 편집된 매니페스트, 일반 pip install의 해석된 환경에서 전이적 CVE를 포착합니다(설치 후 모드). |
skills/safer-dependencies-pretooluse-agent.sh + skills/safer-dependencies-posttooluse-agent.sh | PreToolUse:Agent + PostToolUse:Agent 훅 쌍 — 하위 에이전트 커버리지 격차를 해소합니다. 모드 2~4는 루트 세션 도구 호출에만 실행되므로 하위 에이전트가 작성하는 매니페스트는 이를 우회합니다. Post-Agent는 각 Agent 도구 호출이 반환된 후 하위 에이전트가 작성한 내용을 감사합니다(에이전트 후 모드). |
skills/scripts/ | 모든 훅이 사용하는 공유 Python 라이브러리(safedep/) 및 독립 실행형 해석기 스크립트. |
skills/scripts/safer_dependencies_manager.py | 대화형 설치, 사용 통계 및 설정 검증을 위한 관리 모듈. |
스킬 파일만으로는 충분하지 않습니다 — 훅이 없으면 자동 호출은 Claude가 스킬을 사용하기로 결정하는 데 의존합니다. 전체 커버리지를 위해 다섯 가지 구성 요소를 모두 설치하세요. 많은 스킬과 슬래시 명령이 내부적으로 하위 에이전트를 디스패치하므로, 명시적으로 하위 에이전트를 생성하지 않더라도 Post-Agent 쌍이 중요합니다. (스킬 단독으로 커버리지를 보장할 수 없는 이유는 FAQ.md를 참조하세요.)
| 생태계 | 매니페스트 | 잠금 파일 |
|---|---|---|
| npm | package.json | package-lock.json, yarn.lock, pnpm-lock.yaml |
| PyPI | requirements.txt, pyproject.toml, Pipfile, setup.py, setup.cfg | Pipfile.lock, poetry.lock, uv.lock |
| RubyGems | Gemfile, *.gemspec | Gemfile.lock |
| Maven | pom.xml, build.gradle, libs.versions.toml | -- |
| Go | go.mod | go.sum |
| Rust | Cargo.toml | Cargo.lock |
| PHP(Composer) | composer.json | composer.lock |
프로젝트가 처음이신가요? **GETTING-STARTED.md**부터 시작하세요. 간단히 요약하면:```bash git clone https://github.com/robert-auger/safer-dependencies /tmp/safer-dependencies python3 /tmp/safer-dependencies/skills/scripts/safer_dependencies_manager.py interactive_install
설치 프로그램은 범위(전역 vs 프로젝트)와 활성화할 훅을 묻고, 사용자를 위해 `settings.json`을 작성합니다 — 훅 항목 **및** 스킬의 검사 명령이 감사 때마다 승인 프롬프트 없이 실행되도록 하는 권한 허용 목록 모두를 포함합니다.