MCP是一个开放协议:外部程序("MCP 服务器")按标准格式把自己的能力暴露给模型,任何支持 MCP 的智能体都能用它的工具。dsh 的接法:一个 MCP 服务器 = 一个插件——挂上后,它提供的工具自动进入 ctx.tools 注册表,模型即可调用,不需要为每个工具写胶水代码。像 USB:任何设备只要做成 USB 口,就能插上电脑。
| 对比 | 原生 dsh 插件 | MCP 服务器 |
|---|---|---|
| 语言 | TypeScript | 任意(进程外独立运行) |
| 进程 | 同进程内 | 独立进程,协议通信 |
| 能力 | 全都能做(工具/服务/事件/UI) | 主要是提供工具 |
| 适合 | 深度集成 | 复用现成生态、跨产品共享 |
Skill(技能)= 一份 Markdown 写的"某类任务标准做法"说明书,模型按需加载、照着流程办事——零代码。机制:section(提示词段落)+ 工具注册,被调用时技能内容注入上下文。典型用途:团队编码规范、发布流程、工单填写标准——流程知识都能技能化。相当于给新员工一本 SOP 手册:不需要改他的脑子(代码),给他文档就行。
团队若已有 Claude Code / Codex 的 hook 配置(在固定时机拦截/注入行为的规则),dsh 的 dsh-hooks-claude-code / dsh-hooks-codex 桥能直接映射这些配置到自己的扩展点:
| Claude Code hook 时机 | dsh 扩展点 |
|---|---|
| 会话开始 | agent/session-start |
| 模型请求前 | agent/pre-step / agent/request |
| 工具执行前后 | tools/pre-execute / tools/post-execute |
| 轮次将停 | agent/turn-stopping |
子智能体(subagent)= 主智能体派出去干分支任务的"下属",干完汇报。ctx.subagents 是一个提供者注册表,同一个接口后面对着五花八门的实现:spawn-in-process(进程内新生一个)、fork(分叉当前会话去干)、acp / codex / claude-code(委托给另一个产品的智能体)、dsh-sdk(经 SDK 起一个进程外的 dsh)。能力缝的威力:模型只管说"派个人去查 X",至于"人"是谁——人肉分身还是隔壁公司——是配置一行的事。
followup(..., {source: {kind: 'cron'}}) 唤醒,忙时则 inject() 通知——周期性巡检类工作的基础。ctx.jobs 通用后台运行时 + 模型可用的 job_* 控制工具——长任务不堵会话,模型稍后收取结果。前三项是"给智能体加能力";这一项是把整个 dsh 变成你自己程序的一个部件:
| 入口 | 语言/形态 | 适合 |
|---|---|---|
| Python SDK | Python 库 | 公司内部系统、数据管线里嵌智能体 |
| JSON-RPC SDK | TypeScript 客户端 + 服务器插件 | TS 技术栈的进程外集成 |
| ACP 服务器 | Agent Client Protocol(JSON-RPC over stdio) | 自动化客户端按标准协议驱动 |
| 我想…… | 用 | 写代码吗 |
|---|---|---|
| 复用一个现成的外部工具 | MCP | 不写(装服务器即可) |
| 教模型团队流程 | Skill | 写 Markdown |
| 迁移已有 hook 资产 | Hooks 桥 | 不写 |
| 并行处理分支任务 | subagent | 配置即可 |
| 在自己产品里嵌智能体 | SDK / ACP | 写(但是写你自己的应用) |
| 深度定制 dsh 行为 | TS 插件(阶段 3) | 写 |
examples/mcp-memory/README.md 看一个 MCP 接入实例。packages/subagent/README.md,确认六种子智能体提供者的名字。