DeepSeek Harness Skill、MCP、Extensions:外部能力如何动态进入 Harness
JotaroRD

模块定位

DeepSeek Harness 不只运行内置工具,还要让用户和插件把外部能力接进来。相关模块包括:

  • packages/skill/*
  • packages/mcp/*
  • packages/extensions/*
  • packages/preset/*
  • packages/host/plugin-inventory
  • packages/client/ui-settings-plugins

Skill

Skill family 提供 skill provider registry、local provider、catalog/loader tool。Skill 的作用是让 agent 在运行时发现和加载专用知识/工作流说明。

典型流程:

1
2
3
4
5
flowchart LR
A["skill provider"] --> B["skill catalog"]
B --> C["model-facing loader tool"]
C --> D["agent reads instructions"]
D --> E["task-specific behavior"]

Skill 和普通文档不同:它是模型执行任务时会读的操作规程,通常包含触发条件、步骤、资源和限制。

MCP

MCP client 能把外部 MCP server 的工具转成 Harness tools。合理实现方式是一个 server 一个 plugin:发现 MCP tools,转换 schema,调用 ctx.tools.register()。

这样 MCP 工具进入后仍然会经过 Harness tool pipeline:审批、guard、timeout wrapper、post-execute、session log、UI presentation。

Extensions

packages/extensions 处理 runtime self-modification:检查和挂载自己的 Cordis 插件、服务和工具。它体现了“everything is a plugin”的极端用法:agent 可以通过受控工具查看和修改自己的运行时插件树。

Preset

Preset 是 per-session agent composition。它允许某个 session 使用不同工具集、persona、provider、模型、权限或插件组合,而不是所有 agent 都共享一个全局能力集合。

这对多角色 Agent 很关键。例如一个 coding agent、一个 research agent、一个 reviewer agent 应该有不同 prompt 和工具可见性。

Plugin Inventory

Host 的 plugin-inventory 提供当前 Loader entries 的只读投影;Client 的 plugin settings UI 展示插件状态。它不等于插件管理器本身,但给用户理解当前 composition 提供可视化入口。

常见坑

第一,MCP 工具注册后也必须走 Harness tool contract,不能绕开策略。

第二,Skill 是模型可见指令,更新 skill 可能改变模型行为,要当作行为变更看。

第三,自修改能力必须受权限和插件边界控制,否则很容易破坏运行时。

第四,Preset 是 per-session 组合,不是全局开关。

继续读源码

  • packages/skill/README.md
  • packages/mcp/mcp-client/README.md
  • packages/extensions/README.md
  • packages/preset/README.md
  • packages/client/ui-settings-plugins/README.md