前言¶
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 失效;缺失键回退默认值。
典型用法¶
- 在已有 DSH 会话中输入
/sage,确认模型只能使用只读与联网类工具。 - 或一次性提问:
/sage 这段模块的调用链是怎么串起来的?(可附带文件/图片)。 - 需要让智能体改文件、跑终端时,输入
/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