2026 2026年10月10日 37 min · 10.9k chars by yxc023
GitHub 调研周报 2026-10-10
扫描窗口:2026-09-08T09:23:29Z → 2026-10-10T00:30:28Z(约 31.6 天)| 基准来源:上次报告 2026-10-09
2026-10-10 GitHub 调研周报
扫描窗口:2026-09-08T09:23:29Z → 2026-10-10T00:30:28Z(约 31.6 天)| 基准来源:上次报告 2026-10-09
仓库范围:
config/repos.yaml中 6 个项目。本期最重要的事件是 agentclientprotocol/agent-client-protocol 一次发掉三个 release:Session Notices 与 Session Compaction 两个 RFD 从 Preview 升到 Completed(进正式协议),同一个 commit 周期里还落地了两条方向相反的改动——一条把宽容解析改成严格拒绝(#2333),一条给 v2 补上「prompt 之后才失败」的表达方式(#2281)。第二件是 agegr/pi-web 在 10-09 12:46–16:01 的 3 小时里落了 30 个 commit,把 open issues 从 54 压到 9,是一次典型的 issue sweep。第三件是 earendil-works/pi 的pi-durable连发两个大 commit(嵌套工具调用 + 结构化输出 + storage 错误终结 Session;read返回图片 + 可选 Photon 图像处理器)。第四件是 vectorize-io/hindsight 的两个动作:一个 breaking 的自我瘦身(#5462 删掉整个 agent-sdk 包),一次 tag scope 授权收紧(#5463)。第五件是 anomalyco/opencode 主线基本静止(2 个 commit),但 kitlangton 一天内提交三条 codemode / 长时工具调用的问题。
本期速览
- ACP 一日内完成两个 RFD 的稳定化:
v1.11.0/schema-v1.25.0/schema-v2.0.0-alpha.8同在 2026-10-09T14:17Z 发布(#2280 chore: release)。Session Notices(notice这类「fire-and-forget」的提示事件,no id / no ack / 不进 replay,展示与关闭完全由 Client 决定)与 Session Compaction(compaction_update+compaction_summary_chunk,ID-addressed 的上下文压缩实体,首个 update 固定时间线位置,后续同 ID 更新原位 patch)从 Preview 升到 Completed 并进入正式 schema。v1 侧投递与 replay 仍需clientCapabilities.session.compaction/.notices;v2 侧不需要 capability。官方 RFD 更新页已记录这两条。 - 同一批次里 ACP 把一批「宽容解析」字段改成严格拒绝(#2333,benbrandt,是 #1583 的后续):
terminal/create的args/env/cwd/outputByteLimit、fs/read_text_file的line/limit、session/{new,load,resume,fork}的mcpServers/additionalDirectories、v2session/resume的replayFrom,畸形输入一律回-32602。PR 自带的对照表很说明问题:args: ["serve","--port",3000]过去会被执行成serve --port;line: "120"过去会从第 1 行开始读;某个 server 的env值为null会让该 server 静默不启动而会话照常开始。作者的判据是:宽容解析只该用在「fallback 意味着信息更少」的字段上(无 metadata、不支持的能力、缺失的展示项),一旦 fallback 本身有含义,收窄就等于接收方替发送方做了另一个决定。 - ACP v2 补上「prompt 之后才发生的失败」的表达方式(#2281,标为 unstable):v2 的
session/prompt在用户消息插入后就返回,错误响应不再能报告本轮后续失败。实现改为发一个 idle 的state_update,带stopReason: "error"与可选的 JSON-RPC error 字段。同时 v2 明确不新增 compaction capability(v2 整体仍由unstable_protocol_v2opt-in),以及 v2 的 entity id 是「按实体类型唯一」而非全局唯一(#2332)。 - agegr/pi-web 三小时清空 issue 列表:10-09 12:46–16:01 落 30 个 commit,open issues 54 → 9(−45)。Alex Yang 一个人 17 个 commit,Brynne Taylor 4 个,其余来自 Mango、QuickLyx、arkkwang、Zllf、Tigerrr07、tospp 等。有信号的几条:启动时就加载 pi SDK 而不是等第一个请求(#964,perf)、subagent 加 opt-in 的 codemode 支持(#1097)、右侧面板新增 subagent 工作视图(#1129,bennywolf)、文件查看器把 CSV/TSV 渲染成表格(#1150)、Markdown 里保留
obsidian:///vscode:///zoommtg://这类桌面应用链接(#1108)、PWA 安装名可在运行时配置(#1147)、minimap 加锁以关掉 hover 预览(#1128)、minimap 的轮次编号改为从会话第一轮起算(#791)、文件树在 run 写入期间与窗口聚焦时重载(#1144)。 - pi 的
pi-durable一天两个大 commit。eba8497:嵌套工具调用(ToolExecutionApi.executeTool()以自己的 pi.tool task 运行另一个工具、由调用方持有、为 replay 安全重新挂接,结果先落在调用方的NestedResultDoc,pi.live.nestedTools可看每次调用及其参数摘要;TaskOptions.abandonOnRestart只中止「创建者在内存里等过」的工作)+ 结构化输出(structuredOutputSchema/structuredOutput校验;无 schema 的工具给程序一个有界输出)+ storage 抛出的任何错误直接终结 Session(后续调用与等待以SessionFailed拒绝,watch 以session_failed结束,删掉StorageRejected,改用StorageRequestError标记只影响本次调用的非法读)。42a3497:read遇到图片返回一个 image block 而不是unsupported_image,限额取对话模型的inputLimits.images.resize(默认 2000×2000、base64 4.5 MB);无 processor 时 PNG/JPEG/GIF/WebP 在限额内原样透传;有createCodingTools({ images })时按 EXIF 方向摆正、BMP 转 PNG 并缩放,底层是@silvia-odwyer/photon0.3.3 的 wasm。同日还有5a10492:用 pi-durable agent 做本地 issue triage(分类、查重、摘要、p0/p1/none 建议)并起一个 Web UI 供人工决策。 - hindsight 的两件事方向相反:一方面在瘦身——
d29b842/ #5462 是 breaking 的refactor(openclaw)!,删掉整个@vectorize-io/hindsight-agent-sdk包与 openclaw 的agent_knowledge_*工具,只保留 auto-recall / auto-retain;理由写在 PR 里:SDK 拆出来本是为了跨 harness 复用,结果 openclaw 是唯一使用者,而这些工具「一直没离开 alpha」(要enableKnowledgeTools显式开启、只有 self-driving-agents CLI 会开、自己另建 API client、并且忽略插件的 recall 设置,#5057);enableKnowledgeTools保留在 manifest schema 里但标记为 deprecated 且被忽略,因为根 schema 是additionalProperties: false,直接删键会让现存 OpenClaw 配置被拒。另一方面在收紧授权——#5463 让 tag-scoped caller 对整库操作一律 403:统计与新鲜度、操作列表、webhook 及其 delivery(payload 里带记忆内容)、审计日志与 LLM 请求日志及其 stats(保存着每个调用方的请求 payload 与 prompt,此前只靠 bank-profile 读权限放行)、bank 别名的增删改主、operation 的取消/重试/删除;并补了一条守卫,让新的 bank 操作不能再悄悄跳过 scope。 - opencode 主线基本静止,但 codemode 的边界被集中质疑:10-09 只有 2 个 commit(
b2a3926接住 Copilot 交错的reasoning_opaque值、055d95b高亮 C++ module interface 文件)。真正的动静在 issue 侧:kitlangton 一天内提交 #54220(Code Mode 的execute与 plugin tool call 在 V2 里没有超时,一个慢 plugin 工具会让 session 只转圈直到用户中断;MCP 调用倒有限制,但默认是 12 小时)、#54222(execute被中断时,已经完成的嵌套调用结果与脚本日志全部丢弃,尽管存储的 tool part 已把它们记为 completed)、#54221(目前只有shell与subagent能移后台,长跑的execute/ MCP / plugin 调用不行,按键无反应、提示也不出现),并开了 #54198 升级 Effect 到 4.0.1。同日53821修了两处架构问题:WellKnown是跨所有 projectLocation共享的全局服务,但 refresh/add/remove 发的事件没带{ global: true },只有触发更新的那个 Location 会重载;WellKnown.inspect/resolveEntry没有请求 deadline,VPN/WARP 切换时挂死的 socket 会一直占着锁直到 OS socket 超时(最长 6 分钟)。 - 跨项目共有信号:协议与工具的「边界」正在被逐个显式化。ACP 连续三条改动都在同一件事上——把「接收方在畸形输入下会替发送方做什么决定」从实现细节变成协议规定(#2333 的严格化、
notice的「不保证送达所以不能用于协议正确性」、compaction 的「首个 update 固定时间线位置」);pi 的 durable 把「storage 报错」从可重试变成终态;hindsight 把「tag scope 覆盖不到哪些整库操作」从散落各处的判断变成一张显式的拒绝清单 + 一条守卫。方向一致:默认值必须落在安全的一侧,未覆盖的情况要变成错误而不是静默降级。
各仓库详情
agentclientprotocol/agent-client-protocol
Agent 与 Editor 之间的协议(ACP):JSON-RPC 2.0 over stdio / HTTP,本地 agent 作为子进程启动;Rust crate + JSON schema 双轨发布;Apache-2.0。| stars: 4,395(上份 4,394,+1 / 24h) | open issues: 45(上份 46,−1) | 默认分支:
main| 最近 push: 2026-10-09T20:56:54Z | 主页: https://agentclientprotocol.com
近 N 周 release 重点:
- v1.11.0(2026-10-09T14:17:36Z)— Rust Crate v1.11.0,协议侧同时发 schema v1.25.0 与 schema v2.0.0-alpha.8
- 新增:稳定 session notices(#2336,
Notice/NoticeSeverity/SessionUpdate::Notice/ v1 notice capability 不再需要unstable_session_notices) - 新增:稳定 session compaction(#2334,compaction 的类型、session update 与 v1 capability 从 unstable 移到稳定产物;新观测到的 compaction 默认
in_progress,允许 summary chunk 作为第一条通知,compaction_update上status仍为必填) - 新增(unstable):prompt 插入之后的失败用 error stop reason 上报(#2281)
- 修复:拒绝「接收方会据以行动」的畸形值(#2333)
- 其他:明确 v2 的 entity ID 是按实体类型唯一(#2332);空集合比较改用
assert_eq!(#2279) - 完整 release notes: https://github.com/agentclientprotocol/agent-client-protocol/releases/tag/v1.11.0
- (上一个 release:v1.10.2 / schema-v1.24.1,2026-09-30~10-01,修掉「静默跳过畸形列表条目时仍打 Serde 错误日志、可能泄露私有 payload 值」,
tracingfeature 保留为向后兼容的 no-op)
- 新增:稳定 session notices(#2336,
其他重要 commits / PRs(按重要性挑选):
3c229ec稳定 session notices —feat(schema): stabilize session notices(@benbrandt, 2026-10-09)。保留 Preview 的 wire contract:v1 投递需clientCapabilities.session.notices,v2 不需要 capability;notice 仍是 live-only 事件,不进会话历史,展示与关闭由 Client 控制。b30445d稳定 session compaction —feat(schema): stabilize session compaction(@benbrandt, 2026-10-09)。compaction RFD 完成;v1 的 live delivery 与 replay 仍由clientCapabilities.session.compaction把关,v2 不新增 compaction capability。cca7aa2畸形值改为严格拒绝 —fix(schema): reject malformed values receivers act on(@benbrandt, 2026-10-09)。受影响字段见上方速览。- #2281 prompt 之后才失败的表达 — v2
session/prompt只确认「已收到」,前台工作因失败结束时改发state_update+stopReason: "error"+ 可选 JSON-RPC error({ "sessionUpdate": "state_update", "state": "idle", "stopReason": "error", "error": { "code": -32000, "message": "Authentication required" } })。error severity的 notice 与这里的stopReason: "error"是两件事:前者是给人看的展示事件,后者改变会话状态。 d812e3cv2 entity ID 语义 —docs(schema): clarify v2 entity IDs are unique per entity type(@benbrandt, 2026-10-09)e03bd67依赖 —chore(deps-dev): bump http-cache-semantics from 4.2.0 to 4.3.0(@dependabot[bot], 2026-10-09)- 4 条
docs: update registry agents(#2330 / #2331 / #2337 / #2338,@acp-release-bot[bot]),本期 registry 出现的实现包括github/copilot-cli、getsigit/sigit、tao12345666333/amp-acp、burin-labs/harn、getkimchi/kimchi、mistralai/mistral-vibe。仍然是纯版本同步,零新增协议实现。
社区讨论 / 行业方向:
- RFD Updates(官方生命周期页): 两条权威更新——2026-10-09 Session Notices RFD moves to Completed(已进入 v1 与 v2 的 schema 与指南);2026-10-06 Session Compaction RFD moves to Completed(v1 投递与 replay 仍需
session.compactioncapability,v2 不需要)。页面上还留着两条未完成的动作:2026-09-30 Next Edit Suggestions (NES) RFD 转入 To be removed(提案不再推进,实现代码待清理);2026-09-17 Tool Call Name RFD 完成(tool call 可带一个可选的程序化名称,纯信息性元数据,不授予能力或授权)。 - Session Compaction RFD: compactionId 是 agent 自有的不透明字符串,必填、非空、session 内唯一且不复用;
status每次 update 都必填,初值in_progress/completed/failed/cancelled,枚举是开放的——_前缀留给实现自定义,其他未知值留给未来 ACP 版本,Client 必须原样保留并以通用状态呈现,不得推断生命周期或控制行为。首个compaction_update固定该实体在时间线上的位置(在先出现的实体之后、后出现的之前),且必须早于任何compaction_summary_chunk;后续 patch 或 chunk 不移动它。 - Session Notices RFD: 一条 RFD 里把边界写得很死——notice 没有 ID、没有响应、没有确认、没有更新也没有移除,SHOULD NOT 进 session replay;「Agent 必须表现得像这条 notice 可能没被收到、没被理解、没被展示、用户也没看见」。
error严重级仍然只是展示事件,不会让 JSON-RPC 请求失败、不停前台工作、不改变会话状态、不隐含 prompt stop reason。如果 Agent 需要知道用户是否看到了 notice,notice 就是错的原语。 - Migrating from v1: 官方 v2 迁移指南把边界写在最前面——「migrating 不等于放弃 v1」,v1-only 的 Agent 与 Client 还会存在相当长时间,应当按连接协商版本、保留 v1、在 feature flag 后面加 v2。v2 里 client 的 fs / terminal 执行 / session modes API 全部移除,agent 需要的客户端侧工具改用 client 提供的 MCP server。
- claude-agent-acp #1224: 一个真实实现的适配记录,说明 v2 上 compaction 与 notice 的落地差异——v2 客户端过去拿到的是遗留的 “Compact conversation” 工具调用,因为 v2 面没有声明 compaction。适配后 v2 客户端实时会收到
compaction_update(in_progress)→compaction_summary_chunk→completed(失败则failed+ 标准error);replay 时是一条位于摘要原始位置的 completedcompaction_update。已知的未解决点:replay 的 compaction id 与 live 时不同(live 用 Claude Codecompactingstatus 的 uuid,transcript 不保留;replay 用摘要消息的 uuid),RFD 与协议都要求稳定 id,要修需要 Claude Code 持久化 live id。 - 窗口期内未检索到新的中文侧讨论。
信号观察:
- 本期 10 个 commit 里 5 个是 bot(
acp-release-bot4 条 registry +dependabot1 条),人工提交 4 个全部来自 benbrandt,主题集中在 schema 稳定化。协议维护面在变窄:registry 与依赖交给 bot,人工带宽全押在 RFD 上。 - RFD 是 ACP 唯一的收敛机制,而且它带明确的阶段门槛:Draft → Preview → Completed。Preview 阶段的两个 RFD(Session Notices 2026-09-24 进 Preview、Session Compaction 2026-09-23 进 Preview)分别只停留了 15 天和 13 天就完成,与 Next Edit Suggestions 从 Preview 掉头去 To be removed 形成对照。
- v1 与 v2 的能力门槛不对称正在固化:notice 与 compaction 都是「v1 要 capability、v2 不要」,v2 的整个面仍由
unstable_protocol_v2opt-in,schema-v2.0.0-alpha.8 这个 tag 名本身就是「还没稳定」的声明。 - 「拒绝畸形值」这条改动把协议的工作重心从「加字段」转向「收紧接收端行为」,且改动一次覆盖 v1 与 v2 共 9 个字段点位。
agegr/pi-web
pi coding agent 的 Web UI;TypeScript / Next.js,读取本地 pi session JSONL 维持会话,服务端在真实 workspace 里让 session 持续运行。| stars: 7,196(上份 7,168,+28 / 24h) | open issues: 9(上份 54,−45,本窗口降幅最大的仓库) | 默认分支:
main| 最近 push: 2026-10-09T16:10:09Z | 主页: https://github.com/agegr/pi-web
近 N 周 release 重点:
- 窗口期内无新 release(相对上次报告)。最近一个仍是 v0.11.0(2026-10-08T16:50:58Z)——侧边栏重设计 + 修复「打包进 npm 的固定密钥」导致的认证绕过。
其他重要 commits / PRs(按重要性挑选):
本期 10-09 12:46–16:01 集中落 30 个 commit,全部来自 issue sweep。以下为信号最强的一条:
6425d0d启动时即加载 pi SDK —perf(server): start the pi SDK import at startup, not on the first request(#964, 2026-10-09)。把首请求延迟从「用户感知」挪到「启动期」。81cc285subagent 支持 codemode(opt-in)—feat(subagents): add opt-in codemode support(#1097, @Zllf, 2026-10-09)311a901右侧面板查看 subagent 工作 —feat(agents): view sub-agent work in a right-panel tab(#1129, @bennywolf, 2026-10-09)f87afbbCSV/TSV 以表格渲染 —feat(files): show CSV/TSV files as a table in the file viewer(#1150, 2026-10-09)5af2e04保留桌面应用链接 —feat(markdown): keep links to common desktop apps (obsidian://, vscode://, zoommtg://)(#1108, 2026-10-09)50486b3minimap 加锁 —minimap: add lock toggle that disables the hover preview(#1128, @mitchellkager, 2026-10-09);5220b88minimap 轮次编号改为从会话第一轮起算 (#791, 2026-10-09)4ad8aa3文件树热刷新 —fix(files): reload the file tree while a run writes and on window focus(#1144, @xiakj 报, agegr 修, 2026-10-09)e7d0fda切走再切回后新会话的首个 prompt 仍会发出 —fix(chat): send a new session's first prompt even after switching away(#1146 → #1152, 2026-10-09)0db6734subagent 接纳在session_start注册的 extensions 工具 —fix(subagents): admit tools extensions register at session_start(#883 → #1115, 2026-10-09)fb6df88由 profile 决定 spawn 参数 —fix(subagents): let the profile decide the spawn parameters(@brynne8, 2026-10-09);f9a370e被移除的 worktree 仍由它分支自带的 repo 应答 (#1137)2adb185PWA 安装名运行时可配 —feat(pwa): configure installed app name at runtime(#1147 → #1148, @tospp, 2026-10-09)650d7a3settings 的httpIdleTimeoutMs对 Web UI 生效 —fix(http): apply settings' httpIdleTimeoutMs to the Web UI(#1127, @QuickLyx, 2026-10-09)- 未合并:
#1135高亮 tool card 里的 shell 命令、#1136在侧面板打开 read 调用读到的片段(均 @brynne8,2026-10-09)。
社区讨论 / 行业方向:
- discussions #994: 中文用户报的 subagent 插件问题——主 agent 容易不调用
get result工具而用其它方式拿到结果,导致在长 loop 结束后才收到自动的结果通知。这是本期 subagent 相关三条改动(#1097 codemode、#1129 右侧面板、#1115session_start工具注册)共同针对的一类体验问题。 - discussions #942: 中文用户建议去掉「生成标题」功能(2026-09-22)——标题生成会消耗 token 并在长会话里制造噪音。
- pi-web.dev: 官方定位是「keeps Pi Coding Agent sessions running in real server-side workspaces, even after your browser leaves」,即浏览器离开后会话仍在服务端 workspace 继续跑。
- pi.dev/packages 生态页: npm 上的
pi-web-ui是以 pi extension 形式安装的(声明 resources 由 pi 加载);生态里至少还有@hyperdreamer/pi-webui、@gang-of-beads/pi-web、wangkiw/pi-web等同类实现,说明「pi 的 Web UI」已经是一个有竞争的品类,而不是单点产品。
信号观察:
- open issues 从 54 降到 9,是本窗口六个仓库里降幅最大的一次,且与同一时段的 30 个 commit 一一对应——这批 commit 几乎每一条都带一个 issue 编号(#988 / #1031 / #877 / #896 / #883 / #1049 / #1108 / #964 / #1061 / #804 / #755 / #1005 / #1026 / #1101 / #1149 / #906 / #1047 / #1107 / #1128 / #1097 / #1100 / #1127 / #1130 / #1150 / #1151 / #1131 / #1133 / #1145 / #1137 / #1138 / #1147 / #1129 / #1146 / #1144)。issue 列表被当作 backlog 用,扫完即清空,这解释了为什么 open issues 这个指标在 pi-web 上不能当作社区活跃度的读数。
- 贡献结构在变化:Alex Yang(maintainer)17 个 commit 之外,本批有 8 位不同的外部贡献者,每人 1–4 个,全部直接对应具体 issue。「按 issue 认领」的贡献模式在这个仓库是可行的。
- 剩余 9 个 open issue 里已经出现非 bug 的方向性提案:#1158(settings 里渲染完整 skill 说明)、#1156(Intelligent-UI、交互式响应与版本化 artifact)、#1139 → #1154(CLI 子命令 version / update / doctor / status / stop / serve)、#1155(大于一个 256 KB chunk 的 HTML 文件预览)、#1157(Android Firefox 的完成音效 AudioContext 在两次提示音之间不释放)。从「把 Web UI 做稳」转向「补 CLI 与制品形态」。
- stars 24h +28,增速与上份持平(+23),属于稳定自然增长。
earendil-works/pi
AI agent 工具集:统一 LLM API、agent loop、TUI、coding agent CLI;TypeScript / Bun,可作为 pi extension 扩展;MIT。| stars: 113,800(上份 113,524,+276 / 24h) | open issues: 324(上份 307,+17) | 默认分支:
main| 最近 push: 2026-10-09T23:04:12Z | 主页: https://pi.dev
近 N 周 release 重点:
- 窗口期内无新 release(相对上次报告)。最近一个是 v1.1.0(2026-10-07T22:26:31Z)——配置 schema 化(#9880,breaking,theme schema 迁到
schemas/theme.schema.json)+ 打包兼容 + 定价元数据修正。
其他重要 commits / PRs(按重要性挑选):
eba8497durable 的三项能力一起落地 —feat(durable): nested tool calls, structured output, callers; storage errors end the Session(Mario Zechner, 2026-10-09):- 嵌套工具调用:
ToolExecutionApi.executeTool()以自己的 pi.tool task 运行另一个工具、由调用方持有、为 replay 安全重新挂接;程序侧的结果在调用方的NestedResultDoc里直到结算;pi.live.nestedTools能看到每次嵌套调用及它实际用的参数与摘要;TaskOptions.abandonOnRestart只中止「创建者仅在内存中等待过」的工作,这些工作在重启后会再跑一遍。 - 结构化输出:
structuredOutputSchema与structuredOutput走校验;没有 schema 的工具给程序的是「有界」输出(一个 text 就给字符串、一个 image 就给它自己、否则给列表);ToolExecutionResult.content更名为output;新增callers与modelTools决定谁能调某个工具。 - storage 错误终结 Session:任何 Storage 方法抛出的错误都会让 Session 失败并自我关闭,后续调用与等待以
SessionFailed拒绝,watch 以session_failed结束,Session.closed结算;Harness 里不做任何重试。删掉StorageRejected,改用StorageRequestError标记「只让本次调用失败的非法读」;Listener 与onReport的错误被隔离并上报。
- 嵌套工具调用:
42a3497read支持图片 —feat(durable): read returns images, optional Photon image processor(Mario Zechner, 2026-10-09):图片文件返回一个 image block(程序拿到ImageContent)加一条 info 诊断,取代此前的unsupported_image错误。限额取对话模型的inputLimits.images.resize,默认 2000×2000 像素 / base64 4.5 MB;无 processor 时 PNG / JPEG / GIF / WebP 在限额内不解码直接透传(字节限额在读文件之前检查,尺寸从文件头读),超限与 BMP 返回错误结果;带createCodingTools({ images })时按 EXIF 方向摆正、BMP 转 PNG 并缩放到限额内,ImageProcessor.prepare是 async。实现放在@earendil-works/pi-durable/images:createPhotonImages(wasm)基于@silvia-odwyer/photon0.3.3(web build),/images/node与/images/cloudflare加载 wasm,根入口与./tools入口永不触达(由check-entry-graphs强制)。图片必须整读:读的过程中变化的文件会重读一次,这与持续增长中的文本文件不同。不支持图片输入的模型会收到一条「它只看到占位符」的诊断。5a10492本地 issue triage 工具 —feat: add local issue triage tool in scripts/issues(Mario Zechner, 2026-10-09):用gh同步 issue,用 pi-durable agent 做初步分类(category、重复检测、摘要、p0/p1/none 建议),再起一个 Web UI 供人做决策。f1b2e77嵌套 git worktree 里的符号链接 AGENTS.md 现在会被加载 —fix(coding-agent): load symlinked AGENTS.md in nested git worktrees(David Brailovsky, 2026-10-09, fixes #10681)。根因是嵌套 worktree 的去重逻辑拿 context 文件的 realpath 与主仓那份比较,于是「软链到主仓副本」的 worktree AGENTS.md 被一并跳过;改为比较被遍历目录的 realpath 加文件名。- 未合并的外部 PR(2026-10-09):#10715 为 Qwen token plan 模型启用显式 context cache(@cfchan0318)、#10734
transformMessages里丢弃孤立的 tool result(@Sarik200809)、#10745 增加关闭鼠标光标重定位的选项(@GoodDingo)、#10722 搭建前端聊天界面基础框架(@Lvmuyue)。
社区讨论 / 行业方向:
- Pi Hits 1.0: Codemode Ships, and a Durable Substrate for Long-Running Agents(2026-10-02):把 v1.0 的三件事并列——原生 Codemode MCP 支持、virtual models、deferred tool loading,外加一个实验性的 Pi Durable 包,定位是「long-running agents 的 substrate」。
- What is the Pi coding agent, and how does it work with local models?(2026-10-02):第三方实测路径——Pi 1.0 于 10 月 1 日发布、内置 MCP 支持走 Codemode,而 Earendil 此前公开拒绝过 MCP;文章给出用 Ollama / llama.cpp 跑本地模型的具体做法。
- Pi coding agent pulls a 180 and adds MCP support(2026-10-02)与 Pi Coding Agent Reaches 1.0 Milestone with Strategic Pivot to MCP(2026-10-02):两篇英文二手报道都把 v1.0 定性为一次战略转向——从「拒绝 MCP」转为「通过 Codemode 内置 MCP」。两篇均为编辑简报性质,没有一手验证。
- Pi Coding Agent(1.0 实操指南)(2026-10-03):装 1.0、接已有模型账号、准备
AGENTS.md,含 provider 定价与限制的实话。 - discussions 侧窗口期内无新讨论(仓库 #194~#284 均为 2025-12 的老帖)。
信号观察:
- v1.0 之后 pi 的主线已经从 coding agent 移到 runtime substrate。本期 4 个 commit 里 3 个是 Mario Zechner,全部围绕
pi-durable:嵌套工具调用、结构化输出、图片read、以及用 durable agent 做 issue triage 本身。durable 不再只是「能 resume 的 session」,正在变成 agent 的执行模型(嵌套调用有归属、有 replay 安全重挂接、有结构化输出契约)。 - 三个设计决定值得单独指出,因为它们都在「宽松 vs 严格」这条线上选了严格:storage 报错直接终结 Session 且 Harness 里不重试;无 schema 的工具给程序的是有界输出而不是
content数组;abandonOnRestart只中止「创建者在内存里等过」的工作,其余的重启后重跑。共同点是把不确定性收敛在会话边界内,而不是让 Harness 猜。 - 与 opencode 同期的问题正好互补:opencode 的 #54220 / #54221 / #54222 抱怨 codemode 里的
execute/ MCP / plugin 调用没有超时、不能移后台、中断丢结果;pi 本期给 durable 加的是调用归属、结果持有、replay 重挂接。同一周内,一个在给长时调用补边界,一个在给长时会话补可恢复性。 - open issues 从 307 涨到 324(+17),与新贡献者自动关闭机制同期发生——总量上升可能来自自动化标签重开(#10748 codemode abort/timeout 等一批 issue 在 10-09 被批量处理)。
- stars 24h +276,增速较上份的 +338 略有回落。
vectorize-io/hindsight
Agent 记忆系统:retain / recall / reflect 三大能力 + 本地嵌入式 hermes / embed,可作 MCP server、CLI、REST API、也可作为 Hermes / OpenClaw / Cursor / Paperclip / Grok Bot 的可插拔记忆层;MIT。| stars: 47,700(上份 47,285,+415 / 24h,本窗口增速最快) | open issues: 179(上份 167,+12) | 默认分支:
main| 最近 push: 2026-10-09T18:39:32Z | 主页: https://hindsight.vectorize.io/
近 N 周 release 重点:
- 窗口期内无新 release(相对上次报告)。最近一个是 v0.10.3(2026-10-08T15:47:49Z),横跨约 200 个 PR 的累计 release。
其他重要 commits / PRs(按重要性挑选):
d29b842删除整个 agent-sdk 包(breaking)—refactor(openclaw)!: remove the agent-sdk package and the agent_knowledge_* tools(#5462, @nicoloboschi, 2026-10-09)。删掉@vectorize-io/hindsight-agent-sdk与 openclaw 由它支撑的agent_knowledge_*工具,openclaw 只保留 auto-recall 与 auto-retain。PR 写明了删除清单(hindsight-tools/目录、scripts/release-tool.sh及其测试、release-tool.yml、test-hindsight-agent-sdkCI job、openclaw CI 里的 SDK 构建步骤、lint.sh 与 lockfile-check 的特例、根 workspace 条目,以及 openclaw 侧的 tool 注册、resolveBankIdForKnowledgeTools、knowledgeToolDetails、registerTool/PluginToolContext类型、manifest 的contracts.tools、README 与文档章节)。enableKnowledgeTools保留在 manifest schema 里但标为 deprecated 且被忽略(与daemonIdleTimeout同等处理),理由是根 schema 是additionalProperties: false,直接删键会让现存 OpenClaw 配置被拒。PR 自述的拆除理由:SDK 拆出来本是为了跨 harness 复用,但 openclaw 是唯一使用者;而这些知识工具一直没离开 alpha——要enableKnowledgeTools显式开启、只有 self-driving-agents CLI 会去开、自己另建 API client、并且忽略插件的 recall 设置(#5057)。8caa109tag scope 现在对整库操作一律拒绝 —fix(api): refuse tag-scoped callers on operations answered for the whole bank(#5463, @cdbartholomew, 2026-10-09)。此前只有 export / config / clear 这几个整库写操作会拒绝 scope 限定的调用方,其它读与写仍会越过 scope、替这类调用方返回整库结果。现在被拒(403)的清单:读——bank 统计与新鲜度、操作列表、webhook 及其 deliveries(delivery payload 里带记忆内容)、审计日志与 LLM request log 及其 stats(保存着每个调用方的请求 payload 与 prompt,此前只靠 bank-profile 读权限放行);写——bank 别名(创建 / 设主 / 删除)、取消 / 重试 / 删除 operation、set / merge(配置类)。同时修正了 scoped caller 下的 reflect,并加了一条守卫,让新的 bank 操作不能再悄悄跳过 scope。44d5340Grok Bot 博客上线 —blog: Grok Bot Can Read What Your Other AI Tools Already Learned(#5461, @benfrank241, 2026-10-09),发布在/blog/2026/10/09/grok-bot-agent-memory。d144bb7更正 Grok Bot 的市场状态 —docs(grok-bot): the marketplace listing is not approved yet(#5465, 2026-10-09)。同一个功能,PR 标题说「已发布」,紧随其后的 PR 就把「marketplace listing 尚未获批」写进文档。efc1f32UI 修掉无效按钮 —fix(ui): hide the no-op '+field' button at the entity-label root level(#5450, @cdbartholomew, 2026-10-09)eb24aa8博客版式 —docs(blog): plain post titles with a description subtitle and byline row(#5460, @nicoloboschi, 2026-10-09)
社区讨论 / 行业方向:
- Grok Bot Can Read What Your Other AI Tools Already Learned(官方博客,2026-10-09,16 分钟阅读): Ben Bartholomew 写的,切入点是「你在一个仓库里用 Claude Code 干了三周,它知道重试逻辑为什么长这样、八月哪次迁移搞挂了 staging、你不想再加一层抽象;然后你打开一个 Grok Bot 起草 release note,只能从零开始,于是你把同样的背景又解释一遍」。文章明确围绕跨工具读取组织(Claude Code、ChatGPT、Hermes、OpenClaw 写的记忆,Grok Bot 可以直接读),而不是 per-product 的记忆功能;目录里有「Bot 能读到什么」「Bot 如何找到对的 bank」「只有一个方向」「grant 实际覆盖什么」「为什么这里没有 hooks」「插件不会做什么」等小节。PR #5461 的描述还记了一条评审反馈:第一版主打定时例程与 bot-to-bot handoff,被指出「角度不对、标题没点名产品」,于是改成标题带 Grok Bot、主线换成跨工具读取。
- Hindsight 官方 Grok Bot 集成页: 定位是「Long-term memory for Grok Bot and Cursor, shared across your Bots and your other AI tools」,并注明每个 Bot 保留自己的会话与习得的上下文,一个 Bot 看不到另一个 Bot 推出来的东西,定时例程从自己的上下文开始。
- Hindsight: 44 points on the same 20B backbone, from the memory layer(2026-10-02): 一个带 narrated explainer 的评测向文章,主张在同一 20B backbone 上、只换记忆层能拿到 +44 分;文章声明所有数字与图都出自该文自身。
- Before and After Adding Memory to Our AI Agent(2026-10-09): 开发者第一手记录——周末把 Hindsight 接进一个销售 agent 之后的实际感受。
- I Tested Hindsight, the Open-Source Memory Layer for Coding Agents: 又一篇第三方上手实测。
- 窗口期内的 issue 侧信号:结构化输出仍是 provider 兼容性的破口(#5472
claude-codeprovider 的 structured output 仍用裸json.loads解析,#5471 mental-model 的 delta 回复被 provider 解析成 list 就报错,#5473 reprocess 会用 reprocess 时间给未标日期的文档编日期,根因指向_build_retain_params);recall 的可观测性(#5470 MCP recall tool 无法返回 source chunks,bank.recall_include_chunks无效;#5294 建议加一个相对 top 结果的分数下限来裁掉未校准的尾部);容量与调度(#4130 consolidation 操作会占住预留的 LLM slot 数小时,导致 retain 抽取挨饿);provider 扩张(#5468 请求支持 Sign in with ChatGPT 的 plan 用量流程作为chatgpt-planprovider)。
信号观察:
- #5462 与 #5463 是两条相反方向的动作,但共享同一个判断:不交付一半的东西。前者删掉一个「一直没离开 alpha、且唯一使用者只有一个」的集成面;后者把「授权范围覆盖不到的操作」从散落在各处变成一张显式的 403 清单,并加了守卫防止以后再漏。两者都指向「能力要么完整交付要么删掉,权限要么覆盖完整要么拒绝」。
- hindsight 的宿主名单在持续扩张,且扩张方式统一是「作为可插拔记忆层」而非「fork」:Hermes(已从核心树外移到 plugin catalog)、Paperclip、Grok Bot、Cursor、OpenClaw。博客本身就在按宿主写文章(hermes-plugin-what-changed、paperclip-agent-memory、grok-bot-agent-memory)。
- 博客发布节奏稳定在每个宿主一篇,且带一个可复用的叙事模板:「这个宿主能读到其它工具已经学过的东西」。#5460 专门改了版式(纯标题 + 描述副标题 + byline 行),说明这类文章是被当作常规栏目在做。
- #5461(宣布 Grok Bot)与 #5465(市场 listing 未获批)在同一天,说明集成可用与上架审核是两条独立的时间线,文档侧已经在补这个区分。
- stars 24h +415,仍是六个仓库里增速最快的;open issues +12。
anomalyco/opencode
开源 coding agent:TypeScript / Bun,单仓多 target(CLI / Desktop / TUI / ACP server / Web);MIT;Zen 为其模型网关。| stars: 212,390(上份 212,200,+190 / 24h) | open issues: 6,163(上份 6,211,−48) | 默认分支:
dev| 最近 push: 2026-10-10T00:25:06Z | 主页: https://opencode.ai
近 N 周 release 重点:
- 窗口期内无新 release(相对上次报告)。最近一个是 v1.18.35(2026-10-06T20:18:39Z):新增面向 agent 可读的 stats 的 canonical redirects 与 JSON / Markdown 数据格式;修 xAI tool result 图片(@ai-sdk/xai 升到 3.0.139)。
其他重要 commits / PRs(按重要性挑选):
055d95bTUI 高亮 C++ module interface 文件 —fix(tui): highlight C++ module interface files(#53852 / #53853, @opencode-agent[bot], 2026-10-09)b2a3926接住 Copilot 交错的 reasoning_opaque 值 —fix(core): accept interleaved Copilot reasoning_opaque values(#54207, @Aiden Cline, 2026-10-09)- #54208 Copilot 的 Gemini fallback 改走 chat completions —
fix(core): route Copilot Gemini fallback to chat completions(@rekram1-node, 2026-10-09)。这是一条典型的「文档/元数据与实际行为不符」:#51024 把gemini-*发到/responses,但 Copilot 当前的 Gemini 模型只接受/chat/completions——gemini-3.7-flash与gemini-3.8-flash在/chat/completions返回 200,在/responses返回 400unsupported_api_for_model,而/models也只声明了 chat。修法是从 Responses fallback 里去掉gemini-前缀;Grok 与 MAI Code 保留在/responses(实测 chat 返回同样的 400)。有/models元数据时的路径不变。 - #53821 全局广播 wellknown 更新并给 HTTP 设上界 —
fix(core): broadcast wellknown updates globally and bound HTTP timeouts(@kitlangton, 2026-10-09)。WellKnown是跨所有 projectLocation共享的全局服务,#53667 让它的 manifest 与远程配置在瞬时刷新失败时也能从KV恢复,本 PR 补两个缺口:一是 refresh / add / remove 发的WellKnown.Event.Updated没带{ global: true },只有触发更新的那个 Location 重载,其它开着的 Location 停留在旧 manifest;二是inspect与resolveEntry没有请求 deadline,VPN / WARP 切换时挂死的 socket 会一直占着WellKnown的锁与Config的重载锁,直到 OS socket 超时(最长 6 分钟)才回退。 - #54219 SDK 层让 host plugin 先于恢复执行并加固 workerd 默认值 —
feat(sdk): seed host plugins before recovery and harden workerd defaults(@kitlangton, 2026-10-09)。@opencode/sdk/workerd/effect的嵌入式消费者被迫在Layer.tap与instances.configure里注册两次 model plugin,因为EmbeddedHost.CreateOptions与OpenCodeWorkerd.CreateOptions没有plugins选项、且在Layer.tap之前就启动了resumeSuspendedSessions;另外ModelHandler与GenerateHandler不等Plugin.awaitActivation,冷启动 Location 时调用方只能轮询model.list或plugin.list。workerd profile 还要求手工覆盖三项默认:关掉127.0.0.1本地 provider 轮询、启用 portable shell scanner、把宿主process.env的 key 从远程 workspace shell 里清掉。 - #53822 TUI 在保存的会话模型不可用时仍保留选择 —
fix(tui): retain unavailable saved session model selection(@kitlangton, 2026-10-09) - 未合并的外部 PR(2026-09-09 前后密集):#48222
feat(core): add brave web search(@jonathansampson)、#48194 绝对权限规则与 worktree 相对模式匹配 (@czk)、#48179 / #48177 移动端重连后会话重同步与 Windows 子路径下的 Home 会话 (@titaniummachine1)、#48167 显式请求的--help打到 stdout (@giner)、#48161 客户端在流从未连上时退避重连 (@holny)。
社区讨论 / 行业方向:
- 仓库 Discussions 当前不可用(
gh api repos/anomalyco/opencode/discussions取回失败),本节以 issue 与外部来源为准。 - codemode 的边界问题集中爆发(kitlangton,2026-10-09~10,全部基于
0.0.0-dev-20788/ V2 /v2@8eff035bf4,macOS Darwin 27 arm64):- #54220 Code Mode 的
execute与 plugin tool call 在 V2 里没有时限,脚本 await 一个慢 plugin 工具会让 session 一直忙、只显示转圈,直到用户中断。MCP 调用倒有限制,但默认是 12 小时。 报告者的实测:依次 await 五个各约 3.5 分钟的调用,总共跑了 16.5 分钟才被中断;「没有卡死,只是没有任何东西给这次调用设上界、也没显示它在做什么」。 - #54222
execute被中断时,模型只拿到Tool execution interrupted,已经完成的嵌套调用结果与脚本日志全被丢弃,尽管存储的 tool part 已把那些调用记为 completed。 - #54221 目前只有
shell与subagent能移后台,长跑的execute/ MCP / plugin 调用不行——按「移到后台」的键无反应,提示也从不出现。 - 配套 #54198
chore: upgrade Effect to 4.0.1。
- #54220 Code Mode 的
- OpenCode Zen(第三方模型路由表): 第三方站点在按 offer 维度列出 Zen 上的模型,含
deepseek-v4-flash-free等免费条目与 1M 上下文 / 128K 输出标注。 - opencode is free until the model rotates out(2026-07-25,更新于 2026-10-07): 第三方长文,主题是 Zen 免费模型的轮换机制——免费列表本身就是会变的,「今天能用不代表明天能用」。
- 蚂蚁百灵 Ling-3.1-flash 上架 OpenCode(2026-10-03,中文): 蚂蚁 inclusionAI 于 9 月 30 日发布的稀疏 MoE(Ling-3.1-flash,560B 总参数 / 25B 激活)以
ling-3.1-flash-free模型 ID 在 Zen 限时免费开放,输入 / 输出 / 缓存读取价格均为零。 - 窗口期内未检索到新的 HN / InfoQ / Latent Space 级讨论。
信号观察:
- 24h 内只有 2 个 commit 落到主线,是六个仓库里最安静的一个;但活跃度转移到了别处:kitlangton 一个人同时是合并者(#53821 / #53822 / #54219)、报告者(#54220 / #54221 / #54222)与依赖升级发起者(#54198)。这是「核心维护者把时间从写 feature 转到给已有 feature 划边界」的形态。
- 三条 codemode 问题指向同一件事:长时工具调用缺少生命周期管理——没有超时、不能移后台、中断时丢弃已完成的部分结果。三者都发生在 V2(
v2分支 / dev-20788),而 MCP 那条路径已经有上限(尽管默认 12 小时,实际上等于没有)。同一个概念「一个可能跑很久的调用」在 shell / subagent / MCP / plugin / codemode-execute 五个入口上各有不同的生命周期语义。 - provider 兼容性依然是 bug 的主要来源。#54208 的形态非常典型:
/models元数据声明支持一种 API,实际服务端只支持另一种,fallback 分支按模型 ID 字符串猜协议,猜错就是 400;Grok 与 MAI Code 之所以还留在/responses,也是因为同样实测出来的。这与上份报告里 pi 的 Mistral 超时语义、Claude 5.5 定价、hindsight 的 Oracle 时区属同一类。 - 全局单例服务的失效域问题(#53821)值得单独记:
WellKnown是跨 project 共享的,一个没设 deadline 的 socket 能把WellKnown锁和Config重载锁一起卡住最长 6 分钟,且事件不广播导致其它 Location 静默停留在旧 manifest——两个方向(锁的持有时长、状态变更的传播范围)都是「默认值不安全」。 - stars 24h +190(上份是 −9),open issues −48。Zen 免费模型列表仍在轮换(第三方文章 10-07 更新,10-03 有新模型上线),免费层带来的可用性波动与上份报告观察一致。
yxc023/yxc023.github.io
个人技术博客(Astro);本仓库作为 daily-research 报告自动同步的目标。| stars: 1 | open issues: 27 | 默认分支:
master| 最近 push: 2026-10-09T00:34:24Z | 主页: https://yxc023.github.io
近 N 周 release 重点:
- 窗口期内无 release(个人博客仓库不发布 release)。
其他重要 commits / PRs:
67943f6自动同步昨日报告 —auto(reports): 同步 daily-research 2026-10-09(@yxc023, 2026-10-09T00:34:19Z)。本期唯一 commit,是scripts/deploy-blog.sh在上次运行末尾留下的产物。
社区讨论 / 行业方向:
- 该仓库为报告同步目标,不参与讨论。
信号观察:
- stars 1 / open issues 27 / forks 0 的结构意味着这里的 27 个 open issue 不是社区 backlog,而是 site 侧的内容任务;本报告不将其纳入活跃度判断。
- 唯一信号是提交节奏稳定在每天 08:30 前后一次,与自动化调度一致。
跨项目观察
-
「接收方会替发送方做什么决定」正在被逐条写进协议与实现,而不是留给实现自由裁量。 ACP #2333 把 9 个字段点位的宽容解析改成严格
-32602,判据是「fallback 意味着信息更少时才宽容」;hindsight #5463 把 tag scope 覆盖不到的整库操作列成显式 403 清单并加守卫;pi 的 durable 让 storage 报错直接终结 Session 且 Harness 不重试。三者的共同点:未覆盖 / 不确定的情况要变成错误,而不是静默降级到一个「也说得通」的行为。 -
agent 的工具调用正在从「同步函数调用」向「有生命周期的任务」迁移,但各家的完成度差得很远。 pi 的 durable 已经有完整的答案:嵌套调用由调用方持有、结果先落在
NestedResultDoc、为 replay 安全重新挂接、abandonOnRestart只中止内存里等过的工作、pi.live.nestedTools可观测。opencode 同期被 #54220 / #54221 / #54222 指控的是相反的三个缺口:没有超时、不能移后台、中断丢已完成结果。ACP 则在协议层给出第三条路——notice明确「Agent 必须表现得像这条 notice 没被收到」,而compaction明确「首个 update 固定时间线位置,后续 patch 原位更新」。同一周里,一个项目在给长时调用建归属,一个项目在给长时调用补边界,一个项目在给事件定义不确定性。 -
上下文压缩(compaction)刚刚跨过协议门槛,且两个协议层几乎同时动手。 ACP 把 Session Compaction RFD 定为 Completed 并进入正式 schema,同一批 PR 还给出了 pi-web 侧的对应动作:
47d8b9a让 Web UI 的 compaction summary 默认折叠,与 pi 的 TUI 行为一致,0a38de9让 Stop 按钮避开 compaction 落点的那一格。协议定语义、宿主跟进默认行为,这条链路本期第一次完整可见。 -
provider / 模型兼容性的破口没有减少,且形态高度一致:元数据声明的能力与实际服务端行为不符。 opencode #54208(
/models说 Gemini 走/responses,实际只收/chat/completions)、hindsight #5472(claude-codeprovider 的 structured output 仍用裸json.loads)、hindsight #5471(provider 把 delta 回复解析成 list 就报错)、上期的 pi Mistral 超时语义与 Claude 5.5 定价。这类问题无法靠读文档消除,只能靠真实调用打出来,因此它们会在每个项目里反复以不同形态出现。 -
文档与现实之间的时间差,本周两次被 PR 追平。 hindsight #5461 在同一天宣布 Grok Bot 集成并发了博客(
/blog/2026/10/09/grok-bot-agent-memory),#5465 随后把「marketplace listing 尚未获批」写进文档;opencode 的免费模型列表在上份报告里被第三方文章描述为「会轮换」,10-03 就有新模型以限时免费 ID 上架。集成可用、文档发布、上架审核是三条独立时间线,跟进这些项目时不能把它们合并成一个「已发布」。 -
「只交付一半」正在被主动清除。 hindsight 删掉一个从未离开 alpha 的集成面(#5462)而不是留着它慢慢修,同时保留配置键为 deprecated-ignored 以免现存配置被拒;opencode 把超时上限从「MCP 默认 12 小时」这种等于没有的值列为待修;ACP 把三个失败的 RFD 路径之一(Next Edit Suggestions)明确标成 To be removed 而不是继续挂着。收敛本身就是工作量。
元信息
- 报告生成时间: 2026-10-10T00:30:28Z
- 基准时间: 2026-09-08T09:23:29Z(按 spec 读取自上次报告
reports/latest.md的基准时间:字段) - 扫描窗口: 2026-09-08T09:23:29Z → 2026-10-10T00:30:28Z(约 31.6 天)
- 数据源: GitHub API(gh CLI)+ mmx web search
- API rate limit 剩余: 5000
评论