找回解决问题的那次会话
按你记得的那个词搜,而不是按你记不清的话题搜
问题修好了,报错也记得大概。但不记得当时用的是 Claude Code 还是 Codex、在哪个项目下、是三周前还是三个月前——而智能体自己的历史列表只是一堵标题墙,一次只有一个工具,倒序排着。整台机器上没有任何东西能把它们全部放在一起搜。
按记得最清楚的那个词搜
不是话题,是词。一条报错原文、一个函数名、一个文件路径、一个旗标。这些内容在会话记录里是原样保存的,也正是它们能把你要的那次会话,从四十个讨论同一主题的会话里分出来:
$ deja "connection pool exhausted" [claude] api · Jul 8 · 8f31c0a9 — 2 matches login started failing after refresh token rotation; jwt kid mismatch in tests fixed by reloading jwks cache after rotateKey and adding a clock-skew test [codex] web · Jul 1 · b77d91e2 — 1 match refresh token cookie needed SameSite=Lax in local callback flow
多个词之间是 AND 关系,加引号要求整句完全一致,而没有精确命中时,搜索会退回到词形变化和近似拼写,而不是直接返回空。工具那一列比看上去更重要:你要找的那次会话,往往就在你没想起来的那个工具里。
不靠猜地收窄范围
--harness claude、--project api-gateway——确定的时候再用,而且只在确定的时候用。--since 30d——硬过滤器。查询里带日期是更柔和的版本:它把最近的会话往前排,但不藏掉更早的,因为「我记得大概是春天」只是个提示,如果其实是四月,它不该把这个答案扔掉。--role user——只搜你自己输入的内容。记得自己说过什么、不记得答案是什么的时候,这是个好过滤器。deja last 20 --project api——不带查询,只是列出一个项目里最近的会话。
读完,然后接着聊
一条命中会给你一个会话 id。拿它做两件事:
deja show 8f31c0a9 # 读那次会话 deja ctx 8f31c0a9 # 一份 Markdown 摘要,粘到你正在做的事情里 deja resume 8f31c0a9 # 在跑那次会话的智能体里重新打开
resume 把 id 交回给拥有那次会话的智能体,并带上项目目录,让那个智能体自己的列表收窄到这一个。deja 读的三十四个智能体里有二十七个可以这样恢复。剩下七个——aider、Cherry Studio、Command Code、DeepSeek Harness、VS Code Copilot Chat、ZCode 和 Zed——没有自己的恢复入口,deja 会直说,而不是假装可以。Roo Code 一半一半:它命令行创建的任务用 roo --session-id,编辑器里的任务回到编辑器里打开。
id 按前缀匹配,所以结果里打印的八个字符就够输入了。
答案是一条命令而不是一次会话的时候
很多时候你要的不是那段对话,而是里面的一句话:
deja how "docker compose up" # 这个项目实际用的启动命令 deja fix "pq: too many connections" # 那个报错之后跑过什么、在哪里真正修好了 deja blame path/to/file.go # 哪些会话对这个文件做过决定
这些命令跳过阅读那一步,直接给答案。