找回解决问题的那次会话

按你记得的那个词搜,而不是按你记不清的话题搜

问题修好了,报错也记得大概。但不记得当时用的是 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      # 哪些会话对这个文件做过决定

这些命令跳过阅读那一步,直接给答案。

历史文件在哪里 · 快速开始 · 会话文件怎么删