智能体把上下文弄丢了
崩溃、清空、重连——工作还在磁盘上
这发生在任务做到一半,不是换任务的间隙:窗口被清空,命令行被重启,会话恢复出来却是空的,标签页不是你关的。一小时前还在做的工作,智能体现在自信得像是完全没参与过。
上下文没丢,丢的是回到它的路
几乎每个编程智能体都会在进行中把每一轮写到磁盘上——四十一个智能体,各有各的历史记录格式。崩溃或清空毁掉的是模型正在用的上下文,不是那份会话记录。文件还在 ~/.claude/projects、~/.codex/sessions、~/.qwen/projects,或者你的智能体自己放记录的地方,你现在想不起来的那个决定就在里面。
拿回你正在用的这次会话
deja wip deja "你正在做的那件事"
deja wip 回答的是一次接不上前文的会话的第一个问题:我刚才在做什么。答案来自这个目录里上一次会话自己的记录——任务是什么、定下了什么、进行中的文件有哪些、最后跑的是哪条命令、它失败了没有。这些都没有单独存过,每次都是从那份记录里算出来的。
搜索覆盖这台机器上每个智能体的历史,所以上下文原来在哪个工具里并不重要,那个工具是不是还在,也不重要。deja ctx <query> 把最匹配的一次会话收成一份摘要,而不是一整面记录。要贴进新窗口的,就是这份摘要。
如果丢掉上下文的那个工具支持,deja resume <id> 会打印重新打开那次对话的确切命令,而且是在那次对话所属的目录里。四十一个智能体里,有三十五个支持。单独运行 deja 打开的界面,最先列出的就是跟你未提交改动有关的会话,丢掉的那次通常就在里面:按 r 重新打开它,或者按 o,把它问过什么、定下了什么、还有什么没做完,交给你选的另一个智能体。
让下一次不再丢
deja install --auto
装上之后,找回这件事不用你记着去做。会话开始时就会召回,所以新开的窗口已经知道这个项目最近的决定;每次提问时也会召回,关于旧工作的问题就从会话记录里回答,而不是靠猜。凡是 deja 能接上压缩事件的代理(Claude Code、Codex、Qwen、Kimi、Grok、Cursor CLI、opencode、pi 等),都会在压缩开始时把当时的工作上下文留下,压缩结束后交还一次。窗口被清空一次,代价是一段上下文,而不是一下午。
它做不到的
智能体从没写下来的,找不回来,deja 也不假装可以:它索引的是文件,不是模型当时脑子里有什么。崩溃前来不及写到磁盘的会话——有的工具按轮次边界写,不是每个 token 都写——会丢掉最后一轮。你记得的,通常恰恰是这一轮。
索引覆盖的范围
索引覆盖这台机器上每个智能体的会话记录——各有各的格式——包括装上 deja 之前的那些。建索引和检索都在本地:对会话记录做 BM25,不需要模型(embedding 是可选的,用 deja embed 打开),凭据在建索引时就被脱敏(隐私)。