前言¶
DeepSeek Harness(DSH)会把全局 AGENTS.md、工作区 AGENTS.md、技能(SKILL.md)和插件自带提示一起送进模型上下文。单看每一份文件往往都合理,叠在一起却可能出现互相矛盾的要求:一边写「先问用户再动手」,一边写「直接执行」;一边要求「回复中文」,另一边要求「回复英文」。模型只能择一执行,同一件事每次表现可能不一致,事后也很难对照是哪条规则在打架。
dsh-policy-linter(策略体检)是社区插件,由 Yyhy110421 维护,归类为工作流。它在规则进入模型之前做只读扫描,把冲突连同文件、行号、原文和修改建议列出来,不改动任何策略文件。
这是什么¶
策略体检是给 DSH 用的只读规则检查插件:扫描 AGENTS.md、SKILL.md 以及插件技能目录中的 Markdown 规则,按严重程度分级报告问题。插件不联网、不执行扫描到的命令,也不自动修改策略内容;最终是否改规则由人决定。
核心功能¶
工具 policy_lint¶
对话中可让模型调用工具 policy_lint,对指定范围扫描,按 error / warn / info 返回结果。默认示例如下:
{
"scope": "all",
"minSeverity": "warn",
"format": "text"
}
参数含义(摘自 README):
| 参数 | 类型 | 说明 |
|---|---|---|
scope |
all / global / workspace |
默认 all:全局 + 当前工作区 |
path |
string | 只扫该文件或目录;指定后 scope 无效 |
minSeverity |
info / warn / error |
最低严重级别,默认 info |
includeSkills |
boolean | 是否扫技能目录与插件 skills/,默认 true |
format |
text / json |
文本或结构化输出 |
maxFindings |
number | 最多返回条数,1–200,默认 100 |
四类检查¶
- 规则冲突:同一主题出现相反要求(先确认 vs 直接执行、提交 vs 不提交、中文 vs 英文、并行 vs 串行、完全权限 vs 只读等)。
- 跨文件重复:同一句规则散落在多个文件,改一处易漏另一处。
- 模糊限定:含「尽量」「适当」「必要时」「as needed」等表述,模型只能猜测。
- 危险命令:如
rm -rf /、git push --force、DROP DATABASE、Invoke-Expression等,避免策略把危险操作写成默认动作。
为减少误报:带条件的前缀(如果 / 当 / if / when)视为局部例外,不参与冲突判断;不同技能文件不会同时加载,因此技能之间不做冲突判定。同文件内部、全局与工作区之间、以及全局/工作区对技能仍会比较。
设置界面¶
在 DSH 设置 → 策略体检 中可调整扫描范围、最低严重级别、额外路径和忽略名单,并支持从设置页触发扫描。
安装与启用¶
DSH 生态理念是「一切皆插件」;社区目录站点(如 SkillHub)与 DeepSeek / 幻方无官方从属关系,安装前请自行查看源码与许可证(本插件为 MIT © 2026 Yyhy110421)。插件以当前 DSH 进程权限运行,只读本地文件。
在 DSH 中打开 设置 → 插件管理器,安装下列任一来源(命令须与仓库 README 一致):
github:Yyhy110421/dsh-policy-linter
file:<本仓库的绝对路径>
装完后重启 DSH 生效。
注意:file: 安装是实体拷贝,改源码后需卸载再装才会更新;update 仅支持 npm 注册表插件,本插件不发布到 npm。package.json 中版本为 0.1.0,运行环境要求 Node ^22.19.0 || >=24.0.0。
配置与扫描范围¶
配置文件路径:$DSH_HOME/data/policy-linter.json(无 DSH_HOME 时使用 ~/.dsh)。
{
"scope": "all",
"minSeverity": "info",
"includeSkills": true,
"extraPaths": [],
"ignoreIds": [],
"workspacePath": ""
}
extraPaths:额外要扫的文件或目录(目录会递归查找.md)。ignoreIds:从报告中复制如conflict:confirm:xxxxxxxxxx的 ID,仅影响报告展示。workspacePath:设置页「扫描一次」用的工作区;留空则用宿主进程当前目录。对话里的policy_lint仍使用会话自己的工作区。
扫描覆盖:
- 全局:
DSH_HOME下的 AGENTS.md / CLAUDE.md / GEMINI.md、profile 的 AGENTS.md、DSH_HOME/skills、profile 的skills/,以及 profile 内插件包的skills/、bundled-skills/。 - 工作区:根目录的 AGENTS.md / CLAUDE.md / GEMINI.md、
.dsh/AGENTS.md、.dsh/skills、skills/。
典型用法¶
- 安装并重启 DSH 后,在对话中说「检查一下策略冲突」,模型会按需要调用
policy_lint。 - 需要只看工作区或全局时,将
scope设为workspace或global。 - 临时只扫某个目录或文件时,传入
path,并视情况调整minSeverity与format: "json"便于脚本处理。 - 对已知误报,把报告中的 ID 写入配置里的
ignoreIds。
安全边界与已知限制¶
安全边界(README 原文要点):
- 只读:仅使用
readFileSync/readdirSync/statSync。 - 不执行:报告中的危险命令不会运行。
- 不联网。
- 有上限:最多约 600 个文件、单文件 512 KB、6000 条规则、100 条问题,超出会标记截断。
- 跳过
.git、node_modules内普通文档(插件skills/单独收集)、缓存与会话目录。
使用前应知晓:
- 检查基于规则匹配,不是语义理解;换一种说法可能漏报。
- 主题表目前覆盖约 10 类常见冲突,未覆盖主题不报冲突。
- 冲突是否真矛盾需人结合上下文判断;报告提供证据与候选,不是终审。
- 不同技能之间的差异故意不判冲突。
适合在持续维护 AGENTS.md、多套技能与工作区规则的团队里,在改规则后或发版前做一次体检,减少「规则看起来都对、合在一起却打架」的情况。
结尾¶
dsh-policy-linter 在策略进模型之前做只读冲突与风险扫描,配合设置页与 policy_lint 参数即可接入日常流程。更多信息见社区目录页与仓库 README。
- 目录页:https://www.skillhub.cn/plugins/Yyhy110421/dsh-policy-linter
- GitHub:https://github.com/Yyhy110421/dsh-policy-linter