COMSPEC と PATHEXT を使って cmd.exe または PowerShell を解決します。インストールコマンドと対話式インストーラーは、npm が Windows 上で .cmd shim としてインストールしたエージェント CLI も検出します。このため、install --codex などのコマンドでも対象の CLI を見つけられます。ただし、Windows で自動テストしているのはアナライザーと一部の連携だけです。それ以外の Windows 対応はベストエフォートで、未検証です。Amp のマニュアルが対応対象として挙げているのも macOS、Linux、WSL であり、Windows ネイティブではありません。
Hermes Agent と OpenClaw の連携は、macOS と Linux でのみ動作します。POSIX のホームディレクトリパスである ~/.hermes と ~/.openclaw を使用し、Windows のパスには対応していません。
始める前に Node.js 18 以降をインストールしてください。以降の例では、npx で CLI のサブコマンドを実行します。
連携を 1 つインストールするには cc-safety-net install <target-flag>、削除するには cc-safety-net uninstall <target-flag> を使います。インストール済みの連携をまとめて更新するには cc-safety-net update を使います。
対話形式でインストールする
Space で対象を選び、Enter で確定します。u を押すと、インストール済みの連携をすべて更新します。q または Esc を押すと、何も変更せずに終了します。@latest は省略しないでください。バージョンを指定しないと、npx キャッシュに残った古い cc-safety-net が最新リリースの代わりに実行されることがあります。このため、このページのインストール、アンインストール、更新コマンドはすべてバージョンを固定しています。
同じ手順でアンインストールできます。
ccsn が使えます。
npx で実行する場合は、cc-safety-net という完全な名前を使ってください。
インストール済み連携を更新する
インストール済みの連携をその場でまとめて更新するには、次を実行します:update は、無効化されたものも含め、インストール済みの連携を検出します。その後、各連携のインストール処理を更新モードで再実行します。対象エージェントの CLI が見つからない連携は、スキップしたと報告します。連携が 1 つもインストールされていない場合は、先に cc-safety-net install を実行するよう案内します。対話式インストーラーで u を押した場合も、同じ更新処理が動きます。
update は、メジャーバージョン間のアップグレード手段でもあります。v1 のインストール環境で実行すると、インストール済みの連携をすべて現在の v2 リリースに移行します。v1 のインライン設定でカスタムルールを定義していた場合は、以前の設定の移行を済ませてください。その後、npx cc-safety-net doctor でランタイムが ready になっていることを確認します。
2.2 以前で GitHub から rulebook を導入していた場合は、アップグレード後にスコープごとに rule sync を 1 回実行してください。ユーザースコープには --global を付けます。rulebook はロックとキャッシュではなくライブファイルになりました。そのためこのコマンドは、キャッシュ済みの各 rulebook を、その設定元が読み込むライブファイルの位置へ取り込み、残ったファイルを削除します。実行するまで、GitHub から導入したルールは無効なままで、status と doctor はその設定元を degraded として報告します。
特定のエージェントをインストールする
スクリプトから非対話的にインストールする場合は、対象フラグをちょうど 1 つ渡します。対象フラグが 0 個または 2 個以上の場合はエラーになります。対話的なターミナルで対象フラグを渡さなかった場合は、インストーラーの選択画面が開きます。
インストールコマンドはいずれも冪等です。設定済みのエージェントに対して再実行しても安全で、管理対象のエントリは 1 つだけ残ります。
Amp Code
cc-safety-net という名前のディレクトリで、Amp が読み込むエントリファイル index.ts を収めています。personal plugin はアカウントに紐づいてどこでも有効になるため、Amp Orb などのリモートマシンで実行されるスレッドも保護できます。
インストールには amp CLI とサインイン済みのアカウントが必要です。まず amp plugins repositories --json を実行して、書き込み可能な Personal Plugins リポジトリを探します。CLI がない場合やサインインしていない場合は、amp login を案内してインストールを中止します。続いて user-plugins を使い捨ての一時ディレクトリにクローンし、cc-safety-net/index.ts を書き込み、cc-safety-net というツール ID でコミットしてプッシュします。コミット署名は無効にするため、グローバルな git 設定がインストールを妨げることはありません。ステージングでは、ディレクトリではなくこのファイルだけをパスで指定します(git add -- cc-safety-net/index.ts)。リポジトリがそのパスを gitignore している場合は、git add が失敗してインストールが停止します。何もステージしないまま、プラグインをインストール済みとして報告することはありません。コマンドを再実行すると、公開済みのファイルをその場で更新します。
以前のリリースは、リポジトリのルートに単一ファイル cc-safety-net.ts を公開していました。インストールはこの旧構成から移行します。管理対象の旧ファイルは同じコミットで削除し、管理対象外の場合はインストールが失敗します。
インストール時には、ユーザーのポリシーファイルのスナップショットも、公開するファイルに埋め込みます。実行時にこのスナップショットが適用されるのは、ポリシーファイルが存在しないマシン(Orb の空のホームディレクトリなど)だけです。マシン上にポリシーファイルがあれば、たとえ内容が不正でもそちらが常に優先されます。ポリシーファイルが存在しない、またはパースできない場合は、スナップショットなしで公開します。スナップショットには、監査ログの保持期間、ユーザー rulebook、プロジェクトスコープのポリシーは含まれません。ポリシーの変更は、次回の install --amp または update で反映されます。
cc-safety-net/index.ts を削除します。ルートに管理対象の cc-safety-net.ts が残っていれば、あわせて削除します。削除するのはこのエントリだけなので、cc-safety-net ディレクトリに置いた他のファイルはそのまま残ります。ルートの旧パスにあるそれ以外のもの、つまり管理対象外のファイル、シンボリックリンク、ディレクトリには手を触れません。削除したパスとして報告するのは cc-safety-net ディレクトリです。ルートの旧ファイルしか見つからなかった場合は、そのファイルを報告します。
インストール、更新、アンインストールの後は、変更を反映するために Amp を再起動するか
plugins: reload を実行してください。cc-safety-net がシンボリックリンクの場合、またはディレクトリでない場合は拒否します。その中の index.ts が、シンボリックリンクの場合、通常ファイルでない場合、CC Safety Net の管理用ヘッダーを持たない場合も拒否します。リポジトリ側でそのエントリを削除してから、コマンドを再実行してください。
以前のリリースでは、プラグインをローカルファイル ~/.config/amp/plugins/cc-safety-net.ts にコピーしていました。また、プラグインのディレクトリを手作業で ~/.config/amp/plugins/cc-safety-net/ にコピーすることもできます。どちらも personal plugin を覆い隠すため、インストールは公開後にこれらを削除します。削除するのは、旧ファイルが管理対象のコピーである場合と、ローカルディレクトリが管理対象の index.ts だけを含む場合です。この 2 つのパスにそれ以外のローカルエントリがある場合、インストールは次のエラーで失敗します。
Antigravity CLI
~/.gemini/config/hooks.json に管理対象の PreToolUse エントリを書き込み、run_command ツール呼び出しのたびに npx -y cc-safety-net hook --agy-cli を実行します。
hook は npx 経由で動作するため、インストール時にはまず npm キャッシュの _npx ディレクトリからキャッシュ済みの cc-safety-net を削除し、hook が最新リリースを解決できるようにします。キャッシュの場所は、$npm_config_cache が設定されていればそのパス、未設定であれば macOS と Linux では ~/.npm、Windows では %LOCALAPPDATA%\npm-cache です。アンインストールではキャッシュに手を加えません。
/cc-safety-net skill をインストールできます。
Claude Code
kenryu42/cc-marketplace から cc-marketplace マーケットプレイスを追加し、cc-safety-net@cc-marketplace プラグインをインストールします。無効化されたものがすでにある場合は、それを有効にします。
/plugin を実行し、Marketplaces に移動し、cc-marketplace を選択して auto-update を有効にします。
プラグインは Coding CLI hook である
cc-safety-net hook --coding-cli(短いフラグは -cc)を呼び出します。これが正式なフラグ名です。hook --claude-code は以前からのエイリアスとしてのみ受け付けます。新しい設定では使わないでください。Codex
kenryu42/cc-marketplace から cc-marketplace マーケットプレイスを追加し、cc-safety-net@cc-marketplace プラグインをインストールします。
Codex への対応には、既知の適用範囲の制限が 1 つあります。すでに起動しているインタラクティブなセッションに入力されたテキストは、検査も監査もされません。Codex の対象境界を参照してください。
hook を信頼する
Codex は信頼されていない hook を実行しません。Codex を起動して /hooks を開き、cc-safety-net PreToolUse hook を選択して t を押し、信頼済みにします。
このプラグインは Codex 独自の形式でパッケージ化されています。hook が実行するのは
cc-safety-net hook --codex(短いフラグは -cx)です。cc-safety-net スキルも同じプラグインに同梱されています。Cursor
~/.cursor/hooks.json)に、管理対象の preToolUse エントリとして次を書き込みます。
failClosed を指定しているため、hook が判定を返せない場合、Cursor はそのツール呼び出しを拒否します。
hook は npx 経由で動作するため、インストール時にはまず npm の _npx キャッシュからキャッシュ済みの cc-safety-net を削除し、hook が最新リリースを解決できるようにします。アンインストールではキャッシュに手を加えません。キャッシュの場所は Antigravity CLI のセクションを参照してください。
Gemini CLI
https://github.com/kenryu42/gemini-safety-net から Gemini Safety Net 拡張機能をインストールします。無効化されたものがすでにある場合は、それを再度有効にします。Gemini CLI は cc-marketplace のプラグインではありません。この拡張機能は、拡張機能 ID gemini-safety-net として独自のリポジトリで公開されています。
GitHub Copilot CLI
cc-marketplace マーケットプレイスが未登録であれば追加し、cc-safety-net@cc-marketplace プラグインをインストールします。~/.copilot/settings.json の enabledPlugins で明示的に無効化されている場合は、true に変更します。
変更を反映するため、プラグインのインストールまたは削除後に Copilot CLI を再起動してください。
.github/hooks 内のリポジトリ hook ファイル、.github/copilot/settings.local.json、.github/copilot/settings.json、.claude/settings.local.json、.claude/settings.json、~/.copilot/settings.json、~/.copilot/config.json 内のインライン hook 定義、~/.copilot/hooks 内のユーザー hook ファイルを確認します。インライン hook 定義には Copilot CLI 1.0.8 以降、ユーザー hook ファイルには 0.0.422 以降が必要です。この条件はプラグインが処理するため、通常は意識する必要はありません。hook を手動で設定して問題が起きた場合は、npx cc-safety-net doctor を実行してください。検出した Copilot のバージョンと、対応している hook の取得元を報告します。
Grok Build
~/.grok/hooks/cc-safety-net.json(GROK_HOME が設定されている場合は $GROK_HOME/hooks/cc-safety-net.json)に、管理対象の PreToolUse エントリとして次を書き込みます。
run_terminal_command だけでなく、すべてのツール呼び出しがアダプターに届きます。アダプターは、ファイル系ツールやパッチ系ツールの入力についても、保護対象のパスが含まれていないかを検査します。
hook は npx 経由で動作するため、インストール時にはまず npm の _npx キャッシュからキャッシュ済みの cc-safety-net を削除し、hook が最新リリースを解決できるようにします。アンインストールではキャッシュに手を加えません。キャッシュの場所は Antigravity CLI のセクションを参照してください。
Grok Build の hook は fail open であり、ホスト側に
failClosed に相当する設定はありません。ツール呼び出しをブロックできるのは明示的な deny だけです。hook がクラッシュした場合、タイムアウトした場合、不正な出力を返した場合は、その呼び出しはそのまま実行されます。Hermes Agent
__init__.py と plugin.yaml)を $HERMES_HOME/plugins/cc-safety-net/(HERMES_HOME が未設定の場合は ~/.hermes/plugins/cc-safety-net/)に書き込み、続けて hermes plugins enable cc-safety-net --no-allow-tool-override を実行します。ファイルを置くだけでは何も起こりません。Hermes は自身の設定で有効と指定されたユーザープラグインしか読み込まないため、ファイルがすでに最新の場合でも、インストール時には enable コマンドを実行します。
プラグインは npx 経由で subprocess を起動するため、インストール時にはまず npm の _npx キャッシュからキャッシュ済みの cc-safety-net を削除し、プラグインが最新リリースを解決できるようにします。アンインストールではキャッシュに手を加えません。キャッシュの場所は Antigravity CLI のセクションを参照してください。
変更を反映するため、インストール、更新、アンインストールの後に Hermes を再起動してください。
pre_tool_call のたびに、ツール呼び出しを JSON として標準入力から npx -y cc-safety-net hook --hermes-agent(短いフラグは -ha)に渡します。タイムアウトは 30 秒です。保護対象は terminal、read_file、write_file、patch の各ツールで、その他の Hermes のツールは転送しません。プラグインは fail closed で動作します。npx が見つからない、解析を開始できない、タイムアウトする、終了コードが 0 以外になる、出力を解釈できないといった場合は、ツール呼び出しをそのまま通さず、明示的なメッセージでブロックします。
hermes plugins disable cc-safety-net を実行します。Hermes はディスク上に存在するプラグインしか解決しないため、設定側が有効なまま残ると、同じ名前のプラグインが将来置かれたときに自動で読み込まれてしまうからです。hermes CLI が失敗した場合や見つからない場合もファイルは削除し、Hermes の設定に cc-safety-net が残っている可能性を警告として表示します。また、Python の __pycache__ バイトコードディレクトリも削除し、他に何も残っていない場合にかぎりプラグインのディレクトリ自体を削除します。
プラグインのディレクトリがシンボリックリンクである場合や通常のディレクトリでない場合、インストールもアンインストールもそこには手を触れません。管理対象のファイルについても、シンボリックリンク、通常ファイル以外、または CC Safety Net の管理用ヘッダーを持たない場合は、上書きも削除も行いません。手動で移動または削除してから、コマンドを再実行してください。
この連携は macOS と Linux のみに対応しています。
Kimi Code
Kimi Code には 2 つのインストール方法があります。1 つは Kimi Code の設定ファイルに書き込むグローバル hook、もう 1 つは Kimi Code 内からインストールするネイティブプラグインです。対話的なターミナルでinstall --kimi-code(または対話式インストーラーで Kimi Code を選択)を実行すると、どちらの方法を使うかを尋ねる単一選択のプロンプトが表示されます。グローバル hook を今すぐインストールするか、ネイティブプラグインの手順を表示するかを選べます。非対話的なセッションでは、このフラグはグローバル hook を直接インストールするため、スクリプトや CI パイプラインがプロンプトで止まることはありません。update の挙動は変わりません。
どちらの方法でも、Kimi Code の hook は fail open です。hook のプロセスが起動できない、クラッシュする、タイムアウトするといった場合、Kimi Code はそのツール呼び出しを許可します。
~/.kimi-code/config.toml(または $KIMI_CODE_HOME/config.toml)に [[hooks]] ブロックを書き込み、PreToolUse の呼び出しのたびに npx -y cc-safety-net hook --kimi-code を実行します。アダプターは Bash をシェルコマンドのツールとして扱い、その他のツール入力については保護対象のパスが含まれていないかを検査します。
hook は npx 経由で動作するため、インストール時にはまず npm の _npx キャッシュからキャッシュ済みの cc-safety-net を削除し、hook が最新リリースを解決できるようにします。アンインストールではキャッシュに手を加えません。キャッシュの場所は Antigravity CLI のセクションを参照してください。
/reload を実行するか、新しいセッションを開始します。このプラグインは、ツールマッチャーを持たない PreToolUse hook を 1 つ宣言します。すべてのツール呼び出しで node ./dist/bin/cc-safety-net.js hook --kimi-code を 30 秒のタイムアウト付きで実行し、グローバル hook と同じアダプターを使用します。
グローバル hook がすでに設定済みの場合、対話式インストーラーの Kimi Code の行は選択可能なままで、(global hook installed) と表示されます。あわせて、表示されるプラグインの手順に注意書きが加わります。cc-safety-net uninstall --kimi-code は、プラグインが有効になった後に実行してください。両方の hook が短期間だけ同時に動いても拒否メッセージが重複するだけですが、どちらも有効でない期間があると保護されません。
Kimi Code 内で対話的にルールを作成したい場合は、任意で /cc-safety-net skill をインストールできます。
OpenClaw
openclaw plugins install <packaged plugin dir> --force を実行し、続けて openclaw plugins enable cc-safety-net を実行します。その後、openclaw plugins inspect cc-safety-net --runtime --json を実行して、プラグインが実際に読み込まれたことを確認します。有効になっていてもランタイムが壊れているプラグインは、インストール自体は成功したように見えて何も保護しないため、状態が loaded 以外であればインストールを失敗させ、詳細を調べるための openclaw plugins inspect cc-safety-net --runtime を案内します。
--force は cc-safety-net という拡張機能 ID を持つものを上書きし、アンインストール時には削除します。そのため、どちらのコマンドも実行前に、拡張機能のディレクトリに CC Safety Net の管理対象プラグインだけがあるか、または空であることを確認し、そうでない場合は実行を中止します。ディレクトリを移動または削除してから、コマンドを再実行してください。
変更を反映するため、インストール、更新、アンインストールの後に OpenClaw Gateway を再起動してください。
openclaw.json に plugins.allow が設定されている場合は、そこに cc-safety-net も記載する必要があります。allowlist に含まれていないと、有効になっていてもプラグインは読み込まれません。before_tool_call ハンドラーを登録するのは、タグの付いていない exec ツールに対してだけです。OpenClaw のファイル系ツールと、タグ付きの exec は対象外です。対応する exec の呼び出しは、いずれもエージェントのワークスペースディレクトリを基準に解析します。ワークスペースを解決できない場合、workdir がワークスペースの外を指す場合、auto と gateway 以外の実行ホスト(sandbox や node など)が指定された場合は、fail closed で動作します。
OpenClaw の状態ディレクトリは、OPENCLAW_STATE_DIR が設定されていればそのディレクトリ、なければ OPENCLAW_CONFIG_PATH があるディレクトリ、どちらもなければ ~/.openclaw です。設定ファイルは、OPENCLAW_CONFIG_PATH が設定されていればそのファイル、なければ状態ディレクトリ内の openclaw.json です。どちらの環境変数も、値が ~ で始まるパスの場合はユーザーのホームディレクトリを基準に展開します。インストールと doctor はこれと同じ順序でパスを解決するため、場所を移した OpenClaw を「見つからない」と誤って報告することはありません。
この連携は macOS と Linux のみに対応しています。
OpenCode
XDG_CACHE_HOME が設定されていて空でなければ $XDG_CACHE_HOME/opencode を、そうでなければ ~/.cache/opencode を使用します。OpenCode は古いキャッシュのプラグインを使い続けることがあるため、インストールコマンドは opencode plugin -g -f cc-safety-net@latest を実行する前に、そのディレクトリ内の packages/cc-safety-net@latest を削除します。その後、キャッシュされたパッケージが存在すること、宣言された main エントリが読み込めること、呼び出し可能な CCSafetyNetPlugin を export していることを確認します。この確認に失敗した場合、インストールは中止されます。そのまま進めると、OpenCode が保護のない状態で動き続けてしまうためです。
XDG_CONFIG_HOME が設定されていて空でなければ $XDG_CONFIG_HOME/opencode を、そうでなければ ~/.config/opencode を使用します。アンインストールでは、そのディレクトリ内の opencode.json または opencode.jsonc の plugin 配列から cc-safety-net を削除し、あわせてキャッシュ内のパッケージをもう一度削除します。
更新後のキャッシュからプラグインを読み込むため、インストールまたは更新の後に OpenCode を再起動してください。
Pi
pi install npm:cc-safety-net を実行します。Pi の設定に、CC Safety Net が無効になってしまう extensions フィルターが固定されている場合は、~/.pi/agent/settings.json でそのフィルターを解除します。
bash ツールだけです。その他のツール入力についても保護対象のパスが含まれていないかを検査しますが、Shell という名前のカスタムコマンドツール(pi-grok-cli など)には対応していません。あわせて、rulebook を管理するための組み込みコマンド /cc-safety-net を登録します。詳細は連携アーキテクチャを参照してください。
以前のプラグイン識別子から移行する
現在のプラグイン識別子は、該当するすべての場所でcc-safety-net@cc-marketplace です。以前のリリースで使われていた次の 2 つの識別子が、既存のマシンに残っていることがあります。
手動で削除する必要はありません。エージェント用の通常のインストールコマンドを実行すれば、その一環として移行されます。新しい設定では、以前の識別子を使わないでください。
インストールを確認する
doctor は、対応するすべてのエージェントを検査します。hook の連携状態、ブロックのセルフテスト、カスタムルール、有効なモードフラグ、最近の実行履歴、システムのバージョン、更新の有無を確認します。各チェックと指定できるフラグは、doctor コマンドのリファレンスを参照してください。
チェックが失敗した場合は、問題の説明と推奨される対処方法が出力されます。