ARTICLE / ai
永不完成的checkpoint:智能体的状态层欠账
10 月 30 日那期生态日报的快照里,OpenClaw 仓库社区热点榜首的一条 issue,不是新漏洞,也不是新功能,而是一条 10 月初报出来的数据库问题:#164294,网关状态库的 WAL 自动 checkpoint 永远无法完成。进程内的 reader 长期把 WAL 文件钉住,一万七千多帧迟迟合并不回主数据库,38 条评论堆在一个看似冷僻的底层话题下面,截至发稿前复核,这条 issue 仍然开着。同一天,这个项目在 24 小时里合并或关闭了 202 条 PR,对 298 条待合并的存量,吞吐率约 68%;而它的同行 Hermes Agent,445 条待合并 PR 对着每天约 55 条的处理速度,吞吐率只有约 12%。同一天,同一个赛道,两种健康度。
这两组数字指向同一件事:当个人 AI 助手从「打开聊两句」的工具变成 7×24 常驻的基础设施,它的状态持久层、崩溃恢复路径、记忆管道和审阅流水线,都在被按分布式系统的标准重新出题。10 月 30 日的两份生态日报里,几乎没有令人兴奋的大功能,挤满页面的全是这一类词——WAL、lease、checkpoint、晋升过滤器、审阅带宽。这不是坏事。一个生态的日报被这些词占据,说明它进入了还债的深水区;而债还得动不动,两天快照放在一起就能看出形状。
一条 38 条评论围观的永不完成:checkpoint 卡在谁手里
先看这条榜首 issue 到底卡在哪。SQLite 的 WAL 模式下,写入先落进 WAL 文件,checkpoint 负责把帧合并回主数据库,让文件不至于无限膨胀。#164294 报告的问题是:网关进程内部存在一个长期的 reader,一直持着旧快照不肯放手,checkpoint 便永远推不下去——自启动以来积累的一万七千多帧始终没有被收缩。这不是一次性的性能毛刺,而是「只要进程活着,收缩就永不发生」的结构性死结。38 条评论里讨论的已经不只是这个 bug 本身,而是底层状态库的生命周期设计:谁有权钉住 WAL、钉住多久、谁来仲裁。同一族的问题在状态库的其他角落也在发芽:状态生命周期租约的所有权自冲突(#159094)在两天快照里都挂着 P1 标签;前一天日报里还有一条更触目的记录——某个用户的 SQLite 状态库腐坏后,全新重建的数据库在 15 到 24 小时内再次腐坏,五天五次,其中一次呈现「瘫痪但不退出」的最难排查形态(#126821,8 月至今)。单点故障可以修复,同一位置反复塌陷就指向地基了。
这条 issue 的价值在于把一串看似孤立的故障串成了因果链。WAL 永不收缩的直接后果是状态库膨胀——另一条 issue #181459 描述了一个 3.5 GB 的 agent 数据库让启动变成赌博:每次冷启 4 到 6 分钟,checkpoint 已过期,同样的 embeddings 被存了三份。膨胀再往前一步就是恢复失败——P0 级的 #166634,崩溃恢复后 reclamation checkpoint 失败,agent 进入永久 UNAVAILABLE 状态,附带消息丢失,18 条评论,快照内未见修复 PR。而启动慢又喂养了另一类故障——#162211,启动阻塞事件循环 40 到 200 秒,健康监控误判进程已死,触发重启,重启后再次阻塞,循环往复。一条永不完成的 checkpoint,最终以三种面目出现在用户的终端上:启动慢、崩溃后起不来、重启停不下来。
10 月 30 日当天也不是没有正面动作。P0 列表里的 #186813——聊天内托管更新在 SQLite 锁竞争下死锁在 epoll_wait——在快照中显示已关闭,判断是本日修复;发稿前经 GitHub API 实时复核,状态确为 closed。同日发布的 v2026.10.9 稳定版还建立了一条 flaky tests 追踪 issue(#187490),按策略要求在 main 分支上并行修复。一天关掉一个死锁算不上转折,但把 10 月 29 日与 10 月 30 日两份快照对照,能看清哪些债在还、哪些债还挂着:前一天日报列出的七项无修复 PR 的 P0 里,最重的三项——每小时 4 到 5 GB 的无界内存泄漏(#159662)、大型外部插件捕获阻塞事件循环数分钟(#160959,62 条评论,为前一天全库评论数之最)、在全新重建的数据库上仍会复发的 SQLite 腐坏(#126821,8 月至今)——在 10 月 30 日的快照里依然在列。
把这些 P0 放在一张表里,共性模式会自己浮出来:
| Issue | 现象 | 严重度 | 快照状态 |
|---|---|---|---|
| #166634 | 崩溃恢复后 checkpoint 过期,agent 永久 UNAVAILABLE,消息丢失 | P0 | 开放,needs-repro,未见修复 PR |
| #162211 | 启动阻塞 40–200 秒,健康监控误判,重启循环 | P0 | 开放,14 条评论,未见修复 PR |
| #158592 | 睡眠唤醒后 runtime publication 超时,重启前所有入站消息失败 | P0 | 开放,未见修复 PR |
| #141413 | macOS 应用对 SecretRef token 的网关访问不带认证 | P0 | 开放,安全相关,未见修复 PR |
| #164294 | 进程内 reader 钉住 WAL,checkpoint 永不完成 | 高影响 | 开放,38 条评论,10 月初至今 |
日报里那句总结值得逐字读:高严重度 bug 集中在非正常退出后的恢复路径(崩溃、SIGKILL、睡眠唤醒)与 SQLite 并发、lease 管理两类场景。这两类场景有一个共同前提——它们都不是「正常使用」会走到的路径。一个只在崩溃后暴露的缺陷,意味着测试环境里那些体面的、按部就班的用例永远碰不到它;只有把它当成一等公民来设计——lease 怎么过期、checkpoint 怎么校验、恢复怎么幂等——这些路径才会被测试覆盖。分布式系统过去半个世纪攒下的功课,智能体框架现在开始补,而且是在真实用户的生产数据上补。
把镜头转向 Hermes,能看到同一道题的另一种抄法。它的 cron 定时任务 worker 在撞上「数据库被锁」时直接死亡,且执行记录一并丢失、没有重试(#135487)——状态库的并发问题在这里化身成定时任务的静默消失;统一网关重构后,网关进程长期持有状态库文件,仪表盘的批量操作一律撞上 409 冲突(#138915,标注为架构合并的直接后果);多 Kanban worker 并发时网关卡顿导致 worker 崩溃、在制品丢失(#145022,已获部分缓解)。两个项目、两套代码、同一种病:状态持久层的并发与生命周期管理。日报把这定义为「生态级共性难题」,这个判断在两份独立的故障清单里都能找到注脚。
恢复路径之外,常驻进程的资源账是同一个欠账的另一种记法。10 月 30 日的快照里,资源类反馈排成了队:mcp.sessionIdleTtlMs 这个控制空闲会话回收的默认值实际未生效,子进程只生不灭,最终把 256 个子进程的配额打满,此后所有 exec 与 MCP 调用全部失败(#166017,已有关联修复 PR 挂出);每个 stdio 子进程携带约 144 MB 的包装器开销且无法关闭、还会被重复拉起(#164690);会话资源加载器每回合烧掉约 100 秒的 CPU(#163566)。这三条放在一起读,画面很具体:一个接了十三个 stdio MCP 服务的重度会话——这正是日报用户画像里典型配置——资源曲线几乎注定单向上行。默认值写了却没生效,比没有默认值更糟,因为它制造了「已经配置过」的错觉。
资源曲线之外,第三类让用户失去耐心的是消息的下落。Telegram 渠道 mid-turn 阶段收到的消息直接丢失(#160762);上下文压缩失败时,在途投递被整体作废(#158070);另一条长期挂着的 issue 显示,回调被静默丢弃且无任何告警。日报记录的用户原话态度很明确:高价值消息静默丢失、无告警,不可接受。这三类问题——恢复、资源、投递——表面上是三个子系统,底层其实是同一条设计原则的缺失:把「正常路径」当成了全部路径。崩溃后的 checkpoint、空闲后的回收、投递失败的补偿,都是主路径之外的分支,而 7×24 常驻系统的一天里,分支被走到的次数远比演示环境多。还有一类小得容易被忽略、却每天都在磨损信任的问题:十六处调用点抛出字节级完全相同的错误字符串,用户看到了报错,却无法定位是哪一层在报(#127195)。诊断性的粒度,是基础设施对使用者最基本的礼貌。
68% 对 12%:同一个夜晚的两种审阅带宽
把 10 月 29 日与 10 月 30 日两天的快照并排放,两组生态的消化能力差距比任何形容词都直白:
| 指标 | OpenClaw 10-29 | OpenClaw 10-30 | Hermes 10-29 | Hermes 10-30 | 口径备注 |
|---|---|---|---|---|---|
| Issue 24 小时更新 | 500 | 500 | 362 | 344 | 两生态均触及或逼近采集上限 |
| Issue 关闭占比 | 约 19% | 约 47% | 约 9% | 约 10% | 关闭数除以更新数 |
| PR 待合并存量 | 282 | 298 | 410 | 445 | 快照时点值 |
| PR 24 小时合并或关闭 | 218 | 202 | 90 | 55 | 快照时点值 |
| PR 吞吐率 | 约 77% | 约 68% | 约 22% | 约 12% | 同一公式跨两期重算(合并关闭数除以待合并存量);10-30 列与日报原报一致 |
| Release | 无 | 2 个 | 无 | 无 | OpenClaw 含 LTS 通道一版 |
| 版本策略 | 双通道 | 双通道,Gateway 可单独升级 | 单通道 v0.x 滚动 | 单通道 v0.x 滚动 | 见下文 |
需要先声明口径:两边的 issue 与 PR 更新量都触及采集上限,绝对量级已经失真,有意义的只有比例。而这个比例——68% 对 12%——是同一天、同一套采集脚本量出来的。它意味着 OpenClaw 每消化约两条待合并存量才对应三条左右的积压水位,而 Hermes 的待合并存量两天里从 410 涨到 445,仍在净增长。issue 侧的比例波动更大:OpenClaw 的关闭占比从前一天的一成九跳到四成七,约 2.5 倍的相对涨幅里当然有快照口径与批量关闭(比如 stale 机制集中处理积压)的成分,读的时候要打折扣;但两天的数据共同说明的是,这个项目的维护节奏里存在成批消化旧问题的机制,而另一边的关闭占比两天都趴在一成上下——关闭数只约占更新数的一成,待合并存量两天里仍在净增长。积压不是社区不活跃的证据,恰恰相反,445 条待合并说明贡献意愿旺盛到超过了消化能力;真正的瓶颈在审阅带宽这一侧。
Hermes 这一天的主线仍是消化 10 月 14 日合并的统一网关架构。那个架构变更的善后追踪 issue——累计 224 条评论的 #134889——在 10 月 30 日快照中显示已关闭,追踪职责交接给 #143547,后者用 27 条评论系统列着统一网关在 main 分支上的遗留问题。母 issue 的关闭是一个里程碑式的信号:它宣告这一轮架构跃迁从「救火」转入「清单化还债」。当天合并的 55 条 PR 里也有实打实的修复——网关启动时孤儿会话清理的自死锁、python heredoc 数据文件误触发生命周期守护的误拦截、Kanban 拒绝加载失败的 skill pin——方向明确:消化回归、加固定时任务子系统、收紧插件安全边界(新增的 pre_tool_call_final 策略钩子采用 fail-closed 设计)。五十五条里还有两条适合单独端出来:一条把一个自 2024 年起就存在、却从未被持续集成真正执行过的测试套件接进了流水线——测试文件躺在仓库里和测试真的在跑,是两件事,这条修复补上的正是「测试存在性」与「测试执行」之间的裂缝;另一条把终端输出里的环境文件密钥、命令行机密参数、地址栏令牌的脱敏规则补齐——修复本身不大,但它承认了一个此前被默认的事实:工具的诊断输出曾经会把机密原样打在屏幕上。
OpenClaw 侧则展示了一条更成熟的贡献者流水线。一位社区贡献者在同一天提交的系列修复全部带着完整的 proof、size、rating 标签:消费已完成读取前重新校验 state read admission(直接关闭一条旧 issue)、管理服务 handoff 截止时间从墙钟改用单调时钟、管理更新 handoff 输出拒绝有损 UTF-8 解码——每一刀都切在「正确性」上。另一组三连修的是 Unicode 规范化:MS Teams、WhatsApp、Buzz 三个渠道的搜索先后补上 NFD 与 NFC 归一化,系统性解决多语言搜索失灵。这些修复单条都不大,但它们标志着审阅体系与贡献规范的咬合:标签齐全的 PR 让审阅者第一眼就能判断风险与规模,审阅带宽没有被浪费在「这个改动到底动了什么」的猜谜上。
差异的另一半在发布工程。OpenClaw 是这两个头部项目里唯一提供 extended-stable 长期支持通道的项目,而且 10 月 30 日的 v2026.9.36 只发布 Gateway 组件——基于 9 月底代码叠加关键安全更新,与完整版本的发布节奏彻底解耦。对生产自托管用户,这意味着可以只给最要命的组件打补丁,而不必吞下整个版本的行为变化。Hermes 还在 v0.x 单通道滚动,用户要么跟 main,要么等一个不知何时到来的稳定标签。发布通道的粒度,本质上是在替用户分摊「升级即风险」的成本;吞吐率的差距里,有一部分就是这道成本机制的回声。直接到组件这一层,还能看到这次稳定版发布在修什么:三个存在漏洞的运行时依赖被同步替换——一个处理 URI 校验的库开始拒绝畸形协议与主机名的 schema,一个数据校验库对超大集合提前拒绝以保护内嵌应用 SDK,一个邮件库修掉了 IMAP 发件人解析中伪造发件人的问题。三条都是「不修也不会立刻炸」的依赖漏洞,但每一条都对应着智能体作为常驻进程真实暴露的攻击面:它解析外部 URI、校验不可信数据、收发消息。把这些补丁放进 LTS 通道而不是攒到大版本,是发布工程对「安全更新的时效性」与「升级的稳定性」这对矛盾给出的正面回答。
审阅带宽经济学在这两天里被演绎得很完整:给审阅者省时间,就是给生态提速。445 条积压的解法不会是「让大家少提 PR」,日报里的建议务实得多——目录类低风险 PR 批量处理,网关回归类高价值 PR 优先审。分流本身不产生代码,但它决定社区贡献的复利能不能滚起来:一条挂两个月的 PR 消耗的不止是那位贡献者,还有观望者的下一次提交冲动。
审阅带宽之外,两个生态各自埋着的路线图信号也在这两天的快照里成形。Hermes 侧,插件目录已经成为主要扩展通道:单日就有限流监控面板、真实浏览器分页操控、供应商余额查询、向量记忆插件升级到 v0.5.2 等多条目录 PR 提交,厂商主动入驻的迹象比上一个月更明显。比插件更远的是架构层的诉求——远端 Agent 加本地工具执行的 issue 挂了五个多月,43 个赞、33 条评论;Windows 只装前端连远端的瘦客户端安装方案拿到 31 个赞;官方移动应用的需求从 4 月开到现在。诉求的热度背后已经站着真实受困的用户:移动端第三方客户端创建的会话,在桌面端恢复时直接报「找不到会话」(#144814),与另一条远端后端桌面会话无法本地恢复的 issue(#139818,35 条评论)构成同一个跨客户端恢复集群——用户已经在用多个客户端,而会话状态还没有学会跟着人走。三条诉求合计约 74 个赞,指向同一个方向:计算与交互分离。网关多进程模型的相关修复(如托管 worker 树固定)正在为这个方向铺技术地基——日报的判断是瘦客户端架构「呼之欲出」。OpenClaw 侧的对应信号是产品打磨型需求:可配置快捷键、聊天消息暴露为无障碍标题、配合历史窗口治理的界面优化。两个生态一个向「更分布」走,一个向「更顺手」走,但支撑两者的是同一个前提——先把状态层这台地基浇牢。
0 比 512:记忆晋升管道的结构性失效
状态层之下,这一天日报里的第二簇热点是记忆。#164923 的标题本身就是一份诊断书:兄弟 workspace 的记忆提升成功率在 50% 到 90% 之间,另一个却是 0 比 512——同样的管道、同样的 512 条候选,一边源源不断晋升,一边全军覆没。原始对话片段被结构性拒绝,指向的不是某个偶发 bug,而是晋升过滤器的判定逻辑存在系统性缺陷。19 条评论,截至发稿前复核仍开放。
它不是孤例,而是一个问题簇里最锋利的一条。#150635 描述的是同一管道的另一处断裂:短期记忆每日驱逐,dreaming 深度加工阶段产出的内容永不晋升,512 条的上限形同虚设——该留下的被驱逐,该晋升的上不来,23 条评论,挂了数月,标签停在 stale 加 needs-product-decision,卡在产品决策而非工程实现。前一天快照里的两条姊妹证据补齐了全貌:#121232,排序器与执行器永久分歧,日志里反复出现「排序了 N 条、晋升了 0 条」;#153426,用户的 MEMORY.md 与 USER.md 被 provenance 机制静默、永久地从启动注入中剔除,无诊断、无恢复手段。个人 AI 助手的核心资产是记忆,而这一簇问题说明:记忆不仅会丢,还会在无人知晓的情况下被判死。
正在动起来的部分同样值得记录。#172547 提议把 dreaming 输出排除出 memory-search 索引,已有关联 PR 挂出,日报判断很可能近期落地——哪怕晋升逻辑一时修不好,至少先别让未经加工的幻觉素材污染检索结果。这是一个典型的「止损优先」次序:先切断污染源,再修管道。
把这个话题从 bug 列表里抬起来看,会看到一条更粗的线。同日的 GitHub 趋势榜上,claude-mem 项目单日新增 459 星、总量突破十万星,它做的事一句话能说清:把跨会话的上下文压缩持久化,再注入未来会话。市场已经用星数投票,验证了「跨会话记忆」是刚需;但 OpenClaw 的 0 比 512 与那个「48 个习得技能中 46 个只增不减」的实测数据(出自一条为技能库引入每日收缩机制的 PR)共同说明:记忆的堆积与记忆的治理是两件事。刚需解决的是「有没有」,治理解决的是「对不对、能不能删、错了谁负责」。晋升失败没有告警、错误记忆无法单条删除、剔除无诊断——这三件事不解决,记忆越丰富,信任越脆弱。把视野再放大一圈,记忆与上下文的正确性问题并不限于这一个生态。同日的编码工具横向日报里,上下文压缩恰好是多款工具共同的质量洼地:一款工具的压缩摘要会引用随后被删除的分析内容,产出语义残缺的总结且可稳定复现;另一款的自动压缩在三百秒超时后不断重试,最终把会话顶上硬性上下文上限;还有一款把用户自定义的上下文窗口配置静默移除,用户排查半天才发现配置根本没生效。三家不同的公司、三套独立的实现、同一种失效形态——「系统替你做了决定,但不告诉你决定的结果」。压缩与记忆晋升在工程上是一对同构问题:都是对历史信息的不可逆取舍,都缺少取舍失败时的显式信号。
三面镜子:harness 之争、稳定接口与一台电脑
开源生态在自己的债务里深耕的同一天,外部世界递过来三面镜子。
第一面是 Hacker News。当日 AI 类讨论热度最高的帖子(90 分、68 条评论)是一篇体验长文,标题的观点很直白:Claude Duet 是第一个让人觉得「有用」的个人助理型 harness。评论区分歧最激烈的地方恰好不在产品本身,而在一个更根本的问题上:决定体验上限的到底是模型,还是 harness 的设计。开源生态这一天的日报等于给出了一半答案——两个头部项目的用户抱怨里,几乎没有一条指向模型能力,主要指向状态层、恢复路径、消息投递与审阅带宽。模型决定下限的年代正在过去,编排层的手艺开始决定上限。同一天的第二条 HN 热帖从反面补上了这个论点:有用户实测发现,某款主流编码工具会把用户邮箱注入提示词,随后随模型请求发往外部网站——25 分的帖子下面只有 3 条评论,但这类「harness 替你决定了模型能看到什么、外部能拿到什么」的案例,正是编排层手艺的另一面。harness 决定上限,也决定下限;上限是体验,下限是信任。
第二面是 Anthropic 的一篇工程文章。10 月 29 日被雷达收录的《Scaling Managed Agents with stable interfaces》提出两条设计原则:脑手分离,以及会话不等于上下文窗口。文章里最诚实的一段话是承认 harness 会过期——它编码了对某个模型缺陷的假设,而模型一进步,这些机制就成了死重;文中举例,某个模型曾有的「临近上下文上限就提前收尾」的倾向,在新一代模型上已消失,为它设计的上下文重置机制随之作废。把这段话放在开源生态的语境下读,滋味微妙:开源项目还在为具体缺陷逐条打补丁,平台方已经在设计「超越具体实现」的稳定接口,把代理运行时本身做成产品。两种时间尺度的工作在同一周内并行可见,这不是路线孰优孰劣的问题,而是同一个命题在不同资源约束下的两种解法。同日收录的另外两篇官方动态则展示了平台方为这个命题投入的资源量级:政府合作扩大到州与地方层级,约五百家政府机构在使用,某产品线周活跃用户半年增长约八倍;科研合作计划扩展到二十家基金会与研究机构。代理基础设施的买家名单从个人开发者扩展到政府与科研体系,供给侧自然要把「稳定接口」当成头等工程——买家的关键任务属性,最终会变成接口的可靠性要求。另一条容易被当作趣闻划过的细节也值得记录:这一代旗舰模型开始采用多代号分层命名,与另一家的星座式命名体系高度趋同——两家在产品分层上收敛到了同一套共识,档位化、多代号、按场景切分。命名体系的趋同通常是行业结构趋同的滞后指标:模型作为「可选档位的运行时资源」的定位,已经写进了两家的产品语言。
第三面是 GitHub 趋势榜的整体构图。当日前十一个趋势项目里约八个直接服务于编码智能体周边:三个「给每个智能体一台电脑」的桌面工作台同日登榜——独立工作区、任务队列、浏览器与文件系统控制、可预审可回放的动作记录;一家新晋孵化公司做的「智能体专用固件仿真环境」拿了 47 分;YC 实验室把智能体群体扔进两款游戏沙箱做多轮协作实验,拿下当日第二高分。趋势榜用一天的时间给出了一个完整暗示:开源生态最痛的地方——状态层、恢复、记忆、审阅——正是新工具与新平台正在切进来的地方。个人助理基础设施化这件事,开源社区用债务清单、平台方用接口抽象、工具层用工作区形态,三条证据链在同一天里指向了同一个方向。趋势榜首的那位新面孔值得单独一提:一个为编码智能体定义「设计词汇表」的项目,单日新增两千八百多颗星,做的事是把规范生成、审查、审计变成智能体可执行的流程,拦截低质量的自动生成代码。它的爆红与本文讨论的主题共享同一个底层判断——当生成的速度上来了,质量与治理就成了稀缺品。智能体的产出在膨胀,约束产出的机制必须同步膨胀,否则债务只是从状态层挪到代码层。
写在最后
把这一天的两份日报合上,最值得带走的判断只有一个:个人 AI 助手变成基础设施的标志,不是某个震撼的新功能,而是 WAL、lease、checkpoint、晋升过滤器、审阅带宽这些词取代「新模型」「新渠道」成为日报主角。基础设施的成熟从来不由热点驱动,它靠的是把「永不完成」变成「每天都能完成」的那种笨功夫——一万个 WAL 帧一帧一帧合并回去,445 条 PR 一条一条审下去,512 条记忆候选一条一条判定去留。
给正在做选型的团队,日报里的建议足够具体:把恢复路径的测试覆盖、SQLite 并发策略、长期支持通道这三项当成一等评估指标,而不是看完功能清单再回头补问。给正在自建长时运行智能体的开发者,这一天的教训同样直接:checkpoint、lease、幂等恢复应当是第一天就进设计文档的东西,而不是崩溃三次之后的补丁;对记忆管道,动手之前先问两个问题——晋升失败有没有告警,错误记忆能不能单条删除。这两个问题答不上来,记忆功能越丰富,将来要还的债越重。
最后是这篇本身的边界。文中全部生态数字出自 10 月 29 日与 10 月 30 日两期自动生成的生态日报快照,属于单日横截面,不构成趋势结论;9 项关键 issue 状态断言(#164294、#166634、#186813、#162211、#150635、#164923、#134889、#143547、#139818)已于发稿前经 GitHub API 实时复核,与快照零状态翻转,其中 #150635 的评论数较快照增加一条,正文已采用复核时点数值,另一条复核对象 #139818 的评论数同样较快照增加一条,正文引用的即复核时点数值;快照内「未见修复 PR」的表述均指快照时点口径,不排除此后有关联修复合入。外部素材部分——Hacker News 帖子分数与评论数、趋势榜星数、官方博客的机制描述——均为各源自报口径,未经独立复现。文中提及的两个开源项目分别代指开源生态中个人 AI 助手赛道的两个头部项目,issue 编号均为公开可查的真实编号,读者可按编号自行核验最新状态。快照与复核之间只隔了一夜,九项复核对象里就有两条的评论数发生了增长——生态日报的保质期以小时计,这大概是这类文章能给出的最诚实的自我注脚。