Agent 工程对照
← 返回周报

2026-W40

Pi 一直不内置 MCP,这周把 MCP 和 codemode 做成内置扩展,两天后发了 1.0.0

本周落点

本周综述

本周最大的变化来自 Pi。矩阵里 Pi 在 MCP 那一格的立场是「刻意不支持:内核无 MCP,交给扩展」,内核边界那一格写的是 MCP、子代理、权限弹窗一律不内置。9 月 29 日的提交一次加入了 codemode(模型写的 JavaScript 在 worker 里的 QuickJS wasm 虚拟机中运行,把 Pi 的工具当异步函数调用)和独立的 MCP 客户端,但做法守住了原来的边界:内核只增加通用机制——工具的暴露级别(direct、model-only、codemode、deferred、hidden)、让编排工具改写模型可见工具列表的 prepareLoadout()、走校验与钩子的嵌套调用 ctx.executeTool()——codemode、tool_search 和 MCP 都是内置扩展,可以被其他扩展替换。10 月 1 日发布 v1.0.0,一周内从 0.99.0 走到 1.0.2。

展开完整综述

Pi 接入 MCP 之后马上做的是控制它占用的上下文。codemode 的描述里不再列出 MCP 工具和数量,只列服务器名,脚本用 searchTools() 和 describeNamespace() 按需查;首个提示只等待提供直接工具的服务器,其余在后台连接;工具声明不再依赖哪些服务器已连上,服务器状态放进单独的系统提示段,变化以追加方式进入对话。codemode 的参考文档挪到外部,默认工具下一次请求从约 5300 token 降到约 3300。这与矩阵里 Pi 在技能那一格「系统提示里一段列表、读文件即加载」的思路一致:目录进上下文,内容按需取。

Codex 本周在同一个方向上也有动作:新增默认关闭的 incremental_tools,开启后 Responses Lite 只在首次发送完整工具目录,之后只追加新增或变化的定义,删除工具时发开发者通知,不改动已发送的请求前缀。两家都在把「工具集变化」从重写前缀改成追加,保护前缀缓存的意图很明显。

Codex 另一条主线是把状态绑定到正确的归属上。权限授予改为绑定到发起请求的回合:后台的 code-mode cell 在新回合开始后继续运行时,用的仍是自己那个回合的授权与严格审查要求,会话级授权跨回合共享。多 Agent 方面,空闲 Agent 卸载后,仅排队的消息保留在内存信箱里,向已卸载的 Agent 发消息不再把它重新加载;本地 Agent 树新增协调关闭。

DeepSeek Harness 从 0.2.0-rc.1 走到 0.2.1-alpha.1,期间删掉了整套运行时不变量插件(新增 1487 行,删除 15409 行),并在设计记录里提出了桥接 Pi 扩展、分级兼容 Pi 插件的方案(尚处于提议状态)。openJiuwen 发布 v0.1.19,本周多为修补:技能包解压的路径穿越、工具护栏通配符匹配非 ASCII 字符、对未知模型提示快速失败。

工程解读

Pi:MCP 和 codemode 以内置扩展形式加入,内核只加通用机制

改了什么
新增两个包。codemode 在 worker 里的 QuickJS wasm 虚拟机中运行模型写的 JavaScript,脚本把 Pi 的工具当异步函数调用,有按会话的存储,能读模型目录、调用分类器,大结果写入临时 JSON 文件;coding-agent 里的 codemode 工具与 Codex 的 exec 工具兼容,模式也对应 Codex 的 on 和 only。MCP 是独立客户端,支持 stdio 与 streamable HTTP,带 OAuth,服务器来自全局或项目受信任后的 mcp.json,或由 pi.registerMcpServer() 注册,首次使用时加载。内核只增加通用机制:工具声明 exposure(direct、model-only、codemode、deferred、hidden),prepareLoadout() 让编排类工具改写模型看到的工具声明,ctx.executeTool() 让嵌套调用经过校验和 tool_call、tool_result 钩子并以 parentToolCallId 记录在父结果上;codemode、tool_search 和 MCP 都是可以被替换的内置扩展。改动新增约 17600 行。
为什么改原文说明
对应 PR 的正文写明了原因:主要动机是 Jev 这类模型在能组合工具的沙箱里明显比纯工具调用表现更好;对 MCP 的态度是看法复杂,但有些用法是负责任的,基础功能能比较合理地融入 Pi。
对开发者的影响
用 Pi 的人可以直接通过 /mcp 和 pi mcp list、login、logout 接入 MCP 服务器,项目级 mcp.json 只在项目受信任后生效;依赖第三方 MCP 扩展的用户要检查是否与内置扩展重复。写 Pi 扩展的人多了 exposure 与 ctx.executeTool() 两个可用机制,嵌套调用会走同一套钩子,权限类扩展不必单独拦截脚本内的调用。自建 Harness 可以借鉴的是:要加一个有争议的能力时,内核只开放它需要的通用接口,把能力本身做成可替换的扩展。

