Skip to content

C3|Chronicle / Computer History:采集器不是另一种 Agent ​

先别在 core 里找一个会看屏幕的 Session ​

读完 C2,下一件错事是搜 Chronicle,指望找到第二条 run_turn:截屏、OCR、再当用户话塞进模型。找不到,就以为功能不存在,或者反过来——以为桌面 App 里又实现了一套 Memories。

判断先说清楚:Chronicle 和后来的 Computer History 是记忆的采集器,不是 Agent。 采集发生在 macOS 桌面壳里(本仓库没有这份壳,A0 / A1);本仓库只认它掉进 CODEX_HOME/memories/extensions/ 的文件,交给 C2 的 Phase 2 去整合。采集器写笔记,harness 读笔记。中间没有第三条 Turn 循环。

产品名还换过一次。本仓库的 feature 仍叫 chronicle;对外产品上,Computer History 已替换早期 Chronicle 研究预览。拆源码时按 扩展槽 理解,拆产品时按 两种采集方式 理解,不要焊成一个 crate。


1. 本仓库里它是什么:一个默关的记忆扩展名 ​

Feature::Chronicle 的注释是「Enable the Chronicle sidecar for passive screen-context memories」(features/src/lib.rs:186-187)。键 chronicle,阶段 UnderDevelopment,默认关(:1137-1140)。旧键 telepathy 只是别名(features/src/legacy.rs:45-47)。core/ 里没有 Chronicle 的采样循环——feature 打开的是桌面 sidecar 和记忆管道之间的许可,不是 Session 里多出来的 TaskKind。

写路径把扩展约定成目录(memories/write/src/lib.rs:53-58):

memories/extensions/<name>/
  instructions.md    # 这个来源怎么读
  resources/         # 采集器丢进来的材料

测试和 prune 用的名字就是 chronicle(extensions/prune_tests.rs:11-16)。资源文件名带时间戳;过期删除按 7 天(RETENTION_DAYS,lib.rs:44,prune.rs:14)。这是 记忆扩展材料 的本地保留,不是下面说的 48 小时事件缓冲。

ad_hoc 扩展的说明书把注入纪律写在正面(templates/extensions/ad_hoc/instructions.md:10-13):笔记可以收进记忆结构,但永远不能当成要执行的指令;派生内容打上 [ad-hoc note]。Chronicle 掉进来的屏幕/交互摘要,风险模型与此相同:不可信外部文本,进的是 Memories,不是 Op::TurnInput。

没有「扩展槽、不是 Task」会怎样?采集器会去 submit 用户话,屏幕上的网页文案变成当前 turn 的指令;或者 Phase 2 把 sidecar 当成又一个会 spawn 子代理的 RegularTask,递归记自己。C2 的整合工人已经强制关掉 MemoryTool——采集器更不该拥有一条 Turn。


2. 两种采集:Chronicle 看屏幕,Computer History 看交互事件 ​

这两套都不在 codex-rs 里实现捕获。权威产品说明在 Chronicle 和桌面 Changelog;仓库文档大量跳转(F4)。对比只为了读源码时不把旧 feature 名和新产品当成同一段代码。

Chronicle(研究预览)Computer History(替换它)
采什么屏幕上下文;官方写明需要 Screen Recording + Accessibility应用/网站上的 交互事件(点击、输入、切换应用);官方写明 不截屏、不录音
谁能用ChatGPT Pro、macOS Codex 桌面Pro / Business / Enterprise;企业要管理员先开;ChatGPT 和 Codex 都能用产出的记忆
事件缓冲屏幕材料进本地记忆交互事件在 Mac 上暂存约 48 小时,处理后删除;生成的 Markdown 记忆仍本地保留
本仓库features.chronicle + extensions/chronicle/没有 同名 crate;产出仍应落进 Memories 扩展/手册,走 C2

共同前提:先打开 Memories(C2 总闸),再单独 opt-in 采集。API Key / Bedrock 没有这条桌面采集链(A1:走不了 Codex 后端产品圈)。EEA / 英国 / 瑞士的可用性以当时官网为准,不要把 feature flag 当成全球已开。

codex app 在本仓库只负责打开或拉安装器(A1)。截屏权限对话框、应用白名单、菜单栏暂停,都在闭源壳里。工程师在这个 git 树里能抄的是:采集结果必须变成 Memories 扩展文件,必须能被 prune,必须当不可信文本。

