
safer-dependencies v0.6.0
AIコーディングアシスタント向けの自動依存関係セキュリティレイヤー。npm、PyPI、RubyGems、Maven、Go、Rustエコシステム全体で、パッケージのCVE、タイポスクワッティング、放置、バージョン経年問題、ハッシュ整合性を監査します。
Claude Code向けのより安全な依存関係管理
ClaudeのようなAIコーディングアシスタントがプロジェクトにパッケージを追加するとき、多くの場合、既知のセキュリティ脆弱性があるかどうか、パッケージがまだ積極的にメンテナンスされているかどうか、あるいは名前が悪意のある偽物とタイプミス1文字違いではないかどうかを確認せずに、適当に聞こえるバージョンを選びます。
safer-dependenciesはClaude Codeのセキュリティレイヤーです。Claudeとマニフェストファイルの間に位置し、セキュリティチェックを自動的に実行します。脆弱なインストールは実行前に拒否され、マニフェストに書き込まれたリスクのあるバージョンは書き込み直後にディスク上で修正されます。CVE、タイポスクワット、放棄されたパッケージ、バージョンの古さの問題に加え、新規リリースに対するクールダウン期間を検出して修正し、npm、PyPI、RubyGems、Maven、Go、Rust、PHP(Composer)に対応しています。正確に何がカバーされ、何がカバーされていないかはCAPABILITIES.mdを参照してください。
初めての方ですか? GETTING-STARTED.mdでは、約5分でゼロから動作するインストールまでを案内します。
セキュリティとプライバシー: SECURITY.md(脆弱性の開示)、PRIVACY.md(データ外部送信、テレメトリなし)、CAPABILITIES.md(このツールが防御するものとしないもの)を参照してください。
ライセンス(ソース利用可能 — OSI「オープンソース」ではありません): 自分の目的のために自由に使用・変更できます。営利目的・社内利用、販売する製品の構築を含みます。ソフトウェア自体を収益化する場合 — 販売、販売される製品やサービスへの同梱、または第三者への機能提供(ホステッド/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つのチェックを実行します:
- 出所 — 公式レジストリ、タイポスクワット検出(npm/PyPI/RubyGems/Maven/crates.io)、パッケージの経過期間
- バージョンの古さ — 7日以上前に公開された最新の安定版を選択(クールダウン期間)
- 脆弱性スキャン — OSV API、利用可能な場合はエコシステムネイティブツール(npm audit、pip-audit、bundle audit)
- ハッシュピン整合性 —
--hash=sha256:...ピンを含むPyPIrequirements.txt行について、宣言されたハッシュがPyPIの公開ハッシュと照合され、不一致はWARNINGを発します - 放棄・陳腐化パッケージ — 既知の放棄パッケージ(例:
paperclip、request、pycrypto、github.com/dgrijalva/jwt-go)は、代替案の提案とともに即座にハードブロックされます。2年以上安定版リリースがないパッケージには、アドバイザリのSTALE:警告が発行されます。ハードブロックされたパッケージはマニフェストから削除され、Claudeが今後の進め方を尋ねます。陳腐化のみのパッケージはそのまま残されます。
問題が見つかった場合、Claudeは警告を発し、より安全なバージョンに戻ることがあります。すべてのチェックは~/.claude/safer-dependencies-audit-YYYY-MM.log(暦月ごとに1ファイル)に記録されます。
トリガー条件
このスキルは、Claudeが以下の操作を行うときに自動的に発動します:
マニフェスト / インストール操作
package.json、requirements.txt、Gemfile、pom.xml、build.gradle、Cargo.toml、go.mod、その他の対応マニフェストでパッケージを追加または更新- マニフェストにまだ宣言されていないパッケージの
import、require、useを書き込む - ロックファイルを生成または更新(新規/変更されたエントリのみチェック)
- Bash経由でパッケージマネージャーのインストールを実行(
npm install、bundle install、poetry install、uv sync、go mod tidyなど)— インストール前はコマンド引数を監査し、インストール後は結果のロックファイルを監査 - ピン留めされたパッケージマネージャーのインストール手順を埋め込んだ
DockerfileまたはCIワークフロー(.github/workflows/*.ymlなど)を書き込む
選択・推奨に関する質問
- ライブラリ/フレームワークの比較:「axiosとnode-fetchのどちらを使うべき?」、「moment vs dayjs?」、「XとYではどちらが良い?」
- 推奨リクエスト:「Python用の良いHTTPクライアントは?」、「Go用のロギングライブラリを推奨して」、「NodeでCSVを扱うパッケージは?」
- バージョン選択:「どのバージョンのDjangoを使うべき?」、「最新の安定版Flaskは?」
使用意図の表明(追加前)
- 「これにFastAPIを使いたい」、「Celeryの追加を考えている」、「ORMとしてPrismaを検討している」、「Tailwindを使おう」
パッケージの健全性と信頼性に関する質問
- 「moment.jsはまだメンテナンスされていますか?」、「このgemはまだアクティブですか?」、「Xは放棄されていますか?」、「XはEOLですか?」、「このパッケージは信頼できますか?」、「fakerが最後に更新されたのはいつですか?」
スキャフォールディングコマンド
npx create-react-app、npm create vite@latest、django-admin startproject、rails new、cargo new+cargo add、「新しいFastAPIプロジェクトをブートストラップ」
暗黙のパッケージ追加(新しい依存関係を意味する機能リクエスト)
- 「アプリにRedisキャッシュを追加」、「Postgresに接続」、「JWT認証を追加」、「メールを送信するコードを書く」— その機能のパッケージがマニフェストにまだない場合に発動
移行と移植
- 「requestsからhttpxに移行」、「CRAからViteに移行」、「momentからdate-fnsに移植」— 移行先のパッケージを監査
以下の場合には発動しません:
- 標準ライブラリのインポート(
os、fs、java.util.*など) - 変更されていない既に宣言済みの依存関係
- パッケージの内部動作に関する学術的議論(「Reactのreconcilerを説明して」、「webpackのモジュール解決はどう機能する?」)— 比較や選択の質問は発動します
- OSレベルのアプリ、ランタイム、IDE拡張機能のインストール(Python自体、Docker、Homebrew、VS Code拡張機能)
このリポジトリの内容
これはスキル + フックのバンドルであり、単一のスキルファイルではありません。完全なインストールでは以下の要素が展開されます:
| ファイル | 役割 |
|---|---|
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がスキルに手を伸ばすかどうかに依存します。完全なカバレッジのために5つの要素すべてをインストールしてください。多くのスキルやスラッシュコマンドは内部的にサブエージェントをディスパッチするため、明示的にサブエージェントを起動しなくても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
インストーラーは、スコープ(グローバルかプロジェクトか)と有効にするフックをプロンプトで尋ね、その後、フックエントリ**と**、スキルのチェックコマンドが監査のたびに承認プロンプトなしで実行できるようにする権限許可リストの両方を`settings.json`に書き込みます。