前言¶
在 DeepSeek Harness(DSH)里给 agent 开 PowerShell,授权往往按「能碰哪些目录、要不要审批、沙箱开不开」来管范围;一条已经落在授权范围内的 Remove-Item -Recurse -Force 仍然可能是不可逆操作。现有控制面通常不会按命令文本本身再判一档风险。
下面介绍的 dsh-ps-preflight(维护者 dingchenhui0618-arch,分类 admin-security)在命令进 shell 之前做同步静态分级:删除、覆盖、网络下载、触碰凭据等维度,高风险要求二次确认,每条判定写入本地 JSONL 审计。实现为零依赖、不联网、不调模型;判定是纯函数,README 称单条命令亚毫秒级出结果。
这是什么¶
dsh-ps-preflight 是 DSH 社区插件(目录页:skillhub.cn/plugins/dingchenhui0618-arch/dsh-ps-preflight)。它在 pwsh / powershell 工具调用上挂 tools/pre-execute 钩子:每条命令得到 none / low / medium / high 之一,附带命中规则、评分与命令摘要。社区目录与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,装插件前建议自行查看源码与 MIT 许可证。插件与宿主同进程运行,不能当作独立安全边界。
核心功能¶
全量预检与四类必测¶
- 默认拦截工具名:
pwsh、powershell(可在配置里改tools列表)。 - 必测四类:删除、覆盖、网络下载、触碰凭据;另覆盖动态执行(如
iex、-EncodedCommand、ScriptBlock::Create)、系统改动、权限改动。 - 组合升级:例如「下载且执行」「读凭据且外发」会直接升到
high,即使单步看起来不致命。
风险档与动作¶
| 档位 | 含义 | 动作 |
|---|---|---|
none |
只读、查询等 | 放行 |
low |
可恢复的写 | 放行 |
medium |
单文件删除、覆盖、下载、读凭据路径等 | 记录,不拦 |
high |
递归删除、强制推送、下载并执行、凭据外发、系统/权限改动等 | 二次确认;拒绝或超时则不执行 |
medium 故意不拦,避免日常工作里频繁点确认;分界线放在 README 所称的「不可逆」一侧。
二次确认¶
- 面板内确认(默认
confirmMode: auto下优先):「预检」面板最近 8 秒内仍在轮询时,命令停住,卡片倒计时,120 秒内未点视为拒绝(可用confirmTimeoutMs调整)。 - harness 原生审批:面板未打开或在其他窗口时走
tools的ask;会话 approval policy 为never时失败关闭,等同拒绝。 mode: audit时只记录、不拦。
待确认队列是宿主级:同一 DSH 进程内各会话的高风险命令共用一个队列。
审计¶
默认路径为 $DSH_HOME/ps-preflight-audit.jsonl(通常 ~/.dsh/ps-preflight-audit.jsonl),可通过 auditPath 修改。每行 JSON 含时间、tier、decision、findings、脱敏且截断至 300 字符的 command 等字段。经人工确认的高风险命令会写两行(分析 pending 与结论 allow/deny)。超过 2 MB 轮转至 .1(只保留一代)。脱敏为模式匹配,README 明确说明不是保证。
预检面板¶
装好后对话视图顶部多一个「预检」tab:计数、待确认队列、「试一试」(只分级不执行)、最近记录,底部显示审计文件位置与大小。
与 dsh-warden 的差异(README 自述)¶
同维护者之前的 dsh-warden 在工程骨架上有参考;判定逻辑、面板与审计格式为本项目新写。warden 在正则命中后调模型;本插件纯规则、每条命令都分级并落审计,高风险必二次确认,命令参数不出本机。
明确不覆盖的能力¶
README 列出限制:不是安全边界、不是完整 PowerShell 解析器、只看命令文本、不覆盖 bash/computer、分析器异常时 degraded 放行、审计写失败会被吞掉等。使用前应把这些边界当作设计前提,而非「已实测某产品」的结论。
安装与启用¶
DSH 要求见 package.json:dsh 版本 >=0.2.0-rc.2 <0.3.0。官方 README 安装方式如下。
# 从 npm(发布后)
dsh plugin --profile <你的 profile> add dsh-ps-preflight
# 或直接从 GitHub 源码
dsh plugin --profile <你的 profile> add github:dingchenhui0618-arch/dsh-ps-preflight
README 说明:不需要任何配置即可使用,默认 mode 为 enforce。
可选配置写在插件 config(cordis.patch.yml 的 - id: dsh-ps-preflight 条目下),例如:
| 键 | 默认 | 说明 |
|---|---|---|
mode |
enforce |
audit = 只记录不拦 |
confirmMode |
auto |
panel / ask / auto |
confirmTimeoutMs |
120000 |
面板等待超时 |
panelWindowMs |
8000 |
判定面板是否「有人在看」 |
tools |
["pwsh","powershell"] |
拦截的工具名 |
auditPath |
$DSH_HOME/ps-preflight-audit.jsonl |
审计文件 |
maxAuditBytes |
2097152 |
轮转阈值 |
典型用法¶
- 安装并打开 DSH 对话,切到「预检」tab,观察检查条数与最近记录。
- 在「试一试」中粘贴待执行命令,点「预检」,查看档位与命中规则,再决定是否让 agent 真正调用 shell 工具。
- 若 agent 触发
high,在待确认卡片点「确认执行」或「拒绝」;若未开面板,按 harness 原生审批流程处理。 - 需要只观测、不拦截时,将
mode设为audit;需要固定确认通道时,将confirmMode设为panel或ask。 - 事后复查:
tail或编辑器打开auditPath对应 JSONL,按decision、tier过滤。
适用场景与注意¶
适合:在 Windows 或跨平台场景下频繁让 agent 跑 PowerShell,希望在误删、覆盖敏感文件、一键下载执行、凭据外发等路径上多一层可解释、可审计的闸门,且不希望把命令发给外部模型。
注意:
- 插件不能防同进程恶意绕过;安装前请阅读 GitHub 仓库 源码与 MIT 许可证。
- 动态拼接、自定义函数、从文件读入的脚本等,静态文本分析可能看不见。
- 社区目录星标等信息以站点为准;仓库 README 标注 136 条测试通过、Node ≥22。
结尾¶
dsh-ps-preflight 补的是「命令进 shell 前」的一层:纯规则分级、高风险二次确认、全量本地审计,与范围类授权互补。目录页:https://www.skillhub.cn/plugins/dingchenhui0618-arch/dsh-ps-preflight;源码与详细规则表:https://github.com/dingchenhui0618-arch/dsh-ps-preflight。