DeepSeek Harnessで入れるべきプラグイン5選
VPSの挙動を変えるDeepSeek Harnessプラグインを5つ紹介します。支出上限、ツール権限、インジェクション検査、永続メモリ、LANアクセスの用途と導入時の注意点を確認できます。
インストールする価値のある DeepSeek Harness プラグイン
DeepSeek Harness プラグインは、エージェントの権限で、料金を支払っているマシン上でエージェント内部に実行されるサードパーティーコードです。コミュニティーの一覧には20を超えるカテゴリと、1,000件を超える項目があります。レンタルした仮想プライベートサーバー(VPS)では、必要なのは5つです。支出上限には dsh-budget、ツールの実行制御には dsh-permission-rules、インジェクションと Secret のスキャンには dsh-defend、セッションをまたいで保持する事実には dsh-memory、認証方法を決めた後にのみ dsh-web-lan-access を使います。
Harness は dsh です。これは DeepSeek のオープンソースエージェント Harness で、すべてをプラグインとして構成できるように設計されています。README 自身が開発者向けプレビュー版と説明し、THERE WILL BE COMPATIBILITY-BREAKING CHANGES と警告しています。この点が、以下のすべての選択を左右します。インストールするものはバージョンを固定し、アップグレードで動かなくなる可能性を見込み、内容を実際にすべて確認できる規模に抑えてください。まだ Harness が動作していない場合は、まず VPS への DeepSeek Harness のインストール を参照してから、ここに戻ってください。
dsh がプラグインをインストールする仕組みと、設定の配置先
dsh は Cordis プラグインから自身を組み立てるため、実行中のインスタンスは単一のプログラムではなく、プラグインのツリーです。プロファイルは、それらのプラグインを名前付きで組み合わせたものです。2 つのテンプレートは web と headless です。$DSH_HOME のデフォルトは ~/.dsh で、プロファイルは $DSH_HOME/profiles/<name>/ に配置されます。そこには独自の package.json、dsh.profile マニフェスト、cordis.patch.yml が含まれます。
dsh plugin --profile web list
dsh plugin --profile web add dsh-budget
dsh plugin --profile web remove dsh-budget使用できるソース形式は 4 つあります。npm パッケージ名だけを指定する形式、@towzai/dsh-memory のようなスコープ付き名前、github:PerryLink/dsh-budget#main のような GitHub 参照、link: または ./ を使うローカルパスです。GitHub 形式を使用してください。#main をコミットに置き換えれば、翌月も同じコードを取得できるためです。
dsh plugin --profile web add "github:PerryLink/dsh-budget#461d478"レイヤーは固定された順序で適用されます。まずプロファイルに記載された順序で各 bundle、次にプロファイルの cordis.patch.yml、続いてホームレベルの cordis.patch.yml、最後に --patch overlay が適用されます。後のレイヤーは、前のレイヤーが設定した内容を再設定したり削除したりできるため、順序が重要です。プラグインがインストール済みのように見えるのに何もしない場合は、プロファイルの cordis.patch.yml を開き、2 つを確認してください。プラグインの insert ブロックが存在することと、後のレイヤーで無効化されていないことです。
2026 年 8 月 17 日時点で、npm パッケージ @deepseek-ai/dsh は 0.1.0-rc.7 です。一方、以下のすべてのプラグインは 0.1.0-rc.5 から 0.1.0-rc.6 までとの互換性を宣言しています。この差はこのエコシステムでは通常のことであり、プラグインの読み込みが停止する一般的な理由です。harness の更新速度が周囲のプラグインより速いためです。harness は意図的にアップグレードし、プラグインを 1 つずつテストしてください。
信頼する前にプラグインを読む
dsh プラグインは harness からサンドボックス化されていません。harness と同じ Cordis ツリーに、同じプロセスで、同じオペレーティングシステムユーザーとして読み込まれ、同じモデル認証情報と同じ作業ツリーにアクセスできます。プラグインのインストールは、ブラウザー拡張機能の追加というより、sudo を付けて他人のスクリプトを実行することに近い操作です。これは Claude Code のプラグインが提起するものと同じ信頼性の問題であり、答えも同じです。コードを読むか、インストールしないでください。
確認する項目は次の4つです。順番どおりに確認してください。
- どの拡張ポイントを使用するか。
tools/pre-executeはすべてのツール呼び出しを検知し、ブロックできることを意味します。agent/pre-stepはメッセージを検知できることを意味します。webServer.tapIndexはブラウザーに提供されるページを書き換えることを意味します。これらを1つも使用しないプラグインにできることはほとんどありません。すべてを使用するプラグインは、まさにセキュリティ境界です。 - ネットワーク通信を行うか。 ソースで
fetch、http、およびハードコードされたホスト名を検索します。使用状況を外部へ送信するコストメーターは、利用パターンをどこかへ送っています。 - 認証情報を読み取るか。
credentials.*またはプロバイダーキーに触れる処理には、README に明確な理由が記載されている必要があります。 - ライセンスと最終コミット日時。 毎週変化するエコシステムで、ライセンスがなく、数か月間更新されていないプラグインは、運用上のリスクになります。
次に、ブランチではなくコミットを指定してインストールし、インストーラーが cordis.patch.yml に書き込んだ insert ブロックを確認します。このブロックには、プラグイン ID と登録された設定が記載されています。これは、追加したものの内容を最も簡潔かつ正確に示す情報です。harness で可能な範囲では、AI エージェントから Secret を遠ざける場合と同じ考え方で、プロバイダーキーをプラグインからアクセスできない場所に保管してください。
dsh-budget: エージェントが一晩中使い続けないようにするには?
VPS 上のエージェントを無人で実行します。これが VPS に配置する目的であり、同時にリスクでもあります。dsh-budget はモデル、セッション、日ごとにトークン数と推定コストを集計し、それらの合計に対して上限を適用します。
dsh plugin --profile web add "github:PerryLink/dsh-budget#461d478"デフォルト値は余裕を持たせてあります。セッションあたり 10 USD、1日あたり 50、1か月あたり 500 です。資金のあるチームには適しています。しかし個人サーバーでは、暴走したループが上限に達する前に処理を完了するほど高い値です。そのため、初日に下げてください。
The data behind this chart
[
{
"label": "Per session",
"plugin_default_usd": 10,
"suggested_start_usd": 2
},
{
"label": "Per day",
"plugin_default_usd": 50,
"suggested_start_usd": 5
},
{
"label": "Per month",
"plugin_default_usd": 500,
"suggested_start_usd": 40
}
]推奨列は、1台のマシンを1人で運用する場合の開始点です。公開された基準値ではありません。実際に1か月運用し、必要だと分かったら引き上げてください。月額上限を 40 USD、セッション上限を 2 にすると、早い段階で明確に停止します。ツールの使用量を把握している途中は、この動作が適しています。
- id: budget
config:
budgets:
session: 2
daily: 5
monthly: 40
warnRatio: 0.8
overLimit: blockマシンの動作を変える設定は overLimit です。デフォルト値は alert です。この値では警告を表示するだけで、支出は継続します。つまり、初期状態のこのプラグインはダッシュボードとして動作します。block に設定すると、上限に達した時点でハーネスが以降のモデル呼び出しを拒否します。そのため、夜間ジョブは朝まで課金を続けずに停止します。degrade は3つ目のモードです。degradation マップにある安価なモデルへ切り替えます。ジョブを完了させる必要はあるものの、最適なモデルが不要な場合に適しています。warnRatio のデフォルト値は 0.8 です。そのため、上限の80パーセントに達した時点で通知されます。
注意すべき制限が2つあります。コストは、指定した価格から計算されます。prices はデフォルトで空であり、defaultPrice は入力トークン100万個あたり1.0 USD、出力トークン100万個あたり3.0 USDにフォールバックします。使用するモデルの実際の価格を入力してください。入力しない場合、ダッシュボードの数値は測定値ではなく推測になります。2つ目の制限は、プラグインがセッションイベントストリームから実行中のプロセス内で集計することです。そのため、ハーネスを再起動すると合計値はリセットされます。クラッシュループや、dsh を再起動する supervisor があると、日次上限もリセットされます。dsh-budget は自分のジョブに対するガードレールとして扱い、実際の上限としてプロバイダーアカウントにも支出上限を設定してください。これは VPS で AI エージェントのコストを管理する という議論の中心となる点です。
日常的には、概要に /budget、モデル別の内訳に /budget models、継続すると決めた後にブロックを解除する操作に /budget unblock <scope> を使用します。
dsh-permission-rules: 実行を禁止すべきツール呼び出しはどれか
dsh-permission-rules は宣言的なルールを tools/pre-execute ウォーターフォールに配置するため、ツールの実行前にルールが評価されます。アクションは3種類あります。allow は呼び出しをそのまま通過させ、deny は呼び出しをブロックしてモデルが読み取れる理由を返し、ask は公式の承認経路へルーティングします。
dsh plugin --profile web add "github:PerryLink/dsh-permission-rules#b30b4fb"ルールはセッションの作業ディレクトリを基準とする .dsh/rules.yaml に置きます。ファイルシステムのルートに向かって上位へたどるためのグローバルな fallbackPath と、任意の searchUp も使用できます。マッチングの対象には、ツール名の glob、パラメータのキーと値の glob、ワークスペースを基準とするパスの glob、main や subagent などのエージェントセレクター、ネットワークターゲットが含まれます。
rules:
- match: { tools: [bash], params: { command: "rm -rf*" } }
action: deny
reason: "No recursive deletes"
- match: { tools: [edit, write], paths: ["**/.env*", "**/secrets/**"] }
action: ask
reason: "Secret files need confirmation"
- match: { tools: ["mcp__*"] }
action: ask
reason: "MCP tools need confirmation"評価は最初に一致したルールを採用するため、上部に広範な allow を置くと、その下にある狭いルールがすべて意図せず無効になります。拒否ルールを先に記述し、許可ルールを最後に記述してください。ツール名の glob は mcp__* も対象にします。これは、ハーネス自体ではなく Model Context Protocol (MCP) サーバーから提供されたツールを制御する方法です。VPS 上の MCP サーバーを実行する場合、この点が重要になります。
計画時には、次の動作も考慮してください。ask には回答者が必要です。headless プロファイルでは監視する人がいない場合があるため、ask ルールによって、誰かが現れるまで実行が停止する可能性があります。決して承認しないものには deny を使用し、目の前で監視できるプロファイルには ask を使用してください。承認を無人で機能させる場合は、実際に応答できる経路が必要です。詳しくは 承認で AI エージェントのアクションを制御する で説明します。
dsh-defend: プロンプトインジェクションと漏えいした Secret への対策
dsh-defend は3箇所でスキャンします。agent/pre-step 上の受信メッセージ、破壊的な削除ガードを含む tools/pre-execute のツール引数、tools/post-execute のツール結果です。最後のスキャンが重要です。Web ページから取得したコンテンツを、モデルが処理する前に検査できるためです。
dsh plugin --profile web add "github:PerryLink/dsh-defend#7ba3427"デフォルトは strict ではなく、慎重な設定です。detection.injectionAction、detection.jailbreakAction、detection.secretAction はすべて ask で、detection.secretBlockCritical は true です。そのため、他の設定に関係なく、critical な Secret はブロックされます。無人運用のホストでは、必要なアクションを block に変更してください。ask は、確認相手がいない環境では判断になりません。
監査の設計は評価できます。defend/detection のイベントには、rule id、family、category、severity、decision、スキャン結果が記録されます。一致したテキストは記録されません。Secret は種類だけが記録されます。そのため、監査ログを有効にしても、保護しようとした credential のコピーが別に作られることはありません。
この機能で実現できる範囲を正しく理解してください。検出はルールベースで、README にも、未知の表現や複数段階の攻撃は検出をすり抜ける可能性があると明記されています。明らかな攻撃の割合を下げる機能です。信頼できないコンテンツを agent に処理させても安全になるわけではありません。必ず、この機能とは別に permission rules を適用してください。
dsh-memory: エージェントは翌日何を記憶しているか
dsh-memory と呼ばれるプラグインは2種類あります。インストールコマンドを入力する前に、この点を把握しておく必要があります。明示的にソースを指定してインストールし、確認したものと同じプラグインを選びます。
小規模サーバーには、SQLite ビルドを推奨します。これは memory として登録され、プロファイル間で共有する単一ファイルを $DSH_HOME/memory/memory.db に保持し、memory_write、memory_search、memory_forget を提供します。検索は、保存されたテキストとタグをキーワードベースで対象にします。埋め込みサービス、API key、追加プロセスは必要ありません。
dsh plugin --profile web add "github:ben7am1n/dsh-memory#def7c6a"変更する設定は少数です。path でデータベースファイルを指定し、promptRecentCount(デフォルトは 10)で未固定のメモリを注入する件数を指定します。promptMaxChars(デフォルトは 2000)では、レンダリングに使用する予算を指定します。この構成は node:sqlite に依存します。Node 22 と 24 では現在も experimental とされているため、Node のアップグレードは問題ないと決めつけず、テストして確認してください。
メモリがマシンに与える実際の影響は次のとおりです。注入されたメモリは、すべてのターンで system prompt に含まれます。2000文字の予算では、すべてのリクエストに毎回、数百個分の追加 input token が恒久的に加わります。これは料金に実際に影響するため、dsh-memory より先に dsh-budget をサーバーへ導入する理由になります。promptMaxChars は小さく保ち、ファイルを増え続けさせずに memory_forget で不要なメモリを削除してください。
もう一方のビルドはメモリを YAML ファイルに保存し、dsh plugin --profile web add github:towzai/dsh-memory でインストールすると、自動的な prompt 注入を伴う埋め込み検索を実行します。ローカルの ollama インスタンスと、デフォルトでは qwen3-embedding:0.6b となる埋め込みモデルが必要です。モデルは DSH_MEMORY_EMBED_MODEL で変更できます。意味検索の再現性は、キーワード検索より優れています。一方で、追加のサービスとモデルウェイトを同じサーバー上に常駐させる必要があります。小規模プランでは、そのメモリが、本来サーバーで実行するために借りた処理から割かれます。RAM に余裕がある場合に選択してください。再現性と常駐コストの一般的なトレードオフについては、エージェント向けローカルメモリで説明しています。
dsh-web-lan-access: Web UI は loopback の外部で待ち受けるべきか
npx @deepseek-ai/dsh web は 127.0.0.1:3080 でインターフェースを提供します。ブラウザーは安全なコンテキストでのみ crypto.randomUUID() を公開するため、別のマシンから同じページを平文の HTTP で読み込むと失敗します。dsh-web-lan-access は webServer.tapIndex にフックして小さな polyfill を注入し、サーバーのバインド先を 0.0.0.0 に変更することで、この問題を解決します。
インストールする前に、付属の警告を確認してください。0.0.0.0 にバインドすると、同じローカルエリアネットワーク(LAN)上の誰でも、認証なしで agent に接続できます。パブリック IP アドレスを持つサーバーでは、インターネット全体から接続できることを意味します。機密性の高い一部のメソッド(settings.*、credentials.*、llm.discoverModels)は loopback に固定され、リモートの origin からは 403 を返すため、被害を抑えられます。ただし、被害を防げるわけではありません。ツール呼び出しのインターフェースは、ポートを見つけた人なら誰でも利用できる状態のままです。
ほとんどの場合、この plugin は必要ありません。代わりに SSH でポートを転送してください。
ssh -N -L 3080:127.0.0.1:3080 you@your-server次に、ローカルのブラウザーで http://127.0.0.1:3080 を開きます。harness は loopback だけで待ち受けるため、外部には何も公開されません。また、ブラウザーは 127.0.0.1 を安全な origin として扱うため、crypto.randomUUID() が利用可能で、polyfill も不要です。必要なのは 1 つのコマンドだけで、plugin も新たな攻撃対象領域もありません。
ポート転送では対応できない場合に限り、plugin をインストールしてください。たとえば、同じネットワーク上のスマートフォンから UI に接続する必要がある場合です。その場合は、プライベートネットワークインターフェースの背後でバインドし、そのインターフェースからの通信だけを許可する firewall ルールを維持してください。また、web-runtime エントリの trustedHosts に使用する名前を列挙します。本格的なマルチユーザーアクセスには dsh-passwords があります。subuser 権限、subuser ごとの 1 時間単位の token 数上限と 1 日単位の利用時間上限、Let's Encrypt による自動 TLS(transport layer security)証明書、暗号化された監査ログが追加されます。これは plugin ではなくプラットフォームとして評価してください。ポート 80 と 443 を必要とし、独自の installer を同梱しています。また、文書化された簡易手順では、ネットワークから shell script を直接 bash にパイプします。npm install -g dsh-passwords の後に dsh-passwords install を実行する方法を推奨します。そうすれば、実行前にコードをディスク上で確認できます。
プラグインを完全に削除する方法
アンインストールは 2 段階ありますが、2 段階目が省略されがちです。
dsh plugin --profile web remove dsh-budget
dsh plugin --profile web listlist にそのプラグインが表示されなくなっていることを確認します。次に $DSH_HOME/profiles/web/cordis.patch.yml を開き、そのプラグイン名を含む残存した insert ブロックをすべて削除します。このエントリがプラグインをツリーに読み込むためです。ハーネスを再起動してツリーを再構築します。すでに読み込まれたプラグインは、再起動するまで読み込まれたままです。最後に、データはコードより長く残ることに注意してください。アンインストールしても $DSH_HOME/memory/memory.db と .dsh/rules.yaml は残ります。データも削除することが目的なら、自分で削除してください。
読むものと読む時点
ここで参照しているのはすべてブランチではなくコミットです。main は、この記事を読む時点では異なるコードになっているためです。すべて 17 August 2026 に読み、その日に npm 上の harness 自体は 0.1.0-rc.7 でした。
この一覧の根拠となる正確なコミット
- 17 August 2026 時点の
f2918fbにある コミュニティプラグイン一覧。意図的に 1 回だけリンクしています。これはディレクトリであり、推奨一覧ではありません。 - 17 August 2026 時点の
461d478にある dsh-budget。Apache 2.0。dsh0.1.0-rc.6、Node 22.19 または 24 以降を宣言しています。 - 17 August 2026 時点の
b30b4fbにある dsh-permission-rules。Apache 2.0。dsh0.1.0-rc.5から0.1.0-rc.6を宣言しています。 - 17 August 2026 時点の
7ba3427にある dsh-defend。Apache 2.0。dsh0.1.0-rc.6を宣言しています。 - 13 August 2026 時点の
def7c6aにある dsh-memory。MIT。SQLite build。 - 16 August 2026 時点の
e27e909にある dsh-web-lan-access。MIT。
コマンドをコピーする前に、これらの固定先を再確認してください。developer preview のエコシステムでは、日付と組み合わせたバージョン番号だけが意味を持ちます。
FAQ
VPS に最初にインストールすべき DeepSeek Harness プラグインはどれですか?
最初に dsh-budget と dsh-permission-rules をインストールしてください。overLimit: block を設定すると、無人実行が一晩中費用を使い続けることを防げます。また、.dsh/rules.yaml ファイルにより、承認していないツール呼び出しを阻止できます。エージェントが公開 Web の情報を読み取る場合は dsh-defend を追加し、すべてのセッションに同じコンテキストを貼り付けていることに気付いたら dsh-memory を追加してください。テーマとステータスチップは省略してください。これらはマシンの動作を変えずに、エージェントの権限で実行されるコードを追加します。
dsh プラグインは harness からサンドボックス化されていますか?
いいえ。プラグインは harness と同じ Cordis tree に、同じプロセス内で、同じオペレーティングシステムユーザーとして読み込まれます。モデルの認証情報と作業ツリーも同じです。tools/pre-execute に接続するプラグインはすべてのツール呼び出しを確認してブロックできます。agent/pre-step に接続するプラグインはメッセージを確認できます。そのため、ソースを読み、ライセンスと最終コミット日を確認してください。また、ブランチではなくコミットを指定してインストールし、コードが実行中に変更されないようにしてください。
dsh-budget は実際にエージェントを停止しますか。それとも警告だけですか?
overLimit によって異なります。デフォルトは alert です。warnRatio で警告を表示しますが、支出は継続します。block は上限に達すると以降のモデル呼び出しを拒否し、/budget unblock <scope> で続行を選択したときに上限を解除します。degrade は degradation map の設定に従って、より安価なモデルに切り替えます。注意点が1つあります。合計値はセッションイベントストリームから実行中のプロセス内で集計されるため、harness を再起動するとリセットされます。再起動ループがあると、日次上限を回避されます。実際の上限として、provider account 側にも支出上限を設定してください。
dsh プラグインを完全に削除するにはどうすればよいですか?
dsh plugin --profile web remove <package-name> を実行し、dsh plugin --profile web list で確認してください。続いて $DSH_HOME/profiles/web/cordis.patch.yml を開き、そのプラグインの残った insert block を削除します。このエントリによってプラグインが読み込まれるためです。harness を再起動して、プラグインツリーを再構築します。プラグインがディスクに書き込んだデータは残ります。$DSH_HOME/memory/memory.db と .dsh/rules.yaml は、手動で削除するまでアンインストール後も保持されます。
dsh の Web UI をネットワーク上に公開しても安全ですか?
そのままでは安全ではありません。dsh web は 127.0.0.1:3080 で待ち受け、dsh-web-lan-access によってバインド先が 0.0.0.0 に変更されます。README には、この設定により同じネットワーク上の誰でも認証なしでエージェントに接続できると記載されています。公開 IP アドレスで使用すると、インターネットから接続可能になります。いくつかのメソッド(settings.*、credentials.*、llm.discoverModels)は loopback に固定されたままで、リモート origin からは 403 を返します。これにより被害は抑えられますが、公開自体は停止しません。SSH port forward、ssh -N -L 3080:127.0.0.1:3080 you@your-server を使用するか、private network interface と firewall rule の背後にポートを配置してください。外部から到達可能にする前に、実際の認証も追加してください。