渐进式披露
MDP 中的渐进式披露,应该建模成一棵 skill path 树,而不是一个带状态的 skill 会话。
设计目标很直接:
- client 先发布一个短小的根 skill
- host 只有在需要时才继续读取更深 skill 路径
- 避免把整套说明一次性塞进一个 capability 定义里
定义模型
推荐的 JS SDK 写法是:
ts
client.expose(
'/workspace/review/skill.md',
'# Workspace Review\n' +
'\n' +
'Review the workspace root.\n' +
'\n' +
'You can read `/workspace/review/files/skill.md` for file-level guidance.'
)
client.expose(
'/workspace/review/files/skill.md',
{
description: 'File-level review guidance'
},
({ queries, headers }) =>
'# Workspace Review Files\n' +
'\n' +
`Topic: ${queries.topic ?? 'general'}\n` +
'\n' +
`Header: ${headers['x-review-scope'] ?? 'none'}`
)渐进式披露的单位,就是 skill path 本身:
/workspace/review/skill.md是摘要节点/workspace/review/files/skill.md是更深一层/workspace/review/files/typescript/skill.md还可以继续下钻
发现与读取
server 仍然只需要现有 bridge surface:
listPaths用来发现 skill pathcallPath用来读取某个精确 skill 节点callPaths用来把一次 skill 读取 fan-out 到多个 clientGET /skills/:clientId/*skillPath用来经由 HTTP 读取某个精确 skill 节点GET /:clientId/skills/*skillPath是另一种等价的 HTTP 形态
HTTP 路由会把 URL query 参数和请求头传给 skill resolver。
Server 行为
server 端保持刻意简单:
- 索引 skill path 和描述
- 原样把
callPath转发给目标 client - 不需要理解 skill 层级,层级含义完全由路径表达
这样渐进式披露就变成一种命名与编写约定,而不是协议状态机。
设计约束
- 根 skill 本身必须有独立价值。
- 用路径化名字表达深度。
- 父 skill 直接在 Markdown 里指向子 skill。
- 每个 skill 都要足够聚焦,方便 host 决定要不要继续读。
- 大块原始数据放 resource,skill 更适合承载可阅读的说明与指导。