dsh-baton について
dsh-batonは、Claude CodeやCodexなどのMCPクライアントをDeepSeek Harnessに接続し、Harnessのセッションでコーディングタスクを委任・調整します。ワークスペースやセッションの操作機能とCLIを備え、Harnessのヘッドレスモードにも切り替えられます。
主な機能
- 01Harnessワークスペースの一覧表示と作成
- 02タスクの送信と実行中タスクの調整
- 03セッション、実行、アクティビティの確認
- 04結果待ちと作業のキャンセル
- 05ワークスペースとセッションを操作するCLI
活用シーン
- 01CodexからHarnessにコーディングタスクを委任
- 02別のクライアントから実行中のセッションを継続・調整
- 03進行状況を確認してセッションの作業を停止
MCP 対応
MCPサーバーは、Harnessのワークスペース、セッション、タスク、状態確認、待機、キャンセルのツールをMCPクライアントに公開します。プラグインはClaude CodeとCodexにサーバーを登録します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
12掲載時のツール一覧 · 今日に更新
このツールにパラメーターはありません。
詳細
English | 中文
macOS · Windows(ガイド) · Node.js 不要 · 依存関係なし · MIT
Claude Code と Codex からそれぞれ DeepSeek Harness にタスクを渡すと、サブエージェントが 1 時間 41 分でこの雨の夜の街を作り上げます(40 秒、音声あり):
https://github.com/user-attachments/assets/72e2fdff-275e-48bc-8e5a-39ffb025a0a8
実行の様子を見る
1 つの Codex チャットからタスクを開始し、追加のタスクをキューに入れ、実行中のターンに指示を出し、3 つすべての完了を待ちます:
Codex と Claude が同じ Harness セッションで交互にやり取りし、各メッセージには送信者が表示されます:
クイックスタート
DeepSeek Harness ≥ 0.2.1-rc.2(サインイン済み)と Claude Code または Codex が必要です。それ以外は不要です。Node.js もターミナルも必要ありません。手順は macOS と Windows で同じです。
1. Harness にプラグインを追加: Plugins(插件) → Add plugin(添加插件) → dsh-baton-host と入力 → Install(安装) → Enable now(立即启用)。
有効にすると、このプラグインはすべてのフォルダーで使えるよう Claude Code と Codex 用に dsh-baton を登録し、Harness がその旨を通知します。
2. 確認: Claude Code または Codex の新しい会話で、dsh_list_workspaces を呼び出すよう依頼します。Harness のワークスペースが一覧表示されます。
これで完了です。Harness が登録できなかったと表示した場合は、ターミナルで npx -y dsh-baton-mcp setup を実行してください(Node.js ≥ 22.15 が必要です)。同じ登録処理を行います。更新、削除、Windows の詳細については下記をご覧ください。
仕組み
各クライアントの待機方法(設定は不要です):
- Claude Code はバックグラウンドで実行を待機します(
dsh_sendが返すwait_command)。実行が終了すると、一度だけ呼び出しが再開されます。 - Codex は
dsh_wait内で、呼び出しごとに最大 270 秒待機します。これはツールのタイムアウトである 300 秒をわずかに下回る時間です。待機中に実行が完了しなかった場合、状態だけが返されるため、Codex は要約せずに再度呼び出します。Codex にはwait_commandは返されません。Codex のターミナルからは呼び出しを再開できないため、ポーリングすることになります。 - Codex では MCP ツール呼び出しの承認が求められます。
dsh-batonツールを承認してください。無人のcodex exec実行には、--approve-for-meを追加してください。
ツール
ツールの詳細
| ツール | 機能 |
|---|---|
dsh_list_workspaces | Harness のサイドバーにあるワークスペースを一覧表示します |
dsh_create_workspace | フォルダーをワークスペースとして登録します(存在しない場合はフォルダーを作成します)。すでに登録済みの場合は既存のワークスペースを返します |
dsh_list_sessions | 新しい順にセッションを一覧表示し、タイトル、フォルダー、実行状態を表示します。フォルダーまたはテキストで絞り込めます。アーカイブ済みのセッションは表示されません |
dsh_read_session | 1 つのセッションの最近のプロンプトと返信を読み取ります(ツール名を含みます)。アーカイブ済みのセッションには archived: true を指定します |
dsh_send | メッセージを送信します。session_id を指定するとそのセッションを継続し、cwd または workspace_id を指定すると新しいセッションを開始します(ワークスペースに未登録の cwd は先に登録されます)。すぐに run_id を返します。Harness では、メッセージに「Claude / ChatGPT from another chat による送信」と表示されます。アーカイブ済みのセッションには送信できません。Harness でアーカイブを解除するか、新しいセッションを開始してください |
dsh_status | 実行の進行状況を返します。状態、最近のテキストとツール呼び出し、最終返信が含まれます。ターンが終了していてもサブエージェントやジョブがまだ実行中の場合は waiting_on、実行中に Harness UI で人が入力した場合は human_interjections を返します。Harness の再起動で中断された実行の状態は interrupted です |
dsh_wait | 実行の終了を待機します。Codex では呼び出しごとに最大 270 秒、その他のクライアントでは 50 秒です。実行が続いている場合は、状態だけを含む timed_out を返します。再度呼び出してください。バックグラウンドで待機できるクライアントは、代わりに dsh_send の wait_command を使用します。dsh_status はその時点の状態を確認するものであり、待機には使えません |
dsh_session_activity | セッションの現在のアクティビティを返します。実行中のターン、サブエージェント(深さは問いません)、バックグラウンドジョブが含まれます。アーカイブ済みのセッションには archived: true を指定します |
dsh_cancel | run_id または session_id を指定して、セッションのすべてのアクティビティを停止します。ターン、サブエージェント、ジョブが対象です(キューに入っているメッセージはそのまま残ります) |
dsh_rename_session | セッションの名前を変更します |
dsh_rename_workspace | ワークスペースの名前を変更します(サイドバーのタイトルのみ。フォルダーは移動しません) |
dsh_list_runs | 最近の実行を一覧表示します |
CLI
dsh-baton workspaces
dsh-baton new-workspace ~/code/new-app --title "New App"
dsh-baton sessions --cwd ~/code/new-app
dsh-baton send --cwd ~/code/new-app "Scaffold the project"
dsh-baton send --session session-xxxx "Next: add tests"
dsh-baton send --session session-xxxx --mode steer "Interjection: don't change the API"
dsh-baton wait hrun-xxxx # blocks, prints the final reply; exit 0 on success
dsh-baton status hrun-xxxx
dsh-baton activity session-xxxx # running turn, sub-agents, background jobs
dsh-baton cancel --session session-xxxx
dsh-baton rename session-xxxx "New title"
dsh-baton rename-workspace ~/code/new-app "New name"
設定
| 変数 | デフォルト | 意味 |
|---|---|---|
DSH_BATON_BACKEND | auto | auto、host、または headless |
DSH_BATON_HOME | ~/.dsh-baton | ソケットとヘッドレス実行記録 |
DSH_BATON_SOCKET | $DSH_BATON_HOME/host.sock | プラグインのソケットパス(両側で一致させる必要があります)。Windows ではユーザーごとの名前付きパイプにマッピングされます |
DSH_BATON_WAIT_S | Codex の場合は 270、それ以外は 50 | 1 回の dsh_wait 呼び出しで待機する時間です。クライアントのツールタイムアウトを延長した場合にのみ設定し、その値より短くしてください |
DSH_BIN | macOS アプリ内の dsh。それ以外は PATH | ヘッドレスモード用のハーネス CLI |
DSH_HOME | ~/.dsh | ハーネスのデータフォルダー(ヘッドレスセッションの読み取り先) |
DSH_BATON_ACCOUNT | 1 | 0 にすると、ヘッドレスモードで API キー経由のルートを使用します |
DSH_BATON_PATCHES | 空 | ヘッドレスモードの追加 --patch オーバーレイ(: 区切り) |
ヘッドレスフォールバックの詳細
プラグインに接続できない場合、MCP サーバーは Harness の dsh headless コマンドにフォールバックします。継続できるのは、自身が作成したセッションのみです(ヘッドレスモードでは standard などのエージェントプリセットは読み込まれません)。また、新しいセッションはデスクトップのサイドバーに表示されません。デフォルトでは patches/account.patch.yml がデスクトップアプリの DeepSeek アカウントのサインイン情報を再利用するため、API キーは不要です。
プラグインを有効にしたときの動作。 MCP サーバーをそのまま保持されるフォルダー ~/.dsh-baton/app にコピーし、~/.claude.json と ~/.codex/config.toml に MCP エントリーを直接書き込み、それぞれのバックアップとして *.bak-dsh-baton を作成します。PATH 上に Node.js ≥ 22.15 が見つかった場合はそれを使ってサーバーを起動し、見つからない場合は Harness 独自のランタイム(Node モードの Harness アプリ、ELECTRON_RUN_AS_NODE=1)を使うため、ほかに何かをインストールする必要はありません。いずれの場合も、claude / codex が PATH 上になくても、デスクトップアプリだけがインストールされていれば動作します。Harness の起動ごとに再度実行されますが、すでに正しいエントリーや、dsh-baton の別コピーを起動する動作中のエントリーはそのまま維持されます。Harness では、パッケージ名を入力するとソースが自動的に npm レジストリ(「公式 npm レジストリ」、「npm 官方源」)に切り替わり、再起動は不要です。登録を無効にするには、Harness に DSH_BATON_AUTO_REGISTER=0 を設定します。
npx -y dsh-baton-mcp setup は、ターミナルから同じ登録を行います。プラグインが登録できなかった場合や、MCP ディレクトリから利用する場合に使います。プラグインがすでに登録されていれば何も変更せず、プラグインが見つからない場合はその追加方法を案内します。
更新。 Harness では公式プラグインのみ更新ボタンを利用できるため、Plugins → dsh-baton-host → Uninstall、続いて Add plugin → dsh-baton-host の順に操作します。リリース直後は Harness が以前のバージョンをインストールすることがあります(pnpm の minimumReleaseAge が公開直後のバージョンを保留し、インストールダイアログにもその旨が表示されます)。すぐに新しいバージョンを使うには、バージョンを指定して [email protected] と入力します。再び有効にすると、プラグインが MCP サーバーを同じバージョンに更新します。新しい会話ではそのバージョンが使われます。バージョンが一致しない場合は、それに気づいた最初のツール呼び出しで通知されます。
削除。 Harness → Plugins → dsh-baton-host → Uninstall の順に操作してから、npx -y dsh-baton-mcp setup --remove を実行します。プラグインはアンインストールと Harness の終了を判別できないため、MCP エントリーはこのコマンドが削除できるよう残します。このコマンドは ~/.dsh-baton/app も削除します。実行記録は ~/.dsh-baton に残るため、不要な場合は削除してください。
dsh-bridge からのアップグレード。 Harness で dsh-bridge-host をアンインストールしてから dsh-baton-host を追加します。有効にすると、古い dsh-bridge の MCP エントリーが置き換えられます。DSH_BRIDGE_* 変数と既存の ~/.dsh-bridge フォルダーは、今のところ引き続き使えます。ツールのプレフィックスが新しくなる(mcp__dsh-baton__…)ため、権限の許可リストを更新してください。0.4 より前に ~/.dsh-baton/app/host を貼り付けて追加したプラグインも引き続き動作しますが、npm では更新されません。これをアンインストールし、名前を指定して dsh-baton-host を追加してください。
ソースから利用する場合(main を追跡する、またはコードを変更する場合):git clone https://github.com/JialaoLiu/dsh-baton.git を実行し、Harness でクローンの host フォルダーからプラグインを追加します(Add plugin → パスを貼り付け)。有効にすると、クローン自体が登録されるため、変更は公開前に実行できます。git pull で更新します。node dsh-baton/src/cli.mjs setup を実行すると、ターミナルからクローンを登録できます。
Windows。 手順は同じです。異なる点(ソケットファイルの代わりに名前付きパイプを使用)と、プラグインのインストールやアンインストールができない場合の解決方法については、WINDOWS.md を参照してください。
手動登録と Claude デスクトップアプリ
プラグインと setup は、これらのコマンドと同じエントリーを書き込みます(デスクトップアプリはシェルの PATH を使わずに MCP サーバーを起動するため、node の絶対パスを使用します)。
claude mcp add dsh-baton -s user -- "$(command -v node)" "$PWD/dsh-baton/src/server.mjs"
codex mcp add dsh-baton -- "$(command -v node)" "$PWD/dsh-baton/src/server.mjs"
-s user は重要です。指定しないと、Claude Code は現在のプロジェクトフォルダーにのみサーバーを登録します。
Claude デスクトップアプリ(任意):チャットアプリのコネクター(Claude Code とは別)を使うには、これを ~/Library/Application Support/Claude/claude_desktop_config.json に追加して、アプリを再起動してください。「Local dev」コネクターとして表示されます。
{ "mcpServers": { "dsh-baton": { "command": "/absolute/path/to/node", "args": ["/absolute/path/to/dsh-baton/src/server.mjs"] } } }
OS ユーザーとして実行されているプロセスであれば、dsh を直接実行する場合と同じように、ソケット経由で Harness を操作できます。dsh-baton は Harness 0.2.1 系列の内部サービス API に依存するため、Harness のメジャーアップデート後に追随リリースが必要になる場合があります。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。