# CDS モード(Chen's DS)
> **DeepSeek Harness のためのマルチエージェント開発モード。**
>
> 話す相手はたった一人のペルソナ **晨(チェン)**。その背後で **56 のペルソナ**が分業し、互いに直接受け渡しをして、最後は一人の声で報告が返ってきます。
**言語:** [English](README.en.md) · [简体中文](README.md) · **日本語**
---
## 1. これは何か
ほとんどの AI コーディング支援は **「聞けば答える」** 方式です。
CDS モードは違います。目の前にいるのは一人のペルソナ **晨**。すぐには書き始めません。まず問い、それから作業を分解し、割り当て、検証し、何が起きたかを報告します。
一言でいえば、**「一人が働く」を「チームが働くが、話しかけてくるのは一人だけ」に変える**ものです。
| よくある困りごと | CDS のやり方 |
|---|---|
| 要件が固まらないうちに AI が書き始め、方向が間違っていた | 晨がまず 5 問で専門度を調整し、その後に要件を聞く。**明確になるまで着手しない** |
| 「直しました」と言うので試すと、まだ壊れている | 修正は**別のペルソナ**が検証する。しかも検証は**元の問題を再現する**ことで、「終わりました」という自己申告ではない |
| 直すたびに別の場所が壊れる | 各ラウンドで**正味の変化量**を報告。5 ラウンド収束しなければ**自動サーキットブレーカー**が作動 |
| コードが AI っぽい、プラスチックのような匂いがする | 専任ペルソナ(D4)が**AI っぽさだけを狩り**、しかも**拒否権**を持つ |
| チャットで言ったことを次に覚えていない | 結論は**必ずファイルに落ちる**。会話の記憶ではなくファイルが正 |
| 聞いているうちに AI が自分でやってしまい、割り当てた相手が動かない | **タスク横取りは明文で禁止**。晨が権限外で作った成果物は**無効** |
| 複数の AI が同時に動いて上書きし合う | 同一バッチ内で並列化するが、**相互排他のスライス**を宣言させる。重複作業は禁止 |
---
## 2. 中核:九つの鉄則
モード全体は九つのルールで縛られています。スローガンではなく、違反には明示された結果があります。
| # | 鉄則 | 違反した場合 |
|---|---|---|
| **L1** | **ユーザーに話すのは晨だけ。** 他のペルソナは出力してはならない | 権限外、出力は無効 |
| **L2** | **要件が明確でなければ着手しない。** 初回は調整+要件収集、以降の新しい要求にはまず 5〜10 問の追加質問 | 違反着手とみなし、巻き戻し |
| **L3** | **バグを隠さない。** 「把握しているが直さない」ものも理由を明記して台帳へ | 重大な違反 |
| **L4** | **ループは収束しなければならない。** 各ラウンドで正味のバグ変化量を出す | 制御不能、サーキットブレーカー作動 |
| **L5** | **バージョン変更には明示的な許可が要る。** あなたが「更新/リファクタ/版番号変更」と言うまで、すべて通常の機能修正として扱う | 権限外の変更 |
| **L6** | **同じ組の者が互いを隠蔽してはならない。** 他人のバグを見つけたら台帳に書く。黙って直すのは禁止 | 違反 |
| **L7** | **結論はファイルに落ちる。** ペルソナ間の結論はファイルが正 | 結論は無効 |
| **L8** | **委任ではペルソナカードの全文を渡す。** パスだけでは委任失敗で、子エージェントは汎用アシスタントに落ちる | 委任無効、成果物は無効 |
| **L9** | **あなたへの質問は必ず質問ツールを使う**(構造化された選択カード)。長い散文で聞くのは禁止 | プロセス違反 |
**L2 と L9 が体感として一番大きい部分です。晨は文章の塊ではなく、選べるカードで質問します。**
---
## 3. 56 のペルソナ、二つのモード
### 主モード:晨 + 21 ペルソナ(日常の開発・文書・デザイン)
**晨**が根のペルソナです。残り 21 は五つの組に分かれます。
| 組 | 特質 | メンバー | 何をするか |
|---|---|---|---|
| **調査組** | 情感冷漠(情に流されない) | A1 公式派・A2 再利用派・A3 個性化派・A4 集約検証 | 資料調査、既存コードの把握、AI っぽさの除去、統合と検証 |
| **設計組** | 貪欲/精進 | B1 奇抜な発想・B2 現実主義・B3 美観と人間工学・B4 集約と収束 | 提案、現実性のレッドライン、視覚と操作、**収束の最終権限** |
| **開発組** | 怠惰+完璧主義 | C1 フロント・C2 バック・C3 細部とバグ修正・C4 セキュリティ層 | 実装、実際に動かす、細部の修正、セキュリティチェックリスト |
| **テスト組** | 誠実 | D1 コードレベル実行・D2 実機体験・D3 長期的バグ・D4 AI っぽさハンター・D5 セキュリティレッドチーム・D6 分類集約 | 五つの独立した視点で問題を探す。**D4 は拒否権を持つ** |
| **その他組** | — | E1 書記・E2 スライド・E3 プロモ映像 | あらゆる文章、スライド、映像 |
### 付属モード:C-WEB ウェブセキュリティ・ワークフロー(35 ペルソナ)
セキュリティ業務のときだけ有効になります。**日常の開発には影響しません。** 八つの組:
| 組 | 特質 | 人数 | 担当 |
|---|---|---|---|
| **A** 情報偵察 | 情感冷漠 | 4 | 資産境界、脅威インテリジェンス、公開情報、サプライチェーン |
| **B** 検知分析 | 求真(真実の追求) | 5 | アラートトリアージ、フォレンジック、脆弱性分析、マルウェア、トラフィック |
| **C** 対応復旧 | 克制(自制) | 4 | 対応実行、復旧検証、封じ込め、事業継続 |
| **D** ガバナンス | 固執 | 4 | **ポリシーゲート**、報告、コンプライアンス、プライバシー |
| **E** セキュリティ設計 | 遠見 | 6 | アーキテクチャ、アプリ、クラウド、ID、データ、暗号 |
| **F** 攻防 | 攻防思考 | 4 | ペネトレーションテスト、レッドチーム、リバース、脆弱性研究 |
| **G** 運用と自動化 | 効率 | 3 | 検知エンジニアリング、自動化、ツール開発 |
| **I** リアルタイム防御 | 速く、正確に、容赦なく | 5 | 指揮、遮断、欺瞞、帰属追跡、反撃 |
**セキュリティモードには特筆すべき設計が二つあります。**
**D-web1 は晨でさえ迂回できないポリシーゲートです。** システム状態を変えるすべての行為がここを通ります。判定は三つだけ——**許可/要承認/拒否**。四つ目はありません。「先にやって後で承認を出す」は四つ目ではなく、違反です。
**D-web4 はプライバシー拒否権を持ちます。** 個人データに触れる操作は、**晨に伺いを立てずに**その場で否決できます。ただし個人データを避ける代替経路を示す義務があります。
---
## 4. 一番おもしろい設計:晨はタスクを横取りできない
モード全体で最も直感に反し、実務で最も役に立つルールです。
AI はあらゆるツールを持っています。**既定の引力は「ついでにここも書いてしまう」**です。そして晨が書いた瞬間、本来派遣されるはずだったペルソナは永遠に派遣されません。つまりモードが約束したもの——テスト組の誠実さ、B4 の収束、D4 の AI っぽさ拒否権、調査組の対立検証——が**すべて起きない**のです。
そこで明示的な判定基準があります。
> **本来あるペルソナが落とすべき成果物を晨が作ったなら、それは横取りである。成果物は無効とし、作業を差し戻す。**
晨が書けるのは「進行管理の記録」だけ。業務成果物には触れられません。
対応する**症状 → ペルソナ対応表**もあります。表にある症状を晨が自分で抱え込むことはできません。表にない症状は、新しいペルソナが必要かどうかを検討するか、**晨が止まってあなたに聞きます**。
---
## 5. いつ止まってあなたを待つか
**すべてがあなたのところに戻ってくるわけではありません。**
| 必ず止まって聞く | 止まらずに続ける |
|---|---|
| 要件サマリの確認待ち | ラウンド内の進行(調査 → 設計 → 実装 → テスト) |
| 既存プロジェクト引き継ぎ時の「触ってはいけないもの」確認待ち | 修正 → 再テストのループ |
| バージョン変更/作り直しと判定した | 個々のサブタスクの完了(**これは停止点ではない**) |
| サーキットブレーカー作動 | — |
| 要件に矛盾がある | — |
| セキュリティのレッドラインに触れた | — |
| 納品しようとしている | — |
もう一つ規律があります。**ペルソナを一人派遣するたびに報告してはいけません。** それは気遣いではなく、ただの煩わしさです。
---
## 6. 「直すほどに荒れる」をどう防ぐか
六つのサーキットブレーカーが自動で作動します。
| ID | 発動条件 | 意味 |
|---|---|---|
| **CB-1** | テストループが 5 連続で収束しない | 袋小路 |
| **CB-2** | 1 ラウンドで致命的バグが 3 件以上増えた | 直した以上に壊している |
| **CB-3** | 3 連続でコードが純増し、バグが減らない | 穴を深く掘っている |
| **CB-4** | 選択カードで収束できない要件の対立 | 方向性の不一致 |
| **CB-5** | 予算/時間の上限に到達 | 資源ブレーカー |
| **CB-6** | 同じバグを 3 回「修正」しても直らない | 根本原因の誤認 |
**問題は S1(致命)〜S5(提案)の五段階に分類されます。** 一つだけ固いルールがあります。
> **「エラーは出ないが結果が誤っている」問題は、それが主要機能かどうかに関わらず、最低でも S2 として扱う。**
静かな誤りが最も危険です。画面は正常に見えるのに、数字が間違っているのですから。
---
## 7. インストール後に見えるもの
### 二枚のプリセットカード
| カード | 説明 |
|---|---|
| **CDS 模式(晨的DS)** | **普段はこれを使ってください。** 実験的依存ゼロ、必ず有効化されます |
| **CDS 模式 · 同伴频道版** | Agent Teams を追加で載せます。ペルソナ同士が直接メッセージを送り合い、タスクボードを共有できます |
**協調機能は二枚目のカードにだけあります。** 一枚目は意図的に実験的パッケージを載せていません。壊れても CDS の本体は動くようにするためです。
同伴频道版のセッションでは、**会話ヘッダーに Agent Teams の入口**が現れます。名簿、共有タスクボード、そして同僚の会話へ移動できます。
**協調の入口が見つからない場合、理由は一つだけです。一枚目のカードを選んでいます。**
---
## 8. インストール
**前提:** `dsh web` を実行できる DeepSeek Harness が導入済みであること。**npm へのログインは不要です。** 本パッケージは外部依存がゼロです。
四つの方法があります。どれか一つで構いません。**まず一つ目**(最も手軽)、あるいは**四つ目**(ネットワークに最も依存しない)へ。
### 方法 1:Web 画面(最も手軽)
1. DSH の Web 画面を開く
2. サイドバーの **Plugins** を選ぶ
3. **Add plugin** を押す
4. リポジトリの URL を入力する:
```
https://github.com/DRQRTS/dsh-cds-mode
```
5. **Registry** を選び(既定で可)、**Install** の上にある信頼確認にチェックを入れる
6. **Install** を押す
7. **`dsh web` を再起動する**
> **信頼確認に書かれている一文に注意:インストール済みプラグインは自動更新されません。** 更新とは、アンインストールしてから新しい版を入れることです。
>
> チェックはそれを承諾する意味を持ちます。プラグインの導入は、あなたの profile の中でパッケージのコードを実行します。これはプラグイン機構一般の性質で、本パッケージ固有の要件ではありません。先に `index.js`(約 400 行、Node 標準モジュールのみ)を読んで確認できます。
### 方法 2:コマンドライン(スクリプト化に向く)
```bash
dsh plugin --profile web add https://github.com/DRQRTS/dsh-cds-mode
```
(`web` はあなたの profile 名です。`--profile` は必須で、省略するとエラーになります。)
導入後は同じく再起動してください。
### 方法 3:エージェントに任せる
DSH のセッションで次のように言います。
> このプラグインを入れて:https://github.com/DRQRTS/dsh-cds-mode
エージェントが `plugin_manager` ツールの `install_bundle` を呼びます。`danger-full-access` 権限が必要です。
### 方法 4:アーカイブから(GitHub 不要)
GitHub に到達できない場合(**中国本土ではよくあります**。第 11 節参照)はこちら:
```bash
mkdir -p ~/dsh-bundles
unzip dsh-cds-mode-1.5.0.zip -d ~/dsh-bundles
# ~/dsh-bundles/package/ が得られます
```
その**ディレクトリ**をエージェントに導入させます。
```
plugin_manager action: install_bundle
target: 解凍した package の絶対パス
```
> **「長期間残す」ことが重要な理由:** 導入はシンボリックリンク方式で、DSH はそのディレクトリを**指します**。消すとプラグインが読み込まれなくなります。
>
> `install_bundle` が受け取るのは **registry のパッケージ名・git アドレス・tarball・絶対パス**の四つです。**`.zip` そのものは受け取りません** —— 先に解凍してください。パスは絶対パスである必要があります。
### 比較
| 方法 | GitHub 到達性が必要 | 再起動が必要 | 向いている人 |
|---|---|---|---|
| Web 画面 | はい | はい | ほとんどの人 |
| コマンドライン | はい | はい | バッチ処理・スクリプト |
| エージェント | spec による | はい | すでに対話で作業している人 |
| アーカイブ | **いいえ** | はい | GitHub に届かないとき |
### 最後の手順:再起動
```bash
dsh web
```
**再起動は必須です。ページの再読み込みでは足りません。** JS モジュールはプロセス起動時に読み込まれるため、パッケージの追加や差し替えには再起動が要ります。
そのうえで**新しいセッションを開始**し、プリセットで **CDS 模式** を選んでください。
### アンインストールと更新
**アンインストール:** Web の **Plugins** ページで CDS カードを見つけて削除するか、エージェントに次を実行させます。
```
plugin_manager action: remove_bundle target: @local/dsh-cds-mode
```
**更新:** プラグインは自動更新されないため、更新とは**先にアンインストールし、新しい版を入れてから再起動する**ことです。
**アンインストールしてもプロジェクトの成果物には影響しません** —— それらはあなたのプロジェクト作業領域にあります。
---
## 9. 導入後の確認(三ステップ)
**ステップ 1 —— カードが赤くない。** プリセット一覧を開き、CDS の二枚に赤い「読み込み失敗」バッジがないこと。ある場合は診断文をそのまま送ってください。行単位で、どの行が何を理由に失敗したかが書かれています。
**ステップ 2 —— 自分が誰かを分かっている。** 新しいセッションで尋ねます。
> あなたは誰?
**晨**の自己紹介が返るはずです。続けて:
> CDS 規範の鉄則はいくつある? 一つ目は?
**九つ**と答え、一つ目は「ユーザーに話すのは晨だけ」であるはずです。
**ステップ 3 —— 質問がツール経由で行われる。** 適当な要件を伝えます。たとえば「学生の宿題を管理する小さなツールを作って」。晨は**選択式のカード**を出し(長い散文ではなく)、1 バッチ最大 5 問。しかも二回目の質問は**あなたの回答から続く**はずです —— 「うちのクラスだけで使う」と答えたなら、決済・請求書・届出を聞いてくることはありません。
---
## 10. よくある問題
| 症状 | 原因 | 対処 |
|---|---|---|
| プリセット一覧に CDS カードがない | 導入後に再起動していない | `dsh web` を再起動 |
| カードに赤い「読み込み失敗」 | いずれかの行の有効化に失敗 | 診断文をそのまま保守者へ送る |
| 診断が「内蔵コーパスが見つからない」 | アーカイブが不完全 | 完全なアーカイブを展開し直す |
| 導入時に `Cannot access GitHub` | GitHub に到達できない | **第 11 節**:プロキシ設定、またはアーカイブ方式へ |
| サイドバーに Plugins ページがない | この profile が管理対象外 | 方法 2 か 3 を使う |
| モデルが「私は coding agent…」と言う | 別のプリセットを選んでいる | セッションのプリセットが **CDS 模式**か確認 |
| 協調の入口がどこにもない | **CDS 模式**を使っている | **CDS 模式 · 同伴频道版** に切り替える |
| 再導入で `ambiguous-install` | 同じ対象がすでに導入済み | **正常です**。再起動すれば済みます |
| 新しい版にしても変化がない | プラグインは自動更新されない | アンインストール → 新版を導入 → 再起動 |
| プロンプトキャッシュの命中率が急落 | コーパスを編集した(接頭辞が変化) | `cds/CHANGELOG.md` のキャッシュ影響の記録を参照 |
---
## 11. GitHub に到達できないとき
**中国本土の利用者が最も詰まりやすい箇所なので、独立した節にしています。**
プラグイン自体は**ネットワークを必要としません**(依存ゼロ、コーパス同梱)。しかし**最初の三つの方法は GitHub に到達します**(リポジトリを clone するため)。
### 症状
- Web 画面に `Cannot access GitHub` または `GitHub connection timed out` が出る
- コマンドラインで `git ls-remote` や `dsh plugin add` が約 22 秒停止して失敗する
- `Failed to connect to github.com port 443` に似たエラー
### 対処
**対処 1:git にプロキシを設定する**(プロキシがある場合)
```bash
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890
```
ポートはご自身の環境に合わせてください。設定後は確認します。
```bash
git ls-remote https://github.com/DRQRTS/dsh-cds-mode HEAD
```
コミットハッシュが表示されれば通っています。
**対処 2:アーカイブ方式(方法 4)に切り替える** —— GitHub も registry も完全に回避できます。
> よくある誤解を一つ解いておきます。npm の中国ミラー(npmmirror)は**この問題を解決しません**。ミラーしているのは registry 上のパッケージであり、GitHub のリポジトリではないからです。したがって「ミラーを変える」は git アドレスには効きません。Web 画面がミラーを選んだ後に `Try another way` と出すのはこのためです。
---
## 12. 正直に申し上げること
**保証できること**
- **外部依存ゼロ**:`index.js` は `node:` 標準モジュールしか読み込みません。何らかのパッケージが解決できずにあなたの環境で壊れる、ということが起きません(まさにそれを踏んだ末に固めた方針です)。
- **検証が同梱**:二つのスクリプトが構造・配線・可搬性・実際のマウントを網羅します。**アサーション数はスクリプト自身が出力する行を正とします**(実行後に `断言数:N` を表示)——文書には数を書きません。実際の結果とずれないようにするためです。ご自身で実行できます。
```bash
node _verify3.mjs && node _verify-corpus.mjs
```
- **コーパスを照合できる**:`node _sync-corpus.mjs --check` が同梱コーパスと原本をバイト単位で比較します。
- **`.zip` と `.tgz` は内容がバイト単位で同一**。それぞれ二つの独立した展開ツールで検証済みです。
**正直に申し上げるべきこと**
- **同伴频道版は二つの実験的パッケージ**(`dsh-experimental-agent-team` / `dsh-experimental-tool-agent-team`)と一つの実験的 UI パッケージに依存します。**安定性の保証はありません**。上流の破壊的変更でそのカードが有効化できなくなる可能性があります。**これは CDS 模式(基礎カード)には影響しません。**
- **同一バッチの並列上限は 8 インスタンス**です。意図的な制限で、欠陥ではありません。
- DSH `0.2.0-rc.2` に対して開発しています。**DSH のメジャー版を上げる前に、上記の検証スクリプトを実行してください。**
- **四つの機能面は実セッションでのエンドツーエンド検証が未実施です**:プリセットカードが赤くならないこと、子エージェントのロールプレイ、質問がツール経由で行われること、協調 UI と同僚同士のメッセージ交換。アサーションが保証するのは「配線が正しく、コーパスが揃い、マウントできる」ことで、**「実際に快適に動く」ことではありません。** 初回は第 9 節の三ステップをお試しください。
**セキュリティモードの境界について**
- 反撃実行(I-web5)には**七つの准入要件**があり、一つでも欠ければ即座に拒否します。「先にやって後で申請」「口頭の同意」「緊急だから」は受け付けません。
- **「絶対にしない」一覧**があります:侵入、破壊、DDoS、バックドア、データ窃取、範囲外の標的への攻撃、自然人への報復 —— **委任状がどれほど広く書かれていても行いません**。
- 理由は単純です。**委任状は「何をしてよいか」を広げられますが、犯罪を適法行為にはできません。**
---
## 13. 変更したいとき
**コーパスを編集する**:すべてパッケージ内の `cds/` にあります。編集後は**再起動**してください。
**自前のコーパスを使う**:`cds/` を別の場所へ複製し、`cordis.patch.yml` の `cds-mode` 行に `corpusDir` を追加してそこを指します。
**`liveReload` は入れないでください**:コーパスが変わるとシステムプロンプトの接頭辞を書き換え、**そのセッションのプロンプトキャッシュを落とします**。このモードはキャッシュ命中を重視します。編集したら再起動してください。
**アンインストール**:`plugin_manager action: remove_bundle target: @local/dsh-cds-mode`。プリセットカードが消え、システムプロンプトは配備既定に戻ります。**プロジェクトの成果物には影響しません**(あなたのプロジェクト作業領域にあります)。
---
## 14. ファイルの場所
```
dsh-cds-mode/ ← リポジトリの根=バンドルの根
├── README.md ← 中国語(既定)
├── README.en.md ← 英語
├── README.ja.md ← このファイル
├── INSTALL.md ← 導入とトラブルシューティング
├── LICENSE ← MIT
├── package.json ← 名前・版・dsh.bundle.patch の指し先
├── index.js ← プラグイン本体、約 400 行、依存ゼロ
├── cordis.patch.yml ← プリセットとマウント設定
├── icon.svg ← アイコン原版:単色 currentColor、テーマ追従
├── icon.png ← 512×512 ビットマップ(明るい背景用・透明)
├── icon-dark.png ← 512×512 ビットマップ(暗い背景用・透明)
├── icon-64.png ← 64×64 ビットマップ
├── locale/ ← UI 文言
└── cds/ ← 規範コーパス全体(90 ファイル)
├── CORE.md 運用契約:九つの鉄則、状態機械、ゲート、委任、進行管理
├── README.md モードの入口とペルソナ一覧
├── CHANGELOG.md 変更履歴(キャッシュ無効化の記録を含む)
├── personas/ 晨 + 21 ペルソナ + 5 の組索引
│ └── web/ セキュリティモードの 36(chen-web を含む)
├── workflow/ 5 本のワークフロー
├── protocol/ 協調プロトコル、成果物契約、バグ分類
├── questions/ 質問の総則と問題バンク
├── selfrescue/ 節約部分:キャッシュ命中と接頭辞の安定化
└── web/ セキュリティワークフローの補助文書 8 本
```
より深く知るには `cds/CORE.md` から始めてください。それが運用契約で、他はすべてそこから派生します。
### 検証スクリプト(任意・自己点検用)
リポジトリには開発・検証用のファイルも含まれます。**プラグインの導入には不要です。**
| ファイル | 役割 |
|---|---|
| `_verify3.mjs` | プラグイン層の検証:構造・配線・可搬性・実際のマウント |
| `_verify-corpus.mjs` | コーパス層の検証:ペルソナの完全性、組特質の一致、リンク切れ |
| `_sync-corpus.mjs` | コーパスの同期(`--check` は書き込まず比較のみ) |
| `_check-specs.mjs` | どの導入 spec 形式が公式パーサに受理されるかを確認 |
| `_check-icon.mjs` | アイコン SVG の検証:構造と幾何 |
| `_check-locale.mjs` | locale JSON をバイト単位で点検 |
| `_compare-extract.mjs` | 展開物と原本をバイト単位で比較 |
| `_patch-reader.mjs` | 依存なしの patch 読み取り器 |
| `_zip.mjs` | 依存なしの ZIP 書き出し器 |
| `_pack.mjs` | `.zip` と `.tgz` を生成 |
最初の二つはご自身で実行できます(アサーション数はスクリプトの出力を正とします)。
```bash
node _verify3.mjs && node _verify-corpus.mjs
```
---
**言語:** [English](README.en.md) · [简体中文](README.md) · **日本語**