@amaster

申报工具调用政策 深层空间( dsh): 配置驱动 allow 编号 : deny 编号 : ask 规则dsh's tools/pre-execute gate ——双子座 CLI 的 TOML 政策文件的语义,表达为平面插件配置(Schemastery-valided YAML,没有代码,没有规则文件).
安装
dsh plugin --profile my-agent add @amaster.ai/dsh-policy
配置
该插件是 默认禁用规则在简介中直播 cordis.patch.yml 像其他的 dsh 插件配置( 编辑热重装配置层):
- name: '@amaster.ai/dsh-policy'
config:
enabled: true
rules:
- tool: '*' # every tool
decision: allow
priority: 20
- tool: bash # dsh's shell tool (pwsh works the same)
decision: deny
commandPrefix: npm
priority: 200
message: 'npm is not allowed. Use bun install / bun add / bun test instead.'
- tool: bash
decision: deny
commandPrefix: bun run
priority: 200
- tool: bash # …but one specific subcommand is fine
decision: allow
commandPrefix: bun run lint
priority: 300 # higher priority overrides the broader deny
- tool: bash # grep as a pipe filter stays allowed
decision: allow
commandPrefix: grep
priority: 300
- tool: write
decision: deny
argsPattern:
file_path: '\.md$' # matched against the file_path value directly
priority: 200
- tool: write # …except the project contract file
decision: allow
argsPattern:
file_path: 'PRODUCT\.md$'
priority: 300
- tool: write
decision: ask # resolved via ctx.approval (human/answerer chain)
argsPattern:
file_path: '(^|/)etc/'
message: 'writes to a system path'
规则字段
| 外地 | 需求 | 含义 |
|---|---|---|
tool | 对 | 工具名称或名称清单; * 匹配每个工具 |
decision | 对 | allow 运行电话, deny 挡住它( message 以工具出错的形式到达模型, ask 等待 dsh 的批准连接 |
priority | 无( 0) | 在争夺同一指令段的规则中取得更高的优先权; 断开连接失败关闭( 拒绝 > 要求 > 允许) |
message | 没有 | 拒绝理由 / 询问解释( 生成匹配规则的默认名称) |
argsPattern | 没有 | 与 JSON 字符串参数相匹配的 Regex(或列表,任意) – 或参数名地图 – regex(或列表):每个密钥的图案与该参数的图案相匹配 价值 (非字符串值是 JSON-stringized first),所有密钥必须持有. 优先使用针对外地的规则的地图表格——不放出报价、不按键或跨外地事故 |
commandPrefix | 没有 | 每个 shell 命令段的安乔德前缀匹配(或列表,任意),在一个单词边界(npm 匹配 npm install永远 npmx(中文(简体) ) |
commandRegex | 没有 | Regex(或列表,任意)固定在每个 shell 命令段的起始点上——双子兼容;使用 .* 以匹配中段 |
插件级别字段 : enabled (主开关)和 commandKeys (参数键有 shell 命令字符串——默认) ['command'],覆盖dsh's bash编号 :pwsh 页:1.
匹配语义
- 一个规则的每个条件必须坚持 用于规则匹配(AND). 一项没有其他条件的规则
tool和那个工具的每个呼叫匹配. - 贝壳命令逐段检查 . 复合命令( E)
a && b | c,新线条,背景&)被分出,引出-认识,可执行命令词通过引出,逃出和行接续实现常态. 巴许$( ),反键和<()编号 :>()取出替代物作为自己的部分;这里的正文体是数据,但未经引用的正文取出替代物除外. PowerShell backticks是出逃,而不是巴什式替代. - 优先权解决一个部分内的竞争; 各个部分的汇总是保守的:
deny否认整个电话,然后任何ask升级,和allow要求每一段决定允许。 广泛的否认仍然被具体的许可压倒,因为两者在同一部分竞争(bun run lint在300比克时bun run(第200段). - 没有规则匹配 呼叫通过 给其他人的
tools/pre-execute链 (next())),因此dsh的自有门和其他插件保持了他们的发言权. 无效的 regex 属于配置错误并失败插件负载; 运行时的评分失败被记录[dsh-policy]前缀并被拒绝(无法关闭)而不突破代理循环.
门盖着什么
所有注册在 ctx.tools 通过 tools/pre-execute 门是不可知的工具,不需要每个工具的支持:
- 官方工具 (对照0.1.6-α.2来源核实):
bash, (中文(简体) ),pwsh, (中文(简体) ),read, (中文(简体) ),write, (中文(简体) ),edit, (中文(简体) ),read_image, (中文(简体) ),web_search, (中文(简体) ),web_fetch, (中文(简体) ),list_subagent_models和代表团的工具,run_code,加上目标/技能/工作流程/ cordis 工具。 和他们比对tool+ 键argsPattern(对象形式符合其参数形状 :file_path页:1write编号 :edit, (中文(简体) ),url页:1web_fetch, (中文(简体) ),query页:1web_search(中文(简体) ). commandPrefix编号 :commandRegex适用于其参数带有 shell 命令字符串的工具 -bash财务报告和审定财务报表pwsh双用command(默认涵盖)commandKeys) (中文(简体) ).- PTC 模式数字 :
run_code子发送器重新进入调度器prepare,它运行着相同的执行前门——规则适用于每个子调用,而不仅仅是每个调用run_code。 。 。 . - MCP工具 桥由
dsh-mcp-client登记为同一ctx.tools管道——同任何其他工具一样,用其注册名称与之相匹配.
这个 ask 决定
ask 由 dsh 自行解决: @deepseek-ai/dsh-user-approval (UI 提示器,自动回答器,...),在未组成批准服务时未关闭拒绝,在会话下短路拒绝 approval/policy: never模型化的否定理性是规则 message (一) 完全没有审批服务;a rejected编号 :cancelled编号 :unavailable dsh-tools 本身的理由措词(经核实与 [email protected]) (中文(简体) ). 双子座 modes (单位:千美元)default编号 :autoEdit编号 :yolo编号 :plan) 没有dsh对应物——dsh模型轴心作为每会的审批政策(见 dsh-permission-presets dsh 简介/cordis.patch.yml 已包含每个部署范围配置,所以插件没有它自己的模式轴.
双子星CLI政策绘图
| 双子TOML | dsh- 政策配置 |
|---|---|
toolName = "*" / "name" / ["a", "b"] | tool: '*' / name / [a, b] |
decision = "allow" / "deny" / "ask_user" | decision: allow / deny / ask |
priority = 300 | priority: 300 (同样的方向) |
denyMessage | message |
argsPattern (序列参数的正则) | argsPattern 外加 dsh- 内在对象形式 { file_path: '…' } 匹配每个参数值(字符串形式保留了JSON)。 字符串密钥顺序,而不是双子座排序的密钥形式——跨越多个密钥的图案可能需要调整;对象形式没有这样的问题) |
commandPrefix 编号 : commandRegex (单一或列表) | 相同名称,每个命令段匹配; commandRegex 像双子座一样在命令开始 |
modes = [...] | 没有对应文件 — 使用单独的 dsh 配置补丁行 |
allowRedirection | 不支持( dsh 没有每个调用重定向门) |
警卫
一个政策插件是咨询地标,而不是封存:拒绝规则让行为良好的代理避免危险命令,但代理程序仍然运行着主机权限. 与 dsh 的沙盒堆栈对齐( Namedsh-sandbox + 限制执行器)用于OS级执行,并注意dsh 船没有自己的认证或授权.
兼容性
| @amaster | 日记 | 绳子 |
|---|---|---|
| 0.1.x (中文(简体) ) | `>=0.1.5-弧 1 |
同伴依赖 : @deepseek-ai/dsh-tools (单位:千美元) tools/pre-execute 门). 批准接合(@deepseek-ai/dsh-user-approval)是可选的,仅涉及 ask 决定.
许可证
麻省理工学院