Skip to content
打开的工具箱

Meta Harness 的能力闭包

说明段落覆盖、middleware 卸载与内置 SubAgent 策略如何在会话创建时形成一致的能力边界。

编写于 2026-08-22

Meta Harness 不是运行中的 prompt 开关,而是会话装配策略。它在创建会话时把配置解析为 一份冻结状态,再由同一份状态决定提示词段落、middleware 链和内置 SubAgent 定义是否存在。

一个 map,三类 key

key 类型行为
段落 IDtrue 时读取 .peri/meta/<ID>.md 并整段替换
middleware 名false 时跳过该组件;true 可恢复全局配置中的关闭项
BuiltInSubagents控制 compile-time 内置定义,默认启用

全局与项目配置按 key 合并。项目可以恢复一个被全局关闭的 middleware,但不能用 null 删除全局 key。未知 key 会告警并忽略;非布尔值是配置错误。

关闭必须形成能力闭包

一个 middleware 可能同时拥有提示词段落、direct 工具、deferred 工具、Hook 和命令投影。 因此“关闭”不能只从模型工具数组删除一个名字。当前设计要求以下消费面一起收口:

middleware 缺席
→ 持有段落缺席
→ direct 工具缺席
→ deferred index / resolver 缺席
→ slash route 与 ACP/TUI 投影缺席
→ SubAgent / Workflow 不继承该能力

工具视图按 session、按 turn 从当前生产链派生;ToolSearch 也从同一视图建立索引,不能 依赖一份静态工具名单猜测当前能力。

审批与提问已经拆分

PermissionMiddleware 持有审批策略和 10_hitlHumanInTheLoopMiddleware 持有 AskUserQuestion12_ask_user。这两个能力有不同的生命周期和失败语义:关闭审批 不应让提问消失,关闭提问也不应把敏感工具自动放行。

段落冻结,动态贡献按请求读取

段落覆盖在会话创建时进入 frozen base prompt。与此同时,当前 middleware 链还可以在 每次模型请求前提供 contribution,例如项目指引、Skills 摘要或 session-local 工具说明。 这些贡献只能追加在冻结前缀之后,不能回写 Transcript,也不能绕过当前能力策略。

这条分界同时服务一致性与缓存:冻结区保持稳定,运行时能力说明可以随当前 session-local 工具视图变化。Provider adapter 会在发送请求前消费内部缓存边界标记,模型不会看到该标记。

BuiltInSubagents 的边界

BuiltInSubagents: false 只移除随二进制分发的 Agent 定义。项目与插件定义仍可进入 catalog,fork、resume、AgentAgentResult 仍由 SubAgentMiddleware 控制。 如果目标是完全关闭子代理,应关闭 SubAgentMiddleware,而不是只修改定义来源。

验证方法

对每个配置同时写 presence 与 absence 检查:生产链里是否有该 middleware,提示词是否有 对应段落,工具视图和 ToolSearch 是否能发现相关工具,子代理与 Workflow 是否继承相同 边界。只看模型回复不能证明装配正确。

用户配置与风险说明见 Meta Harness 文档