「七个终端窗口,每个都在不同仓库里做着不同功能,全报销了。」这位名叫大卫的开发者描述他遇到的惨案——七路Claude Code(一种命令行AI编程工具)会话同时开着,Mac突然死机,重启后,所有会话上下文全部消失。
官方给出的恢复命令是claude --resume,但在这种规模下,它的两个痛点被放大了:第一,它只列出当前目录下的会话,想恢复跨5个仓库的7个会话,你得先猜到自己当时到底开了哪些文件夹,再逐个切进去;第二,每次恢复都会接管终端窗口,也就意味着你还是要手动开新窗口、重新敲路径。桌面版的Claude App处理得很优雅,命令行版却让大卫不得不手工考古——这让他忍不了了。
![]()
然后他发现了关键线索:所有会话根本就是普通文件,存放在~/.claude/projects/<编码后的项目路径>/<会话ID>.jsonl。一个项目一个目录,一个会话一个文件,每行一个JSON对象。而每个文件开头几行,正好装着会话浏览器所需的全部信息:会话ID、工作目录、Git分支名,还有第一条用户消息。更妙的是,那些由AI代理产生的子会话,还会带上agentName字段,记录在单独的子文件夹里。这等于坐在磁盘上的完整索引,就差一个模糊查找器来展现了。
于是大卫写了个约150行的Bash脚本,内嵌一小段Python解析器,取名claude-sessions。它把跨项目的所有会话按最新到最旧排列,每一行显示距今多久、项目路径、分支和开场白。当你滚动候选时,右侧会实时预览真实对话的最后几条;按下回车,就会在 iTerm 新标签页(或 tmux 新窗口)里自动切到对应项目路径并启动恢复,而且选择器不会关闭,你可以一次接一次地快速恢复所有会话。他还加了两个贴心设计:按 Ctrl-A 过滤掉那些不属于自己的「代理工蜂」会话——在使用多AI代理工作流时,约有40%的会话文件并非由你直接发起;按 Ctrl-R 刷新列表,按 Esc 退出。
依赖只有fzf(fuzzy finder)和系统自带的 Python 3。窗口打开默认用 AppleScript 调用 iTerm2,若没有则回退到终端,在 tmux 内部则会使用tmux new-window,还能让原本的会话管理直接融入工作流。
恢复那七个会话的过程,从手工考古十五分钟,变成了连按几次回车的十秒活儿——这就是那个脚本想要解决的,唯一痛点。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.