dsh-sage-mode:DSH 会话里的只读「贤者模式」

前言

DeepSeek Harness(DSH)里的编码智能体默认面向「动手改代码、跑命令、写文件」。当你只想读懂一段实现、对比方案、学概念、头脑风暴或分析报错栈,却不想误触写盘或 shell,就需要一种一等公民的开关:保留读仓库和联网检索,同时从模型可见的工具面里拿掉一切会改环境的能力。dsh-sage-mode 在会话内提供 Sage mode(贤者模式),用 /sage 进入、/sage off 退出,把当前会话收成只读咨询态。

这是什么

dsh-sage-mode 由维护者 zero360-TYN 发布,在 SkillHub 插件目录 中归类为联网工具。插件版本 1.0.0,许可证 MIT(见仓库 package.json)。

一句话定位:面向 DeepSeek Harness 的只读咨询会话模式——在模式开启期间,会话仅保留 read/search/web 类工具;模型侧注入咨询向 system prompt,用于回答、建议、评估、讲解、 brainstorm 与诊断,而不是改动工作区。名称来自 Sage(贤者):给建议,不代劳。

核心机制

命令

输入 效果
/sage 进入 Sage mode:仅只读工具,并注入咨询 prompt
/sage <question> 进入模式,并将该问题作为下一条消息发送(可带图片/文件)
/sage off 退出;完整工具集立即恢复

典型用途包括:理解陌生实现、学习代码库、对比设计、头脑风暴、粘贴 stack trace。准备真正改代码时,先执行 /sage off。

工具白名单与拦截

进入模式后,变更的是模型能调用的工具目录,不是沙箱权限本身:被隐藏的工具不会出现在请求的 tool catalog 里;若仍有调用落到 dispatch,tools.guard() 会拒绝并提示先运行 /sage off。

默认保留的工具包括:

read、read_image、glob、grep、web_search、web_fetch、ask_user_question、skill、cordis_inspect_list、cordis_inspect_query、load_workspace_dependencies。

其余如 write、edit、ops_replace、pwsh/bash 及后台任务、subagent/send_message、plugin_manager、todo_write、present 以及 goal/team-task 等工具会被隐藏;在当前 composition 中不存在的工具名会被忽略,同一份列表可跨不同 agent preset 使用。

可选依赖 dsh-ops

更快的只读工具 ops_glob、ops_grep、ops_inspect_local_file 来自独立插件 dsh-ops。Sage mode 在 cordis.patch.yml 里通过 optionalTools 声明为可选依赖:

  • 已安装 dsh-ops → 上述工具会被纳入允许列表;
  • 未安装 → 名称被忽略,其余功能照常;缺少可选提供方不会报错。

若要从其他 bundle 纳入只读工具,可在配置中扩展 optionalTools 映射,无需改插件源码。

状态与实现要点

  • 模式状态写在会话日志里,复用 commands 服务已有的 command/run + command/done,不新增自定义事件类型,便于 resume/fork 自动恢复。
  • 按 agent 生效:agent.ctx.tools.restrict({ allow }) 隐藏可变工具,agent.ctx.tools.guard() 拦截漏网调用;disposer 挂在 agent.ctx 与插件 effect 上,agent 销毁或插件卸载时一并释放。
  • 未使用 @deepseek-ai/* 包依赖;咨询 prompt section 在 agent scope 注册,模式关闭时返回空字符串,不产生多余 token。

安装与启用

在 Harness 中打开 Plugin Manager,将下列仓库 URL 作为安装 spec 填入:

https://github.com/zero360-TYN/dsh-sage-mode

管理器会把 GitHub URL 当作 git 安装 spec,克隆包、添加 sage-mode 行并激活。后续更新可再次安装同一 URL;若需重新生成 JavaScript 模块,需重启应用后加载。

本地开发时,也可在 Plugin Manager 中指向仓库的绝对路径,通过 plugin_manager(action: "install_bundle", target: "<absolute path to this repo>") 以链接方式安装,直接编辑仓库文件即可影响 live 插件。

运行环境:package.json 要求 Node ^22.19 || >=24。

配置

默认在插件的 cordis.patch.yml;用户覆盖写在 profile 用户层:$DSH_HOME/profiles/<name>/cordis.patch.yml。patch 会整体替换对应行的 config,因此覆盖时需写全要保留的键:

- id: sage-mode
  name: dsh-sage-mode
  config:
    command: sage          # 命令名,默认 sage
    sectionOrder: 3255     # prompt section 顺序
    allowedTools: [read, grep, web_search]   # 仅保留列出的工具
    optionalTools:
      dsh-ops: [ops_glob, ops_grep, ops_inspect_local_file]
    section: |             # 完整咨询 prompt
      ...

未知键在加载时会失败,避免拼写错误 silently 失效;缺失键回退默认值。

典型用法

  1. 在已有 DSH 会话中输入 /sage,确认模型只能使用只读与联网类工具。
  2. 或一次性提问:/sage 这段模块的调用链是怎么串起来的?(可附带文件/图片)。
  3. 需要让智能体改文件、跑终端时,输入 /sage off 恢复完整工具集。

若处于 Plan mode,exit_plan_mode 也会被隐藏;可先 /plan off 或 /sage off 离开。

适用场景与限制

适合:只想咨询、评审、学习或查资料,又希望 agent 仍能读仓库、grep、web_search/web_fetch 的开发者。

已知限制(来自上游 README):

  • 仅影响当前会话;其他标签页/会话不受影响。
  • PTC 模式下 run_code 传输层会保留(否则工具面不可用),但生成的 SDK 只暴露允许的只读工具。
  • 不改变沙箱与审批策略;插件管的是模型持有哪些工具,不是文件系统权限。

安全说明:插件随当前 DSH 进程权限运行。安装前请自行查看 GitHub 仓库 源码与 MIT 许可证,确认符合你的环境策略。DSH 社区目录(SkillHub)为独立站点,与 DeepSeek / 幻方无官方从属关系。

仓库自测可运行:

node test/self-test.mjs

链接

羽毛球分组比赛记分
小程序二维码

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

Xiaoye