接着昨天的会话继续

先在所有智能体里找到它,再在它所属的那个里重新打开

每个智能体都能恢复它自己的上一次会话。但没有一个能告诉你,你要的是哪一次;也没有一个看得到你在另一个工具里开过的会话——而答案往往就在那里。

先找到它

deja "connection pool exhausted"

搜索一次覆盖这台机器上所有智能体的会话记录,每条命中都带着它所属的智能体和会话 id。这正是各个工具自己做不到的一步:claude --resume 只列出 Claude 的会话,codex resume 只列出 Codex 的,两边都不知道对方的存在。

手边没有 id 的话,直接运行不带参数的 deja。全屏搜索界面一打开,列出的是你未提交改动背后的会话,以及这个项目里最近的会话;边打字边搜,↵ 阅读会话,r 在它原来的智能体里重新打开,o 换一个智能体接着做。

然后重新打开

deja resume <id>

它会打印出重新打开那次对话的命令;如果那个工具按工作目录划分会话列表,命令里也会带上必须在哪个目录下运行:

cd '/path/to/project' && grok --resume 01a03433-0c67-7331-8eb1-cd6173d4c8f9

对 Codex 会话,deja resume <id> --app 会改在 ChatGPT 桌面应用里打开,支持 macOS 和 Windows。在交互界面里,对 Codex 会话按 o,会优先给出桌面应用这个选项。

deja 索引的四十二个智能体里,有三十五个可以这样重新打开。其余七个给的是带理由的拒绝,而不是沉默:aider 只是往一个记录文件里追加内容,没有「重新打开某一次对话」这回事;Zed、VS Code Copilot Chat、Cherry Studio、JetBrains AI Assistant 和 Windsurf / Devin Desktop 要从各自的界面里重新打开,而不是从终端;DeepSeek Harness 的两个应用都不接受会话 id。Roo Code 和 Kilo Code 一半一半:它们命令行写下的可以恢复,编辑器写下的要回编辑器里打开。Reasonix 同样如此:它的命令行在某个工作区里开的会话可以恢复,桌面应用里的会话要从应用的侧边栏打开。具体哪个是哪种、为什么,format registry 里都有记录。

智能体后来删掉的会话记录,在 deja 里仍然搜得到,resume 会如实告诉你这一点,而不是打印一条必然失败的命令。deja resume <id> --write-back 会根据 deja 索引到的内容,按智能体自己的格式把它写回智能体的存储里,然后打印命令;在交互界面里,这样的会话在 Deleted 标签下,按 R 效果相同。写回的文件里是对话本身,也就是用户和助手的发言;工具调用及其输出仍然只留在 deja 里。如果智能体把会话存在数据库里,或者索引缺少它的格式所需要的内容,deja 会说明缺的是什么,而 deja show 仍然能读到这次会话。项目目录已经不在了也一样:智能体只能从那个目录找到会话的,resume 会拒绝;能从任何地方重新打开的,命令里会省掉 cd,并在 stderr 上用一行说明它将在哪里运行。pi、gjc、Kimchi 和 Senpi 会提议改为分叉这次会话,prime-agent 只有加 --fork 才接受。stderr 上的那一行也会这么说。

恢复不是合适的工具时

重新打开一次会话,带回来的是整段对话,包括那些先错后对的部分。你要的往往是结论,而不是通往结论的路:

deja ctx <id-prefix>

它把会话整理成一份摘要:做了哪些决定、动过哪些文件、跑过哪些命令,然后是它改过的代码——每处修改删掉和加上的那些行。小到可以直接粘进你正在用的会话里。搜索这一侧的更多细节,见找回解决问题的那次会话。

与此无关的那部分

索引覆盖这台机器上所有智能体的会话记录——各用各的格式——包括装 deja 之前的会话。索引和搜索都在本地:对会话记录做 BM25,建索引时就把凭据去掉(隐私)。

快速开始 · 找回解决问题的那次会话 · 历史文件在哪里