前言¶
在 DeepSeek Harness(DSH)里做长会话编码时,常见的问题不是「模型不会写代码」,而是行为漂移:早期说好的约束几十轮后被忘掉、改完就说「已完成」却未在本轮跑构建或测试、三行改动被整文件替换并夹带无关 diff、链接器或 ABI 类问题陷入猜改循环。这些失败模式会实打实消耗时间。
dsh-coding-discipline 是社区维护者 339006900 发布的 DSH 插件(GitHub:339006900/dsh-coding-discipline)。它不新增工具、也不二次调用模型,而是在每一步请求里改写模型被告知的「可接受工作标准」,并在任务需要时可加载更长的协议文档。下面介绍它的定位、规则、安装方式与效果观测。
这是什么¶
一句话:面向 DSH 的「始终开启」编码纪律层——通过 prompt 与可选 skill 影响智能体行为,并附带基于会话日志的效果仪表盘。
维护与发布:仓库由 339006900 维护;npm 包名 dsh-coding-discipline,当前资料中的版本为 0.1.0,许可证 MIT。社区目录页:https://www.skillhub.cn/plugins/339006900/dsh-coding-discipline(独立站点,与 DeepSeek / 幻方无官方从属关系)。DSH 生态理念是「一切皆插件」,本插件即其一。
针对的失败模式与规则¶
每条规则对应 README 中列出的一种长会话代价:
| 规则 id | 要防的失败 |
|---|---|
ledger |
早期约束(如「别动公开 API」)在数十轮后被丢弃 |
proof |
本轮未跑构建或测试却宣称「已完成 / 应该没问题」 |
smallest-diff |
小改动被整文件替换并产生无关 churn |
hypothesis |
链接器 / ABI / 运行时类问题靠猜改而非可区分实验 |
no-invented-apis |
编造看似合理的 flag、签名或配置键 |
finish-migration |
重构后仍留一处旧路径调用 |
evidence-over-agreeing |
因用户说「看起来不对」就改本来能工作的代码 |
no-speculative-code |
未要求的抽象、参数与防御分支 |
closing-shape |
收尾只庆祝成果,不说改了什么、跑了什么、什么未验证 |
规则以触发式表述(如「第一次编辑前」「连续两次 speculative 编辑」),README 说明这比泛泛的「美德」在长会话里更不易被忽略——但这是 prompt 影响,不是强制 enforcement,模型仍可能违反规则。
核心能力¶
- 常驻 prompt 段:安装并重启后,
<coding_discipline>相关说明进入每次请求;composition 内所有 agent(含 subagent)都会收到。 - 可选 bundled skill:来自
SKILL.md的长协议(清单、配方、调试阶梯),可通过配置只保留 prompt 或只保留 skill。 - 效果仪表盘:读取持久化会话日志(默认
~/.dsh/sessions/**/session.v4.jsonl.zstd),按 turn 统计是否含<coding_discipline>来区分「处理组 / 对照」——同一会话若在安装前开始,安装后的 turn 计入处理组;无随机化,基线是你自己的历史,页面会说明这一点,回答的是「行为是否变化」而非「模型是否更好」。
仪表盘指标(资料原文):
| 指标 | 计算方式 |
|---|---|
| 改动-验证闭环率 | 含编辑/写入工具调用且同 turn 内有验证命令的 turn,占所有编辑 turn 的比例 |
| 无证据的完成声明 | 收尾声称完成但该 turn 未跑验证命令的 turn |
| 代价 | 每 turn 工具调用数、回答字符数 |
- 本地 HTTP 路由:插件加载后可访问
http://127.0.0.1:<dsh-port>/coding-discipline(需dashboard: true)。
安装与启用¶
三种方式均需 重启 DSH。官方 npm 安装命令如下(勿凭仓库名自行拼接 github: 安装串):
dsh plugin --profile desktop add dsh-coding-discipline
或在 DSH 内:Settings → Plugins → Plugin Market,搜索 dsh-coding-discipline,安装后重启。
本地 link 开发与通过 local plugin manager 指向目录的方式见 GitHub README;本质是在 ~/.dsh/profiles/desktop/package.json 中 link 依赖并加入 dsh.profile.bundles,再执行 cd ~/.dsh/profiles/desktop && npx pnpm@11 install。
验证是否加载(任选其一):
- 让模型复述其
<coding_discipline>规则,应能引用; - 在插件目录执行
node --test(22 个测试,无需启动 DSH)。
若安装后应用无法启动,从 dsh.profile.bundles 删除单独一行 "dsh-coding-discipline" 后重启即可回滚,README 称不会改动其他项。
运行环境(package.json):DSH ^0.2.0-rc.1 || ^0.2.1-rc.1 || ^0.2.2-alpha.2;Node ^22.19.0 || >=24.0.0。
配置¶
在 ~/.dsh/profiles/desktop/cordis.patch.yml 中调整(字段以 README 为准):
- id: coding-discipline
config:
enabled: true # false = 注销全部贡献
order: 9500 # prompt 顺序;runtime context 在 10000+
promptSection: true # false = 仅保留 skill
skill: true # false = 仅保留 prompt 段
compact: false # true = 仅保留 proof / ledger / smallest-diff / hypothesis
extraRules: '' # 追加的部署行
dropRules: [] # 要 omit 的规则 id,如 ['closing-shape']
dashboard: true # false = 不提供 /coding-discipline
sessionsRoot: '' # '' = ~/.dsh/sessions;可指定路径只统计某工作区
完整 prompt 段约 750 tokens/请求;compact: true 约 470 tokens。
典型用法¶
生成静态仪表盘 HTML(不依赖 DSH 进程,直接读会话日志):
node scripts/dashboard.mjs
输出:~/.dsh/plugin-data/dsh-coding-discipline/dashboard.html,可用浏览器从磁盘打开。
在 DSH 已加载插件时访问托管路由:
open http://127.0.0.1:<dsh-port>/coding-discipline
将 <dsh-port> 换成本机 DSH 监听端口。
需要长任务清单与调试流程时,依赖 bundled skill(SKILL.md);日常则靠每步注入的短规则约束验证闭环、约束账本与最小 diff 等。
适用场景与注意¶
适合:长期在 DSH desktop profile 里做编码 agent 工作、希望减少「口头完成」与约束遗忘、并想用自有会话历史对比安装前后 turn 级行为的人。
务必知晓:
- 插件以当前 DSH 进程权限运行;安装前应阅读仓库源码与 MIT 许可证,确认可接受其读取
~/.dsh/sessions及可选sessionsRoot下的日志。 - 它不会替你跑构建,只是把「未验证就声称完成」显式化。
- 仪表盘非 A/B 实验,结论限于你本机历史与 turn 分组逻辑。
仓库布局(便于二次开发):src/prompt.js(段文本与配置归一化)、src/skill.js、src/index.js(cordis 接线)、src/sessions.js、src/analyze.js、src/report.js、src/route.js、scripts/dashboard.mjs、test/(22 个 node:test 用例)。
结尾¶
dsh-coding-discipline 用常驻 prompt(与可选 skill)把验证闭环、约束账本、最小 diff、假设优先调试等习惯写进每一步,并提供基于会话日志的效果页,便于对照安装前后是否更少「无证据完成声明」。DeepSeek Harness 插件可按 npm 市场安装,社区索引见目录页与 GitHub:
- 目录页:https://www.skillhub.cn/plugins/339006900/dsh-coding-discipline
- GitHub:https://github.com/339006900/dsh-coding-discipline