Pi:codemode 只列 MCP 服务器名,工具按需查,提示从约 5300 token 降到 3300

改了什么
三步收紧。第一步,codemode 描述不再列 MCP 工具、工具数量和服务器说明,只列服务器名和 mcp.json 里的可选描述,脚本用 searchTools() 找工具、用 describeNamespace() 读说明。第二步,首个提示只等待提供直接工具的服务器,其余在后台连接,codemode 脚本、tool_search 和资源工具等到自己需要的服务器;工具声明不再依赖已连接的服务器,服务器清单放进 before_agent_start 时生成的 mcp_servers 系统提示段,变化以追加方式进入对话。第三步,codemode 的脚本参考(含 models API)移到 docs/codemode.md,工具描述里每个全局对象只留一行,声明过的工具只用一行说明脚本如何调用;同时错误信息会给出近似的名字和正确的参数形状,引导模型自己修正。
为什么改原文说明
第三个提交的正文写明了效果:默认工具下一次 GPT-5.6 请求从约 5300 token 降到约 3300。第二个提交的正文写明,工具声明不再依赖已连接的服务器,服务器变化改为追加进对话。正文没有直接写出「为了保住前缀缓存」,这一层是从改动方式推断的。
对开发者的影响
在 Pi 里用 codemode 接很多 MCP 服务器的人,首个提示不再被慢服务器拖住,上下文开销也不随工具数量增长;写过用 typeof tools.name 探测工具的脚本要改成 "name" in tools。自建 Harness 可以借鉴两点:工具目录只放命名空间,让模型按需搜索;让工具声明与运行时连接状态脱钩,状态变化用追加消息表达,避免每次连接变化都改写前缀。

Codex:权限授予绑定到发起请求的回合,后台 cell 不再借用新回合的权限

改了什么
回合级授权和严格审查状态放进 TurnContext,被捕获的步骤和后台 cell 持有它;权限响应记在发起请求的那个回合上,包括新回合开始之后才到达的请求;会话级授权仍在回合之间共享,回合级授权彼此隔离。工具执行、补丁、MCP 调用、文件上传和终端输入都改用发起回合的权限与审查要求。
为什么改原文说明
提交正文写明了原因:后台 code-mode cell 可以在新回合开始后继续运行,此前通过当前活动回合查询授权和严格审查要求,会让这些 cell 丢掉已批准的权限,或者用上另一个回合的权限。
对开发者的影响
Codex 用户在回合内批准的操作,对仍在后台运行的 code-mode cell 继续有效;反过来,新回合里的批准不会被旧回合的后台任务借用,需要跨回合生效的授权要选会话范围。自建 Harness 只要允许工具调用跨回合存活,就要把授权挂在发起调用的上下文上,而不是在执行时查询当前回合。

DeepSeek Harness:删除整套运行时不变量插件

