2026 2026年10月13日 32 min · 9.4k chars by yxc023

GitHub 调研周报 2026-10-13

扫描窗口:2026-09-08T09:23:29Z → 2026-10-13T00:33:30Z(共 34.8 天)| 基准来源:上次报告 2026-10-12

2026-10-13 GitHub 调研周报

扫描窗口:2026-09-08T09:23:29Z → 2026-10-13T00:33:30Z(共 34.8 天)| 基准来源:上次报告 2026-10-12

仓库范围:config/repos.yaml 中 6 个项目。基准时间字段自 2026-09-08 起未变,因此窗口逐日变宽,本期新增内容主要落在 10-12 00:36 之后的 24 小时。本期最重要的一件事是 ACP 把 Client-Provided System Prompt(#1237)合进协议主线——这份 RFD 从 5 月 18 日开到现在,落地意味着 ACP 补上了它作为「唯一没有 system prompt 机制的 agent 协议」这个短板,配套的 unstable schema PR #2361 当天一起合入。第二件是 pi v1.2.0(10-12 23:03)一边加功能一边砍架构:加了 per-key OpenRouter 模型列表、$schema 配置 schema、远程剪贴板 OSC 52;同时删掉了从未发布的 experimental server / client / plugin 整栈,并移除 @earendil-works/chord 依赖,发布后 34 分钟内连落 4 个 chord 修复 commit。**第三件是 opencode v2.0.27(10-12 04:16 打的 tag)**把 worktree 变成 Code Mode 的内建工具(worktree_create/list/remove),并给 pair --remote 加了「首次启用公网暴露前必须确认」。第四件是 opencode 那条 plan mode 的 SECURITY 报告以最坏的方式收尾:#54632 被 bot 以「duplicate of #53955」关闭,而真正的修复 PR #54165 从 10-09 挂到现在仍未合。第五件是 hindsight 在 24 小时内连发 18 个 integration release,其中 openclaw 直接跳到 v1.0.0,改用 OpenClaw 2026.10 的 provider-neutral providerRuntime 而不是此前那份 +752 行的伪 file-shaped 适配层。

本期速览

  • agentclientprotocol/agent-client-protocol: #1237「Client-Provided System Prompt」RFD 于 10-12 10:12 合入(作者 @wpfleger96,开于 2026-05-18)。提案理由写得很直白:ACP 是当前唯一没有 system prompt 机制的 agent 协议——MCP、OpenAI、Anthropic Messages API 都有,每家 ACP 实现都各自造了非标准变通(_meta 扩展、user-message 注入、文件系统中转)。方案是 sessionCapabilities.systemPrompt 在 initialize 时广告,session/new 上挂可选 systemPrompt: ContentBlock[],配 systemPromptMode: append | replace。配套的 feat(unstable): add client system prompt schema(#2361)同一天合入。

  • earendil-works/pi: v1.2.0(10-12 23:03)在 Removed 段删掉了从未进入发布包的 experimental server / client / plugin 栈(src/experimental、src/cli/experimental),连同它依赖的 @earendil-works/pi-client、pi-protocol、pi-server 三个包一起停发,并移除 @earendil-works/chord 依赖。发布后 34 分钟内连落 4 个 chord 修复:facet root 必须在 import 任何模块前注册完、macOS 上进程锁 socket 路径必须留在 sun_path 长度内、已关闭的 link 不得保留连接、Nix 包里同时去掉 chord 与 esbuild。

  • earendil-works/pi: v1.2.0 的功能面集中在「把配置和远程会话补齐」:per-key OpenRouter 模型列表(按 key 过滤出可用模型,连同该 key 的 context size / max output / 价格一起落盘离线可用,含 models.json 里设的 regional endpoint);发布 $schema 到 https://pi.dev/schemas/*.schema.json(settings / models / keybindings / themes 四个,这是 breaking——theme schema 搬家,启动期加载的 theme 现在也走同一套校验,$schema 引用要改、可复用颜色要挪到 vars);PI_CLIPBOARD_OSC52=1 让复制内容经 OSC 52 送到远端客户端剪贴板(多路复用器从另一台机器 attach、远端 IDE daemon 这类检测不到远程会话的场景)。

  • anomalyco/opencode: v2.0.27(tag 10-12 04:16)把 git worktree 收成 Code Mode 内建工具——worktree_create / worktree_list / worktree_remove,删 worktree 走普通 edit approval,force: true 可丢弃改动和未跟踪文件(#53981)。同版 opencode pair --remote 首次开启公网暴露前会警告并要求确认,非交互场景需显式 --yes(#54561)。另外 ChatGPT OAuth 对 gpt-6.1-sol / -fast 的输入上限提到 500,000 tokens(#54668),Code Mode 的 fetch 禁掉 file://(#54510)。

  • anomalyco/opencode: #54632(SECURITY: plan mode is advisory, not enforced on V2)于 10-12 21:56 被关闭,标签是 pending close + triaging,bot 的措辞是「没等到回复,按之前说的当作 #53955 的 duplicate 关掉」。但 #53955 的修复 PR #54165 自 10-09 提交至今仍 open 未合——也就是说 plan mode 下 shell 无规则、默认放行这个洞在报告关闭后依然存在。

  • anomalyco/opencode: 24 小时内新增 174 条 issue,其中几条指向 v2 迁移期的结构性缺口:#54938 官方 VS Code 扩展 0.0.13 仍在 spawn 已被 v2 删除的 opencode --port;#54940 非 Git 大目录的文件索引封顶 100,000 条,刷新后 26,216 个路径凭空消失、26,216 个凭空出现,磁盘文件未变;#54974 长挂起的 Promise plugin command 在约 5 分钟后被客户端 transport 丢弃,服务端 executor 变成孤儿继续跑;#54935 task tool 起的每个 sub-agent 都新建 session、拿自己的 cache key,导致并行子 agent 的重复计费可能高于单个 agent。

  • vectorize-io/hindsight: 24 小时内 18 个 integration release(openclaw v1.0.0、hermes v1.2.2、coding-agents v0.8.1、paperclip v0.4.2、opencode v0.2.9、cursor v0.2.1、devin-desktop v0.2.1、obsidian v0.3.1、agentcore v0.1.3、n8n v0.1.4、flowise v0.1.1、eve v0.3.1、meta-muse v0.1.1、vapi v0.1.1、smolagents v0.1.2、pipecat v0.1.2、dify v0.1.2、composio v0.1.1)。其中 openclaw v1.0.0 放弃此前那份「伪造 file-shaped legacy runtime」的 +752 行方案,改注册 OpenClaw 2026.10 的 providerRuntime(#5535)。

  • vectorize-io/hindsight: openclaw 的 memory provider 被刻意做窄:不做 Active Memory 候选(会在 autoRecall 之上重复召回)、不做 pre-compaction flush(每轮都已 retain);search / get 只答操作者本人和 agent owner 的 private session,群会话、无 audience 的 session、host authority 一律报错而不返回空结果;只有当 bank 完全由 agent 决定(agentBankMap / 静态 bank / dynamicBankGranularity: ["agent"])时才允许 search,按 user 或 channel 分库时直接拒绝而不是猜。实测验证跑在真实 OpenClaw 2026.10.2 上,memory.status 从 “memory plugin unavailable” 变成 {"providerId":"hindsight-openclaw","status":"ready"}。

  • agegr/pi-web: 主分支自 10-11 14:04 起约 34 小时无提交,v0.12.0(10-11)之后无新 release。窗口内唯一显著动作是 #1210(@acniray,+3151 / −156,已关闭未合并):把扩展创建的嵌套子 session 与交互式扩展 UI 桥接进 Pi Web,作者在正文里明确回应了 #1041 的反对意见——只做「检视与导航」,不把内置 subagent 模型重新定义到另一个扩展的内部实现上。同期 issue 区出现两篇成体系的分析(均 @brynne8):#1199 指出 input_files 的 8 文件 / 512 KB 上限相对一个刚启动的子 session 太大,模型填满就能让子 agent 在第一次 tool call 之前先触发自己的 compaction;#1202 讨论「subagent 的 worktree 是否该比它的 run 活得久」。

  • earendil-works/pi(社区): 新 Discussion #10841 来自一个材料学研究包 MatPilot 的维护者,问的是「一次性 pre-turn 路由决策该挂在哪个 seam」——用 before_agent_start 做每轮廉价分类(<100ms 的 Python sidecar)来决定走哪条研究路径,但不确定这个 hook 会不会在 follow-up、compaction 之后、retry 时重复触发。这是 v1.2.0 刚把 before_agent_start 语义改成 union 之后立刻出现的真实使用问题。

各仓库详情

anomalyco/opencode

开源 coding agent:TypeScript / Bun,单仓多 target(CLI / Desktop / TUI / ACP server / Web);MIT。| stars: 212,956(上份 212,734,+222 / 24h) | open issues(含 PR): 4,146(上份 3,996,+150;其中 open issues 3,323、open PRs 823) | 默认分支: dev | 最近 push: 2026-10-13T00:27:17Z | 主页: https://opencode.ai

近 N 周 release 重点:

GitHub Releases 侧最新仍是 v1.19.0(10-11 01:39)——即上份报告记录的那一版,把 opencode upgrade --major 和 /update 变成通往 OpenCode 2 的唯一通道并关闭自动更新。但 2.x 线不发布 GitHub Release,只打 tag,release notes 写在仓库 CHANGELOG.md 里,本段从该文件提取。

  • v2.0.27(tag 2026-10-12T04:16:59Z)— 内建 worktree 工具、更安全的远程配对、可安装 Web 应用
    • Code Mode 新增 opencode.worktree_create / worktree_list / worktree_remove;删 worktree 需要 edit 审批,force: true 丢弃已修改与未跟踪文件(#53981)
    • opencode pair --remote 首次启用时明确警告会把服务器暴露到公网并要求确认,非交互用 --yes(#54561)
    • Chrome / Edge 可直接 Install Web 应用,包括部署在带 cookie 认证的反向代理后面(#53905)
    • 目录已不存在的项目自动归档隐藏,重新打开目录即恢复(#54354)
    • Desktop / TUI 时间线现在会直接显示发生在模型步骤之前或之间的执行错误,不再无声结束(#53826)
    • ChatGPT OAuth 对 gpt-6.1-sol 与 gpt-6.1-sol-fast 的输入上限提到 500,000 tokens(#54668)
    • 新增 Vertex AI 的 Interactions 与 Mistral 路线(#54175、#54058);Code Mode 的 fetch 禁用 file://(#54510)
    • 完整 changelog: https://github.com/anomalyco/opencode/blob/dev/CHANGELOG.md

其他重要 commits / PRs(10-12 00:36 之后,按重要性挑选):

  • 5673bfa 项目(核心) — feat(core): add request body encoding setting (@rekram1-node, 10-12 23:17):新增 encoding("zstd" | "gzip" | "none")压缩 HTTP 请求体,可设在 provider / model / variant 上,最具体者胜出;用 ChatGPT 登录时 OpenAI 默认 "zstd",其余 provider 仍发纯 JSON。背景是 ChatGPT 登录下任何未压缩请求体超过 ~1 MiB 就会 503 upstream connect error 且重发同样失败,token-sharing 登录被钉在 HTTP 上最容易踩到(#54664,基于 @esafak 的 #54570,后者至今 open 未合)
  • d46588f 项目(CLI) — feat(cli): publish and upgrade official WinGet packages (@Filip, 10-12 23:03) 配套 039eb85 fix(cli): install the native binary on Windows ARM64(#54955)、df63a72 feat(console): offer the Windows ARM64 desktop download(#54971)、854b3bb fix(desktop): bundle arm64 binaries for windows arm(#54689):Windows 侧四条 commit 连成一条完整的分发链
  • a22754f 项目(核心) — fix(core): support provider-level compatibility and migrate setCacheKey (@rekram1-node, 10-12 20:54):compatibility 以前只能设在 model 上,LiteLLM / relay 之类多模型自定义 provider 得在每个模型上重复 supportsPromptCacheKey,写在 provider 上会被配置解码静默丢弃;V1 的 options.setCacheKey 在 V2 里是死设置,迁移时被抄进 provider settings 而没有任何东西读它,依赖它的配置无声丢失 prompt_cache_key 行为(#45113)
  • 2bf145b / 22326d4 / c57c448 项目(TUI + Console) — 更新后展示 release highlights(#54969)、把 /changelog 挪到独立 worker 服务(#54906)、Console 在 /changelog 渲染 CHANGELOG.md(#54902):把「release notes」这条信息从 GitHub Release 搬到产品内的一个独立端点上
  • 1438073 项目(插件) — fix(plugin): return Promise tool throws as tool failures(#54913):插件里 Promise 型工具抛错此前不走 tool failure 通道
  • 80fb31e 项目(VS Code) — fix(vscode): launch the V2 CLI without --port(#49084):与 #54938 指向同一个迁移缺口,仓库侧已补,扩展侧仍停在 spawn --port
  • e41e7e9 / b9ca4d2 / a349618 项目(重构 + 基础设施) — refactor(ai): rename OpenCodeZen provider to OpenCode(#54767)、refactor(console): remove legacy database from Console(#54585)、chore(infra): remove legacy Console Stripe products, prices and coupons(#54740):Console 侧一次性清掉旧数据库与旧计费产品,provider 品牌统一
  • 0cb4347 fix(core): preserve mixed line endings in edit tool(#53166)、5683367 fix(core): send unknown v1 openai-compatible model options in the request body(#54694)、7bac892 fix(core): stop listing Azure resources at startup(#54870)
  • 67f5c21 fix(update): return 503 instead of 1101 when D1 is overloaded(@opencode-agent[bot], 10-13 00:27):自更新通道刚切成唯一通道后的第一处加固——D1 被打满时用标准 503 而不是自定义码

社区讨论 / 行业方向:

信号观察:

  • 1.x 的 GitHub Release 与 2.x 的 tag + CHANGELOG.md 已经形成两条并行的发版叙事:v1.19.0 之后 1.x 线实质冻结,2.x 每天一个 tag,release notes 从 Release 面板迁移到产品内的 /changelog 端点。
  • plan mode 的 shell 放行问题在报告被关闭后仍未修复(#54165 open)。#54632 的关闭理由(duplicate)是技术判断,但修复 PR 仍挂在同一个人手上——这条线的净变化是「可见度下降、风险不变」。
  • v2 迁移期的缺口集中在分发与集成层而非 agent 本体:VS Code 扩展、WinGet、Windows ARM64、--port 标志移除、第三方 provider 的配置兼容性,逐条对应一个「V1 能用 V2 不能用」的具体场景。
  • 24 小时 174 条新 issue 的量级下,出现多条可复现的定量报告(#54940 给出 26,216 条路径消失的具体数字与 fixture,#54935 直接对比 cache key 重复计费),说明报告者在往可证伪的方向写。

earendil-works/pi

AI agent 工具集:统一 LLM API、agent loop、TUI、coding agent CLI;TypeScript / Bun,可作为 pi extension 扩展;MIT。| stars: 114,609(上份 114,318,+291 / 24h) | open issues(含 PR): 321(上份 321,持平;其中 open issues 239、open PRs 82) | 默认分支: main | 最近 push: 2026-10-12T23:37:23Z | 主页: https://pi.dev

近 N 周 release 重点:

  • v1.2.0(2026-10-12T23:03:53Z)— per-key OpenRouter 模型列表、发布配置 schema、远程剪贴板、codemode 改进;同时砍掉未发布的 experimental 栈
    • 新功能:per-key OpenRouter model lists——带着 OpenRouter key 时,Pi 只列出该 key 有权使用的模型,并附带该 key 的 context size、max output 与价格,含 models.json 里设为 base URL 的 regional endpoint,列表落盘后可离线使用(#10353、#10672)
    • 新功能 / breaking:settings.json、models.json、keybindings、themes 全部加 $schema,schema 发布在 https://pi.dev/schemas/*.schema.json;theme schema 迁到 https://pi.dev/schemas/theme.schema.json,启动期加载的 theme 现在和后续 reload 走同一套校验,$schema 引用要改、可复用颜色挪到 vars、不支持的 metadata 要删(#9880、#10751)
    • 新功能 / breaking:before_agent_start 现在也对 pi.sendMessage(..., { triggerTurn: true }) 触发的 run 触发,BeforeAgentStartEvent 改为按 messageType 判别联合:"user" 带 prompt 与 images,"custom" 带起始 message 而无 prompt。只该对用户 prompt 起作用的 handler 必须自己检查 event.messageType === "user"(#10267、#5581、#10739)
    • 新功能 / breaking:session 在 run 启动期间(含 before_agent_start handler 执行期间)就算 busy——ctx.isIdle() 为 false,pi.sendMessage() 排进正在启动的 run 而不是另起一个然后以 “Agent is already processing” 失败,pi.sendUserMessage() 强制要求 deliverAs
    • 新功能 / breaking:pi mcp list --json 对提供资源的 server 报 resources: true 而不是资源计数;Pi 不再在连接时列出资源(#10526)
    • 新功能:PI_CLIPBOARD_OSC52=1 在本地剪贴板写入之后用 OSC 52 把内容送到终端,覆盖检测不到远程会话的场景(#10826、#10835、#10114)
    • 新功能:codemode 工具声明把整数、最小/最大值、长度、pattern、默认值等输入约束写成属性注释上的 @ tag,脚本不用在描述里重复;codemode 行显示运行中 elapsed 与结束后的 total time(#10707、#10708)
    • Added:工具定义新增 reachesTools(codemode / tool_search 这类「能触达其它工具」的工具声明某次调用可能触达哪些),MCP 扩展据此等待所需 server 并判断替换用的 codemode / tool_search 是否能触达 MCP 工具;工具 namespace 新增 aliases
    • Removed:删掉从未进入发布包的 experimental server / client / plugin 栈(src/experimental、src/cli/experimental)及其仅源码导出的 ./client、./experimental/plugin;它依赖的 @earendil-works/pi-client、@earendil-works/pi-protocol、@earendil-works/pi-server 三个包一并移除且不再发布;移除对 @earendil-works/chord 的依赖
    • 关键修复:Mistral 流在生成中途(长 thinking 期间)被中止——请求超时现在只作用于等待响应头(#10609);symlink 化的 AGENTS.md 位于嵌套在主仓内的 worktree 时导致项目上下文文件不加载(#10681);codemode 里 // @options: 不在脚本首行时被忽略,脚本照跑且不生效 timeout_ms(#10631);codemode 大量 text() 调用后拼接输出项是平方复杂度,会把进程卡住数秒到数分钟(#10678);print mode(-p)在最终回复被输出 token 上限截断时仍 exit 0,现在打印部分文本、写 stderr 警告并 exit 1(#10799);带资源的 MCP server 在列完所有资源前不注册任何 tool(#10526);MCP server 返回非 object 的 structured content(array / null / primitive,MCP 2026-07-28 允许)时工具调用失败(#10416);Anthropic 因 grammar 体积、tool 数量或 union 限制拒绝 strict tool set 时请求失败,现在改用 preferred tools 非 strict 重试一次(#10409);extensions / skills / prompts / themes 设置里的 !pattern、+path、-path 不展开 ~(#10765);serializeConversation()(compaction、分支摘要、bug 报告)省略 thinking block——replayed thinking 常常根本不在 live context 里,带上它会让摘要请求比它要总结的 context 还大
    • 完整 release notes: https://github.com/earendil-works/pi/releases/tag/v1.2.0

其他重要 commits / PRs(10-12 00:36 之后,按重要性挑选):

  • 7d75a0e 项目(chord) — fix(chord): nodeLoader registers every facet root before importing any(@Mario Zechner, 10-12 23:37):发布 v1.2.0 后的第一笔,facet root 必须在 import 任何模块之前全部注册
  • cd6b2a5 项目(chord) — fix(chord): keep the process lock socket path within sun_path on macOS(@Armin Ronacher, 10-12 23:16)+ 7f02204 fix(chord): never keep a connection whose link was already closed(@Mario Zechner, 10-12 23:06)+ 0a8cfff fix: drop chord and esbuild from the Nix package(@Armin Ronacher, 10-12 23:16)
  • abfe629 / aa499c2 / b6fda57 项目(durable + env) — 三个 commit 组成 listFiles 全链路(@Mario Zechner, 10-12 15:22):ExecutionEnv.listFiles 作为可选能力,缺失或返回 not_supported 时调用方退回自己的 walk;pi-env daemon 侧实现 fd --hidden --exclude .git 语义的目录树列举(不跟随符号链接,用 fd 的 ignore crate 与 ripgrep 的 git ignore 规则),记录以 payload 传输(kind 字节 + 相对 / 路径 + NUL),在 maxEntries / maxBytes / timeoutMs 处停下并带 truncated 标记,cancel 能在条目之间生效,hello 上报 features: ["listFiles"] 以便客户端分辨新旧 daemon;RemoteExecutionEnv.listFiles 解析路径后经 daemon 列举,LocalExecutionEnv 是 NodeExecutionEnv 加同机 daemon 上的 listFiles——本地与 SSH 会话用同一份代码
  • 441f576 项目(coding-agent) — fix(coding-agent): warn and exit non-zero in print mode on truncated response(@David Brailovsky, 10-12 14:06):对应 v1.2.0 的 #10799
  • 7bd01fb 项目(ai) — fix(ai): retry "The upstream provider returned an error"(#10842:分类器少匹配一个词)+ d4d5361 fix(ai): fall back on Anthropic strict tool limits(#10409)
  • da0eadf 项目(MCP) — fix(mcp): do not retry cancelled HTTP requests after an authorization refresh(@Armin Ronacher, 10-12 13:33)+ 67996ab fix(mcp,coding-agent): accept any JSON value as tool structuredContent(#10416)
  • f4cca2d 项目(coding-agent) — fix(coding-agent): stop listing MCP resources when connecting(#10526):连接时列资源会让带资源的 MCP server 迟迟不注册工具
  • b0ac396 项目(构建) — build: retire Pi Mobile's APK workflow and hook; check apps/p2 instead(@Mario Zechner, 10-12 13:57)
  • e6fb258 fix(coding-agent): retry transient Windows EPERM when acquiring auth lock(#10801)、11f9911 fix(tui): let unhandled wheel input scroll the transcript under a focused overlay(#10769)、6a51a39 fix(coding-agent): expand ~ in resource setting patterns(#10765)、3e477ea feat(coding-agent): add PI_CLIPBOARD_OSC52 to force OSC 52 copies(#10826)、014873d feat(coding-agent): show elapsed and total time on codemode rows(#10708)

社区讨论 / 行业方向:

  • Where should a package put a one-shot pre-turn routing decision?(Discussion #10841, 10-12):材料学研究包 MatPilot 的维护者想在 before_agent_start 里做每轮一次的廉价路由(一次 <100ms 的 Python sidecar 调用 semantic-router,决定这个 prompt 走哪条研究路径,从而给模型更窄的 skill/tool 上下文)。关键疑问是:这个 hook 是不是「每次 agent loop 一次」?它会不会对 follow-up / steer 消息再触发一次?compaction 之后或 retry 之后会不会再触发?——他们要求「每个真实用户 prompt 最多评估一次」,因为 sidecar 往返是要花钱的。这份提问出现在 v1.2.0 刚把 before_agent_start 语义改成 union 之后。
  • Pi v1.2.0 被 Releasebot 收录(releasebot.io):第三方 release 聚合站已在收录 pi 的 release notes,first seen 2026-10-13。
  • A deep dive into Pi(Flavio Copes, 10-02):第三方长文梳理 pi 的设计取向——不内置 subagent / 权限弹窗 / plan mode / todo,「你塑造 agent 围绕你的工作流」,并明确记录 pi 1.0 起从「拒绝 MCP」转为内置 MCP 的转变(引 Earendil 的《You said no MCP!》)。该文所有细节对齐 1.0,作者也标注了「pi 发版很频繁,部分细节会变」。

信号观察:

  • v1.2.0 是一次同时做加法与减法的 release:加的是配置可校验性($schema)、provider 能力边界(per-key OpenRouter)、远程会话可用性(OSC 52);减的是一条从未发布的架构线(experimental server/client/plugin 三个包整体下架)。发布后 34 分钟内连落 4 个 chord 修复,说明移除依赖这条动作本身触发了 dormant 代码路径的重新暴露。
  • pi mcp list --json 的 breaking change 与 before_agent_start 的联合类型化,指向同一件事:把「之前靠默认行为兜底」的地方改成显式契约。这与上份报告记录的 compaction 静默失败改显式失败是同一条线。
  • listFiles 把「列举目录树」从各扩展自己 walk 变成协议级可选能力,且明确设计成缺失时静默退回本地实现(not_supported)——这是在 host 能力不齐的环境(Workers、SSH、旧 daemon)下保持兼容的典型做法。
  • 新 issue 密度 36 条/24h,几条集中在 durable 与远程托管:#10857(Durable Object 上 runtime.sleep() 只在下一次请求时才醒)、#10845(多租户 Durable Object 下无法判断某次模型请求属于哪个 task,导致计费归属错误)、#10846(希望 pi-env 接受注入的 daemon 进程,好让 client 跑在 Workers 上)。durable 的设计正在被真实的多租户部署压测。

agegr/pi-web

pi coding agent 的 Web UI;TypeScript / Next.js,读取本地 pi session JSONL 维持会话,服务端在真实 workspace 里让 session 持续运行。| stars: 7,282(上份 7,246,+36 / 24h) | open issues(含 PR): 21(上份 6,+15;其中 open issues 13、open PRs 8) | 默认分支: main | 最近 push: 2026-10-11T14:04:27Z(约 34 小时无提交) | 主页: 无(仓库未填)

近 N 周 release 重点:

  • 窗口期内无新 release。最新为 v0.12.0(10-11 14:05),即上份报告记录的那一版纯性能 release:流式回复按 Markdown 块增量解析、会话列表接口不再携带每条会话的完整首条消息(3.2 MB → 385 KB)、Prism 按需加载。

其他重要 commits / PRs(10-12 00:36 之后):

  • #1210 项目(扩展桥接) — feat(extensions): bridge nested child sessions and interactive extension UI (@acniray, 10-12 15:50 更新,+3151 / −156,6 commits,已关闭未合并)。作者在正文里先接住 #1041 的反对意见:pi-web 不应该变成某个特定 subagent 扩展的第二运行时,也不该把内置 subagent 模型重新定义到另一个扩展的内部实现上;这个 PR 采取更窄的做法——让 Pi Web 能检视与导航由扩展创建的可验证关联 session,扩展的执行与配置仍归扩展自己所有。给出的理由:nicobailon/pi-subagents 在积极跟进新版 Pi(这对与 Pi 变化的 SDK/runtime 耦合的扩展很重要);高扇出 session 场景下把子 session 存在父 session 之下比几百个顶层 JSONL 更有利(不只是侧边栏整洁,还有磁盘组织);worktree 密集的开发方式。窗口内无 commit。

社区讨论 / 行业方向:

信号观察:

  • 主分支自 10-11 14:04 起静默约 34 小时,是本组 6 个仓库中唯一「上份报告已发布 v0.12.0 之后完全无动作」的仓库;同期 open issues +15(3 → 13)、open PRs +5(3 → 8),其中仅 10-12 当天就新增 10 条 issue——仓库处于「维护停滞但需求涌入」的状态。
  • 窗口内最有分量的输入不是 commit 而是两篇 issue 式设计分析(#1199、#1202,均 @brynne8,且都明确表示「我不是来提 PR 的,想听到 wontfix 也行,价值在推理过程」):前者量化了 input_files 上限与子 session 起始 context 的关系,后者把「subagent 的 run 结束」与「session 仍可达」「isolation: worktree」三个事实并置,抛出 worktree 该不该比 run 活得久的问题。
  • 唯一的大型 PR(#1210,+3151 行)以关闭未合并收场,其正文里的自我约束(不接管别的扩展的运行时)说明扩展与宿主之间的边界仍是社区里的敏感点。

vectorize-io/hindsight

Agent 记忆系统:retain / recall / reflect 三大能力 + 本地嵌入式 hermes / embed,可作 MCP server、CLI、REST API,也可作为 Hermes / OpenClaw / Cursor / Paperclip / Grok Bot 的可插拔记忆层;MIT。| stars: 48,842(上份 48,426,+416 / 24h) | open issues(含 PR): 151(上份 200,−49;其中 open issues 143、open PRs 8) | 默认分支: main | 最近 push: 2026-10-12T15:59:57Z | 主页: https://hindsight.vectorize.io/

近 N 周 release 重点:

  • 核心包窗口期内无新 release(最新 v0.10.3,10-08)。但 integration 层在 24 小时内连发 18 个 release:

    Integration版本Integration版本
    openclawv1.0.0agentcorev0.1.3
    hermesv1.2.2n8nv0.1.4
    coding-agentsv0.8.1flowisev0.1.1
    paperclipv0.4.2evev0.3.1
    opencodev0.2.9meta-musev0.1.1
    obsidianv0.3.1vapiv0.1.1
    cursorv0.2.1smolagentsv0.1.2
    devin-desktopv0.2.1pipecatv0.1.2
    difyv0.1.2composiov0.1.1
  • openclaw v1.0.0 — register as OpenClaw's native memory provider(#5535)

    • 问题:Hindsight 占着 OpenClaw 的 memory slot 时,OpenClaw 自己的记忆面(memory.status、Memory 页、gateway 的 memory.search / memory.get)全部报 “memory plugin unavailable”——插件从未注册 memory capability
    • 改动:注册 OpenClaw 2026.10 的 provider-neutral providerRuntime,health / search / get 分别由 Hindsight recall 与 GET /memories/{id} 支撑
    • 刻意做窄:不做 Active Memory 候选(会在 autoRecall 之上重复召回)、不做 pre-compaction flush(每轮都已 retain);只有操作者本人或 agent owner 的 private session 能读(agent-only bank 持有该 agent 的全部对话),群会话 / 无 audience 的 session / host authority 一律报错而不是返回空结果;只有当 bank 完全由 agent 决定时才 search,按 user 或 channel 分库时拒绝而不是猜
    • 这条替换掉了 #4917 的做法——那份方案伪造了一份 file-shaped legacy runtime(+752 行);OpenClaw 2026.10 新增了面向记录型 provider 的接口,正是为 Hindsight 这类形态准备的
    • 实测跑在真实 OpenClaw 2026.10.2 上;OpenClaw 2026.9.6 加载该构建无报错且仍能 retain

其他重要 commits / PRs(10-12 00:36 之后,按重要性挑选):

  • #5466 项目(集成基建) — feat(integrations): every integration identifies itself with its own User-Agent(@nicoloboschi, 10-12 10:12):每个 integration 用自己的 User-Agent 标识自己
  • #5508 fix(coding-agents): keep retained sessions whole(pi runs、failed ops、exit、btw sessions、codex starts 五类边界场景)与 #5509 fix(coding-agents): HTTP error handling in drain, reflect, page latch, append probe, long reflects——两者合起来收的是上份报告里那批「会话结束语义没有和 retain 缓冲绑定」的余波
  • #5527 项目(API) — fix(api): a store that sheds a request answers 503 + Retry-After, not 500(#5527):store 主动卸载请求时返回 503 + Retry-After,不再谎报 500
  • #5516 fix(api): retain prose 'no facts', claude-code JSON repair, codex stream errors, provider spans, claude-code ToS docs——五合一修复包
  • #5529 项目(retain) — fix(retain): merge JSON-array appends to a new document into one array(#5529,回答了 #5528):对尚不存在的文档的 append 此前是用换行拼接,现在合并成一个数组
  • #5538 项目(hermes) — fix(hermes): skip cron runs, honour HINDSIGHT_BANK_ID, add reflect_tags, re-probe an unreachable server(#5538):一次带过 #4662 的四个点
  • #5532 fix(openclaw): honour logLevel and logSummaryIntervalMs、#5530 fix(openclaw): capture inbound identity on message_received so Goals can start——openclaw 集成的两个功能性修复,与 v1.0.0 同批发布
  • #5515 fix(clients,cli): forward-compatible decoding and bounded export polling、#5513 fix(api): consolidation discovery probe, mental-model edit race, LlamaParse v2、#5534 / #5523 两批 hermes 小修(均标注「不需要行为变更」)

社区讨论 / 行业方向:

  • Invitation: open Memory Tournament(Discussion #5501, 10-12):一场开放的 AI 记忆系统锦标赛征集参赛配置,Hindsight 是 12 个参赛者之一,测的是开源版、自托管。赛程设十项能力:recall、updates、time、multi-hop、abstention、learning from experience、acting on memory、forgetting on request、provenance/isolation、cost at scale。规则写得很具体:先跑公开 benchmark(LongMemEval、LoCoMo、MemoryAgentBench、BEAM、MemoryArena),自研探针测试上限 30% 且需复核,所有系统用同一 answer model,两位来自其它模型家族的盲审,逐题原始结果公开,每阶段后有争议窗口;配置冻结日 2026-11-09,冻结前的修正会生效。组织者同时披露自己做的 Horizon 是同赛道竞品、按同样规则参赛。
  • Hindsight is featured in Repository Radar PR#43(#5539, 10-12):第三方开源项目 newsletter 收录,2026-10-14 CET 发出。
  • Field report: Hindsight v0.10.3 with local Qwen3.5 4B Q4_K_M(#5495):本地 4B 量化模型下 retain/recall 可用但 consolidation 受限,与上份报告的三份 consolidation 报告同源。
  • I Tested Hindsight, the Open-Source Memory Layer for Coding Agents(HackerNoon, 10-09):第三方上手评测,场景是「每个 coding-agent 会话开头 agent 都要重新发现仓库用 pnpm、重新被告知别碰 legacy payment 文件、重新踩到只在 UTC 才通过的测试」。

信号观察:

  • 24 小时 18 个 integration release、覆盖 18 个不同宿主,说明维护者把集成层当作独立节奏的发布列车在跑,与核心包 5 天一次的节奏解耦。
  • openclaw v1.0.0 是这条线上第一次出现「因为上游加了正确的接口而删掉自己的适配层」:#4917 的 +752 行伪 file-shaped runtime 被换成一次原生注册。适配层的规模变化本身是上游协议成熟度的指标。
  • 安全与权限的报告在增多且开始具体化:#5544 指出 daemon 与 Control Plane UI 默认绑 0.0.0.0 且无鉴权;#5540 指出 bank_id 接受无界长度与控制字符后被当作 bank 标识使用;#5542 指出 CLAUDE_CONFIG_DIR 隔离在 daemon 路径下被绕过。这三条都不是功能 bug,而是默认配置的外扩面。
  • open issues(含 PR) 一天内从 200 降到 151(issues 192 → 143),而同期新建 issue 19 条——约 60 余条被关闭,与同一天 44 个 commit 的批量修复同批发生。issue 区在这个仓库是被批量清理的,不是自然衰减。
  • 记忆赛道的评价方式正在从「官方 benchmark 表」转向第三方独立评测(HackerNoon 实测、Repository Radar 收录、开放锦标赛)。锦标赛设置里「逐题原始结果公开 + 盲审 + 自研探针占比上限 30%」这套约束,是对官方榜单可比性的直接回应。

agentclientprotocol/agent-client-protocol

Agent 与 Editor 之间的协议(ACP):JSON-RPC 2.0 over stdio / HTTP,本地 agent 作为子进程启动;Rust crate + JSON schema 双轨发布;Apache-2.0。| stars: 4,420(上份 4,414,+6 / 24h) | open issues(含 PR): 34(上份 46,−12;其中 open issues 6、open PRs 28) | 默认分支: main | 最近 push: 2026-10-12T23:03:46Z | 主页: https://agentclientprotocol.com

近 N 周 release 重点:

  • 窗口期内无新 release。最新仍是 schema-v1.25.0 / Rust crate v1.11.0 / v2.0.0-alpha.8(10-09 14:17),即上份报告记录的把 session notices 与 session compaction 两条 RFD 同时从 Preview 推到 Completed 的那一批。

其他重要 commits / PRs(10-12 00:36 之后,按重要性挑选):

  • #1237 项目(协议 / RFD) — docs(rfd): Client-Provided System Prompt(@wpfleger96, 合入 10-12 10:12,开于 2026-05-18,7 条评论):提案原文——ACP 是目前唯一没有 system prompt 机制的 agent 协议,MCP、OpenAI、Anthropic 的 Messages API 都有;每一个 ACP 实现都各自造了非标准变通:_meta 扩展、user-message 注入、文件系统中转。方案:sessionCapabilities.systemPrompt 能力在 initialize 时广告(让客户端在发字段前可靠地做特性检测)、session/new 上可选的 systemPrompt: ContentBlock[](文本作为通用基线,类型与 session/prompt 一致)、可选 systemPromptMode 字段区分 append(默认)与 replace
  • #2361 项目(schema / unstable) — feat(unstable): add client system prompt schema(@benbrandt, 10-12 19:16 合入):上一条的 schema 侧配套
  • 同一批的 v2 文档澄清(均 @benbrandt, 10-12 上午连续合入):#2362 说明 git_patch 如何写路径、#2359 澄清 forked session 处于 active 状态、#2358 在 AgentCapabilities.session 上列出完整的 v2 session baseline、#2356 说明如何把 snippet diff 迁移到 v2、#2357 澄清 v2 的前台工作可以不带 prompt 就启动、#2355 警告 tool-call 的 _meta 会替换掉已存的 metadata、#2354 v1→v2 转换 tool call update 时丢弃 v1 的 null 字段、#2353 在 v2 取消 prompt 的响应里展示 messageId
  • #2352 项目(Rust) — feat(rust): implement Eq for content blocks(@benbrandt, 10-12 11:21)
  • Registry 更新:#2367 / #2365 / #2350(@acp-release-bot[bot],一天三次)+ 人工提交 Muse Spark Code 进 agents 列表(#2349)、Athas 进 clients 列表(#2351)
  • 窗口内关闭(未合并)的 RFD 提案:#2315 negotiated structured text formats(在 Markdown 之外协商 text/plain / text/markdown / text/org,每个文本块携带稳定 format/profile 以跨流式与重放保持一致,含一份 Portable Org profile)、#2291 session-scoped instructions(sessionInstructions 字段,agent 分别广告 append / replace 支持,agent policy 与强制控制留在 replaceable instructions 之外)、#2092 model request relationships(agent 自有的逻辑模型请求关系图,为并发 subagent 提供可视化,因为「没有可以自上而下读的线性 transcript 了」)、#1292 Expose client LSP servers over ACP、#895 HITL Editing(fs/write_text_file 路径上让客户端回报用户对提议改动的修改,新增 ContentDiff 类型与 agentCapabilities.fs.hitlEditing)

社区讨论 / 行业方向:

信号观察:

  • #1237 从 5 月开到 10 月合,中间讨论了约五个月——ACP 的节奏明显是「提案先长期挂着,等生态各方把约束讨论清楚再进主干」,与多数项目的「先合再修」相反。
  • 窗口内协议侧同时在做两件事:补齐 v1→v2 的迁移说明(#2356 snippet diff、#2354 null 字段、#2353 messageId、#2355 _meta 覆盖语义、#2357 无 prompt 的前台启动、#2359 forked session 语义)与清理长期挂着的提案(5 份 RFD 当天关闭)。前者说明 v2 的主要摩擦已从「设计」转到「迁移」。
  • 被关闭的 RFD 里有一个反复出现的形状:提案者提出的是一个具体的宿主集成需求(LSP over ACP、HITL 编辑、model request 关系图、session instructions、协商式文本格式),而不是抽象的协议原语。这与 ACP 作为「editor ↔ agent」定位一致。
  • open PRs 一天内从 37 降到 28(总数 46 → 34):合入 9 份、关闭 5 份未采纳的 RFD。PR 队列的变动全部集中在 docs/schema 层,没有一条实现类 PR 进入主干。

yxc023/yxc023.github.io

个人技术博客(Astro);本仓库作为 daily-research 报告自动同步的目标。| stars: 1 | open issues(含 PR): 27(上份 27,持平;其中 open issues 21、open PRs 6) | 默认分支: master | 最近 push: 2026-10-12T00:34:56Z | 主页: https://yxc023.github.io

近 N 周 release 重点:

  • 窗口期内无 release(该仓库不发布 GitHub Release)。

其他重要 commits / PRs(10-12 00:36 之后):

  • 窗口内无新 commit(本报告尚未同步)。
  • 值得记录的一点:7844396 与 e8e20fb 是两条内容与时间戳完全相同的 commit(均为 auto(reports): 同步 daily-research 2026-10-12,10-12 00:34),10-11 及以前的每日同步都只有一条。
  • 未合并 PR 现有 6 个,全部为 dependabot[bot]:#31 Bump devalue from 5.9.0 to 5.9.2(09-18)、#30 Bump js-yaml(09-13)、#29 Bump sharp and astro(09-11)、#27 Bump svgo from 4.0.2 to 4.1.0(09-09)、#26 Bump qs from 6.15.3 to 6.16.0(09-03)、#25 Bump esbuild and astro(08-12)。上份报告列为 open 的 Astro 5→7 三条提案(#23 / #24 / #28)实际已全部 closed 且未合并——#28 与 #23 关闭于 09-11,#24 关闭于 08-12,均早于上份报告;上份报告的 open 状态与仓库实际不符,本期按 API 实际状态更正。

社区讨论 / 行业方向:

信号观察:

  • 连续 10 天的 auto(reports) 提交继续与 scripts/deploy-blog.sh 的 sync → commit → push → build → deploy 流水线一一对应;本仓库的提交历史就是本调研的部署轨迹。
  • 10-12 出现两条同内容、同时间戳的 auto(reports) commit,说明当日同步脚本至少被执行了两次且都成功提交——自动化流水线的幂等性没有保障。
  • 6 个未合并的 dependabot PR 全部指向 devDependencies,最早的(#25,08-12)已挂起近两个月。Astro 5→7 的三条提案全部以「关闭、不合并」收场,说明该仓库的依赖升级确实不在自动流程里。

跨项目观察

  1. 「协议补洞」与「用拒绝换默认放行」是本期的主线:ACP 把 Client-Provided System Prompt 合入主干(#1237 + #2361),把「每家实现各自造变通」换成「一条 advertised capability」;pi v1.2.0 把 before_agent_start 改成判别联合、pi mcp list --json 改成布尔、连接时不再列 MCP 资源,都是把隐式默认变成显式契约;opencode 那边同一条线断了——#54632 报告以 duplicate 关闭,#54165 至今 open。
  2. 成本归因正在从「优化项」变成「正确性问题」:opencode #54935 指出 task tool 的每个 sub-agent 都新建 session 并拿自己的 cache key,导致并行子 agent 的重复计费可能高于单个 agent,而 setCacheKey 在 V2 迁移时又被静默丢弃(#54911 今天才补);pi #10845 指出多租户 Durable Object 下无法判断某次模型请求属于哪个 task,一次后台 compaction 可能在下一位用户的 run 之后才完成,于是「当前 run」把账记到别人头上。两边都是同一个形状:缺一个能把请求归属到发起者的标识。
  3. 「接进来」的密度全面上升,且集中在分发与集成层而非 agent 本体:hindsight 24 小时 18 个 integration release;opencode 一天内补齐 WinGet、Windows ARM64(4 条 commit 成链)、PWA 安装、/changelog 独立 worker;pi 把目录树列举从各扩展自己的 walk 提升为协议级 ExecutionEnv.listFiles 并做 hello 特性通告。共同点是——能力在宿主侧兑现,边界靠「缺失时退回本地实现」维持。
  4. 远程 / 跨机运行是本期反复出现的具体需求:pi 加 PI_CLIPBOARD_OSC52=1 处理检测不到远程会话的复制,pi 的 listFiles 让本地与 SSH 会话走同一份代码,#10846 希望 pi-env 接受注入的 daemon 好让 client 跑在 Workers 上;hindsight 的 hermes 修「re-probe an unreachable server」;opencode 修远程 workspace 的 filesystem override 与 driver 传播。三家都在把「本地是默认、远程是特例」翻过来。
  5. 版本节奏本身成了信号:pi 从 1.0.0(10-01)到 1.2.0(10-12)11 天三个 minor,同时砍掉一条从未发布的架构线;opencode 1.x 的 GitHub Release 与 2.x 的 tag + CHANGELOG 两条叙事并行;hindsight 核心包 5 天一版、integration 一天十八版。发布节奏分化本身要求读者先确认「看哪个渠道」。
  6. Agent memory 进入第三方评测阶段:HackerNoon 实测、Repository Radar 收录、以及一场 12 方参与的开放 Memory Tournament(逐题原始结果公开、双盲审来自其它模型家族、自研探针占比上限 30%、配置冻结日 11-09、组织者自曝竞品关系)。评价权从项目方手里外移到第三方,是这类基础设施进入成熟期的一个可观察拐点。

元信息

  • 报告生成时间: 2026-10-13T00:33:30Z
  • 基准时间: 2026-09-08T09:23:29Z(按 spec 读取自上次报告 reports/latest.md 的 基准时间: 字段,自 2026-09-08 起未变)
  • 扫描窗口: 2026-09-08T09:23:29Z → 2026-10-13T00:33:30Z(约 34.8 天);本期新增内容集中在 2026-10-12T00:36:43Z 之后的 24 小时
  • 数据源: GitHub API(gh CLI)+ mmx web search;Discussions 用 GraphQL 拉取(REST 的 discussions 列表接口返回的是最早一页,本轮未使用);Issue 用 search API 补充
  • API rate limit 剩余: 5000 / 5000(core,抓取完成后查询)
  • 抓取失败: 无(6/6 仓库的 repo / releases / commits / pulls 全部成功;anomalyco/opencode 的 Discussions 处于禁用状态(hasDiscussionsEnabled: false),其社区讨论段改由 CHANGELOG.md、外部检索与 issue 区补足)
  • 补充说明: opencode 的 2.x 线不发布 GitHub Release(1.x 停在 v1.19.0),release notes 取自仓库 dev 分支的 CHANGELOG.md;hindsight / opencode / pi 的 commits 按 per_page=100 重新抓取,以覆盖 24 小时内的高频提交

评论