<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Claudecode on 搬砖程序员带你飞</title>
        <link>https://lpflpf.cn/tags/claudecode/</link>
        <description>Recent content in Claudecode on 搬砖程序员带你飞</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-CN</language>
        <managingEditor>lipengfei634626165@163.com (lpflpf)</managingEditor>
        <webMaster>lipengfei634626165@163.com (lpflpf)</webMaster>
        <lastBuildDate>Wed, 16 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://lpflpf.cn/tags/claudecode/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>会话搬家的中间表示：从 txcript 看跨 agent 会话转换能保住什么</title>
            <link>https://lpflpf.cn/posts/txcript-session-ir-2026-09-16/</link>
            <pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate><author>lipengfei634626165@163.com (lpflpf)</author>
            <guid>https://lpflpf.cn/posts/txcript-session-ir-2026-09-16/</guid>
            <description>&lt;img src=&#34;https://cdn.lpflpf.cn/covers/txcript-session-ir-2026-09-16-plain.jpg&#34; alt=&#34;Featured image of post 会话搬家的中间表示：从 txcript 看跨 agent 会话转换能保住什么&#34; /&gt;&lt;p&gt;你在 Claude Code 里跟一个 bug 缠了一个小时，上下文里塞满了读过的文件、跑过的命令、试错过的三条死路。现在你怀疑换个模型能更快破局，想让 Codex 接着干——然后你发现，除了手动复述一遍，没有任何办法把这一个小时的现场搬过去。&lt;/p&gt;&#xA;&lt;p&gt;这不是配置问题。&lt;code&gt;AGENTS.md&lt;/code&gt; 可以软链，settings 可以转换，官方甚至给了 &lt;code&gt;/import&lt;/code&gt;。真正搬不动的，是&lt;strong&gt;会话本身&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;OpenAI 官方的 import 文档把这件事写得非常清楚：&lt;code&gt;AGENTS.md&lt;/code&gt;、&lt;code&gt;settings.json&lt;/code&gt;、skills、plugins、memories、MCP server、hooks、subagents 全都列进了导入清单——而关于对话，只有一行：&lt;strong&gt;&amp;ldquo;Codex CLI imports up to 50 chats from the last 30 days.&amp;rdquo;&lt;/strong&gt;（&lt;a class=&#34;link&#34; href=&#34;https://learn.chatgpt.com/docs/import&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;learn.chatgpt.com/docs/import&lt;/a&gt;，访问 2026-09-16）&lt;/p&gt;&#xA;&lt;p&gt;换句话说，&lt;strong&gt;厂商的导入搬的是你的&amp;quot;设置&amp;quot;，不是你的&amp;quot;工作&amp;quot;&lt;/strong&gt;。而工作才是你花掉的那一个小时。&lt;/p&gt;&#xA;&lt;p&gt;这篇文章拆一个叫 txcript 的开源项目——它自称 &amp;ldquo;Pandoc for AI chats&amp;rdquo;，做的事情就是把会话在不同 harness 之间转换。我不打算给你抄一遍它的命令（README 里都有），而是借它当手术台，把三个真正值得搞清楚的问题摆到台面上：会话在盘上长什么样、为什么必须要有中间表示、以及转换时到底会掉什么。如果你正在为一个团队做 agent 集成，这三个问题的答案决定了你要不要押注这条路。&lt;/p&gt;&#xA;&lt;h2 id=&#34;会话不是文档是-agent-的私有副作用&#34;&gt;会话不是文档，是 agent 的私有副作用&#xA;&lt;/h2&gt;&lt;p&gt;要理解&amp;quot;搬会话&amp;quot;为什么比&amp;quot;搬配置文件&amp;quot;难一个数量级，看一眼盘上的真实结构就够了。&lt;/p&gt;&#xA;&lt;p&gt;Claude Code 把一个 session 存成 &lt;code&gt;~/.claude/projects/&amp;lt;编码后的cwd&amp;gt;/&amp;lt;uuid&amp;gt;.jsonl&lt;/code&gt;——一个会话一个 JSONL 文件，每行一个 JSON 对象，用 &lt;code&gt;type&lt;/code&gt; 字段区分。看起来挺朴素，但关键在于：&lt;strong&gt;会话里的消息不是按文件顺序组织的，而是按 &lt;code&gt;parentUuid&lt;/code&gt; → &lt;code&gt;uuid&lt;/code&gt; 串成的一条链&lt;/strong&gt;。文件里还有 &lt;code&gt;summary&lt;/code&gt;、&lt;code&gt;system&lt;/code&gt;、&lt;code&gt;attachment&lt;/code&gt;、&lt;code&gt;file-history-snapshot&lt;/code&gt; 这些书签性质的记录混在中间。其中 &lt;code&gt;system&lt;/code&gt; 行尤其麻烦：它大部分时间是&amp;quot;记账&amp;quot;用的，但在较新版本的 CLI 里，&lt;code&gt;subtype: &amp;quot;local_command&amp;quot;&lt;/code&gt; 的 system 行又会承载斜杠命令的输出——&lt;strong&gt;同一个类型，不同版本，语义不一样&lt;/strong&gt;。（&lt;a class=&#34;link&#34; href=&#34;https://raw.githubusercontent.com/skillsynchq/txcript/main/docs/formats/claude-code.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;txcript claude-code.md&lt;/a&gt;，访问 2026-09-16）&lt;/p&gt;&#xA;&lt;p&gt;Codex 那边更绕。rollout 文件按日期分层放在 &lt;code&gt;~/.codex/sessions/YYYY/MM/DD/&lt;/code&gt;，而这个文件里&lt;strong&gt;同时交织着两份日志&lt;/strong&gt;：&lt;code&gt;response_item&lt;/code&gt; 是协议日志，记录模型实际交换的内容；&lt;code&gt;event_msg&lt;/code&gt; 是显示日志，记录 TUI 渲染的东西。大部分内容两边都有，但 shell 的真实结果（&lt;code&gt;aggregated_output&lt;/code&gt;、&lt;code&gt;exit_code&lt;/code&gt;）只在 &lt;code&gt;event_msg&lt;/code&gt; 里，而 usage 需要在 &lt;code&gt;token_count&lt;/code&gt; 加 &lt;code&gt;task_complete&lt;/code&gt; 两个状态事件的配合下，才能回填到那一轮最后一条 assistant 文本上。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;这不是&amp;quot;每行独立解析&amp;quot;能搞定的事，而是一趟有状态的解析&lt;/strong&gt;：&lt;code&gt;turn_context&lt;/code&gt; 和 &lt;code&gt;task_started&lt;/code&gt; 划定当前轮次，assistant 消息继承该轮的模型，工具调用靠 &lt;code&gt;call_id&lt;/code&gt; 配对——唯独 web search 例外，因为它的调用常常根本没有 &lt;code&gt;call_id&lt;/code&gt;，只能靠序列化后的 &lt;code&gt;action&lt;/code&gt; 对象反查。（&lt;a class=&#34;link&#34; href=&#34;https://raw.githubusercontent.com/skillsynchq/txcript/main/docs/formats/codex.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;txcript codex.md&lt;/a&gt;，访问 2026-09-16）&lt;/p&gt;&#xA;&lt;p&gt;看清这里的困境了：&lt;strong&gt;同一个仓库、同一份 JSONL，每一家都在里面塞了自己的状态机，而且谁都没打算给外人读。&lt;/strong&gt; Claude Code 是闭源的，Anthropic 官方文档只告诉你会话存在哪儿，并且明确声明记录格式属于&amp;quot;内部实现、随版本变化&amp;quot;——txcript 的格式文档因此只能标注自己是 reverse-engineered，观测到的 CLI 版本跨度从 0.144 一直到 2.1.227。&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;格式是各家内部实现，不是接口。想让它变成接口，就必须引入中间表示。&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;common-模型是那条-ir五类-block加一个显式留白的-system-prompt-槽位&#34;&gt;Common 模型是那条 IR：五类 block，加一个显式留白的 system prompt 槽位&#xA;&lt;/h2&gt;&lt;p&gt;txcript 的抽象很克制：&lt;code&gt;Transcript = Meta + Vec&amp;lt;Message&amp;gt;&lt;/code&gt;，而 &lt;code&gt;Message&lt;/code&gt; 里只装五类 typed block——&lt;code&gt;Text&lt;/code&gt;、&lt;code&gt;Thinking&lt;/code&gt;、&lt;code&gt;ToolUse&lt;/code&gt;、&lt;code&gt;ToolResult&lt;/code&gt;、&lt;code&gt;Image&lt;/code&gt;。斜杠命令被建模成 &lt;code&gt;Tool::Command&lt;/code&gt; 加一个配对的 &lt;code&gt;ToolResult&lt;/code&gt;，于是&amp;quot;用户敲了 /release&amp;quot;和&amp;quot;模型调了 Bash&amp;quot;在数据结构上变成了同一类事件。&lt;/p&gt;&#xA;&lt;p&gt;这个设计里最值得停一下的，是它&lt;strong&gt;没有&lt;/strong&gt;做什么。&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;txcript export&lt;/code&gt; 写出的交换格式叫 Simple——一份纯 JSON 文档，没有目录、没有 store、&lt;code&gt;txcript list&lt;/code&gt; 里也不会出现，你把它拷到另一台机器上就能 &lt;code&gt;continue&lt;/code&gt;。而它的文档里明明白白写着：&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;There is no system-prompt slot, deliberately. No harness transports a system prompt through conversion — each rebuilds its own environment on resume — so a field here would silently die at the hub.&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;（&lt;a class=&#34;link&#34; href=&#34;https://raw.githubusercontent.com/skillsynchq/txcript/main/docs/formats/simple.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;txcript simple.md&lt;/a&gt;，访问 2026-09-16）&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&amp;ldquo;故意没有 system prompt 槽位&amp;rdquo;&lt;/strong&gt;——这一句是整个方案里最锋利的工程结论，比任何功能介绍都更重要。&lt;/p&gt;&#xA;&lt;p&gt;它承认的不是&amp;quot;我们还没做完&amp;quot;，而是&amp;quot;这件事在语义上就不该做&amp;quot;。因为没有任何 harness 会在 resume 的时候接受一个外来 system prompt，每一个都坚持用自己的 system instructions 和工具集重建环境。就算你在交换格式里硬塞一个槽位，它也会在写入目标 harness 的那一刻静静死掉。&lt;/p&gt;&#xA;&lt;p&gt;顺着这个逻辑，文档给了一条很实用的操作建议：&lt;strong&gt;会话所依赖、但不由任何工具调用产生的上下文，要内联写在 &lt;code&gt;user&lt;/code&gt; 消息里&lt;/strong&gt;——注入的记忆、预加载的指令，都该放在模型当时看到它们的那个位置上。而目标 harness 自己会在 resume 时重新生成的环境脚手架（目录列表、git status），最好的处理方式是干脆省略。&lt;/p&gt;&#xA;&lt;p&gt;中间表示的天花板不是技术没做到，是语义上不该做。想清楚这一点，后面所有的&amp;quot;有损&amp;quot;就都好理解了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;保真是分层的native-往返无损过一次-common-就丢东西&#34;&gt;保真是分层的：native 往返无损，过一次 Common 就丢东西&#xA;&lt;/h2&gt;&lt;p&gt;很多介绍这类工具的文章会含糊地说&amp;quot;可能会丢失部分内容&amp;quot;。这句话没有信息量。&lt;strong&gt;有损是可以被具体化成机制的&lt;/strong&gt;，而且分成了清晰的三层。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;第一层：同一 harness 的 native 往返，是无损的。&lt;/strong&gt; 这是常有误解的地方。txcript 在 native 层保留每一个 payload 的原始 JSON，包括它不认识的字段——未知行会存成 &lt;code&gt;Record::Other&lt;/code&gt; 原样带走。所以&amp;quot;读进来再写回去&amp;quot;这件事，字节级是保真的。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;第二层：一旦经过 Common，损失开始发生，而且是按来源分门别类的。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Claude Code 侧的机制是&lt;strong&gt;确定性重生成&lt;/strong&gt;：Common → native 时会用 UUIDv5 重新生成 entry id，于是记账行（&lt;code&gt;attachment&lt;/code&gt;、&lt;code&gt;file-history-snapshot&lt;/code&gt;、&lt;code&gt;mode&lt;/code&gt; 这些）、envelope 上未被建模的 &lt;code&gt;extra&lt;/code&gt; key（&lt;code&gt;isSidechain&lt;/code&gt;、&lt;code&gt;requestId&lt;/code&gt;、&lt;code&gt;userType&lt;/code&gt;……）、以及未建模的 block 类型，全部消失。同一个会话如果走的是同 harness 的 native 路径，这些东西会全部保留。&lt;/p&gt;&#xA;&lt;p&gt;Codex 侧的机制是&lt;strong&gt;不透明内容被主动排除&lt;/strong&gt;：reasoning item 上的 &lt;code&gt;encrypted_content&lt;/code&gt;（推理的不透明加密内容）不进 Common，sandbox/approval 上下文、rate limit 信息、所有 display-only 事件同样不进。最值得注意的是 &lt;code&gt;apply_patch&lt;/code&gt; 的降级规则——&lt;strong&gt;只有&amp;quot;单独一个单 hunk 的更新&amp;quot;才能映射成 &lt;code&gt;Edit&lt;/code&gt;，&amp;ldquo;单独新增一个文件&amp;quot;才能映射成 &lt;code&gt;Write&lt;/code&gt;；多文件、多 hunk、删除、移动，一律降级成 raw &lt;code&gt;ApplyPatch&lt;/code&gt;，只剩一串受影响的路径。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;第三层：写进目标 harness 时，还会被它自己的 schema 强制归一化，而且不可逆。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;两个例子足够说明性质。其一，Codex resume 硬性要求 &lt;code&gt;session_meta&lt;/code&gt; 里必须写出 &lt;code&gt;model_provider: &amp;quot;openai&amp;quot;&lt;/code&gt;，因为当前版本会把 null provider 解析成空字符串，然后 resume 直接失败，报 &lt;code&gt;Model provider &amp;quot;&amp;quot; not found&lt;/code&gt;。其二，外来的工具名会被规范到 OpenAI 要求的 &lt;code&gt;[A-Za-z0-9_-]+&lt;/code&gt; 字符集：不支持的字符变成 &lt;code&gt;_&lt;/code&gt;，空名字变成 &lt;code&gt;tool&lt;/code&gt;。这个规范化只在写入端发生，&lt;strong&gt;不可逆，而且不同的名字会收敛到一起——&lt;code&gt;a.b&lt;/code&gt; 和 &lt;code&gt;a/b&lt;/code&gt; 会变成同一个名字。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;把三层叠起来看，结论就清楚了：&lt;strong&gt;txcript 这一类项目在修的问题，主要是&amp;quot;搬过去能不能跑起来&amp;rdquo;，而不是&amp;quot;搬过去像不像原来那样&amp;quot;。&lt;/strong&gt; 翻它近几个版本的处理就知道——sanitize 重放的工具名、把自由格式的工具输入导出成对象、给连续的 assistant 消息生成唯一 entry id，几乎全在&amp;quot;能不能跑&amp;quot;这个区间里。&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;有损不是 bug，是设计前提。要求&amp;quot;搬过去一模一样&amp;quot;，等于要求两个 agent 共享同一套内部实现。&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;哪些东西不会跟你走项目文件目标模型的工具以及会话的保质期&#34;&gt;哪些东西不会跟你走：项目文件、目标模型的工具，以及会话的保质期&#xA;&lt;/h2&gt;&lt;p&gt;把边界写成可以逐条对照的清单，比记住&amp;quot;它有损&amp;quot;有用得多。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;项目文件必须自己另外带。&lt;/strong&gt; 这是 README 里明说的：conversion carries conversation history, project files must be available separately。&lt;code&gt;txcript export&lt;/code&gt; 出来的 &lt;code&gt;run.json&lt;/code&gt; 拷到另一台机器，记录的 &lt;code&gt;cwd&lt;/code&gt; 如果存在就沿用，不存在就换成 &lt;code&gt;continue&lt;/code&gt; 运行所在的目录——但那个目录里的代码，得你自己同步过去。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;目标 harness 自己决定工具集。&lt;/strong&gt; 源会话里的 tool call 到了那边只是历史记录，不会给目标新增任何能力。Claude Code 里的 &lt;code&gt;Read&lt;/code&gt;、&lt;code&gt;Grep&lt;/code&gt;，在 Codex 里不会变成它的工具；反过来也一样。这就是那张能力矩阵存在的原因：Claude Code、Codex、OpenCode、Cursor CLI、Cursor desktop、pi、Campfire、Cowork、Grok CLI、fx、Antigravity 标的是可读可写，&lt;strong&gt;而 Hermes Agent 和 Amp 只读、不能续写&lt;/strong&gt;，Claude Chat 和 ChatGPT 更是走未公开的私有 web API、复用你本地 app 的登录，默认根本不出现在 &lt;code&gt;txcript list&lt;/code&gt; 里。&lt;/p&gt;&#xA;&lt;p&gt;所以&amp;quot;支持 17 个 harness&amp;quot;这个数字有大量脚注，不能当卖点直接报。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;会话是有保质期的。&lt;/strong&gt; 这一条最容易被忽略，也最应该促使你今天就动手。Claude Code 官方文档在&amp;quot;本地目录&amp;quot;页写得很直接：&lt;code&gt;Claude Code deletes the files in the paths below once they&#39;re older than cleanupPeriodDays&lt;/code&gt;，紧接着一句是 &lt;strong&gt;&amp;ldquo;The default is 30 days and the minimum is 1; setting 0 fails with a validation error.&amp;rdquo;&lt;/strong&gt;——也就是说 transcript 默认 30 天就被清扫，而且这个清理是&amp;quot;静默&amp;quot;的，不会问你要不要留。（&lt;a class=&#34;link&#34; href=&#34;https://code.claude.com/docs/en/claude-directory&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;code.claude.com/docs/en/claude-directory&lt;/a&gt;，访问 2026-09-16）&lt;/p&gt;&#xA;&lt;p&gt;也就是说，你三个月前那个把生产事故查清楚了的黄金会话，很可能已经不在盘上了。&lt;/p&gt;&#xA;&lt;p&gt;这就把&amp;quot;会话资产化&amp;quot;的顺序彻底调过来了：&lt;strong&gt;第一步不是转换，是先归档。&lt;/strong&gt; 要长期留档，就用 &lt;code&gt;txcript export&lt;/code&gt; 落成 Simple；要接着干活，就在目标 harness 里重新建立环境。跨工具续写的正确心智模型是&lt;strong&gt;交接&lt;/strong&gt;，不是无损搬迁。&lt;/p&gt;&#xA;&lt;h2 id=&#34;上游格式还在漂移这才是集成方真正的成本&#34;&gt;上游格式还在漂移，这才是集成方真正的成本&#xA;&lt;/h2&gt;&lt;p&gt;写到这，得说一件比 txcript 自身成熟度更值得关注的事。&lt;/p&gt;&#xA;&lt;p&gt;这些格式全都还在动。用 GitHub Releases API 拉出来的时间戳看得很直白（访问 2026-09-16）：&lt;strong&gt;2026-09-11 一天之内，Codex 发了五个预发布版本&lt;/strong&gt;（alpha.3 在 02:35、alpha.3.7 在 07:58、alpha.3.8 在 09:18、alpha.3.9 在 11:51、alpha.3.10 在 15:52）；&lt;strong&gt;2026-09-15 又是一天四个&lt;/strong&gt;（alpha.5 在 00:31、alpha.6 在 02:00、alpha.7 在 21:09、alpha.8 在 22:26）。而 0.153.4 这个正式版停在 09-04——&lt;strong&gt;中间十一天，预发布通道跑了二十多个版本。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Claude Code 侧同理，只是在闭源条件下更难观测：txcript 的格式文档记录到本地命令的 envelope 从 &lt;code&gt;user&lt;/code&gt; 行迁移到了 &lt;code&gt;system&lt;/code&gt; 行、标签顺序和 &lt;code&gt;&amp;lt;command-args&amp;gt;&lt;/code&gt; 的有无在变、每个版本都可能冒出新的行类型（&lt;code&gt;ai-title&lt;/code&gt;、&lt;code&gt;file-history-delta&lt;/code&gt;、&lt;code&gt;pr-link&lt;/code&gt; 都是近期新增的）。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;所以做会话转换的一方，实质上在承担上游随时改格式的成本。&lt;/strong&gt; 这不是 txcript 独有的问题，是所有依赖逆向格式的方案的宿命。&lt;/p&gt;&#xA;&lt;p&gt;txcript 自己的应对方式值得学：它给每份格式文档标注三档来源（官方文档 / 开源代码 / 逆向工程），并且每份都带一个 &lt;code&gt;Last verified:&lt;/code&gt; 日期。三份核心文档现在都停在 2026-08-10，而 Claude Code 的 CLI 版本跨度早已到 2.1.227——&lt;strong&gt;这个日期本身就是风险披露。&lt;/strong&gt; 作者自己的话是，格式会 silently drift，一份没标日期的逆向格式说明比没有更糟。&lt;/p&gt;&#xA;&lt;p&gt;这就是给集成方的判断：如果要把这类能力接进团队流程，&lt;strong&gt;把版本固定和回归测试当正经工程做，而不是直接吃上游的 alpha&lt;/strong&gt;。上游一天五个 alpha 的时候，&amp;ldquo;跟最新&amp;quot;不是一个策略。&lt;/p&gt;&#xA;&lt;h2 id=&#34;那这个方案现在能用吗&#34;&gt;那这个方案现在能用吗&#xA;&lt;/h2&gt;&lt;p&gt;得泼盆冷水，说清楚什么情况下&lt;strong&gt;不该&lt;/strong&gt;用它。&lt;/p&gt;&#xA;&lt;p&gt;txcript 是个&lt;strong&gt;早期项目&lt;/strong&gt;，不是成熟基础设施。2026-09-16 实测的 GitHub 数据是 &lt;strong&gt;50 star、8 fork、13 个 open issue、0 watcher&lt;/strong&gt;，2026-06-25 才创建，最近一次 push 是 09-15。更关键的是贡献者结构：&lt;strong&gt;首位贡献者一个人提交了 143 次，第二位 11 次&lt;/strong&gt;——这是一个由单人主导的项目。它的 HN 投稿（item 49719696）只拿到 1 分、0 评论，社区热度基本为零，所以任何&amp;quot;社区正在热捧&amp;quot;的说法都是编的。&lt;/p&gt;&#xA;&lt;p&gt;格式文档的 &lt;code&gt;Last verified&lt;/code&gt; 停在 2026-08-10，而 Codex 两天上好几个 alpha，Claude Code 已经走到 2.1.227。&lt;strong&gt;解析器会不会在某个版本后静默失效，作者自己也没法保证。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;所以按场景分档：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;留档、检索、跨机器交接&lt;/strong&gt; → 值得用。&lt;code&gt;export&lt;/code&gt; 落成 Simple 是设计得最完整的路径，而且&amp;quot;30 天就被清掉&amp;quot;这个默认值，让归档这件事有了时间上的紧迫性。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;指望会话在另一个 agent 里原样复活&lt;/strong&gt; → 不要用。这是设计上就不成立的期待，那个故意留空的 system prompt 槽位已经把话说尽了。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;高频跨 harness、且涉及大量本地文件改动&lt;/strong&gt; → 先小范围验证。尤其是会话里如果充满了 &lt;code&gt;apply_patch&lt;/code&gt; 这类多文件改动，它们会全部降级成 raw 记录，你得到的是一串路径而不是可复现的操作。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;顺便说一句，这条路不是你唯一的选择。市面上已经有后台录制所有 agent 会话、再一键 handoff 的商业产品（比如 Kurrent Capacitor 那种做法），也有不少团队干脆用一个 skill，让源 agent 自己总结出&amp;quot;聊了什么、动了哪些文件、定了什么决策、下一步做什么&amp;rdquo;，再手动贴过去。&lt;strong&gt;后一种做法其实更诚实&lt;/strong&gt;——它不假装自己无损，而是承认降维是必然的，只把决策要点搬过去。txcript 的价值在于它把这件事做成了确定性的数据结构操作，而不是每次靠模型即兴总结。&lt;/p&gt;&#xA;&lt;h2 id=&#34;明天可以先做这两件事&#34;&gt;明天可以先做这两件事&#xA;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;第一件，查你的会话还剩多少天。&lt;/strong&gt; 打开 &lt;code&gt;~/.claude/settings.json&lt;/code&gt;，看看有没有 &lt;code&gt;cleanupPeriodDays&lt;/code&gt;。没有的话，默认就是 30 天——去找一个你最近做过的、值得留档的长会话，&lt;strong&gt;在它被清掉之前先导出来&lt;/strong&gt;。Claude Code 自己就有 &lt;code&gt;/export&lt;/code&gt;。这一步跟用不用 txcript 无关，纯粹是止损。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;第二件，如果你在评估这类工具，先跑一条最小的验证。&lt;/strong&gt; 装法取自 README 原文：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo install --git https://github.com/skillsynchq/txcript txcript-cli --locked&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;txcript list --from claude_code&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;txcript &lt;span class=&#34;k&#34;&gt;continue&lt;/span&gt; &amp;lt;session-id&amp;gt; --with codex&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;&lt;code&gt;continue&lt;/code&gt; 会写一个新的 native session，然后在记录的 working directory 里启动 Codex——&lt;strong&gt;源会话保留，不会被改掉&lt;/strong&gt;。真正值得你花时间观察的，是搬过去之后的那个 Codex 会话：&lt;strong&gt;原来的 &lt;code&gt;apply_patch&lt;/code&gt; 还剩多少是结构化的，工具调用的历史还在不在，usage 有没有对上。&lt;/strong&gt; 这几个观察点，比任何功能介绍都更能告诉你这条路对你们团队值不值。&lt;/p&gt;&#xA;&lt;p&gt;会话是你花了时间生产出来的资产，而它现在正躺在一个 30 天后会自动删除的目录里。&lt;strong&gt;别让&amp;quot;换工具&amp;quot;这件事，把你已经挣到的上下文一起带走。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;参考与验证&#34;&gt;参考与验证&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;txcript 仓库（Apache-2.0，Rust 库 / CLI / WASM；GitHub API 实测 2026-09-16：50 star / 8 fork / 13 open issues / 0 watcher / 创建于 2026-06-25 / 最近 push 2026-09-15；贡献者 NishantJoshi00 143 commits、Narsagna 11 commits）：https://github.com/skillsynchq/txcript&lt;/li&gt;&#xA;&lt;li&gt;txcript README（能力矩阵、&amp;ldquo;What carries over&amp;rdquo;、CLI 与 library 用法原文）：https://github.com/skillsynchq/txcript （访问日期 2026-09-16）&lt;/li&gt;&#xA;&lt;li&gt;Claude Code 会话格式文档（存储布局、&lt;code&gt;parentUuid&lt;/code&gt;→&lt;code&gt;uuid&lt;/code&gt; 链、行类型、Caveats：UUIDv5 重生成 id / bookkeeping 行与 extra keys 丢失 / 斜杠命令 envelope 迁移；&lt;code&gt;Last verified: 2026-08-10&lt;/code&gt;，观测 CLI 版本 0.144–2.1.227）：https://raw.githubusercontent.com/skillsynchq/txcript/main/docs/formats/claude-code.md （访问日期 2026-09-16）&lt;/li&gt;&#xA;&lt;li&gt;Codex 格式文档（rollout 日期分层、&lt;code&gt;response_item&lt;/code&gt; 协议日志与 &lt;code&gt;event_msg&lt;/code&gt; 显示日志双日志交织、有状态解析、&lt;code&gt;call_id&lt;/code&gt; 配对与 web search 例外；Caveats：&lt;code&gt;encrypted_content&lt;/code&gt; / sandbox / rate limit / display-only 不进 Common，&lt;code&gt;apply_patch&lt;/code&gt; 降级规则，&lt;code&gt;model_provider: &amp;quot;openai&amp;quot;&lt;/code&gt; 硬要求，工具名 &lt;code&gt;[A-Za-z0-9_-]+&lt;/code&gt; 不可逆归一化；&lt;code&gt;Last verified: 2026-08-10&lt;/code&gt;）：https://raw.githubusercontent.com/skillsynchq/txcript/main/docs/formats/codex.md （访问日期 2026-09-16）&lt;/li&gt;&#xA;&lt;li&gt;Simple 交换格式（无 store、无目录、&lt;code&gt;export&lt;/code&gt; / &lt;code&gt;continue&lt;/code&gt; 用法、&amp;ldquo;There is no system-prompt slot, deliberately&amp;rdquo; 原句、内联 &lt;code&gt;user&lt;/code&gt; 消息的上下文建议）：https://raw.githubusercontent.com/skillsynchq/txcript/main/docs/formats/simple.md （访问日期 2026-09-16）&lt;/li&gt;&#xA;&lt;li&gt;Claude Code 本地目录与保留期（保留清扫规则原句 &lt;code&gt;Claude Code deletes the files in the paths below once they&#39;re older than cleanupPeriodDays&lt;/code&gt;，以及 &lt;code&gt;The default is 30 days and the minimum is 1; setting 0 fails with a validation error.&lt;/code&gt;）：https://code.claude.com/docs/en/claude-directory （访问日期 2026-09-16）&lt;/li&gt;&#xA;&lt;li&gt;Claude Code 会话管理（&lt;code&gt;--continue&lt;/code&gt; / &lt;code&gt;--resume&lt;/code&gt; / &lt;code&gt;/export&lt;/code&gt; 等入口、transcript 存储位置、resume 会恢复什么）：https://code.claude.com/docs/en/sessions （访问日期 2026-09-16）&lt;/li&gt;&#xA;&lt;li&gt;OpenAI 官方 import 文档（导入清单：instruction files → AGENTS.md、settings.json → config.toml、skills、plugins、projects、memories、MCP、hooks、subagents；以及 &amp;ldquo;Codex CLI imports up to 50 chats from the last 30 days&amp;rdquo;）：https://learn.chatgpt.com/docs/import （访问日期 2026-09-16）&lt;/li&gt;&#xA;&lt;li&gt;openai/codex 发布节奏（GitHub Releases API 实测 2026-09-16：2026-09-11 发布 alpha.3 02:35:52Z / alpha.3.7 07:58:14Z / alpha.3.8 09:18:04Z / alpha.3.9 11:51:30Z / alpha.3.10 15:52:58Z；2026-09-15 发布 alpha.5 00:31:51Z / alpha.6 02:00:26Z / alpha.7 21:09:02Z / alpha.8 22:26:34Z；正式版 rust-v0.153.4 为 2026-09-04；仓库约 124,000 star / 17,000+ open issues）：https://github.com/openai/codex/releases&lt;/li&gt;&#xA;&lt;li&gt;Kurrent Capacitor（商业方案对照：后台录制多 agent 会话后 handoff）：https://www.youtube.com/watch?v=6NCx7LGJbGs （访问日期 2026-09-16）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
        </item></channel>
</rss>