改了什么
删除 @deepseek-ai/dsh-invariants 包、各包的 ./invariant 配套插件及其测试、不变量门禁和 Vitest 配置、作用域事件解析器生成器,以及带 INVARIANT 错误码的监听器重抛路径;sdk-minimal profile 去掉对应的五个条目。几个事件发出方改为隔离并记录每个监听器的失败,不再重抛。新增升级指南。改动新增 1487 行、删除 15409 行,原设计记录归档。
为什么改编辑推断
提交信息没有说明原因,升级指南也只讲了怎么迁移。被归档的设计记录曾要求运行时不变量只检查真正的跨时间或跨结构关系(例如终止事件必须有对应的开始事件、工具调用与结果必须配对),并指出只确认形状的断言不会提高安全性。据此推断,团队判断这层运行时检查的收益已不抵维护成本,改由类型检查与测试承担,需后续设计文档确认。
对开发者的影响
在 cordis.yml、profile 补丁或 overlay 里引用了 dsh-invariants 或任何 /invariant 条目的 DeepSeek Harness 用户,升级到 0.2.x 后会遇到模块找不到或补丁条目缺失,要按升级指南删除;依赖监听器重抛 INVARIANT 错误的插件,要改用自己的渠道报告失败。自建 Harness 可以参考它曾经检查的那张关系清单(序号递增、调用与结果配对、流式块闭合),这些检查放在测试里同样有效。
影响到的格子(6 条说明)
采集到的提交与发布
openJiuwen23 提交 · 1 release · 446 ★

当周 release

值得注意的提交

  • 8345a27refactor(agent-teams): unify group chat input routing and consolidate group chat logic
  • 33d1894test(swarm): cover model fail-fast, session pinning, and timeout budget
  • 3b5491dfix(swarm): fail fast on unknown agent(model=...) hints
  • 7fbf343!3085 merge release/v0.1.19 to develop
  • c993823fix: 修复技能包解压路径遍历与 get_local_ip 超时等 3 类缺陷
  • a171506fix(personal-context): replace bundled tiktoken vocabulary with mocks
Codex100+ 提交 · 12 release · 128,704 ★

值得注意的提交

  • 7f89227Isolate tracing in the strict third-party tool deferral test (#50977)
  • 4ad985eTrack inference tool changes in turn analytics (#50964)
  • 335c7f8Gate stable environment tool exposure behind a feature flag (#50962)
  • de3721aRecover malformed Windows deny-read ACL state safely (#50940)
  • c2f7fe8Use server model defaults for connected TUI fresh starts (#50913)
  • afb436dHonor server reasoning summary defaults in new TUI threads (#50811)
DeepSeek Harness100+ 提交 · 3 release · 247,664 ★

值得注意的提交

  • 4263144fix(agent-loop): retain resources until all agents finish teardown
  • 1e1735afix(session-projection): preserve composable registration disposers
  • 288a2bdfix(cordis): adopt effect disposers from their owning fiber
  • e1878e4fix(llm-pi-ai): withhold ChatGPT sign-in and serve one catalog
  • abfa630fix(llm-pi-ai): keep catalog providers whose catalog lists no models
  • d516180fix(llm-pi-ai): offer only catalog providers that ship a chat model
Pi100+ 提交 · 6 release · 114,372 ★

值得注意的提交

  • b2b5c42fix(coding-agent): expect saved image label in codemode MCP test (#10463)
  • 4c6b724fix(coding-agent): do not report dead terminal stdin errors as crashes
  • 1965a80fix(coding-agent,durable): fix CI test stub and macOS watch startup race
  • d677d0efeat(coding-agent): save codemode image() output to temp files
  • be882f3fix(durable): give watch conformance cases a timeout that covers polling latency
  • 864777bfix(durable): poll watches on Windows, where open watched directories block renaming their parents

每家最多列 6 条代表性提交,已去掉合并、版本号与纯文档提交。

观察名单

观察名单

这几个项目出现在周报里,但还不在对照矩阵中。

Claude Agent SDKAnthropic
14 提交 · 8,250 ★

Anthropic 把 Claude Code 的 Harness 能力下放为可编程 SDK,是「Harness 作为库」这条路线的参照系。

最近一次 release(不限当周):v0.2.165(2026-10-08)

同族的 anthropics/claude-agent-sdk-typescript 只有 examples/scripts/CHANGELOG,属发布仓,不单独采集。