dsh-project-config:用 .dsh/settings.yml 把子代理、命令、MCP 和 hooks 带进项目

前言

在 DSH 里做项目级智能体开发时,团队往往希望「配置跟着仓库走」:换一台机器、新开一个会话,子代理定义、斜杠命令、MCP 服务器和 hooks 都能一致加载。DSH 自带能力会读工作区里的 AGENTS.md 和 .dsh/skills/,但子代理、命令、MCP、hooks 原先只能在全局配置里维护,无法按项目版本化、随 git 分发。

下面介绍社区插件 dsh-project-config(维护者 RicardoYan,分类:工作流)。它从工作区根目录的 .dsh/settings.yml(以及可选的 .dsh/settings.local.yml)为当前 DSH 工作区加载上述能力,并配合 dsh-workspace-trust 在「已信任工作区」边界内执行项目里的命令与脚本。

这是什么

dsh-project-config 是 DeepSeek Harness 的 Cordis 插件(npm 包名 dsh-project-config,当前资料中的版本为 0.2.1)。一句话定位:Per-workspace subagents, commands, MCP servers and hooks for DSH from .dsh/settings.yml。

工作区根目录的判定方式(README 原文):从会话目录向上找,最近的、含有 .dsh/settings.yml 或 .git 的目录即为工作区根。

核心功能

项目级 settings.yml

在工作区根放置 .dsh/settings.yml,可声明四类条目(字段细节、hook 输入输出、从 Claude Code 迁移与排查见仓库内 docs/settings.md):

  1. subagents:按 personaFile 加载人格文件,注册为同名工具;可用 toolFilter 限制可用工具(MCP 工具需写全名,如 mcp__github__search_code)。
  2. commands:注册斜杠命令,handlerFile 为相对工作区根的模块,需 export default ({ rawInput, agent, workspaceRoot }) => '文本'。
  3. mcp:按条目启动 MCP 服务器(stdio 等),工具名形如 mcp__<serverName>__<工具>;环境变量可用 ${VAR} 引用 DSH 进程环境。
  4. hooks:在 tools/pre-execute、tools/post-execute、agent/pre-step 等事件上挂命令;在工作区根执行,stdin 为 JSON;退出码 2 表示拦截,原因走 stderr。

个人覆盖:settings.local.yml

MCP 凭据、个人 hooks 等可放在 .dsh/settings.local.yml,写法与主文件相同;同名条目整条覆盖 settings.yml,enabled: false 可去掉主文件中的同名项,hooks 条目接在后面。须加入 .gitignore。仅当存在 settings.yml(可以是空文件)时才会读取 local 文件。详见文档 §7。

Skill 仍放在 .dsh/skills/<名字>/SKILL.md,由 DSH 自行读取,不在本插件的 settings 里声明。

会话内诊断命令

插件提供 /project-config:查看本会话已加载的配置、被跳过的条目及原因,以及各 MCP 服务器的连接状态。
/project-config reconnect [名字] 可在当前会话内重连指定 MCP 服务器。

上述命令与配置告警跟随 DSH 语言设置,界面为中文或英文;字段名、事件名保持原文。

子代理与 MCP 的协作规则

  • 子代理、MCP、hooks 对子代理同样生效;子代理共用主会话的 MCP 连接,再按各自 toolFilter 过滤。
  • 子代理再派发项目子代理:需在 toolFilter.allow 里写上对方工具名,且对方 maxDepth 要足够(表示最多出现在第几层;主会话直接派发为第 1 层)。
  • DSH 自带的通用 subagent 工具每个子代理都有,toolFilter 管不到它;嵌套层数由 DSH 的子代理层数上限控制。

安全边界与 AGENTS.md 隔离

  • 命令、MCP、hooks 会运行项目里的代码,仅在工作区已被信任时运行;信任由 dsh-workspace-trust 记录。未安装该插件时一律按不信任处理,子代理仍可正常使用。
  • 配置中的路径只接受相对路径;指向工作区外(含符号链接)的路径要求工作区已信任,且不在禁止访问列表中。
  • 存在 settings.yml 的工作区只读取本工作区自己的 AGENTS.md 与项目 skill,不再继承外层 git 仓库根目录的 AGENTS.md。

