dsh-chat-preset:为 DeepSeek Harness 增加受限的 Chat 预设

前言

DeepSeek Harness(DSH)通过 bundle、preset 和 plugin 组合会话行为。日常对话或轻量问答时,你往往希望模型能查网页、拉取页面、按需加载 skill 说明,同时不要碰工作区文件、也不要执行 shell。若在通用 agent 预设上靠手工关工具,容易漏掉宿主注册的全局工具(例如 working_directory),或在 preset 作用域里误伤预设自身工具。dsh-chat-preset 以 bundle 形式注册名为 chat 的 agent 预设,并用 guard 插件在 agent 创建后按可见工具列表做 allow 限制,把能力收窄到 web 与 skill。

这是什么

dsh-chat-preset 是 ThomasTZh 维护的 DeepSeek Harness bundle:注册一个 chat agent 预设(plain helpful assistant,带 web 与本地 skill,且无法访问文件系统或运行命令),并附带 guard 插件。在 SkillHub 社区目录中归类为「模型推理」。仓库:https://github.com/ThomasTZh/dsh-chat-preset;目录页:https://www.skillhub.cn/plugins/ThomasTZh/dsh-chat-preset。

核心功能

注册的 chat 预设

预设由 cordis.patch.yml 挂载,主要字段如下(与 README 一致):

字段 值
id chat
name Chat
order 5
persona helpful assistant,引用来源、标注不确定、不声称执行过未实际执行的操作
tools web_search、web_fetch、skill
compaction basic compaction,并支持 /compact

persona 为 complete: true,会替换而非叠加宿主 prompt;includeRuntimeContext 关闭,chat 模式不会注入工作区事实。

Guard:为何不用单一配置开关

预设工具注册在共享 preset 作用域,宿主还会注册 working_directory 等全局工具。若在 preset 作用域做 restriction,会过滤掉预设自己的工具,又拦不住全局工具。因此 lib/guard.js 监听 agent/created,读取该 agent 实际可见的工具,保留 web_search 与 web_fetch,若存在则保留 skill,再调用 agent.ctx.tools.restrict({ allow })。

allow 列表来自可见工具而非硬编码:仅启用 search 或仅启用 fetch 的 web 配置仍能得到正确限制。若完全未注册任何 web 工具,guard 会打 warning 并保持继承工具不受限——作者有意让配置问题可见,而不是静默删掉用户期望的工具。

skill 工具为何保留

skill 只读取 discovery provider 暴露的 skill 文件,不解析工作区路径,保留它不会扩大文件系统访问;去掉它会使用户级 skill 在最需要对话模式的场景下不可用。

安装与启用

安装前请自行阅读仓库源码与许可证;插件随当前 DSH 进程权限运行,guard 限制的是工具而非 prompt,会话仍可按 discovery 加载任意已暴露的 skill。

官方 README 给出的步骤如下。

1、克隆到本地插件目录(将 DSH_HOME 设为 harness 根目录,默认 ~/.dsh):

DSH_HOME=${DSH_HOME:-$HOME/.dsh}
git clone https://github.com/ThomasTZh/dsh-chat-preset \
  "$DSH_HOME/local-plugins/dsh-chat-preset"

2、在 $DSH_HOME/profiles/web/package.json 中登记依赖:

"@local/dsh-chat-preset": "link:<absolute path to $DSH_HOME>/local-plugins/dsh-chat-preset"

并在 dsh.profile.bundles 中列出 @local/dsh-chat-preset,然后:

cd "$DSH_HOME/profiles/web" && pnpm install

等价方式:使用 harness CLI 注册同一布局:

dsh plugin --profile web add "<path-to-this-clone>"

package.json 中 bundle 通过 dsh.bundle.patch 指向 ./cordis.patch.yml,并导出 ./guard → lib/guard.js。

典型用法

README 未单独给出「切换至 chat 预设」的 CLI 示例;bundle 的作用是向 harness 增加 preset 行与 guard,会话侧在 harness 支持 preset 切换的流程中选择 chat(id 为 chat,显示名 Chat)即可进入该模式。该模式下模型可用 web_search、web_fetch 与 skill,persona 要求引用来源并标注不确定。

Compaction 行为包含 basic compaction 与用户可用的 /compact 命令(与预设配置一致)。

验证与局限

维护者在仓库中记录的自检(非完整 harness 端到端切换):

检查 命令 结果
单元测试 node --test test/guard.test.mjs pass,6 tests
模块解析 node --check lib/guard.js pass
安装布局 临时 DSH_HOME 下 clone 并检查 package 与 patch pass;未在此仓库重复 pnpm install 与 harness 重启

未测项: 全新安装 harness 后的完整 preset 切换。

其他局限(README 原文):

  • Guard 限制工具,不限制 prompt;chat 会话仍可按设计加载 discovery 暴露的任意 skill。
  • 预设行引用的 @deepseek-ai/dsh-agent-preset、dsh-persona、dsh-agent-instructions 及 skill、compaction 等插件由 harness 安装解析,本仓库不 vendoring 这些包。

适用场景与注意

适合需要在 DSH 里提供「只上网 + 读 skill、不读写工作区、不跑命令」对话入口的场景,例如对外分享的轻量问答 profile(如 README 示例中的 web profile)。

注意:SkillHub 目录为社区站点,与 DeepSeek / 幻方无官方从属关系;安装方式以 GitHub README 为准,不要凭插件名臆造 dsh plugin add github:owner/repo 一类命令(除非与你的 harness 版本文档一致且已在资料中出现——本插件资料仅给出 clone + profile 依赖或 dsh plugin --profile web add "<path>")。

结尾

dsh-chat-preset 用一条 preset 行加一个 per-agent guard,把 chat 模式的能力钉在 web 与 skill 上,并避免 preset 级 restriction 的盲区。需要细节与更新时,请查看目录页 https://www.skillhub.cn/plugins/ThomasTZh/dsh-chat-preset 与源码仓库 https://github.com/ThomasTZh/dsh-chat-preset。

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

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

小夜