前言¶
在 DeepSeek Harness(DSH)里做带工具的 Agent 时,常见做法是单独维护一份策略文件:写清楚是否出网、允许哪些工具、哪些操作要人工确认。代码迭代后,声明和实现很容易脱节——policy.yml 里写着「不出网」,仓库里却仍有 fetch 调外网;注释里写着「需人工确认」,同文件里却直接执行高风险动作。
单靠人工翻文件很难系统核对。dsh-agent-policy 做的是静态比对:把策略声明和项目代码摆在一起,列出「声明说 A、代码里是 B」的事实,不拦截运行时、也不替你做合规认证。下面介绍它是什么、查什么、怎么装怎么用。
这是什么¶
维护者为 feely0208,npm 包名为 @deepwhale-cn/dsh-agent-policy(GitHub:feely0208/dsh-agent-policy),在 DSH 插件目录中归类为 admin-security。一句话:说好不干的事干了没,干了的有没有说。
它是静态分析工具,不是运行时拦截器,也不是只看「权限是否过宽」的扫描器(后者更接近同系列的 dsh-agent-scope)。分界可以记成:
agent-scope = 单看【权限本身】宽不宽(通配符、根目录、无限制出网)
agent-policy = 看【声明】与【实现】是否一致
同一个 allow: "*",两边都可能提到;agent-scope 关心「权限太宽」,agent-policy 关心「你以为自己在声明白名单,声明里却写了允许一切」这类不一致。
核心功能:五条规则¶
插件对项目根目录做核对,命中时会给出文件路径、行号、该行内容及对应规则编号。README 中列出的规则如下。
| 规则 | 查什么 | 级别 |
|---|---|---|
POLICY-EGRESS-PROMISE |
策略里写了「不出网」,同一项目里却有网络调用 | 高 |
POLICY-CONFIRM-MISSING |
代码里写着「需人工确认」,同一文件里却直接执行高风险动作 | 高 |
POLICY-WILDCARD-ALLOW |
策略里把权限写成通配符(如 allow: "*"、tools: ["*"]、permissions: all) |
高 |
POLICY-DECL-EMPTY |
策略声明里的工具清单为空(tools: [] / tools: null) |
中 |
POLICY-NO-DECLARATION |
有 Agent 相关代码却找不到任何策略声明文件 | 中 |
策略声明通常来自 policy.yml、agent.yml 或项目中的权限配置;具体解析逻辑以插件源码与 dsh-agent-policy --list-rules 输出为准。
POLICY-NO-DECLARATION 仅在项目里出现 Agent 特征(如 openai、anthropic、@deepseek-ai、tool_call、tool_use、AgentExecutor 等)时才会适用;纯普通小工具不会因此被误报。若结果里该规则为 notApplicable,表示当前仓库未检测到 Agent 代码。
判据在 README 中引用了 OWASP Top 10 for LLM Applications 2025(LLM06 Excessive Agency)、CIS Controls v8 Control 6、NIST AI RMF 1.0 与 NIST SP 800-53 Rev.5 AC-6 等,供对照阅读,插件本身不下「安全 / 不安全」的结论。
安装与启用¶
在已安装 DSH 的环境中,按官方 README 执行:
dsh plugin --profile web add @deepwhale-cn/dsh-agent-policy
package.json 要求 Node.js >=18,DSH 引擎 >=0.1.0-rc.6 <0.3.0。许可证为 MIT。插件以当前 DSH 进程权限读取你指定的项目目录,安装前建议自行查看 GitHub 仓库 源码与许可证。
典型用法¶
安装后使用命令行 dsh-agent-policy(由插件 bin 提供)。
先对本地 Agent 项目做一次核对,把 /path/to/your-agent 换成实际根目录:
dsh-agent-policy --root /path/to/your-agent
不熟悉输出格式时,可跑内置演示(一个「策略说不准出网、代码却在往外发」的示例项目):
dsh-agent-policy --demo
查看内置规则与依据说明:
dsh-agent-policy --list-rules
需要报告落盘或接入 CI 时:
dsh-agent-policy --root . --html
dsh-agent-policy --root . --json
有高级别(high)命中时,进程退出码为 1,便于在 CI 里作为卡口。
README 中的对比例子:policy.yml 里 outbound.allow: false 并注明不出网,而 src/sync.js 里对 Slack Webhook 调用 fetch。报告会类似:
POLICY-EGRESS-PROMISE src/sync.js:9
策略里写明了不准出网,同一个项目里却有网络调用
这里的诉求不是判定「出网一定有罪」,而是让声明与实现二选一或同时对齐,避免出事时策略文件与真实行为对不上。
仓库内还提供 bash tests/run.sh 做双向验证,包含应失败、应通过、以及「有 Agent 代码但无策略文件」等 fixture,便于理解规则边界。
适用场景与注意¶
适合:已有或计划维护 policy.yml / agent.yml 等策略文件的 Agent 项目;希望在合入前或 CI 里自动发现「声明与代码拧巴」的团队。
不适合当作:运行时权限网关、单独的最小权限审计(请配合 dsh-agent-scope 等同系列插件)、或合规过审结论。
DSH 社区插件目录(如 SkillHub 上的 feely0208/dsh-agent-policy)由社区维护,与 DeepSeek / 幻方无官方从属关系;生态理念是「一切皆插件」,可按需从目录页选用。
同作者「深鲸网安守护」系列中,dsh-agent-policy 归类在「AI 与 Agent 治理」,与 Agent 权限、MCP 安全等插件可配套使用;每个插件只做一件事,策略核对解决的是声明与实现一致性这一条链路上的环节。
结尾¶
dsh-agent-policy 把策略文件和代码静态对照,用五条规则列出不一致点,支持终端、HTML 与 JSON 输出,并可用退出码挂 CI。需要安装命令、规则列表与示例时,以 GitHub README 为准;在目录站浏览元信息可打开 SkillHub 插件页。