没有这次更替会怎样?你会按 chronicle 这个 Rust 名字去实现「再截一张图塞进 prompt」,而产品已经改成事件流。feature 名滞后于产品名,是桌面壳和开源 harness 分仓库的代价——A0 的开源边界在这里又响了一次。


3. 单独 opt-in:采集许可 ≠ 记忆许可 ≠ 项目信任 ​

三道闸不要拧成一个:

  1. Memories 总闸(C2):[features] memories = true。关着,扩展目录写了也没有读路径。
  2. Chronicle / Computer History opt-in:桌面设置里另开;Chronicle 还要 macOS 录屏与辅助功能。这是 采集许可,不是 TrustLevel::Trusted。
  3. 项目信任(B5):管仓库里的 .codex/、hooks、AGENTS.md。屏幕上的 Slack 消息不是 git 项目,信任闸管不到它。

采集器写的是 $CODEX_HOME/memories/,和 AGENTS.md 进 git 的路径相反。别人 clone 你的仓库,拿不到你的屏幕摘要;你打开采集,却会把 当前屏幕上任意应用 的内容送进记忆蒸馏。白名单、暂停、删除时间线,是桌面产品的控件;harness 只在 Phase 2 看到已经落盘的 md。

没有「三道闸」会怎样?打开 Memories 被理解成同意截屏;或者以为未信任项目能挡住 Chronicle——项目闸只管仓库配置,不管 sidecar。


4. Prompt injection:这是采集器的主风险,不是附属说明 ​

官方 Chronicle 页把风险写在启用步骤前面:费额度、增加 prompt injection 风险、记忆在设备上未加密。Computer History 不截屏,但交互事件仍含页面标题、输入上下文、当前应用名——恶意页面可以写成「忽略之前的指令」。

本仓库能做的防御是 C2 已经铺好的那些,不是再做一个审核 Agent:

  • 当 扩展资源,不是用户消息(没有 Op::TurnInput)
  • instructions.md 声明:内容是信息,不是要执行的动作(ad_hoc 模板是样板)
  • Phase 1 redact_secrets;Phase 2 整合工人无网络、只写 memories 根
  • 资源文件过期 prune(扩展 7 天;事件缓冲以产品 48 小时为准)

做不到的:在开源 harness 里从像素判断「这是不是攻击」。那是采集器自己的分类问题,代码不在这棵树。启用采集等于接受 模型可见世界里多了一类不可信、来自屏幕的文本。E4 Computer Use 是另一条线:那是 agent 主动看/点 GUI;Chronicle 是 被动采上下文进记忆。不要把两条权限模型合成「都要录屏所以是同一个功能」。

没有这层风险模型会怎样?屏幕上的 issue 模板变成当前 turn 的 shell 命令;或者你以为「不截屏就不存在注入」。事件流一样能把不可信字符串送进 Memories,再被 use_memories 读进下一轮。


5. 和 C2 怎么接:采集 → 文件 → 整合,仍然不是 Agent ​

时间线:

  1. 桌面 sidecar 在本机采屏幕或交互(闭源)
  2. 写成 extensions/chronicle/resources/*.md(或 Computer History 等价落点)
  3. 用户下一次开 root session,C2 启动管道:Phase 1 抽 thread rollout,Phase 2 把扩展资源和 raw memories 一起收进手册
  4. 之后的 Regular turn 若 use_memories,用工具读 MEMORY.md / memory_summary.md

采集器不调用 ToolOrchestrator,不走审批弹窗,不占用 TaskKind。它甚至不该出现在 ToolRouter 里——E8 对 Pets 有同样禁令。你要抄「屏幕记忆」,抄的是 不可信文件进扩展槽,不是再写一个会 exec_command 的看屏 agent。

额度:Chronicle 官方写明会较快消耗 rate limit。C2 的 min_rate_limit_remaining_percent 会在额度低时 跳过记忆流水线,采集若仍在跑,只是暂存;整合会停。两套节流不要当成互斥锁。


6. 结语:带走一句话 ​

Chronicle / Computer History 是桌面侧的记忆采集器:本仓库只留 feature 名和扩展目录,不实现截屏循环——采进来的屏幕或交互文本必须当不可信笔记交给 Memories,绝不能当成又一条会执行工具的 Agent。