npx -y cc-safety-net@latest install --deepseek-harness を実行します。CC Safety Net が、プラグインバンドルとして web プロファイルと desktop プロファイルに追加されます。このバンドルは拒否専用のツールガードを登録します。ツール呼び出しをブロックすることはあっても、承認することはないチェックです。バンドルの読み込みに失敗しても警告が出るだけで、そのプロファイルは保護されないまま動きます。インストール後は、npx cc-safety-net doctor を実行してバンドルが有効か確認してください。
DeepSeek Harness に CC Safety Net をインストールする
1
デスクトップアプリを一度起動してから終了する
DeepSeek Harness のデスクトップアプリを一度起動し、終了します。
2
pnpm が PATH にあるか確認する
pnpm が PATH 上にあることを確認します。3
インストーラーを実行する
4
バンドルが有効か確認する
desktop プロファイルを対象にするのは、そのプロファイルがすでに存在する場合だけです。そのため、先にデスクトップアプリを一度起動しておきます。終了しておくのは、デスクトップアプリのプラグインはアプリを閉じている間しか変更できないためです。DeepSeek Harness がバンドルを追加するには、PATH 上に pnpm が必要です。
インストールが成功すると、Added cc-safety-net to the DeepSeek Harness Desktop and web profiles. と報告されます。web プロファイルだけを処理した場合は、the Desktop and web profiles の部分が the web profile になります。
DeepSeek Harness のインストールで変わること
DeepSeek Harness は CC Safety Net をフックのプロセスではなく、プロファイルのプラグインバンドルとして読み込みます。そのため、DeepSeek Harness 用のhook フラグはありません。インストールでは、実行したインストーラーと同じバージョンの cc-safety-net を各プロファイルに追加します。各プロファイルの package.json には cc-safety-net の依存関係が記載され、そのバンドルが有効になります。
DeepSeek Harness でインストールの対象になるプロファイル
1 回のインストールで、次の 2 つのプロファイルが対象になります。npx @deepseek-ai/dsh webとグローバルインストールが共有するwebプロファイル- デスクトップアプリが使う
desktopプロファイル(すでに存在する場合)
acp、headless、sdk、sdk-minimal の各プロファイルと、後から作成したプロファイルでは、CC Safety Net は動きません。それぞれに自分でプラグインを追加してください。
desktop プロファイルに対しては、デスクトップアプリに同梱の dsh を実行します。このバイナリは次の場所から探します。
DeepSeek Harness のツールガードがチェックする内容
DeepSeek Harness はこのガードを、承認や Auto review を含むほかのすべてのtools/pre-execute リスナーの後に実行します。
bashの呼び出しは POSIX アナライザーに渡します。pwshの呼び出しは PowerShell アナライザーに渡します。- ファイル系と検索系のツール呼び出しは、パスとシークレットの保護でチェックします。
DeepSeek Harness でチェックが失敗したときの動作
CC Safety Net のガードでエラーが起きた場合、DeepSeek Harness はその呼び出しをブロックします。プラグインバンドルの読み込みに失敗した場合は、DeepSeek Harness は警告を表示するだけで、そのプロファイルはチェックなしで動きます。DeepSeek Harness での保護範囲の制限
- ほかのプロファイル。 バンドルが入るのは
webとdesktopのプロファイルだけです。DeepSeek Harness でインストールの対象になるプロファイルを参照してください。 - 読み込みに失敗したバンドル。 DeepSeek Harness は、任意プラグインの import や
apply()の失敗を警告として扱い、そのまま動作を続けます。そのため、そのプロファイルは保護されないまま動きます。doctorは実行中のホストではなくディスク上のマニフェストを読むため、それでもそのプロファイルを設定済みと報告します。 - デスクトップアプリのクラッシュ復旧。 デスクトップアプリのクラッシュ復旧操作は、サードパーティのバンドルを無効にします。Plugins ページで再び有効にするまで、無効のままです。
- PTC モードの
run_code。 PTC モードは既定でオフです。このモードでは、run_codeがモデルの書いた TypeScript を実行し、そのコードは Node.js の API を直接呼び出せます。ガードに届くのはそのコードが行うツール呼び出しだけなので、node:fs経由の書き込みは判定されません。 terminal_send。 オプトインのターミナルツールは、terminal_sendのテキストを解析せずに永続シェルへ書き込みます。永続的なbashやpwshのシェルではディレクトリの移動が呼び出しをまたいで保持されますが、CC Safety Net は各呼び出しをセッションのワークスペースを基準にチェックします。そのため、両者がずれることがあります。- Windows のデスクトップアプリ。 Windows 上のデスクトップアプリ関連のパスは未検証です。対象は上記の
dsh.cmdのパスと、デスクトップアプリが起動中かどうかをインストールが判断するための%APPDATA%\@deepseek-ai\dsh-desktop\lockfileです。web プロファイルには影響しません。
DeepSeek Harness から CC Safety Net をアンインストールする
web と desktop の各プロファイルのマニフェストにバンドルが記載されていれば、そこから削除します。それ以外のプロファイルに自分で追加したコピーはそのまま残ります。インストールと同様、デスクトップアプリの起動中は中止します。
この 2 つのどちらのプロファイルにもバンドルがない場合は、次のメッセージで中止します。
DeepSeek Harness の CC Safety Net を更新する
update はプロファイルごとにインストールを再実行するため、デスクトップアプリが開いていると失敗します。先にデスクトップアプリを終了してください。
DeepSeek Harness のプロファイルの保存場所
DeepSeek Harness は、DSH_HOME が設定されていれば $DSH_HOME/profiles に、未設定なら <home>/.dsh/profiles にプロファイルを保存します。DSH_HOME の先頭の ~ はホームディレクトリに展開されます。
DeepSeek Harness のトラブルシューティング
Quit DeepSeek Harness Desktop, then run this command again: Desktop plugins can only change while it is closed.デスクトップアプリが起動しています。終了するまで、インストールもアンインストールも中止します。DeepSeek Harness Desktop is not in its default location, so add cc-safety-net from its Plugins page.desktopプロファイルはあるものの、デスクトップアプリが上の表のパスにありません。web プロファイルへのインストールは行われます。デスクトップアプリの Plugins ページから自分でプラグインを追加してください。DeepSeek Harness installed cc-safety-net in the web profile but did not enable it. Enable it from the Plugins page.DeepSeek Harness がバンドルを追加したものの有効にしていないため、何も保護されていません。Plugins ページから有効にしてください。メッセージには、インストールの対象になったプロファイルが表示されます。doctorがcc-safety-net is installed in the <name> profile but its bundle is disabledを報告する。 プロファイルのpackage.jsonにcc-safety-netの依存関係は記載されていますが、dsh.profile.bundlesには含まれていません。Plugins ページからバンドルを有効にしてください。
デスクトップアプリが既定の場所にないときのアンインストール
desktop プロファイルにバンドルがあるのに、デスクトップアプリが既定の場所にない場合、アンインストールは web 側のコピーを先に削除してから終了コード1 で終了します。