Install
openclaw skills install @shaoqing404/claude-chat-export-analyze当用户要导出并分析与 Claude.ai 网页版的全部聊天历史(用于回顾、检索、复盘、生成报告、做时间线、找具体某次对话)时,加载本 skill。典型触发:用户提到 "claude 聊天记录"、"claude conversations.json"、"导出 claude 对话"、"分析我和 claude 的对话"、"翻翻以前和 claude 聊的"、"哪次 claude 跟我说过 X" 等。注意:本 skill 只覆盖 Claude.ai 网页版/claude.ai 的官方导出,不包括 Claude Code 本地 JSONL(那是不同的产物,需要另一套解析)。
openclaw skills install @shaoqing404/claude-chat-export-analyze本 skill 专门处理 Claude.ai 网页版(https://claude.ai) 的官方导出流程与产物。
如果用户提到的是 Claude Code(~/.claude/projects/*.jsonl)或 Anthropic Console / API,本 skill 不适用,需要走另外的解析路径。
不要一上来就让用户贴文件。先确认他们已经下载了 conversations.json。如果还没有,按下面引导走。
把你跟 Claude 的全部聊天导出,大概走这几步:
- 打开 https://claude.ai 并登录
- 左下角点你的头像 → Settings
- 左侧菜单选 Privacy
- 找到 Export your data 区域,点 Request export 或 Export data 按钮
- 同意条款,点 Confirm
- 等几分钟到几小时,Anthropic 会把下载链接发到你注册邮箱
- 邮箱里点链接,下载 ZIP,解压
- ZIP 里面有一个
conversations.json,这就是你的全部聊天记录文件可能 10MB~500MB+,内容越多越大。别打开它,别复制粘贴,直接告诉我解压后的完整路径,我自己用工具读。
cat / Read 都吃力拿到 conversations.json 之后,先用 jq 快速校验结构。预期结构:
# 顶层是 array
jq 'type' /path/to/conversations.json
# → "array"
# session 总数
jq 'length' /path/to/conversations.json
# 单条 session 字段
jq '.[0] | keys' /path/to/conversations.json
# 预期: ["account","chat_messages","created_at","name","summary","updated_at","uuid"]
如果结构不符(比如顶层是 object 而不是 array,或者字段名不同),先停下来:
不要硬解析,问用户来源。
下面是用户最常问的 7 类问题,以及对应的处理方式。
# 关键词定位(搜 assistant 回复)
jq -r '
.[] as $c
| $c.chat_messages[]?
| select(.sender == "assistant")
| select(.text | tostring | test("关键词1|关键词2"; "i"))
| $c.uuid + " | " + ($c.name // "(no name)") + " | " + $c.created_at + " | " + (.text | gsub("\n"; " ") | .[0:200])
' /path/to/conversations.json
输出形如:
195284e2-... | 摘要接收 | 2026-02-24T15:07:05Z | 收到,少卿...
然后:
# 列出所有 session 的概览
jq -r '
.[]
| .uuid + " | " + .created_at + " | " + (.name // "(unnamed)") + " | msgs=" + (.chat_messages | length | tostring)
' /path/to/conversations.json | sort
然后:
msgs > 30)的 session——通常说明那段时间在攻坚# 找"我建议你 / 你应该 / 我的建议"等强建议语
jq -r '
.[] as $c
| $c.chat_messages[]?
| select(.sender == "assistant")
| select(.text | test("我建议|建议你|你应该|我的建议|我推荐|最好的做法|不应该|我反对|我不接|我不建议|我不会"))
| $c.uuid + "|" + $c.name + "|" + (.created_at) + "|" + (.text | gsub("\n"; " ") | .[0:200])
' /path/to/conversations.json
# 展开单个 session 的所有消息
jq -r '
.[] | select(.uuid == "目标UUID")
| .chat_messages[] | "[" + .sender + " | " + .created_at + "]\n" + .text + "\n---"
' /path/to/conversations.json
输出策略:
50:先给前 5 条 + 关键转折点 + 后 5 条,问用户要不要全量
适合场景:"我和 claude 聊过哪些次工作相关的事?""那次写过的代码都在哪几个 session?""我和 claude 讨论 X 技术是什么时候开始的?"
# 1. 跑关键词扫描(关键词从用户描述中拆出)
# 2. 命中后人工/AI 归并到主题
# 3. 按时间排序
# 4. 画时间线
详见 chat-event-timeline skill——那个 skill 就是干这个的。
# session 总数
jq 'length' /path/to/conversations.json
# 消息总数
jq '[.[].chat_messages[]] | length' /path/to/conversations.json
# assistant vs human 消息分布
jq '[.[].chat_messages[] | .sender] | group_by(.) | map({(.[0]): length}) | add' /path/to/conversations.json
# 最长/最短 session
jq -r '.[] | (.chat_messages | length | tostring) + " | " + .uuid + " | " + (.name // "(no name)")' /path/to/conversations.json | sort -n
走 visual-summary skill(已经存在),把分析结果包装成 HTML。
Read 工具读 conversations.json——16MB+ 直接爆上下文jq 配合 --raw-output / -r 和选择性 path 提取jq 慢(文件 > 100MB),考虑先按时间窗口分片:jq '[.[] | select(.created_at >= "2026-01" and .created_at < "2026-02")]' 然后保存中间产物created_at 是 UTC,跟用户本地时间差 8 小时,引用时间时要注明"UTC 时间"或换算到用户时区chat_messages 数组里 text 字段有时是 null(附件/工具调用),要用 (.text // "") 兜底sender 字段值是 "human" / "assistant",不是 "user" / "assistant"——别想当然