前言¶
用 DSH(DeepSeek Harness)做项目开发时,团队约定往往散落在 README、口头习惯或每次对话里临时提醒 agent。规则一多,要么占满上下文,要么某次会话忘了提,行为就不一致。常见做法是手写一段「用户规则」贴进 profile,或每个项目单独维护提示片段——改规则要动配置、新开对话才稳定生效,按仓库切换时还要自己换文案。
下面介绍 dsh-ian-rules:DSH 开源插件(MIT),在 Web GUI 右侧栏提供「开发规则」面板,可视化维护全局规则与按项目规则,并在每个会话组装系统提示时,按该会话工作目录解析生效规则并注入;也可在对话里通过 ian_rules 工具直接落库。插件由社区维护者 Wraindrock 在目录 skillhub.cn 收录,分类为 admin-security;源码与说明见 GitHub(仓库当前指向 Grant-Felix/dsh-ian-rules)。
这是什么¶
dsh-ian-rules 是标准的 DSH profile bundle(宿主 + 浏览器 双半体):走 DSH 原生 sidebarRightTabs + sidebar.right.pane.tab 契约,与「Docker 容器」等页并列出现「开发规则」。规则数据只读写本机 $DSH_HOME/ian-rules.json(默认 ~/.dsh/ian-rules.json),不联网、不上传。没有生效规则时注入空串,对会话无额外负担。
核心功能¶
规则组织与命中¶
| 能力 | 说明 |
|---|---|
| 全局规则 | 对所有会话生效,作为跨项目的底线约定 |
| 项目规则 | 每个项目在页签栏有独立一页;会话工作目录落在项目路径下即参与命中;多个项目按路径由短到长串成链,规则依次叠加 |
| 追加 / 覆盖 | 项目级 append(全局 + 本项目)或 override(仅本项目);链上最后一个 override 会挡掉其上的全局及更短路径层 |
| 分组 | 每条规则可填分组名;面板按分组归拢,注入文本中为 ### 组,其上一级为 ## 全局规则 或 ## 项目:名(路径) |
| 单条开关 | 每条规则可停用(保留内容、不注入);面板顶部胶囊为总开关 |
路径支持 ~,保存时规范为绝对路径;工作目录走软链时会用 realpath 再匹配。手工编辑 JSON 会被宿主监听并重载(另有 15 秒轮询兜底)。
面板(右侧栏「开发规则」)¶
页签为 3 + N:全局规则 / 项目(名册)/ 每个项目一页 / 效果预览;页签条横向滚动不折行。
- 顶部说明当前规则条数,主按钮为 保存并生效(有改动才可点,
Ctrl/Cmd + S同效);导出、导入、重载等在「更多」中。 - 无规则时提供上手说明,可 「先插入 4 条虚构示例」 再改成自己的约定。
- 「项目」页只管目录、别名、与全局的关系、启用与删除;规则在对应项目页编辑。
「效果预览」可选任意目录,查看真正会注入的文本(含未保存修改、命中项目、是否截断),并给出字符数与估算 token。规则较多时支持按标题 / 正文 / 分组搜索;保存带 revision,磁盘被别处改掉时返回 409,可选择载入磁盘版或覆盖,保存前会写 ian-rules.json.bak。
自动注入与按场景¶
- L1 常驻:
mode: "always"的规则全文进入系统提示 section(plugin:ian-rules,order100)。 - L2 / L3:
mode: "auto"的规则可只把标题与标签常驻,正文在命中当前任务时再送到对话末尾(需在「更多 → 按场景注入」开启sceneMatching,默认可为off)。
单次注入文本上限 12000 字符,超出时先裁全局、保留项目规则,并在提示开头说明少了哪些条。注入预览与卡片上会标出约多少字、对 token 预算的影响。
ian_rules 模型工具¶
在对话中可直接说「把这条记进开发规则」。工具 action 支持 list / lookup / add / update / remove,可指定 global / project 与分组;list 默认有界摘要,完整注入原文需 full: true。保存后正在运行的会话下一步即生效(也可选「只对新会话生效」以免长会话重算提示缓存)。
安全与其它¶
HTTP 接口校验 Origin / Sec-Fetch-Site(跨站 403),POST 要求 Content-Type: application/json。若安装了插件市场,面板顶部在有新版本时会出现更新提示。
安装与启用¶
前置:已安装 dsh CLI(npm install -g @deepseek-ai/dsh)与 pnpm。本插件尚未以 npm 包名 dsh-ian-rules 发布到 registry,对外以 git 来源安装(README 原文如下,请按网络选一条):
# 能直连 GitHub
dsh plugin --profile web add github:Grant-Felix/dsh-ian-rules
# 国内走 Gitee 镜像(pnpm 没有 gitee: 简写,用完整地址)
dsh plugin --profile web add git+https://gitee.com/Grant-Felix/dev-rules.git
# 仓库开发调试:链到本地检出
dsh plugin --profile web add link:$PWD
装完后 重启该 profile(侧边栏底部 ↻),右侧栏页面列表中应出现「开发规则」。升级可用 dsh plugin --profile web update dsh-ian-rules,或面板 / 插件市场的更新入口;卸载:
dsh plugin --profile web remove dsh-ian-rules
卸载后 ian-rules.json 仍留在 $DSH_HOME,不会随插件删除。
若曾使用旧包名 dsh-agent-rules,需先 remove 旧包再 add 新地址;启动时若仅有 agent-rules.json / dev-rules.json,会自动复制为 ian-rules.json(原文件保留)。
典型用法¶
1. 在面板里建全局与项目规则¶
打开右侧栏「开发规则」→「全局规则」添加条目(标题 + 正文 + 可选分组)→ 在「项目」页新建项目(填写目录与别名,选择追加或覆盖)→ 进入该项目页维护规则 → 保存并生效。
2. 用效果预览核对某目录¶
切到「效果预览」,输入或选择目录,点「查看」,确认命中哪条项目链、全局是否被 override 挡掉、最终注入 Markdown 与字数。
3. 数据文件结构(节选)¶
规则持久化在 ian-rules.json,版本字段为 version: 2。示意(字段含义以 README 为准):
{
"version": 2,
"enabled": true,
"sceneMatching": "off",
"global": [
{
"id": "g1",
"title": "提交前跑测试",
"content": "npm test 必须绿",
"group": "提交",
"enabled": true,
"mode": "always",
"tags": []
}
],
"projects": [
{
"id": "p1",
"path": "~/项目/foo",
"label": "示例项目",
"enabled": true,
"mode": "append",
"rules": [
{
"id": "r1",
"title": "本项目用 pnpm",
"content": "禁止 npm install",
"group": "依赖",
"enabled": true,
"mode": "auto",
"tags": ["依赖", "包管理"]
}
]
}
]
}
项目级 mode 为 append 或 override;规则级 mode 为 always(常驻)或 auto(按场景)。支持导出 / 导入 JSON 或 Markdown(可替换或合并)。
4. 对话内维护¶
对 agent 说明要写入 global 或某 project 的规则内容,由其调用 ian_rules 的 add / update 等 action;需要核对全文时用 lookup,列举项目时用 list 并视需要传 all: true。
适用场景与注意¶
适合谁:长期在 DSH 里做多仓库开发、希望 agent 稳定遵守同一套提交规范、依赖策略、目录约定,又不想每次手工重复提示的开发者。
权限与信任:插件以当前 dsh 进程权限读写本机 $DSH_HOME 与提供 Web API;安装前应在 GitHub 阅读源码与 MIT 许可证(NOTICE.md 说明 ian-rules.json 归使用者本人)。DSH 生态强调「一切皆插件」;skillhub.cn 为社区目录,与 DeepSeek / 幻方无官方从属关系。
改动生效:修改宿主或浏览器半体源码后,常规安装部署需 重启 profile 才能加载新 bundle;日常只改规则 JSON 或面板保存即可即时或按所选策略生效。
结尾¶
dsh-ian-rules 把「项目开发规则」从散落的文档和重复提醒,收拢到右侧栏可视化维护,并自动注入每个会话的系统提示(可选按场景追加正文),减少遗漏与上下文浪费。