dsh-codemode:DSH 的 Code Mode 智能体预设

前言

DeepSeek Harness(DSH)的智能体开发中,工具暴露给模型上下文的方式直接影响推理成本与安全性。当 MCP 工具、profile 级插件、按 agent 注册的工具集同时存在时,模型可能会误用或过度依赖不该直接调用的能力。现有的 standard、ptc 等模式无法精细控制工具的可见性,只能按预设或 profile 整体暴露。dsh-codemode 提供了一个针对 Code Mode 的智能体预设,将工具的可见范围收窄到预设自身注册的工具,其余工具由程序内部按需发现与调用。

它是什么

dsh-codemode 是一个面向 DSH 的 Code Mode 智能体预设,维护者为 MuWinds。它并不引入新的沙箱运行时,而是利用 DSH 自带的 PTC 运行时,通过一个额外的 code_run 工具从程序内部发现并调用工具。预设清单以外的工具(如 MCP 工具、profile 级插件、按 agent.ctx 注册的工具集)被挡在模型上下文之外,从而控制模型可见的工具范围。

核心功能

为会话选择 codemode 模式后,工具行为分为两类:

  1. 标准工具保持原生调用
    - 预设自身清单内的工具(通过 cordis.patch.yml 注册的插件行)照常原生直接调用,schema 不变。
    - nativeScope 为 true 时,这些工具不被遮蔽。

  2. 预设清单以外的工具从程序内部调用
    - 模型只能通过 code_tools_search 查询工具名,返回结果包含 name、description 和完整 JSON Schema。
    - 模型通过工具名(例如 tools[hits[0].name])触发程序内部调用,而不是直接在上下文中暴露工具定义。
    - 判定依据是注册作用域:本预设自身的插件行在预设作用域注册,MCP 服务端与 profile 级 bundle 注册在全局层,按 agent.ctx 注册的工具集落在 agent 层,三者都会被遮蔽。
    - 名字规则仍然生效:hiddenPrefixes、hiddenTools、nativeTools 可用于添加例外。

其他模式(standard、ptc、minimal、cordis)不受影响,这些模式下所有工具仍以原生方式呈现。

安装与启用

安装命令(以本地开发为例):

dsh plugin --profile desktop add "link:<path-to-the-checkout>"

在 cordis.patch.yml 中挂载预设,并将会话模式设为 codemode 即可启用。

配置说明

codemode 行的 config 可调整行为,默认值如下:

键 默认值 含义
nativeScope true 遮蔽一切不是本预设自身作用域注册的工具
hiddenPrefixes ['mcp__'] 额外剥离的工具名前缀
nativeTools [] 例外:这些名字始终原生呈现(run_code 与 runToolName 永远原生)
hiddenTools [] 例外:这些名字始终遮蔽
metaTools [list, search, describe, debug] 发现工具名;第一个同时用作 codemode 标记
runToolName code_run 本包传输工具的名称
searchLimit 8 code_tools_search 默认返回的行数
maxDescriptionChars 240 列表中描述文本的截断长度
maxParallelSubCalls 10 一个程序内可并发的只读子调用上限
guard true 拒绝模型对被遮蔽工具的直接调用
sdkSection true 注入 / 替换 Code Mode 说明段落
debug true 注册 code_debug 工具

插件卸载

dsh plugin --profile desktop remove dsh-codemode

预设行位于本 bundle 的 patch 层中,会随包一起消失;profile 之外的任何内容都未被改动。

限制与注意事项

  • 作用域判定依赖一处 DSH 内部结构。本包按符号描述 dsh.scope 读取 @deepseek-ai/dsh-scope 写在 scoped context 上的标签,再用公开的 ctx.tools.get(name, scope) 做归属判断。读不到标签时(例如把本包挂在 host 层而不是预设里)作用域规则自动失效,只保留名字规则并打出一次 warn,不会误遮蔽。
  • 预设清单内的插件行算「标准」。判定是「本预设自己注册的」而不是「随 DSH 发布的」。往 cordis.patch.yml 的插件列表里加一行,它注册的工具就和标准工具一样保持原生;需要遮蔽时用 hiddenTools。反过来,只要插件挂在 profile,它的工具就在全局层或 agent 层,会被自动遮蔽。
  • 子调用调度是本包自己实现的。内置传输通过私有的 TOOL_RUNTIME_SCHEDULER 接入 agent loop 的调度器;本包改用公开的 ctx.tools.executionMode() 复刻同一份可观察契约。
  • 不提供程序级沙箱升级。内置的 sandbox_permissions / justification 依赖模块私有的审批辅助函数,本包不暴露这两个参数;程序一律在标准策略下运行。
  • 子调用不写会话日志。ctx.tools.execute() 只发出 tools/result 事件;tool/result 会话条目由 agent loop 为它自己调度的调用写入。
  • 沙箱、超时上限与输出上限均由 PTC 运行时决定,与随包发布的 ptc 预设一致。
  • 若把 persona 配成 complete: true,system-prompt 会在瀑布之后恢复该完整段落,本包注入的 Code Mode 说明将被丢弃。

适用场景

  • 需要精细控制模型可见工具范围的 Code Mode 智能体。
  • 担心模型误用 MCP 工具或 profile 级插件的场景。
  • 想要保持标准工具原生调用、同时隐藏非预设工具的场景。

小结

dsh-codemode 通过作用域与名字规则相结合的方式,将工具暴露范围收窄到预设自身注册的工具,其余工具由程序内部按需发现与调用,适合需要在 Code Mode 中精细控制工具可见性的 DSH 开发者。

参考

  • GitHub:https://github.com/MuWinds/dsh-codemode
  • DSH:https://github.com/deepseek-ai/deepseek-harness
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye