中文EN

dsh-baize-rules

session装不上npmMIT

在会话开始时向模型注入用户设定的“必须做 / 不能做”持久要求。

下载量 / Downloads
786
测试时间 / Tested
2026-11-07
DSH 版本 / Version
0.2.2-rc.1

安装

dsh plugin --profile web add dsh-baize-rules

沙箱测试结果

阶段结果
1 安装✗
2 列装—
3 挂载—
4 启动—
第一条错误
dsh: initialized profile web at /home/node/.dsh/profiles/web

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

dsh-baize-rules

[English](README.md) | 简体中文

![Listed on dsh-plugin.org](https://dsh-plugin.org/plugins/bvcvb/dsh-baize-rules)

English: dsh-baize-rules (Baize) is a dsh plugin that injects user-set, durable "must-do / must-not" requirements — plain-text rules — into the model at conversation start as a sourced user/message.

dsh 的会话 / 全局「必须做 / 不能做」要求插件。名字取自白泽——传说中「通万物之情、晓万物之名、知万物之理」的神兽,用它来承载「用户给模型立下的行为基线」。

  • 规则是纯文本,没有 must/mustNot 标记——「必须做 / 不能做」由正文语言表达(例如 用中文写注释。=必须,不要删除测试。=禁止)。
  • 注入发生在会话起点:把当前生效规则作为一条持久 user/message 注入模型请求,套用 <system-reminder> 框架,来源标记为 source.kind='plugin'、plugin='baize-rules'。
  • 无规则则不注入;字节预算小到裁光所有规则时返回 undefined,绝不注入空壳 reminder。

功能特性

特性 · 说明

三作用域,均参与注入 · global(所有会话)/ session(当前会话)/ project(按会话工作目录,仅该目录)——三者都会进入模型

持久化 · 全部落盘到 $DSH_HOME(默认 ~/.dsh),跨会话、跨重启

具体优先 · 渲染顺序 project > session > global;字节预算受压时优先保留更具体的规则

坏文件不再打断对话 · 规则文件采用容错读取:损坏或被手改坏的文件只会让该作用域降级为空 + 一条 problems 告警,不会让对话步骤失败

去重 · 按渲染文本 SHA-1 digest 抑制重复注入;injectAtEveryStep 可选每步强制刷新

长对话里始终在场 · 以下三种情况会重新发布一份快照:文本变化时、会话生命周期变化(startup/resume/clear/compact)后、以及距上次发布满 refreshAfterSteps 步(默认 20)时——规则不会只留在长对话的最开头

防逃逸 · 正文里的字面 </system-reminder> 会被转义,防止用户文本关闭插件框架

命令 + API 同源 · /baize-rules 命令与前端面板共用同一套 store/core,改动始终同一真值

标签分类 · 规则可带文字标签(流程、#前端…),面板按标签筛选。默认只用于分类,不占模型上下文预算(injectTags 可开)

模板库 · 常用规则存成模板(内容 + 标签),任意作用域一键套用;可导出/导入 JSON,跨机器、跨会话复用。套用是内容副本——之后改模板不会回写已加入的规则

并发写保护 · 每次写入都带上读取时的文件版本号;若期间被别的窗口改过,拒绝写入并提示重试,而不是静默覆盖

与 AGENTS.md 工作区指令的分工

dsh 自带 @deepseek-ai/dsh-agent-instructions,负责加载工作区指令链(AGENTS.md / CLAUDE.md)。两者互补,按「这条规则该落在哪里」来选:

· AGENTS.md(宿主自带) · dsh-baize-rules(本插件)

存放位置 · 仓库里的文件 · $DSH_HOME/rules/*.json + 面板

生效范围 · 在该仓库里工作的任何人 · 你自己的机器:全部会话 / 单个会话 / 某个目录

版本控制 · 随仓库提交、评审、团队共享,跟着仓库走 · 不进仓库,跟着 DSH_HOME 走

修改方式 · 编辑文件;下次文件触碰或恢复会话时生效 · 在面板或用 /baize-rules 修改;下一步即注入

适合 · 属于项目本身的工程约定 · 个人偏好、跨项目要求、临时会话级要求

两者都以 <system-reminder> 框架的 sourced user/message 注入,并带有同一句优先级说明,因此是互相加强而不是互相冲突。


安装

dsh 插件从 npm 仓库分发,通过 dsh plugin 安装到某个 profile。
# 从 npm 安装到 web profile(版本以发布后的实际版本为准)
dsh plugin --profile web add dsh-baize-rules@0.2.4
pm2 restart dsh          # dsh 由 pm2 托管时重载生效
dsh --profile web

安装时依赖的 peer 包(@deepseek-ai/ 系列、react 等)由 dsh profile 提供;若缺少,pnpm 会在 profile 目录里按 peerDependencies 解析。

卸载

# 从 profile 移除插件
dsh plugin --profile web remove dsh-baize-rules
pm2 restart dsh          # dsh 由 pm2 托管时重载生效

若 dsh.profile.bundles 里仍残留该条目,删掉 $DSH_HOME/profiles/web/package.json 中对应那一行后再重启一次。$DSH_HOME/rules/ 下的规则文件不会被删除——想要干净重来请自行删除。

不影响正在运行的 dsh 试装

装到另一个 profile,正在运行的 dsh 完全不受影响:

dsh plugin --profile smoke add dsh-baize-rules@0.2.4
dsh --profile smoke --dump-config   # 只读取并组合配置,不会启动 dsh

--dump-config 只组合并打印配置树、不启动服务,所以可安全地与正在运行的 dsh 并存。要在那个 profile 里真正试用,再执行 dsh --profile smoke。

关于 pm2 restart dsh:它会重载你正在运行的那个 profile。安装/卸载只改磁盘上的 profile,下一次启动(或那次重启)才生效。

本地开发联调(link)

尚未发布或想改源码即时生效时,用本目录作为 link 依赖:

// /home/abc/.dsh/profiles/web/package.json
"dependencies": {
  "dsh-baize-rules": "link:/home/abc/work/plugin/dsh-baize-rules"
}

随后在 profile 目录执行 pnpm install,并把 dsh-baize-rules 加进 dsh.profile.bundles。


快速开始

/baize-rules                                   # 等价于 /baize-rules list,查看当前生效规则
/baize-rules add 用中文写注释。                 # 加到默认作用域(通常是 session)
/baize-rules global add 不要删除或改写现有测试。 # 明确加到 global
/baize-rules list                              # 显示 project + session + global(含缩略 id / disabled 标注)
/baize-rules list project                      # 只列某个作用域
/baize-rules edit <id> 只用 pnpm 构建。          # 修改某条规则文本
/baize-rules disable <id>                      # 停用某条(保留不删)
/baize-rules enable <id>                       # 重新启用
/baize-rules scope global                      # 之后命令默认写到 global
/baize-rules clear session                     # 清空当前会话规则
/baize-rules global clear                      # 同一件事:`clear <scope>` 与 `<scope> clear` 等价
/baize-rules export                            # 导出全部规则为 JSON
# —— 标签 ——
/baize-rules tag <id> 流程 发布                  # 给规则打标签(幂等、去重)
/baize-rules untag <id> 发布                    # 去掉某个标签
# —— 模板 ——
/baize-rules save <id>                          # 把这条规则存成模板(面板里是「存为模板 / Save as template」)
/baize-rules tmpl list                          # 查看模板库(可按标签筛选过滤)
/baize-rules from <id|#标签>                     # 从模板添加规则(#标签 = 该标签下全部)
/baize-rules tmpl export ./templates.json       # 导出模板库到 JSON 文件
/baize-rules tmpl import ./templates.json --yes # 导入(默认 dry-run 预览,--yes 才写盘)
作用域写在动词之前:写 /baize-rules global add <正文>。末尾的作用域词已不再被识别为修饰符
——/baize-rules add 部署前先跑测试 global 里的 global 属于规则正文(以前会被当作用域,正文被截断且规则写进 global)。见[作用域写法](#作用域写法)。

命令

所有子命令挂在 /baize-rules 下;无参数时等价于 list。

/baize-rules [<scope>] <command>                     # scope 为 global|session|project,写在动词之前
/baize-rules [list [scope]|add <text>|remove <id>|edit <id> <text>|enable|disable <id>|tag|untag <id> <tag…>|save <id> [#tag…]|from <id|#tag>|tmpl <list|add|edit|rm|export|import>|scope <scope>|clear <scope>|export]

子命令 · 语法 · 作用

list · /baize-rules list [scope] · 列出合并后的生效规则(Project/Global/Session 节;空时显示 No active rules.)。可传作用域只列该作用域(`/baize

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:11,最后更新 2026-09-22

链接

GitHub · Homepage · npm

同类插件