# CDS Mode (Chen's DS)

CDS mode icon: one hub with four satellites

> **A multi-agent development mode for DeepSeek Harness.** > > You talk to one persona — **Chen**. It dispatches **56 personas** that hand work to each other directly, then reports back in a single voice. **Language:** **English** · [简体中文](README.zh.md) · [日本語](README.ja.md) --- ## 1. What this is Most AI coding assistants work like this: **you ask, it answers.** CDS mode is different. You face one persona — **Chen**. It doesn't start writing immediately. It asks first, then splits the work, assigns it, verifies the result, and gives you an account of what happened. In one sentence: **it turns "one person working" into "a team working, but only one of them talks to you."** | The trouble you may have hit | What CDS does | |---|---| | The AI starts writing before the requirement is clear, and the direction turns out wrong | Chen asks 5 calibration questions, then the requirement. **Nothing starts until it's clear** | | The AI says "fixed", you test it, still broken | A **different** persona must verify, and verification means **replaying the original problem** — not declaring itself done | | Every change breaks something new | Each round must report its **net change**; five rounds without convergence triggers an **automatic circuit breaker** | | The code reads like AI wrote it — plastic | One persona (D4) **hunts AI-slop specifically** and holds a **veto** | | Things said in chat are forgotten next time | Every conclusion **must land on disk**; files are authoritative, not conversation memory | | The AI quietly does the work itself, so nothing was ever assigned | Task-hogging is explicitly forbidden; anything Chen produces out of scope is **voided** | | Many agents working at once overwrite each other | Batched parallelism with **mutually exclusive slice** declarations; duplicate work is forbidden | --- ## 2. The core: nine iron rules The whole mode is locked down by nine rules. They are not slogans — breaking one has a stated consequence. | # | Rule | Consequence of breaking it | |---|---|---| | **L1** | **Only Chen talks to you.** No other persona may output to the user | Out of scope; output voided | | **L2** | **No work before the requirement is clear.** First conversation does calibration + requirement gathering; every later request gets 5–10 follow-up questions first | Work started in violation; rolled back | | **L3** | **Bugs are never hidden.** Everything goes into the ledger, including "known but not fixing", with the reason stated | Serious violation | | **L4** | **Loops must converge.** Each round must report its net bug change | Out of control; circuit breaker fires | | **L5** | **Version changes need your explicit word.** Until you say "update / refactor / bump the version", all edits run as ordinary feature work | Unauthorized change | | **L6** | **Peers may not cover for each other.** If one finds another's bug, it goes in the ledger — no quiet fix | Violation | | **L7** | **Conclusions must land on disk.** Files are authoritative between personas | Conclusion invalid | | **L8** | **Delegation must hand over the full persona card.** A path alone means the delegation failed; the sub-agent degrades into a generic assistant | Invalid delegation; artifacts voided | | **L9** | **Questions to you always use the question tool** (structured choice cards), never a wall of prose | Process violation | **L2 and L9 are what you feel most directly: Chen asks with selectable cards, not a paragraph you have to parse for the point.** --- ## 3. 56 personas, in two modes ### Main mode: Chen + 21 personas (everyday development, docs, design) **Chen** is the root persona. The other 21 sit in five groups: | Group | Trait | Members | What they're for | |---|---|---|---| | **Research** | Emotional coldness | A1 official-sources · A2 reuse-first · A3 individuation · A4 consolidation & verification | Reading docs, mapping existing code, removing AI-slop, integrating and verifying | | **Design** | Greed / refinement | B1 odd idea · B2 pragmatist · B3 aesthetics & ergonomics · B4 consolidation & closure | Proposals, pragmatism red lines, visual and interaction, **final say on closure** | | **Development** | Laziness + perfectionism | C1 frontend · C2 backend · C3 details & bug fixing · C4 security layer | Writing code, running it, fixing details, the security checklist | | **Testing** | Sincerity | D1 code-level run · D2 real-device experience · D3 long-horizon bugs · D4 AI-slop hunter · D5 security red team · D6 classification & aggregation | Five independent viewpoints hunting problems; **D4 holds a veto** | | **Misc** | — | E1 clerk · E2 slides · E3 promo video | All prose, decks, video | ### Attached mode: C-WEB web-security workflow (35 personas) Enabled for security tasks. **It does not affect everyday development.** Eight groups: | Group | Trait | Count | What they do | |---|---|---|---| | **A** Reconnaissance | Emotional coldness | 4 | Asset boundary, threat intel, open-source info, supply chain | | **B** Detection & analysis | Truth-seeking | 5 | Alert triage, forensics, vuln analysis, malware, traffic | | **C** Response & recovery | Restraint | 4 | Execute response, verify recovery, containment, business continuity | | **D** Governance & compliance | Stubbornness | 4 | **Policy gate**, reporting, compliance, privacy | | **E** Security architecture | Foresight | 6 | Architecture, appsec, cloud, identity, data security, crypto | | **F** Offense & defense | Adversarial thinking | 4 | Pentest, red team, reverse engineering, vuln research | | **G** Security operations | Efficiency | 3 | Detection engineering, automation, tooling | | **I** Real-time defense | Fast, precise, hard | 5 | Live command, blocking, deception, attribution, countermeasure | **Two designs in the security mode are worth knowing:** **D-web1 is a policy gate that even Chen cannot bypass.** Every action that changes system state goes through it. Its verdict is one of three — **allow / requires approval / deny**. There is no fourth. "Do it now and file the approval alongside" is not a fourth; it's a violation. **D-web4 holds a privacy veto.** For any operation touching personal data it can refuse outright, **without asking Chen** — but it must offer an alternative path that avoids personal data. --- ## 4. The most interesting design: Chen may not hog tasks This is the most counter-intuitive and, in practice, the most useful rule in the whole mode. AI has every tool available. **The default pull is to just write that part too.** And the moment Chen does, the personas that should have been dispatched never are — so everything the mode promises (the testing group's sincerity, B4's closure, D4's AI-slop veto, the research group's adversarial verification) **simply does not happen**. So there is an explicit test: > **If Chen produces an artifact that some persona should have landed, that is task-hogging. The artifact is voided and the work goes back.** Chen may only write "orchestration records". Business artifacts are off limits. There is also a matching **symptom → persona table**: which symptom goes to whom. Symptoms in the table may not be handled by Chen; symptoms not in it trigger a question of whether a new persona is needed, or **Chen stops and asks you**. --- ## 5. When it stops and waits for you This matters — **not everything comes back to bother you.** | Must stop and ask you | Must not stop; continue on its own | |---|---| | Requirement summary awaiting your confirmation | In-round progress (research → design → build → test) | | Awaiting your "do not touch" list when taking over a project | The fix → retest loop | | Judged to be a version change / rebuild | A single subtask finishing (**that is not a stop point**) | | Circuit breaker fired | — | | Contradiction in the requirements | — | | A security red line is hit | — | | About to deliver | — | There is one more discipline: **do not report back after every single persona dispatched.** That's pestering, not diligence. --- ## 6. How it avoids "fixing until it's a mess" Six circuit breakers fire automatically: | ID | Trigger | Meaning | |---|---|---| | **CB-1** | 5 consecutive test loops without convergence | Stuck in a loop | | **CB-2** | ≥ 3 new fatal bugs in any one round | Fixes introduce more than they remove | | **CB-3** | Code grows net for 3 consecutive rounds while bugs don't fall | Digging a deeper hole | | **CB-4** | A requirement disagreement that choice cards cannot resolve | Directional disagreement | | **CB-5** | Budget / time limit reached | Resource breaker | | **CB-6** | The same bug "fixed" 3 times and still broken | Root cause was misjudged | **Problems are graded S1 (fatal) to S5 (suggestion).** One hard rule: > **A "no error but the result is wrong" problem counts as at least S2, regardless of whether the feature is core.** Silent wrong data is the most dangerous kind — the UI looks fine, the numbers are wrong. --- ## 7. What you see after installing ### Two preset cards | Card | Notes | |---|---| | **CDS 模式(晨的DS)** | **Use this one day to day.** Zero experimental dependencies, always activates | | **CDS 模式 · 同伴频道版** | Additionally mounts Agent Teams: personas can message each other directly and share a task board | **Collaboration features exist only in the second card.** The first deliberately mounts no experimental package — so if one breaks, the CDS core still works. In a 同伴频道版 session, **an Agent Teams entry appears in the conversation header**: roster, shared task board, and navigation into a teammate's conversation. **If you can't find any collaboration entry, there is only one reason: you picked the first card.** --- ## 8. Installation **Requirements:** a working DeepSeek Harness install that can run `dsh web`. **No npm login needed.** The package has zero external dependencies. Four paths, pick one. **Try the first** (least effort), or jump to the fourth (least network). ### Option 1: Web UI (least effort) 1. Open the DSH web interface 2. In the sidebar, select **Plugins** 3. Click **Add plugin** 4. Enter the repository URL: ``` https://github.com/DRQRTS/dsh-cds-mode ``` 5. Choose a **Registry** (the default is fine) and tick the trust box above **Install** 6. Click **Install** 7. **Restart `dsh web`** > **Note what the trust box says: installed plugins do not update automatically.** Upgrading means uninstalling, then installing the new version. > > Ticking it acknowledges that. Installing runs the package's code inside your profile — that is how the plugin mechanism works generally, not something specific to this package. You can read `index.js` first: about 400 lines, only Node built-ins. ### Option 2: CLI (good for scripting) ```bash dsh plugin --profile web add https://github.com/DRQRTS/dsh-cds-mode ``` (`web` is your profile name. `--profile` is required — omitting it errors.) Restart afterwards, same as above. ### Option 3: Let the agent install it In a DSH session, say: > Install this plugin for me: https://github.com/DRQRTS/dsh-cds-mode The agent calls the `plugin_manager` tool's `install_bundle`. This needs `danger-full-access`. ### Option 4: From the archive (no GitHub needed) If GitHub is unreachable (**common in mainland China**, see section 11), use this: ```bash mkdir -p ~/dsh-bundles unzip dsh-cds-mode-1.5.0.zip -d ~/dsh-bundles # yields ~/dsh-bundles/package/ ``` Then have the agent install that **directory**: ``` plugin_manager action: install_bundle target: /absolute/path/to/the/extracted/package ``` > **Why "keep it long-term" matters:** installation uses a symlink; DSH **points at** that directory. Delete it and the plugin stops loading. > > `install_bundle` accepts **a registry name**, **a git address**, **a tarball**, or **an absolute path**. It does **not** accept a `.zip` itself — unzip first. The path must be absolute. ### Comparison | Option | Needs GitHub reachable | Needs restart | Best for | |---|---|---|---| | Web UI | yes | yes | Most people | | CLI | yes | yes | Batch / scripting | | Agent tool | depends on the spec | yes | If you already work through chat | | Archive | **no** | yes | When GitHub is unreachable | ### Last step: restart ```bash dsh web ``` **A restart is required; refreshing the page is not enough.** JS modules load at process start, so adding or replacing a package needs a restart. Then **start a new session** and pick **CDS 模式** as the preset. ### Uninstall and upgrade **Uninstall:** find the CDS card on the Web **Plugins** page and remove it, or have the agent run ``` plugin_manager action: remove_bundle target: @local/dsh-cds-mode ``` **Upgrade:** since plugins do not auto-update, upgrading = **uninstall first, then install the new version**, then restart. **Uninstalling does not touch your project artifacts** — those live in your project workspace. --- ## 9. Verifying it works (three steps) **Step 1 — no red cards.** Open the preset list. Neither CDS card should carry a red "load failed" badge. If one does, send the diagnostic text: it is line-by-line and names the exact row and reason. **Step 2 — it knows who it is.** In a new session, ask: > Who are you? You should get **Chen**'s self-description. Then ask: > How many iron rules are in your CDS spec? What is the first one? It should answer **nine**, and the first is "only Chen talks to the user". **Step 3 — questions go through the tool.** State any requirement, e.g. "help me build a small tool for tracking student homework". Chen should **present selectable choice cards** (not a wall of prose), no more than 5 per batch, and the second batch should **follow from your answers** — if you said "just for our class", it should not go on to ask about payments, invoices, or regulatory filing. --- ## 10. Common problems | Symptom | Cause | Fix | |---|---|---| | No CDS card in the preset list | not restarted after install | restart `dsh web` | | Card shows a red "load failed" | a row failed to activate | send the diagnostic text to the maintainer | | Diagnostic says "bundled corpus missing" | incomplete archive | unzip a complete archive again | | Install says `Cannot access GitHub` | GitHub unreachable | **see section 11**: configure a proxy, or use the archive | | No Plugins page in the sidebar | this profile is not managed | use option 2 or 3 instead | | The model says "I'm a coding agent…" | wrong preset selected | confirm the session preset is **CDS 模式** | | No collaboration entry anywhere | you're on **CDS 模式** | switch to **CDS 模式 · 同伴频道版** | | Re-installing reports `ambiguous-install` | same target already installed | **expected**; just restart | | A new version seems to have no effect | plugins don't auto-update | uninstall, then install the new version, then restart | | Prompt-cache hit rate suddenly drops | the corpus was edited (prefix changed) | see the cache-impact notes in `cds/CHANGELOG.md` | --- ## 11. When GitHub is unreachable **This is where mainland China users are most likely to get stuck, so it gets its own section.** The plugin itself **does not need the network** (zero dependencies, corpus bundled). But **the first three install options all reach GitHub** (they clone the repository). ### Symptoms - The Web UI shows `Cannot access GitHub` or `GitHub connection timed out` - On the CLI, `git ls-remote` or `dsh plugin add` hangs for about 22 seconds and fails - Error resembles `Failed to connect to github.com port 443` ### What to do **Fix 1: give git a proxy** (if you have one) ```bash git config --global http.proxy http://127.0.0.1:7890 git config --global https.proxy http://127.0.0.1:7890 ``` Use your own port. Then verify: ```bash git ls-remote https://github.com/DRQRTS/dsh-cds-mode HEAD ``` A commit hash means it works. **Fix 2: switch to the archive (option 4)** — this bypasses both GitHub and the registry. > One thing worth clearing up: the npm China mirror (npmmirror) **does not help here** — it mirrors packages on the registry, not GitHub repositories. So "switch the mirror" has no effect on a git address. That is why the Web UI offers `Try another way` after you pick a mirror. --- ## 12. Honest disclosure **What is guaranteed** - **Zero external dependencies**: `index.js` imports only `node:` built-ins. It cannot break on your machine because some package fails to resolve (this was fixed after hitting exactly that). - **Verification ships with it**: two verification scripts covering structure, wiring, portability and real mounting. **Take the assertion count from what the scripts print** (each ends with `断言数:N`) — the docs deliberately hard-code no number, so it cannot drift from reality. You can run them yourself: ```bash node _verify3.mjs && node _verify-corpus.mjs ``` - **The corpus is checkable**: `node _sync-corpus.mjs --check` byte-compares the bundled corpus against the source. - **The `.zip` and `.tgz` are byte-identical in content**, each verified with two independent extractors. **What must be said plainly** - **同伴频道版 depends on two experimental packages** (`dsh-experimental-agent-team` / `dsh-experimental-tool-agent-team`) plus an experimental UI package. They carry **no stability promise**; a breaking upstream change could stop that card from activating. **This does not affect CDS 模式** (the baseline card). - **Batch concurrency is capped at 8 instances.** Deliberate, not a defect. - Built against DSH `0.2.0-rc.2`. **Before moving to a new major DSH version, run the verification scripts above.** - **Four surfaces have not been verified end-to-end in a real session**: the preset cards not being red, sub-agent role-play, questions going through the tool, and the collaboration UI with teammates messaging each other. The assertions cover "the wiring is right, the corpus is complete, it mounts" — **not "it works well in practice."** For a first run, do the three steps in section 9. **On the security mode's boundaries** - Countermeasure execution (I-web5) has **seven admission requirements**; missing one means outright refusal. "Do it first and file it after", "verbal approval", and "it's urgent" are not accepted. - There is a **"never do" list**: intrusion, destruction, DDoS, backdoors, data theft, attacking targets outside the stated scope, retaliation against a natural person — **not done no matter how broadly the authorization is written**. - The reason is simple: **authorization can widen what is permitted, but it cannot turn a crime into a lawful act.** --- ## 13. Changing things **Editing the corpus**: everything lives under `cds/` inside the package. **Restart** after editing. **Using your own corpus**: copy `cds/` elsewhere and add `corpusDir` to the `cds-mode` row in `cordis.patch.yml`, pointing at it. **Don't turn on `liveReload`**: it rewrites the system-prompt prefix when the corpus changes, **dropping this session's prompt cache**. This mode cares about cache hits — restart after editing instead. **Uninstall**: `plugin_manager action: remove_bundle target: @local/dsh-cds-mode`. The preset cards disappear and the system prompt returns to the deployment default. **Your project artifacts are unaffected** (they live in your project workspace). --- ## 14. Where the files are ``` dsh-cds-mode/ ← repository root, which is also the bundle root ├── README.md ← Chinese (default) ├── README.en.md ← this file ├── README.ja.md ← Japanese ├── INSTALL.md ← installation and troubleshooting ├── LICENSE ← MIT ├── package.json ← name, version, dsh.bundle.patch pointer ├── index.js ← the plugin, ~400 lines, zero dependencies ├── cordis.patch.yml ← presets and mounting (2 presets + peer-channel rows) ├── icon.svg ← source icon: monochrome currentColor, theme-following ├── icon.png ← 512x512 raster (for light backgrounds, transparent) ├── icon-dark.png ← 512x512 raster (for dark backgrounds, transparent) ├── icon-64.png ← 64x64 raster ├── locale/ ← UI strings └── cds/ ← the whole spec corpus (90 files) ├── CORE.md operating contract: nine iron rules, state machine, gates, delegation, orchestration ├── README.md mode entry point and persona overview ├── CHANGELOG.md change log, including every cache-invalidation record ├── personas/ Chen + 21 personas + 5 group indexes │ └── web/ the security mode's 36 (including chen-web) ├── workflow/ 5 workflows (new project / takeover / iteration / circuit breakers / web security) ├── protocol/ peer channel, artifact contract, bug taxonomy ├── questions/ the question doctrine + banks (calibration / new project / takeover / follow-up) ├── selfrescue/ the thrift side: prompt-cache hits and prefix stability └── web/ the security workflow's 8 supporting documents ``` To go deeper, start at `cds/CORE.md` — that is the operating contract; everything else hangs off it. ### Verification scripts (optional, for self-checking) The repository also carries a few development and verification files. **They are not needed to install the plugin.** | File | Purpose | |---|---| | `_verify3.mjs` | plugin-layer checks: structure, wiring, portability, real mounting | | `_verify-corpus.mjs` | corpus-layer checks: persona completeness, group-trait consistency, dead links | | `_sync-corpus.mjs` | corpus sync (`--check` compares without writing) | | `_check-specs.mjs` | confirms which install spec forms the official parser accepts | | `_check-icon.mjs` | validates the icon SVG: structure and geometry | | `_check-locale.mjs` | inspects the locale JSON files as bytes | | `_compare-extract.mjs` | byte-compares an extracted archive against the source | | `_patch-reader.mjs` | dependency-free patch reader | | `_zip.mjs` | dependency-free ZIP writer | | `_pack.mjs` | builds the `.zip` and `.tgz` | You can run the first two yourself (the assertion count is whatever the scripts print): ```bash node _verify3.mjs && node _verify-corpus.mjs ``` --- **Language:** **English** · [简体中文](README.zh.md) · [日本語](README.ja.md)