dsh-serenity-plugin
by tellmewhattodo
DSH 的 serenity 插件
dsh-serenity-plugin
安装
dsh plugin --profile web add github:tellmewhattodo/dsh-serenity-pluginGitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试
安装与环境配置指引、插件开发教程见 DSH 中文社区文档 ↗
安装即在你的机器上以你的权限运行第三方代码——它可读写文件、使用凭据、访问网络,DSH 的工具审批不会为插件代码加沙箱。「检测到 manifest」仅代表发现 dsh.bundle / dsh.plugin 清单,不构成兼容性或安全审查;安装前请审阅源码,不熟悉的插件先在不含密钥的环境试用。
README
目录
不是安全沙箱——是认知容器。 DeepSeek Harness(DSH)上的宁静号 ACC(Abstract Cognitive Container)实现: 为 DSH 会话提供认知容器基础设施——真实工具、机械约束、系统提示词注入与 WebUI 状态。
面向 deepseek-ai/deepseek-harness 0.1.0-rc 及以上版本。
这是什么
opencode-serenity-plugin 是 OpenCode 运行时的宁静号 ACC;本仓库是 DSH(DeepSeek Harness)运行时的独立实现。
- 独立实现:不复用 opencode-serenity-plugin 源码;语义对齐其 ACC 标准(工具集 + 机械守卫 + 协作纪律),系统提示词注入五块逐字节对齐(见下文)
- 主产物 = Native Cordis 插件(
@shgroup/dsh-serenity-hooks):真实 DSH 工具(ctx.tools.register进程内注册)+ 拦截缝机械约束——DSH 官方扩展形态(与 harness 自身 200+ 包同构) - 知识层 = 技能(acc-serenity 等):只承载知识,约束交给插件机械执行
- 平台复用:路径守卫(fs 沙箱)、循环/常驻(goal/subagent)、压缩保留(compaction)等 DSH 原生能力直接复用,不重造
特性
| 能力 | 说明 |
|---|---|
| 真实 DSH 工具 ×9 | cc_fs(文件系统 15 子命令)/ session(会话全周期 9 子命令)/ acc_kit(health/time/wait)/ cc_git / acc_msm(MSM 框架)/ eap / neat / cce / loop(牛马循环),全部 ctx.tools.register 进程内注册 |
| 系统提示词注入(5 块) | systemPrompt.section(全局,order -50):=== Serenity ACC ===(身份+工具清单)/ === Serenity CCE ===(CCE 5 行为约束+H_op)/ === Serenity Constraints ===(Root+文件/shell/subagent/session-first)/ 该 CCC 顶层入口 skill 全文(按 .serenity 记号发现,任意 xx-serenity)/ === Serenity Session ===(活跃会话+todowrite 首位约定)——对齐 opencode-serenity-plugin system.transform,平台无关文本逐字节一致 |
| 拦截缝机械约束 | safe-mode(bash 从工具列表消失)/ 路径逃逸阻断(P3 根内完整、根外零权限)/ 黑名单 / 治理文件保护 / session-keeper DCP 提醒——模型不可绕过 |
| 压缩保留 | compaction/end 后重注入 ACC 身份(上下文压缩不丢失 CCC 约束) |
| WebUI 状态徽章 | 会话头部绿状态点徽章 + safe-mode 一键开关;点击展开详情卡(CCC 根 / loop 模型 / 守卫信息) |
| 激活门控 | 所有能力只在 .serenity 标记的 CCC 目录内生效;其他目录对 DSH 原生行为零影响 |
核心哲学:为什么 MSM 比 bash 强,为什么需要安全模式
安全模式的存在,不是因为「禁 bash 让人不方便」,
而是因为「经过编写与测试的 MSM 在可靠性与安全性上强于裸 bash」。
| 维度 | 裸 bash | 编写测试的 MSM |
|---|---|---|
| 确定性 | 每条命令都是新的,结果依赖环境、工作目录、时序 | 纯 TS 脚本,同一输入同一输出,可单测(vitest) |
| 安全边界 | 无内置约束;路径、范围全靠提示词纪律 | 注册表 + 路径逃逸校验 + 600s 超时强杀 |
| 可审计 | 调用即焚,无留痕 | 注册表 + 退出码协议(0/1/2)+ 配对测试 |
| 自我描述 | --help 随写随忘 |
--schema / --list 协议自描述 |
| 可靠运行 | 死锁/挂起只能靠人工 | 异步执行(不阻塞事件循环)+ 超时自动 kill |
安全模式的真正含义:开启后,DSH 的 tools.restrict 机制让 bash 从模型的工具列表中彻底消失(模型根本看不到它,不是调用时报错)——迫使 agent 走 MSM 白名单通道:注册的、测试过的、带边界的确定性操作。安全模式开关是用户能力(仅 WebUI 可操作,agent 不可见、不可自开关)。
快速开始
前置:Node ≥ 20(或 bun)、DSH 0.1.0-rc 及以上、pnpm。
方式一:npm 安装(推荐,已发布到 npm registry)
# 1. 从 npm registry 安装插件到 DSH profile(自动加入 bundles 层)
dsh plugin --profile web add @shgroup/dsh-serenity-hooks
# 2. 重启 dsh web(插件与 WebUI client 生效)
dsh web
安装即用:dsh plugin 检测到包的 dsh.bundle 声明后自动激活配置层,无需手写任何配置。卸载:
dsh plugin --profile web remove @shgroup/dsh-serenity-hooks
方式二:从 GitHub 源码安装(本地 clone + link 到 hooks 子包)
# 1. 克隆公开仓库
git clone https://github.com/tellmewhattodo/dsh-serenity-plugin.git
cd dsh-serenity-plugin
# 2. link 安装 hooks 子包(npm 发布单元 = hooks/dsh-serenity-hooks;仓库根包非插件)
dsh plugin --profile web add link:$(pwd)/hooks/dsh-serenity-hooks
# 3. 重启 dsh web
dsh web
⚠️ 不要用
dsh plugin add github:tellmewhattodo/dsh-serenity-plugin——git URL 只能指向仓库根,而根包(@shgroup/dsh-serenity-plugin)是 workspace 容器、非 bundle 层插件,安装了也不会激活。git 安装获取的是源码:作者侧自包含prepare构建(本包已提供,构建完整 Node + client 双 bundle),用户侧需在 profile 的pnpm-workspace.yaml中allowBuilds放行构建脚本。
方式三:本地开发安装(同仓)
dsh plugin --profile web add link:<本仓>/hooks/dsh-serenity-hooks
安装后
# 在目标 CCC(带 .serenity 标记的目录)安装知识技能
dsh-serenity-plugin install --scope ccc
# 检查激活状态
dsh-serenity-plugin status
插件加载后,进入 CCC 目录的 DSH 会话自动获得:9 个 ACC 工具 + 机械守卫 + ACC 身份注入 + 入口 skill 系统提示 + session-keeper 提醒。WebUI 会话头部出现 Serenity 状态徽章(safe-mode 一键开关 + 点击展开详情)。
开启安全模式:点击 WebUI 徽章中的 safe-mode 开关 → bash 从工具列表消失 → agent 走 MSM 白名单通道。
功能详解
一、工具 ×9
| 工具 | 能力 | 说明 |
|---|---|---|
cc_fs |
15 子命令 | root / resolve / exists / list / tree / relative / mkdir / rm / mv / cp / touch / append / reveal / info / find;路径逃逸阻断 + 根保护 + regex: find |
session |
9 子命令 | list / show / create / use / close / health / qa / archive / summary;AGENT_SESSIONS/ 全周期,S### 自动分配 |
acc_kit |
3 子命令 | health(CCC 三原则 P1/P2/配置)/ time / wait |
cc_git |
4 子命令 | status / commit / push / log;push 非快进输出操作建议(绝不自动 force) |
acc_msm |
6 子命令 | list / exec / register / deregister / check / guide;异步执行 + 600s 超时 kill |
eap |
渐进披露 | EAP 认知质量框架 |
neat |
渐进披露 | Neat 设计协作协议 |
cce |
渐进披露 | 认知连续性工程 |
loop |
牛马循环 | 指定模型专用 agent 反复执行;maxRounds 默认 100;进度文件续跑 |
二、拦截缝机械约束
| 拦截缝 | 能力 |
|---|---|
tools/pre-execute |
safe-mode bash deny / 治理文件保护 / 黑名单 / 路径逃逸 → deny |
ctx.tools.guard |
终局 deny(顺序无关的终局不变式) |
tools/restrict |
safe-mode 时 bash 从模型工具列表消失(每 step 同步) |
agent/session-start + agent/pre-step |
ACC 注入消息 + safe-mode restrict 每步同步 |
systemPrompt.section |
完整系统提示词 5 块注入(全局,order -50) |
agent/turn-stopping |
活动会话心跳自动落盘 |
session/event(compaction/end) |
压缩保留:压缩后重注入 ACC 身份 |
tools/post-execute |
session-keeper DCP:计分达阈值注入提醒(observe-and-enrich,绝不 veto) |
三、safe-mode 机制
用户(WebUI)开关 .serenity-safe-on
→ pre-step 每步检测标记 → agent.ctx.tools.restrict({deny:['bash']})
→ bash 从模型工具列表【消失】(下一 step 生效)
→ 守卫兜底:即使 restrict 未生效,bash 调用也被 deny
- bash 消失,不是报错:模型看不到 bash 工具,自然不发起调用
- 用户能力:开关仅限 WebUI(POST 需
x-serenity-ui: 1头);agent 不可见、不可自开关(治理文件保护)
四、激活门控
所有能力只在 .serenity 标记的 CCC 目录内生效;其他目录对 DSH 原生行为零影响(守卫/注入/落盘直接放行,工具调用降级报错)。
五、配置(运行时)
.dsh/serenity.json(回退 .opencode/serenity.json):
{
"loop": { "defaultModel": "provider/model" }, // loop 默认模型
"sessionKeeper": { "threshold": 100 }, // keeper 提醒阈值
"safeMode": { "blacklist": [".secrets/", "regex:\\.env$"] } // 守卫黑名单
}
系统提示词(对齐 opencode-serenity-plugin)
五块注入与 opencode-serenity-plugin system.transform 结构一致(顺序 ACC → CCE → Constraints → SKILL 全文 → Session),CCE / Constraints / Session 文本逐字节一致(机械断言见 hooks/dsh-serenity-hooks/tests/osp-alignment.test.ts);唯一平台差异为工具名(acc_msm 等 DSH 真实工具)与 SKILL 治理内容过滤。
WebUI
- 会话头部状态徽章(
conversation.session.header.actions槽):绿状态点(CCC 内/外)+ 版本 + safe-mode 开关;点击展开详情卡(CCC 根路径 / loop 模型 / 守卫信息:blacklist、keeper 阈值) - 样式遵循 web-styling.md:
--dsw-alias-*语义 token,明暗主题自适应
开发
# 完整开发循环(safe-mode 下经 acc_msm 亦可)
pnpm typecheck # hooks/dsh-serenity-hooks(node + client 双面)
pnpm test # vitest 全量(184 tests)
pnpm build # tsc + tsdown 双 bundle(lib/index.js + client.js)
- 测试:184 个测试(28 files),typecheck 通过真实 DSH 类型契约(tsconfig paths 指向本地 DSH 安装,见
hooks/dsh-serenity-hooks/tsconfig.json) - 构建:tsc(类型+声明)+ tsdown(Node half + WebUI client bundle + CSS 内联)
与 opencode-serenity-plugin 的关系
| opencode-serenity-plugin | dsh-serenity-plugin | |
|---|---|---|
| 宿主 | OpenCode | DeepSeek Harness |
| 实现 | 独立 | 独立(不复用源码) |
| 系统提示词 | system.transform |
systemPrompt.section,平台无关文本逐字节对齐 |
| 工具 | msm_list/exec/cc-fs/session 等 | cc_fs/session/acc_msm/cc_git/eap/neat/cce/loop |
CCC 运行时可互换(osp / dsh 任意换用)
同一套 CCC 与运行时插件解耦——任意 CCC 可以随时换用 opencode-serenity-plugin 或 dsh-serenity-plugin 作为其 ACC 运行时:
- CCC 文件格式跨运行时一致:
.serenity记号文件(内容 = 顶层入口 skill 名)、.opencode/skills/(知识技能)、.dsh/serenity.json(配置)、AGENT_SESSIONS/(会话追踪)——两个插件读写同一套文件,语义相同 - 任选其一:在 OpenCode 宿主中安装 opencode-serenity-plugin,或在 DSH 宿主中安装本插件;同一 CCC 可随时切换运行时,知识技能与既有数据无需任何改动
- 差异仅在平台层:工具命名(
msm_exec/cc-fsvsacc_msm/cc_fs)、系统提示词注入通道(system.transformvssystemPrompt.section)——平台无关文本逐字节对齐,切换后 Agent 收到的认知约束完全一致
许可
MIT(见 LICENSE)
版本: v1.16.0 | 前置: DSH 0.1.0-rc+ / Node ≥ 20 / bun
原始 README: https://github.com/tellmewhattodo/dsh-serenity-plugin/blob/master/README.md ↗
同类插件
查看全部 →
deepseek-harness
从仓库或系统描述生成经过校验的自包含交互式架构图、流程图、时序图、数据流图和生命周期图。

dsh-plugin
通过 DSH MCP 客户端挂载 Ouroboros 的纯配置包,在 DSH 中提供 36 个涵盖需求访谈、Seed、执行、评估与演化流程的工具。

dsh-tongflow
基于 TongFlow 的“片场”插件,用于图片、配音、音乐与视频制作:agent 为每个资产生成 TongFlow 工作流文件(.tongflow.json)并通过 TongFlow 插件执行,内嵌工作流画布,按镜头/角色/take 组织项目,附漫剧模板;以 @tongflow 开头的会话进入 Studio 界面。

helloagents
AI 编码 CLI 的工作流层:技能、项目知识、交付检查、更安全的配置写入与可恢复执行

dsh-ai-novel-writer
安装专用 AI 小说创作预设与工作台:提供带修订号的本地项目资产、紧凑侧边工作台,以及需要原生审批的逐文件变更。

rea
用 agent 逆向任何东西:从应用行为到原生二进制