Bundle
@local/dsh-cds-mode
CDS 模式(Chen's DS)——把「标准模式 + 创造模式 + 自救模式(省钱)」合并成一个多智能体开发模式,装成 DSH agent 预设。你和唯一的主人格「晨」对话,它带着 56 个人格分头干活、互相直接交接,最后把结果交回你手上。含 A/B/C/D/E 五组 21 个人格、C-WEB 网络安全附属工作流(八组 35 个人格,含不可绕过的策略门与隐私一票否决)、两条闭环工作流、生成式提问机制与提示词缓存约束。零外部依赖,语料随包自带。
- Source
- DRQRTS
- stars
- 5 stars
- License
- MIT
- Updated
- Updated 3 days ago
Readme
# CDS 模式(Chen's DS)
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="icon-dark.png">
<img src="icon.png" alt="CDS 模式图标:一个枢纽带四颗卫星" width="112">
</picture>
</p>
> **一个把「多智能体协作」真正跑起来的工作模式,装进 DeepSeek Harness。**
>
> 你和唯一的主人格**晨**对话。它带着 **56 个人格**分头干活,互相直接交接,最后把结果交回你手上。
> **56 是怎么算的**:主模式 21 个(A/B/C/D/E 五组)+ 网络安全模式 35 个(八组)。两个模式各自还有一位"晨"——主模式的晨和它的安全模式版本。所以你实际会看到 **58 份人格卡**,但对你说话的自始至终只有一个。
**语言:** [English](README.en.md) · **简体中文** · [日本語](README.ja.md)
---
## 一、这是什么
大多数 AI 编程助手的工作方式是:**你问,它答**。
CDS 模式不一样。你面对的是一个人格 —— **晨**。它不会立刻动手,而是先问清楚,然后把活拆开、派人、验收,最后给你一个交代。
用一句话说:**它把"一个人干活"变成了"一个团队干活,但只有一个人跟你汇报"。**
| 你可能遇到的麻烦 | CDS 的做法 |
|---|---|
| 需求没说清,AI 就开始写,写完发现方向错了 | 晨先问 5 道题校准专业度,再问需求,**不问清不动手** |
| AI 说"已经修好了",你一测还是坏的 | 修完必须由**另一个人格**验证,而且验证方式是**重放原问题**,不是自己说"好了" |
| 每次改都冒出新的坏 | 每轮必须报**净变化量**,连续 5 轮不收敛就**自动熔断**停下来 |
| 代码一看就是 AI 写的,一股塑料味 | 有专人(D4)**专门抓 AI 味**,而且**有一票否决权** |
| 聊天里说过的话,下次就不记得了 | 所有结论**必须落盘成文件**,以文件为准,不以对话记忆为准 |
| 问着问着,AI 自己把活干了,派出去的人没派 | 明文禁止**抢活**,晨越权产出的东西**直接作废** |
| 一堆 AI 同时干活,互相覆盖 | 同批并行但有**互斥切片**声明,禁止重复劳动 |
---
## 二、核心是什么:九条铁律
整个模式的行为由九条规则锁死。这些不是口号,违反会有明确后果。
| # | 铁律 | 违反了会怎样 |
|---|---|---|
| **L1** | **只有晨能跟你说话。** 其他人格不许直接输出 | 越权,输出作废 |
| **L2** | **需求没澄清,不许开工。** 首次对话做校准+需求采集,之后每次新要求先追问 5–10 题 | 违规开工,回退 |
| **L3** | **不藏 bug。** 所有问题都要进台账,连"知道但先不修"的也要写清理由 | 严重违规 |
| **L4** | **循环必须收敛。** 每轮修复后要给出这轮的净变化量 | 失控,触发熔断 |
| **L5** | **改版本要你明确说。** 你没说"更新/重构/改版本号",一切改动按普通功能问题处理 | 越权变更 |
| **L6** | **同组不许互相掩盖。** 发现了别人的 bug 必须写进台账,不许偷偷改掉不记录 | 违规 |
| **L7** | **结论必须落盘。** 人格之间的结论以文件为准 | 无效结论 |
| **L8** | **派活要交出完整人格卡。** 只给路径等于没派,子 Agent 会变成普通助手 | 无效委任,产物作废 |
| **L9** | **问你必须用提问工具**(结构化选项卡片),不许一大段散文问你 | 流程违规 |
其中 **L2** 和 **L9** 是你感受最直接的:**晨会用选择题卡片问你,而不是丢一大段话让你自己找重点。**
---
## 三、56 个人格,分两种模式
### 主模式:晨 + 21 个人格(日常开发、文档、设计)
**晨** 是主人格。另外 21 个分五组:
| 组 | 特质 | 成员 | 擅长的活 |
|---|---|---|---|
| **调查组** | 情感冷漠 | A1 官方派 · A2 复用派 · A3 个性化派 · A4 汇总验证 | 查资料、盘代码、去 AI 味、整合验证 |
| **设计组** | 贪欲 / 精进 | B1 古怪奇想 · B2 务实 · B3 美观与人因 · B4 汇总收口 | 出方案、务实红线、视觉与操作、**一票收口** |
| **开发组** | 懒惰 + 完美主义 | C1 前端 · C2 后端 · C3 细节与修 bug · C4 安全层 | 写代码、跑一遍、修细节、安全清单 |
| **测试组** | 真诚 | D1 代码级跑测 · D2 实机体验 · D3 长远 bug · D4 AI 味猎手 · D5 安全红队 · D6 分类汇总 | 五个视角独立找问题,**D4 有否决权** |
| **其他组** | —— | E1 文员 · E2 演示文稿 · E3 宣传片视频 | 一切文字、PPT、视频 |
### 附属模式:C-WEB 网络安全工作流(35 个人格)
做安全任务时启用,**不影响日常开发**。八个组:
| 组 | 特质 | 人数 | 干什么 |
|---|---|---|---|
| **A** 情报侦察 | 情感冷漠 | 4 | 资产边界、威胁情报、公开信息、供应链 |
| **B** 检测分析 | 求真 | 5 | 告警分诊、数字取证、漏洞分析、恶意代码、流量分析 |
| **C** 响应恢复 | 克制 | 4 | 执行响应、验证恢复、遏制策略、业务连续性 |
| **D** 治理合规 | 固执 | 4 | **策略门**、报告复盘、合规、隐私 |
| **E** 安全架构与工程 | 远见 | 6 | 架构、应用安全、云安全、身份、数据安全、密码学 |
| **F** 攻防对抗 | 攻防思维 | 4 | 渗透测试、红队、逆向、漏洞研究 |
| **G** 安全运营与自动化 | 效率 | 3 | 检测工程、安全自动化、安全工具开发 |
| **I** 实时防御反击 | 快准狠 | 5 | 实时指挥、攻击阻断、欺骗防御、攻击溯源、反击执行 |
**安全模式有两条特别的设计**:
**D-web1 是「策略门」,连晨都不能绕过它。** 任何会改变系统状态的动作都要过它,判定只有三种结果:**允许 / 需审批 / 拒绝**。没有第四种 —— "先做着,同时补审批"不算一种结果,算违规。
**D-web4 有一票否决权。** 涉及个人数据的操作,它可以直接否掉,**不需要请示晨**,但必须给出不涉及个人数据的替代路径。
---
## 四、最有意思的设计:晨不许抢活
这是整个模式里最反直觉、也最实用的一条。
AI 手上什么工具都有。**默认行为倾向就是"顺手把这块也写了"。** 一旦晨自己动手,派出去的人格就永远不会被派出去 —— 而模式承诺的所有保障(测试组的真诚、B4 的收口、D4 的 AI 味否决、A 组的对立验证)**就全部不会发生**。
所以有一条明文判据:
> **如果晨产出了一份本该由某个人格落盘的东西,那就是抢活,产物作废,退回去重做。**
晨只被允许写"编排记录"类的文件,业务产物一律不许碰。
还有配套的**症状 → 人格对照表**:什么症状派给谁,表里有的不许自己硬上;表里没有的,先考虑该不该新增人格,或者**停下来问你**。
---
## 五、什么时候会停下来等你
这条很重要 —— **不是每件事都会来烦你。**
| 必须停下来问你 | 不许停,自己继续 |
|---|---|
| 需求摘要等你确认 | 轮内推进(调查 → 设计 → 开发 → 测试) |
| 接手项目时等你确认「不可动清单」 | 修 bug → 复测这个循环 |
| 判定为版本变更 / 推倒重做 | 单个子任务完成(**这不叫停点**) |
| 熔断触发 | —— |
| 需求出现矛盾 | —— |
| 碰到安全红线 | —— |
| 准备交付 | —— |
另外还有一条纪律:**不要每派完一个人格就来汇报一句。** 那是骚扰,不是负责。
---
## 六、怎么防"越修越乱"
模式内置了**六种熔断**,达到条件自动停下:
| 编号 | 触发条件 | 含义 |
|---|---|---|
| **CB-1** | 连续 5 轮测试循环没收敛 | 陷入死循环 |
| **CB-2** | 任一轮新增 3 个以上致命 bug | 修引入的问题比修掉的多 |
| **CB-3** | 代码连续 3 轮净增长,且 bug 没减少 | 越修越乱 |
| **CB-4** | 你和晨在需求上出现无法用选择题收敛的分歧 | 方向性分歧 |
| **CB-5** | 预算/时间到上限 | 资源熔断 |
| **CB-6** | 同一个 bug"修"了 3 次还没好 | 根因判断错了 |
**问题分成五级**,从 S1(致命)到 S5(建议)。其中有一条硬规定:
> **"不报错但结果是错的"这类问题,至少按 S2 算,跟它是不是核心功能无关。**
静默错误数据是最危险的 —— 界面一切正常,账却算错了。
---
## 七、装完之后你看到什么
### 两张预设卡片
| 卡片 | 说明 |
|---|---|
| **CDS 模式(晨的DS)** | **日常用这个。** 零实验依赖,一定激活 |
| **CDS 模式 · 同伴频道版** | 多挂 Agent Teams:人格之间可直接互相说话、共享任务板 |
**协同功能只在第二张卡里。** 第一张卡故意不挂任何实验包 —— 实验包出问题时,CDS 主体仍然能用。
选「同伴频道版」的会话,**对话头部会多一个 Agent Teams 入口**,点开能看到队友名册、共享任务板、点进某个队友的会话。
**看不到协同入口,只有一个原因:你选的是第一张卡。**
---
## 八、安装
**前置条件**:装好 DeepSeek Harness,能跑 `dsh web`。**不需要 npm 登录,本包零外部依赖。**
四种装法,选一种就行。**推荐先看第一种**(最省事),或者直接跳到第四种(最不依赖网络)。
### 方式一:Web 界面装(最省事)
1. 打开 DSH 的 Web 界面(`dsh web` 后面板)
2. 侧边栏点 **Plugins**
3. 点 **Add plugin**
4. 在输入框里填仓库地址:
```
https://github.com/DRQRTS/dsh-cds-mode
```
5. 选好 **Registry**(默认即可),勾选上方的信任确认框
6. 点 **Install**
7. **重启 `dsh web`**
> **注意信任框里那句话**:**已安装的插件不会自动更新** —— 升级的做法是**卸载再装新版本**。
>
> 勾选它代表你确认了这一点。装插件会在你的 profile 里执行包里的代码(这是插件机制的通用性质,不是本包的特殊要求)。装之前你可以自己读一遍 `index.js`,约 400 行,只用 Node 内建模块。
### 方式二:命令行装(适合脚本化)
```bash
dsh plugin --profile web add https://github.com/DRQRTS/dsh-cds-mode
```
(`web` 是你的 profile 名。不指定 `--profile` 会报错,这个参数是必需的。)
装完同样**重启**。
### 方式三:让 agent 装
在一个 DSH 会话里说:
> 帮我安装插件:https://github.com/DRQRTS/dsh-cds-mode
agent 会调用 `plugin_manager` 工具的 `install_bundle`。这一步需要 `danger-full-access` 权限。
### 方式四:从压缩包装(不依赖 GitHub)
如果 GitHub 连不上(**中国大陆常见**,见下面第十一节),用这条:
```bash
mkdir -p ~/dsh-bundles
unzip dsh-cds-mode-1.5.0.zip -d ~/dsh-bundles
# 得到 ~/dsh-bundles/package/
```
然后让 agent 装这个**目录**:
```
plugin_manager action: install_bundle
target: /绝对路径/到/解压出的/package
```
> **为什么强调"长期保留"**:安装用软链接方式,DSH 会**指向**这个目录。目录删了,插件就加载失败。
>
> `install_bundle` 接受 **registry 包**、**git 地址**、**tarball**、**绝对路径**四种。**不接受 `.zip` 本身** —— 所以要先解压。路径必须是**绝对路径**。
### 四种装法对比
| 方式 | 需要 GitHub 可达 | 需要重启 | 适合 |
|---|---|---|---|
| Web 界面 | 是 | 是 | 大多数人 |
| 命令行 | 是 | 是 | 批量 / 脚本 |
| agent 工具 | 视 spec 而定 | 是 | 已经习惯用对话 |
| 压缩包 | **否** | 是 | GitHub 不通时 |
### 最后一步:重启
```bash
dsh web
```
**重启是必需的,刷新页面不够。** JS 模块是进程启动时加载的,新增或替换一个包必须重启才会加载。
然后**新建会话**,预设里选「CDS 模式」。
### 卸载与升级
**卸载**:Web 界面的 Plugins 页找到 CDS 卡片 → 卸载;或让 agent 执行
```
plugin_manager action: remove_bundle target: @local/dsh-cds-mode
```
**升级**:因为插件不自动更新,升级 = **先卸载,再按上面任一方式装新版本**,然后重启。
**卸载不影响你的项目产物** —— 那些在你的项目工作区里。
---
## 九、装完怎么验(三步)
**第一步 · 卡片不标红。** 打开预设列表,两张 CDS 卡片应当没有红色「加载失败」徽标。有的话,把诊断原文贴出来 —— 那是逐行的,会直接写明哪一行、什么原因。
**第二步 · 它知道自己是谁。** 新开会话问:
> 你是谁?
应当得到**晨**的自述。再问:
> 你手上的 CDS 规范里有几条铁律?第一条是什么?
应当答出 **九条**,第一条是「晨是唯一对用户说话的人格」。
**第三步 · 提问走工具。** 随便说个需求,比如"帮我做个管理学生作业的小工具"。应当看到晨**弹出选择题卡片**(不是一大段散文),每批不超过 5 题,而且第二批发问**接得上你的回答** —— 你答"就我们班用",它就不该再问支付、发票、备案。
---
## 十、常见问题
| 现象 | 原因 | 怎么办 |
|---|---|---|
| 预设列表里没有 CDS 卡片 | 装完没重启 | 重启 `dsh web` |
| 卡片标红「加载失败」 | 某一行激活失败 | 把诊断原文给发布者 |
| 诊断说「内置语料缺失」 | 压缩包不完整 | 重新解压完整压缩包 |
| 安装时报 `Cannot access GitHub` | GitHub 连不上 | **见第十一节**:配代理,或改用压缩包方式 |
| 侧边栏没有 Plugins 页 | 这个 profile 没有托管 | 改用命令行或 agent 工具 |
| 模型说"我是 coding agent…" | 选的是别的预设 | 确认会话预设是「CDS 模式」 |
| 找不到任何协同入口 | 用的是「CDS 模式」 | 换「CDS 模式 · 同伴频道版」 |
| 重复安装报 `ambiguous-install` | 同一目标已装 | **正常现象**,重启即可 |
| 装了新版没变化 | 插件不自动更新 | 先**卸载**再装新版,然后重启 |
| 缓存命中率突然变低 | 语料被改过(前缀变了) | 看包内 `cds/CHANGELOG.md` 的缓存影响记录 |
---
## 十一、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`
### 怎么办
**办法一:给 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
```
能打印出一串 commit hash 就通了。
**办法二:改用压缩包方式**(不需要代理,最稳)
按第八节的**方式四**,把 zip 解压到本地目录,让 agent 从**绝对路径**安装。这条路完全绕开 GitHub 和 npm registry。
> 顺带说明:npm registry 的国内镜像(npmmirror)**帮不了这个问题** —— 它镜像的是 registry 上的包,不镜像 GitHub 仓库。所以「换镜像」对 GitHub 地址无效,这就是 Web 界面会提示 `Try another way` 的原因。
---
## 十二、要如实说明的几点
**能保证的**
- **零外部依赖**:核心代码只 import 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 大版本前,请先跑一遍上面的验证脚本。**
- **四个功能面尚未在真实会话中做端到端验证**:预设不标红、子 Agent 角色扮演、提问走工具、同伴频道界面与队友互发。校验断言覆盖的是"接线对、语料全、能装载",**不是"跑起来好用"**。第一次用建议按第九节的三步验一遍。
**关于安全模式的边界**
- 反击执行(I-web5)有**准入七项**,缺一项直接拒收,不接受"先做后补""口头同意""情况紧急"。
- 还有一份**"绝对不做"清单**:入侵、破坏、DDoS、植入后门、窃取数据、攻击未列入范围的目标、对自然人报复 —— **无论授权书写得多宽,都不做**。
- 理由很简单:**授权可以扩大"允许做什么",但不能把犯罪行为变成合法行为。**
---
## 十三、想改点什么
**改语料**:包内 `cds/` 就是全部规范文本。改完**重启**。
**用自己的语料库**:把 `cds/` 复制到别处,在 `cordis.patch.yml` 的 `cds-mode` 行加 `corpusDir` 指向它。
**没有热重载**:语料在插件激活时读一次,此后不再重读。改了语料**必须重启**。这是刻意的 —— 提示词前缀就是缓存键,中途换语料等于让前后两轮的缓存对不上。这个模式很在意缓存命中,所以宁可要求你重启。
**卸载**:`plugin_manager action: remove_bundle target: @local/dsh-cds-mode`。卸载后预设卡片消失,系统提示恢复默认。**你的项目产物不受影响**(它们在你的项目工作区里)。
---
## 十四、文件在哪
```
dsh-cds-mode/ ← GitHub 仓库根目录(也是 bundle 根目录)
├── README.md ← 中文(默认,本文件)
├── README.en.md ← English
├── 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/ ← 界面上显示的名称与描述
└── cds/ ← 全部规范语料(90 个文件)
├── CORE.md 运行契约:九条铁律、状态机、门禁、委任协议、编排纪律
├── README.md 模式总入口与人格总览
├── CHANGELOG.md 变更记录(含每次缓存失效登记)
├── personas/ 晨 + 21 个人格委任书 + 5 份组索引
│ └── web/ 网络安全模式的 36 份(含 chen-web)
├── workflow/ 5 条工作流(新项目 / 接手 / 迭代 / 熔断 / 网络安全)
├── protocol/ 协同协议、产物契约、bug 分类法
├── questions/ 提问总纲 + 题库(校准 / 新项目 / 接手 / 追问)
├── selfrescue/ 省钱部分:缓存命中与前缀稳定化
└── web/ 网络安全工作流的 8 份支撑文档
```
想深入了解,从 `cds/CORE.md` 开始 —— 那是运行契约,其余都围绕它展开。
### 校验脚本(可选,自测用)
仓库里还有几个只用于开发和校验的文件,**安装插件用不到它们**:
| 文件 | 作用 |
|---|---|
| `_verify3.mjs` | 插件层校验:结构、接线、可移植性、真实装载 |
| `_verify-corpus.mjs` | 语料层校验:委任书要素、组特质一致性、死链 |
| `_sync-corpus.mjs` | 语料同步(`--check` 只比对不写入) |
| `_check-specs.mjs` | 验证各种安装写法能否被官方解析器接受 |
| `_check-icon.mjs` | 校验图标 SVG:结构、几何、主题跟随 |
| `_check-locale.mjs` | 按字节检查 locale JSON(防编码损坏) |
| `_compare-extract.mjs` | 比对"解压产物 vs 源"是否逐字节一致 |
| `_patch-reader.mjs` | 零依赖的 patch 结构读取器 |
| `_zip.mjs` | 零依赖的 ZIP 写入器 |
| `_pack.mjs` | 打包出 `.zip` 与 `.tgz` |
你可以自己跑前两个(断言数以脚本输出为准):
```bash
node _verify3.mjs && node _verify-corpus.mjs
```
---
**语言:** [English](README.en.md) · **简体中文** · [日本語](README.ja.md)
Install
dsh plugin --profile web add github:DRQRTS/dsh-cds-mode
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install local-dsh-cds-mode from the hub
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.