对话聚合
每个编程智能体都各自保存自己的历史。Claude Code 把对话记录写入 ~/.claude,Codex 写入 ~/.codex,OpenCode 写入一个本地数据库——各在其位、各用其格式,彼此互不可见。对话聚合把这一切汇集到一个工作区中:将 Codeg 指向一个项目,它就会扫描每个智能体的存储,查找你在那里运行过的会话,然后把它们与你 Codeg 原生的对话一并列出。
而且你导入的一切都不是僵死的存档。打开这些会话中的任意一个并继续下去——原来的智能体会带着完整无缺的历史接续话题。你上周在终端里开启的一段对话,会在 Codeg 的工作区中继续,仿佛从未离开过。
如何导入
聚合是一个单一的操作,而且始终由你来触发。在对话侧边栏中,右键点击某个文件夹(或打开它的 ⋯ 菜单),选择导入本地会话。Codeg 会扫描你已安装的智能体,查找在该文件夹中运行过的会话并将其添加到列表中——完成后你会看到一条类似 "已导入 12 个会话,跳过 3 个" 的提示。
- 它是按文件夹进行的。 每次导入覆盖一个项目。打开另一个文件夹并在那里再运行一次——没有"一次性导入所有位置的一切"这样的开关。
- 它是按需进行的。 Codeg 从不在后台扫描,也不监视你的智能体文件。只有在你要求时会话才会出现,因此导入始终是一个有意为之的步骤。
- 它是本地的。 导入读取的是你机器上智能体自己的文件——不会上传任何内容,智能体的原始会话也保持不变。
Codeg 匹配什么
一次扫描会查看 Codeg 支持的每一个智能体——甚至包括你尚未在 Codeg 中启用的那些。对于每一个,它都会读取该智能体的原生会话存储(Claude Code 的 ~/.claude/projects、Codex 的 ~/.codex/sessions、OpenCode 的本地数据库等等),并保留那些工作目录与你导入的文件夹相匹配的会话。
这个路径匹配就是全部规则:只要你在本项目的目录中运行过某个会话,它就会出现。 因此,导入一个文件夹能让你获得每个智能体针对该项目的历史,全部汇集在一个列表中——而且,即便是你在使用 Codeg 很久之前就配置好的智能体,只要它的文件还在磁盘上,也依然能浮现出它过往的工作。
→ 支持的智能体 列出了每个智能体保存会话的位置。
移动过项目?
会话是按它们运行时所在的目录路径来匹配的。如果你此后重命名或移动了项目文件夹,它较早的会话仍然指向旧路径——因此它们不会与新位置的文件夹匹配。把原始位置作为文件夹打开,即可把它们导入进来。
已导入、已更新、已跳过
扫描后的提示会拆分成三个数字,它们合在一起就能确切告诉你发生了什么:
- 已导入——添加到列表中的全新会话。
- 已更新——已经在 Codeg 中的会话,其标题得到了同步。许多智能体只有在会话运行一段时间后才为其命名,因此稍后的一次导入会拾取那个名称。会话的其他方面都不会改变。
- 已跳过——已经存在且无内容需要更新的会话。
正因为有这样的区分,重新导入始终是安全的。 在一段工作会话之后再运行一次,你就能拉入新增的内容,而不打扰已有的内容:Codeg 不会重复某个会话、不会覆盖你自己设置的标题,也不会打乱你的列表。每当你在 Codeg 之外工作过、希望工作区跟上进度时,就把它变成一种习惯。
从上次中断处继续
以下这一点让聚合不只是一个历史查看器:导入的会话是活的。 打开一个会话,它看起来就和其他任何对话一样——完整的对话记录,直接从智能体自己的文件中读取。输入一条提示词,原来的智能体就会重新连接到那个会话,把之前的一切作为上下文继续下去。
- 由原来的智能体处理。 导入的 Codex 会话会用 Codex 恢复,Claude Code 会话则用 Claude Code——Codeg 按 id 把各自的会话交还给对应的智能体,因此不会在转手过程中丢失任何上下文。
- 历史来自磁盘。 每次你打开会话,Codeg 都会重新读取智能体的对话记录,因此你看到的始终是真实内容,绝不是过时的副本。这也是导入之所以快的原因:它记录的是每个会话所在的位置,而不是它的第二份副本。
- 当某个会话无法重新打开时——智能体此后在它那一侧让它过期或删除了它——Codeg 会告知你,并主动提供重新加载或以一个新对话取而代之的选项,而不是把你晾在一边。
导入的对话不带任何特殊徽标——它们按时间新近程度排列在你的历史中,会在搜索(⌘K)中出现,行为与你在 Codeg 中开启的对话完全一样。
引用过往会话
由于导入的会话只是又一个对话,你可以把它的历史交给一项新任务。在 composer 中输入 @ 并选择一个会话,即可把它作为上下文拉进来——这样一个全新的对话就能在旧对话的基础上展开,而无需你重新解释发生过什么。它与聚合天然契合:把上个月的工作扫描进来,等下次遇到相关任务时再引用相应的线程。