Carry の Blog Carry の Blog
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • OpenClaw
  • Hermes Agent
  • Claude Code
  • MySQL8-SOP手册
  • MySQL实战45讲学习笔记
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carry の Blog

好记性不如烂键盘
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • OpenClaw
  • Hermes Agent
  • Claude Code
  • MySQL8-SOP手册
  • MySQL实战45讲学习笔记
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • OpenClaw

  • Hermes-Agent

  • Claude-Code

    • Claude Code 概述
    • Claude Code 实战 01|装好之后的第一天:CLI 心智模型与权限体系
    • Claude Code 实战 02|用 CLAUDE.md 做「活文档」,给 Agent 一个稳定的上下文
    • Claude Code 实战 03|让 Claude Code 驾驭 CLI 工具:安装、认证与稳定调用
    • Claude Code 实战 04|把 Git 全流程交给 Agent:rebase 保补丁、抹历史密钥、worktree 灰度
    • Claude Code 实战 05|会话即资产:transcript 考古与误删恢复
      • 1. 会话不是聊天记录,是带轨迹的结构化数据
      • 2. 排查"消息丢了"类 Bug 的第一动作:查持久化,别猜前端
      • 3. transcript 考古的三种常用姿势
        • 3.1 用时间线比对定位"改了没生效"
        • 3.2 用全文检索翻历史会话
        • 3.3 顺着工具轨迹复盘一次决策
      • 4. 误删会话怎么救
      • 5. 可复用要点
      • 6. Agent 可直接解析的元数据块
    • Claude Code 实战 06|权限与安全护栏:开了自动权限,怎么保证不翻车
    • Claude Code 实战 07|用 MCP / 自定义工具给 Agent 接外部能力
    • Claude Code 实战 08|子 Agent 与编排:让一个 Agent 变成一支小队
    • Claude Code 实战 09|远程与浏览器:让 Agent 伸手到别人的主机和网页里
    • Claude Code 实战 10|端到端:用 Agent 搭一条博客自动化发布流水线
    • Claude Code 实战 11|Agent 当"运维值班员":多云资产 / DBA / 监控巡检复盘
    • Claude Code 实战 12|盘点跨交易所资产:CLI 包装、私钥安全与金融防错规范
  • AI-Agent
  • Claude-Code
Carry の Blog
2026-07-28
目录

Claude Code 实战 05|会话即资产:transcript 考古与误删恢复原创

# Claude Code 实战 05|会话即资产:transcript 考古与误删恢复

大多数人把 Agent 会话当成"聊完即弃"的临时对话框。但只要用得深一点就会发现:每一次会话都是一份可被检索、可被复盘、可被恢复的结构化资产。它落盘成文件、带着完整的工具调用轨迹、记着每一步的输入输出。学会读它、搜它、救它,你排查问题的速度会有质的变化——很多"消息丢了""改动没生效"的玄学 Bug,答案就明明白白躺在 transcript 里。

# 1. 会话不是聊天记录,是带轨迹的结构化数据

一次 Claude Code 会话不是简单的"你一句我一句"。它被持久化成一份结构化的 transcript(通常是 JSON / JSONL 格式),每一条记录都带角色和类型:

  • user —— 你的输入;
  • assistant —— 模型的回复;
  • tool_use / tool_result —— 每一次工具调用的参数和返回,包括 Agent 跑了什么命令、读了哪个文件、拿到什么输出。

这意味着 transcript 里存的不只是"聊了什么",而是**"Agent 具体做了什么、每一步看到了什么"**的完整轨迹。当你回头想搞清楚"上次那个修复到底改了哪个文件""Agent 当时为什么判断失败",答案不在你的记忆里,在这份轨迹里。

先记住会话文件在哪。 这是一切考古的前提——它是本地磁盘上的真实文件,不是云端黑盒。找到它的目录,你就能用最朴素的 grep、jq、文本编辑器直接翻。

