在 DSH 的开发场景中,使用 danger-full-access 权限虽然能最大化交互能力,但直接使用存在误操作风险。现有的基于 LLM 的自动审批机制(如 Claude Code 的 Auto Mode)虽然能缓解风险,但审查成本较高。dsh-auto-guard 插件旨在给全权限模式加一层 LLM 安全网,通过分层裁决和缓存机制,在降低审批成本的同时控制风险。
核心定位¶
该插件基于 danger-full-access 兜底,不限制文件系统能力,而是通过规则和 LLM 审查进行安全裁决。它将审批流程分为多个层级,优先使用规则和缓存,仅在必要时调用 LLM,从而减少 token 消耗。
安装与启用¶
安装插件后,cordis.patch.yml 会注册 auto-guard 预设,覆盖原有的 danger-full-access。
- 执行安装命令:
dsh plugin --profile web add github:Ayle5678/dsh-auto-guard
- 在对话框的权限选择器中选择
Auto Guard预设,即可启用。
功能特性¶
分层裁决机制¶
插件采用多层过滤策略,从简单规则到 LLM 兜底:
* File Tracker:写后执行检测。
* 绝对黑名单:危险命令直接拒绝。
* 目录删除复核:要求 agent 提供理由并经 LLM 复核。
* 复合命令处理:智能拆分 ;、&&、||,检测 export、cd 等环境改变命令,对管道进行确定性判断。
* 白名单与缓存:结合静态白名单(含白名单守卫)与动态白名单,支持模板缓存。
* 历史/学习层:利用历史记录和自动生成的学习规则进行低风险放行。
* LLM 兜底:上述规则均无法匹配时,由 LLM 进行裁决。
Guard Memory¶
具备会话级裁决记忆。首次 deny 后,同命令再次出现会转为 ask 请求人工确认。
审计与安全¶
- 敏感路径门禁:对
.env、.ssh等路径自动降级 LLM 审查。 - 审查日志与审计加密:支持 SQLite 审计日志(默认关闭),敏感字段使用 AES-GCM 加密存储,开启前需设置审计密码。
配置与使用¶
启用与配置¶
插件的所有配置通过 DSH 设置体系管理,主要配置项位于 ~/.dsh/settings.yaml 的 auto-guard: 命名空间下。
auto-guard:
apiBase: '' # 直连 OpenAI 兼容端点
apiKeyEnv: DEEPSEEK_API_KEY
model: deepseek-v4-flash # 审查使用的模型
examineEnabled: false # 审查日志开关
auditPassword: '' # 审计密码
# ... 其他配置项
自定义规则¶
用户可编辑 ~/.dsh/auto-guard/rules.json 添加静态放行规则(如 git log)。
例如:
{
"version": 1,
"staticAllow": [
{ "pattern": "git log", "reason": "Read-only git log" }
]
}
使用示例¶
- 在对话框权限选择器中选择
Auto Guard预设启用。 - 使用复合命令,如
git status; git branch --show-current,插件会智能拆分并处理。 - 尝试删除目录时,插件会要求提供理由并经 LLM 复核。
注意事项¶
- 安全边界:插件不是沙箱,不承诺绝对安全,不排除极少数隐秘危险命令可能通过审查。请将其视为“安全网”而非“安全边界”。
- 密钥管理:密钥不落仓库,支持环境变量或 DSH settings 的 secret 字段本地存储。
- 日志默认关闭:审查日志默认关闭,开启前需设置审计密码。
- Fail-Closed 机制:无 UI 兜底时,DSH 本身会把
ask退化为deny(拒绝执行)。 - 文件系统能力:插件不限制文件系统能力,尽量不打断正常开发。
总结¶
dsh-auto-guard 适合需要在 DSH 中使用全权限,但又希望对命令执行进行安全审计和自动化的用户。通过分层规则和缓存机制,它能在保障安全的同时控制审批成本。