跳到正文
打开的工具箱

Meta Harness 的能力闭包

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

更新于 查看 Markdown

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

一个 map,三类 key

key 类型 行为
段落 ID true 时读取 .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_hitl,HumanInTheLoopMiddleware 持有 AskUserQuestion 与 12_ask_user。这两个能力有不同的生命周期和失败语义:关闭审批 不应让提问消失,关闭提问也不应把敏感工具自动放行。

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

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

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

BuiltInSubagents 的边界

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

验证方法

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

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

导航

输入以搜索…

↑↓ 导航↵ 选择Esc 关闭