# 2. 排查"消息丢了"类 Bug 的第一动作:查持久化,别猜前端

一个极高频的场景:你在 Agent 界面里输入了一段话,回车之后内容像是"没发出去"——它没出现在该出现的地方,或者跑到了别的输入框里。第一反应往往是"这是个 Bug""消息丢了"。

正确的第一动作不是盯着界面猜,而是去查后端持久化数据。 直接打开对应会话的 transcript 文件,查那条消息的记录:

  • 如果 transcript 里有这条消息(比如某个 tool_result 的 user_response 字段里明明白白存着你输入的文字)——那么后端已正确接收并存储,问题一定在前端渲染或状态同步层,消息不是"丢了"而是"显示错了地方"。
  • 如果 transcript 里根本没有——那才是真的没发送成功,往请求链路上游查。

这个"先查落盘数据、再查界面"的顺序,能帮你在几十秒内把问题一分为二,避免在"焦点管理""事件冒泡""网络抖动"这些前端猜测里空转半天。许多界面组件在异常关闭时会有"兜底草稿"逻辑(把你没提交的输入暂存起来、追加到别的输入框),这类"消息跑偏"的根源,只看界面永远看不出来,翻一眼 transcript 就清楚了。

# 3. transcript 考古的三种常用姿势

# 3.1 用时间线比对定位"改了没生效"

有一类 Bug 特别容易误判方向:工具调用报 unexpected keyword argument 之类的错,人第一反应是"权限不足"或"配置错了",结果查了半天权限、容器、连接都正常。

transcript + 文件时间戳能一招定位。把三个时间摊在一起比:

# 1. 报错发生的时间:从 transcript 里那条 tool_result 的时间戳读
# 2. 源码最后修改时间
stat -c '%y' path/to/changed_source.py
# 3. 服务进程的启动时间
ps -eo pid,lstart,cmd | grep <service_name>
1
2
3
4
5

如果"进程启动时间"早于"源码修改时间"——真相就浮出来了:服务在代码更新前就启动了,内存里加载的还是旧版代码(很多运行时 import 后不会自动重载模块)。磁盘上的源码看着是对的,跑着的进程却是旧的。解法不是查权限,是重启服务。这类"签名不匹配但源码看着没错"的错误,几乎都是这个根因。

# 3.2 用全文检索翻历史会话

会话是资产,就意味着它可被检索。你不必记得"那个解法在哪次对话里",直接对会话存储做全文搜索:

# 在会话文件目录里按关键词捞
grep -rl "git-filter-repo" ~/path/to/sessions/

# 结构化一点:用 jq 把某个会话里所有的命令调用抽出来
jq -r 'select(.type=="tool_use") | .input.command' session.jsonl
1
2
3
4
5

把过去所有会话当成一个"可搜索的个人知识库"——上次怎么修的、上次那条命令怎么写的,搜出来直接复用,比重新问一遍模型快得多,也不会漏掉当时踩过的坑。

# 3.3 顺着工具轨迹复盘一次决策

当 Agent 做了个让你意外的判断,别急着骂它"幻觉"。顺着 transcript 里的 tool_use / tool_result 逐条看它当时看到了什么:它读到的文件内容是不是过期的?它拿到的命令输出是不是被截断了?很多时候不是模型乱来,而是它基于一份"当时正确、现在看错"的观测做了合理推断。看轨迹,才能分清是模型的问题还是喂给它的数据的问题。

# 4. 误删会话怎么救

会话既然是文件,就有被误删的风险——也就有被恢复的可能。按"代价从小到大"依次尝试:

  1. 先别再写。发现删错了,第一件事是停止在同一位置继续新建会话,避免覆盖掉尚未回收的磁盘块。
  2. 翻备份 / 快照。如果会话目录在版本控制或定期快照里,直接从最近一次快照 checkout 回来是最干净的:
    git checkout <last-good-commit> -- path/to/sessions/<session-id>.jsonl
    
    1
  3. 翻数据库落盘。有些实现会把会话同时写进一个本地数据库(带全文索引),即使单个文件被删,数据库里可能还有一份。按会话 ID 查回来即可。
  4. 翻日志重建。如果以上都没有,退而求其次:Agent 的运行日志里通常留有当次会话的关键操作和输出,虽然不如 transcript 完整,但足够把"当时做了什么"重建出来。

