前言¶
在 DeepSeek Harness(DSH)里,Agent 通过 pwsh / bash 等工具执行命令时,常会触发「升级审批」(エスカレーション):每次都要在面板里点允许或拒绝。开发节奏一快,同类命令反复出现,就容易变成「审批地狱」——要么一直点,要么靠记忆去改全局策略,又容易过宽或过窄。
社区插件 dsh-command-permission(维护者 yukieiji,分类 admin-security)在 DSH 自带的审批流程之上,增加「一键把当前命令登记为允许模式」和「按工作区维护允许/拒绝列表」两类能力。下面介绍它做什么、怎么装、怎么用,以及判定顺序与限制。
这是什么¶
dsh-command-permission 是 DSH 插件,npm 包名 @yukieiji/dsh-command-permission(资料中版本 0.2.0,MIT 许可证)。它不改变 DSH 核心,而是在命令升级审批与侧边栏工作区菜单里扩展 UI 与规则存储,让「这条命令以后还要不要问」可以在审批当下或工作区设置里一次性定好。
规则写入各工作区下的 .dsh/command-permissions.json;会话级允许按会话 ID 持久化(主机重启后仍保留,且不影响其他会话)。
核心功能¶
1. 审批面板的一键允许按钮¶
当 pwsh / bash 的升级审批弹出时,在命令字符串下方会出现两列允许按钮(README 以 uv run app.py 为例):
- 会话行:在本会话中允许「uv run app.py」/「uv run *」/「uv *」等粒度之一
- 工作区行:把工作区允许列表设为「uv run app.py」/「uv run *」/「uv *」等之一
任一点击都会登记对应模式,并对当前这一次审批直接返回「允许」,无需再点主面板上的允许。
- 会话允许写在
.dsh/command-permissions.json的session段,按会话 ID 分键保存 - 工作区允许对该工作区下所有会话生效
2. 工作区「…」菜单里的命令权限¶
侧边栏工作区行的 「…」菜单(与重命名、删除等并列,项加在菜单最下方)→ 「コマンド権限…」(界面文案以插件 locale 为准),可编辑该工作区专属列表:
- 允许列表:匹配的命令升级审批自动通过(不再询问)
- 黑名单:匹配的命令自动拒绝(不再询问;优先级高于允许)
3. 模式语法与判定顺序¶
保存位置:<工作区>/.dsh/command-permissions.json。示例结构:
{
"allow": ["uv run *", "git status"],
"deny": ["git push", "rm *"],
"session": {
"s0123456789abcdef": ["uv run app.py"]
}
}
一行一个模式:无 * 则完全匹配;* 为可在任意位置使用的通配符。空白会规范化后再比较(例如 git push 与 git push 视为相同)。除 * 外,.、+ 等按普通字符处理。
| 模式 | 会匹配 | 不会匹配 |
|---|---|---|
uv run app.py |
仅 uv run app.py |
uv run other.py |
uv run * |
uv run app.py、uv run anything deep.py |
uv run(末尾需空格等,见 README 表) |
uv * |
uv add requests |
uvx add x |
* --force |
git push --force |
git push |
git * origin |
git push origin |
git push |
出现升级审批时,判定顺序为:
- 工作区拒绝列表
- 工作区允许列表
- 会话允许
- 若都不匹配,仍按 DSH 默认行为向用户询问
4. /cmdperm 会话命令¶
在 DSH 会话中可用下表命令管理列表(与 UI 写入同一 JSON 文件):
| 命令 | 含义 |
|---|---|
/cmdperm session list |
列出本会话的允许模式 |
/cmdperm session add <模式> |
添加会话允许(持久化) |
/cmdperm session remove <模式> |
删除 |
/cmdperm session clear |
清空本会话相关条目 |
/cmdperm workspace allow add <模式> |
加入工作区允许列表 |
/cmdperm workspace deny add <模式> |
加入工作区拒绝列表 |
/cmdperm workspace <id> list |
查看指定工作区列表 |
/cmdperm workspace <id> save <json> |
保存列表(供内部对话框使用) |
安装与启用¶
插件以当前 DSH 进程权限运行;安装前建议阅读 GitHub 仓库 源码与 MIT 许可证,确认符合你的安全策略。
官方 README 给出的 Git 仓库安装方式:在 Plugin Manager 中使用「路径/URL 指定」:
github:yukieiji/dsh-command-permission
本地开发构建时,README 说明可在克隆仓库后执行 pnpm install && pnpm build,再在 Plugin Manager → 添加 → 路径指定 指向该目录 → 启用 → 刷新页面。日常用户以 URL 安装即可。
DSH 生态强调「一切皆插件」;SkillHub 目录页 是社区站点,与 DeepSeek / 幻方无官方从属关系。
典型用法¶
- 安装并启用插件后,当 Agent 首次执行
uv run app.py触发审批时,在命令下方点工作区行的「uv run *」或会话行中更窄的模式,完成本次允许并登记规则。 - 对必须禁止的操作(如
git push、rm *),打开工作区「…」→ 命令权限,加入拒绝列表,之后同类命令将自动拒绝。 - 临时放宽仅本会话:用
/cmdperm session add 'uv run tests/*',结束会话或/cmdperm session clear清理。
适用场景与注意¶
适合:在同一工作区反复跑测试、包管理、只读 git 命令等,希望减少重复点击,又需要比「全局全开」更细的工作区/会话边界。
限制(来自 README):
- 工作区菜单项通过 DOM 注入实现(ui-workspace 暂无专用槽位);若 DSH 前端 DOM 变更,菜单项可能消失,需等插件更新。
- 模式仅作用于带
command参数的 shell 类工具;文件系统工具的升级审批仍按默认询问。 session段会按会话 ID 累积;不需要时用/cmdperm session clear或手动编辑 JSON。
结尾¶
dsh-command-permission 把「审批当下登记模式」和「工作区允许/拒绝表」接到 DSH 现有升级流程上,并用明确的匹配顺序避免 allow/deny 打架。若你主要痛点是 bash/pwsh 命令反复弹窗,可在目录页查看简介后,按上面的 github:yukieiji/dsh-command-permission 安装试用。
- 目录页:https://www.skillhub.cn/plugins/yukieiji/dsh-command-permission
- GitHub:https://github.com/yukieiji/dsh-command-permission