为什么现在就该导出
你在 AI 编程工具里积累的会话,是一份别人拿不到、你自己也没留档的私有语料。它的价值首先取决于数据在不在你手上:客户端清理本地库、存储格式换代、账号被封或换机器,历史就没了。而这份记录恰好能回答几个用别的方法很难回答的问题——你在哪些任务上反复返工、哪类提示词稳定有效、哪些项目花的时间远超预期。
它支持哪些工具、数据原本存在哪
- Claude Code:~/.claude/projects 下每个会话一个 JSONL
- Codex CLI:~/.codex/sessions 下的 rollout JSONL
- Cursor:state.vscdb 这个 SQLite
- Windsurf:同类 SQLite,schema 未公开,按启发式解析
- Trae:SQLite + JSONL,同样未公开 schema
- Continue:~/.continue/sessions 下每会话一个 JSON
- Gemini CLI:~/.gemini/tmp/<hash>/chats 下的 JSON
- OpenCode:~/.local/share/opencode/storage 的会话/消息/片段树
- Cline / Roo Code:编辑器 globalStorage 下每个任务一个目录
- Aider:每个项目目录里的 .aider.chat.history.md
脚本会自动识别 macOS、Linux、Windows 三套路径约定(~/Library/Application Support、~/.config、~/.local/share、%APPDATA%、%LOCALAPPDATA%),不需要你告诉它当前系统。
实际怎么跑
- python extract.py:交互式菜单,选择要抽取的来源
- python extract.py --list:只列出机器上检测到哪些工具,不导出
- python extract.py --all:全部导出
- python extract.py --sources cursor,claude_code,aider:指定来源
- python extract.py --all --merge:全量导出并合并成一份文件
环境要求只有 Python 3.9+(推荐 3.10+),没有第三方依赖,不需要先装运行时或数据库驱动。
导出之后:脱敏与编目
这一步不能跳过。导出物里包含你的代码片段、项目路径,也可能包含粘贴过的密钥。建议的默认脱敏清单:API Key 与各类 token、账号密码、内部域名与 IP、客户与项目名称、绝对路径中的用户名;替换方式优先用占位符或哈希,能整段删除的就删除。
编目则决定这份数据以后能不能用起来:至少按项目、时间、任务类型三个维度建索引,并把「任务类型」定义得可核查(例如是否涉及改动代码、是否调用外部工具、是否产生返工),避免变成一堆无法检索的日志。最后明确留存周期、存储位置、谁可以访问、删除怎么做。
先导出、再脱敏、再归档——顺序别反,共享盘别碰未脱敏的原始文件。