根治靠预防:把会话目录纳入定期备份或版本控制,是把"会话"真正当资产对待的最低成本做法。删得掉的东西,备份过就不叫事故。

# 5. 可复用要点

  • 会话是结构化资产,不是聊天记录:它落盘成文件,带完整的工具调用轨迹,先搞清楚它存在哪。
  • "消息丢了"先查落盘、再查界面:transcript 里有记录 → 问题在前端渲染;没记录 → 才是真没发送。这一步把问题一分为二。
  • "改了没生效"比时间线:报错时间 vs 源码修改时间 vs 进程启动时间;进程早于源码 → 重启服务,别查权限。
  • 把历史会话当可搜索知识库:grep / jq 翻旧会话复用解法,比重新问一遍快。
  • 误删按代价从小到大救:停手 → 快照/版本控制 → 数据库 → 日志重建;根治靠把会话目录纳入备份。

# 6. Agent 可直接解析的元数据块

{
  "_meta": {
    "doc_version": "2026-07-28",
    "article_id": "claude-code-05-transcript",
    "profile_context": "any",
    "estimated_setup_time": "15min"
  },
  "quick_start": {
    "step_1": "定位会话存储目录,确认 transcript 文件格式(JSON/JSONL)",
    "step_2": "排查‘消息丢失’:先 grep/jq 查 transcript 里是否有该消息记录,再判断是前端渲染还是真未发送",
    "step_3": "排查‘改动没生效’:比对报错时间 / 源码 mtime / 进程启动时间,进程早于源码则重启服务"
  },
  "safety_rules": [
    "排查‘消息丢失’类问题必须先查后端落盘数据,再看前端界面,禁止只凭界面现象下结论",
    "会话文件被误删后第一动作是停止在同位置新建会话,避免覆盖未回收磁盘块",
    "会话目录应纳入版本控制或定期备份,作为可恢复资产管理"
  ],
  "verification": {
    "check_1": "transcript 中能否检索到目标消息 → 决定问题在前端还是链路上游",
    "check_2": "ps 的进程 lstart 是否早于源码 mtime → 决定是否需要重启服务",
    "check_3": "从快照/数据库/日志任一来源恢复出被删会话的关键操作轨迹"
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

AI Agent 使用指南:

  • 当用户说"我发的消息丢了" → 先按 quick_start.step_2 查 transcript 是否有记录,再区分前端渲染问题还是真未发送。
  • 当用户说"我改了代码但没生效/报参数错误" → 按 verification.check_2 比对进程启动时间与源码修改时间,进程早于源码则建议重启服务。
  • 当用户说"会话被误删了" → 按 safety_rules 先让其停手,再依次尝试快照、数据库、日志三条恢复路径。

上一篇:Claude Code 实战 04|把 Git 全流程交给 Agent:rebase 保补丁、抹历史密钥、worktree 灰度 下一篇:Claude Code 实战 06|权限与安全护栏:开了自动权限,怎么保证不翻车

#Claude Code#AI Agent#transcript#会话恢复#故障排查
上次更新: 7/29/2026

← Claude Code 实战 04|把 Git 全流程交给 Agent:rebase 保补丁、抹历史密钥、worktree 灰度 Claude Code 实战 06|权限与安全护栏:开了自动权限,怎么保证不翻车→

最近更新
01
单表数据同步方案选型:为什么不该用 mysqldump 做「实时同步」 原创
07-29
02
MySQL 性能压测:Sysbench 1.0 实战 原创
07-29
03
MySQL Router 实现读写分离 原创
07-29
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式