安装与启用

官方安装步骤(Desktop 示例;Web 端将 desktop 换为你的 profile 名,一般为 web)。信任插件与项目配置插件需一并安装:

dsh plugin --profile desktop add github:RicardoYan/dsh-workspace-trust#v0.2.1
dsh plugin --profile desktop add github:RicardoYan/dsh-project-config#v0.2.1

安装完成后重启 DSH。

卸载:

dsh plugin --profile desktop remove dsh-project-config

版本与运行时:插件声明适用于 @deepseek-ai/dsh >=0.2.1-rc.1 <0.3.0-0,Node ^22.19.0 || >=24.0.0。它依赖 DSH 内部接口(agent 事件、dsh-tool-subagent、dsh-mcp-client、dsh-hook-protocol 等),升级 DSH 大版本前宜对照 README 与 release。

典型用法

最小 settings.yml 示例

在工作区根创建 .dsh/settings.yml,可按需组合四类配置。下面片段来自 README,展示常见字段形态:

subagents:
  - toolName: code-reviewer
    personaFile: agents/code-reviewer.md
    toolFilter: { allow: [read, grep, mcp__github__search_code] }
commands:
  - name: release-notes
    description: 生成发布说明
    handlerFile: tools/release-notes.mjs
mcp:
  - serverName: github
    transport: stdio
    command: npx
    args: ['-y', '@modelcontextprotocol/server-github']
    env: { GITHUB_TOKEN: '${GITHUB_TOKEN}' }
hooks:
  tools/pre-execute:
    - matcher: pwsh|bash
      command: node .dsh/hooks/check.mjs

personaFile 相对工作区根;frontmatter 中的 description 用作子代理用途说明。Token 也可写入 settings.local.yml 而非环境变量。

验证加载结果

新开会话后执行 /project-config,确认 subagents、commands、MCP、hooks 是否按预期加载,MCP 是否已连接。修改 settings.yml 或 settings.local.yml 后,仅新开会话生效。

hooks 在 Windows 上的注意点

hooks 的 command 由 DSH 的 shell 执行:Windows 为 PowerShell,带引号的程序路径前需加 &,例如 & "C:/Program Files/nodejs/node.exe" check.mjs。

适用场景与注意

适合谁:需要在 monorepo 或多仓库协作中,把 DSH 的子代理、自定义斜杠命令、项目 MCP、审计类 hooks 与代码一起提交;又希望凭据与个人 hook 留在本机 settings.local.yml 的团队。

权限与安全:插件会以当前 DSH 进程权限运行配置中的命令、MCP 与 hooks;安装前应阅读源码与 MIT 许可证,并理解信任工作区的含义。未信任时项目级命令与 MCP 不会跑,避免误执行不可信仓库里的脚本。

其它行为(README「注意」):

  • 装上或卸下本插件后,已有会话继续时可能多收到一次完整的 AGENTS.md 推送。
  • 诊断日志:%TEMP%\dsh-project-config.log(超过 1MB 轮转);MCP 的 url、headers、env 的值不会写入日志与 /project-config。

社区插件目录站点 SkillHub 上的 dsh-project-config 页 与 GitHub 仓库并列存在;DSH 生态强调「一切皆插件」,该目录为社区维护,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-project-config 把原先偏全局的 DSH 扩展点收拢到 .dsh/settings.yml,与 AGENTS.md、.dsh/skills/ 形成同一套「项目内智能体配置」;配合 dsh-workspace-trust,在可审计的信任边界内运行项目脚本与 MCP。若你正在维护可复现的 DSH 工作流,可从仓库 README 与 docs/settings.md 对照字段后,在目标工作区放置配置文件并用 /project-config 自检。

  • 目录页:https://www.skillhub.cn/plugins/RicardoYan/dsh-project-config
  • GitHub:https://github.com/RicardoYan/dsh-project-config
羽毛球分组比赛记分
小程序二维码

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

Xiaoye