首页
/ Open Interpreter 会话管理实战:Resume、Fork、Compact 与本地历史全面指南

Open Interpreter 会话管理实战:Resume、Fork、Compact 与本地历史全面指南

2026-09-06 18:47:20作者:龚格成

Open Interpreter 会将每一次对话作为**会话(session)**在本地持久化,让你可以随时恢复、分叉(fork)、压缩与管理自己的历史记录。本文将围绕官方文档 docs/sessions.md 展开,结合本仓库中 CLI 参数定义、会话存储实现与配置解析源码,系统讲解如何利用 interpreter resume / fork / exec 等命令拾回工作现场、如何用 /compact 与自动压缩对抗长上下文、如何通过 [history] 配置控制本地记录,以及如何借助守护进程在多个客户端间共享同一套运行时。读完你即可在真实环境中安全地管理自己的全部本地会话。

会话存储在哪里:~/.openinterpreter/ 之下的数据组织

Open Interpreter 把所有会话数据默认保存在本地用户目录 ~/.openinterpreter/ 下,从而支持"关掉终端之后还能接着干"。

从源码结构看,这套本地存储由 codex-rs/thread-storecodex-rs/rollout 两个 crate 配合实现:

  • 会话内容以 rollout 记录的形式落盘,主目录常量定义于 codex-rs/rollout/src/lib.rs:活动会话位于 sessions/ 子目录,归档会话位于 archived_sessions/ 子目录;
  • 会话文件按日期分层组织,例如 sessions/2025/01/03/ 这样的日级目录中存放带时间戳与 UUID 的记录文件;
  • 记录本身既可能是纯文本的 .jsonl,也可能是经过压缩的 .jsonl.zst(压缩与归档逻辑见 codex-rs/rollout/src/compression.rs);
  • 会话之外,还有一份独立的"命令/消息历史"文件 history.jsonl,每行一个 JSON 对象,用于记录你与 agent 的交互轨迹(见 codex-rs/message-history/src/lib.rs)。

需要说明的是,~/.openinterpreter 只是默认值。官方文档 docs/daemon.md 明确指出该目录可用环境变量 INTERPRETER_HOME 覆盖;而配置加载逻辑也会根据当前产品品牌选择不同的配置目录——Open Interpreter 使用 .openinterpreter,Codex 使用 .codex,见 codex-rs/config/src/loader/mod.rs。也就是说,Open Interpreter 的项目级配置同样约定存放在 ./.openinterpreter/config.toml(见同一文件 L106-L107)。

恢复会话(Resume):四种姿势找回工作现场

无论是不小心退出了 TUI,还是想接续前一天的实现,恢复命令都能把你拉回原会话。

命令形态一览

命令 行为
interpreter resume 打开会话选择器(picker),交互式挑选历史会话
interpreter resume --last 直接恢复当前工作目录下最近一次的会话,跳过选择器
interpreter resume --all 选择器包含来自其他目录的会话,并展示 CWD(当前工作目录)列
interpreter resume <SESSION_ID> 按会话 ID 精确恢复
interpreter resume --last "继续实现" 恢复最近会话的同时携带一条起始提示语

对应 CLI 参数定义位于 codex-rs/cli/src/main.rs,其中几个细节值得注意:

  • SESSION_ID 位置参数既接受 UUID 也接受会话名称——源码注释明确说明"UUIDs take precedence if it parses",即如果该字符串能被解析为 UUID 则优先按 UUID 匹配;
  • --last 是布尔开关,用于"不看选择器、直接进最近会话";
  • --all关闭 cwd 过滤并显示 CWD 列,方便从其他目录找回会话;
  • --include-non-interactive 用于把非交互(exec)会话也纳入选择器与 --last 的选择范围。

Resume 的默认目录语义

官方文档强调 interpreter resume 默认只列出当前目录相关的会话,而 --all 才放开目录限制。这背后是"按 cwd 过滤 + 展示 CWD 列"的选择器实现,源码注释(codex-rs/cli/src/main.rs)对 --all 的描述即"Show all sessions (disables cwd filtering and shows CWD column)"。

在 TUI 中恢复

交互式终端界面里,恢复入口是斜杠命令 /resume。官方文档 docs/interactive.md 的会话控制表中列出了 TUI 内的全套会话相关命令:/new 开启新对话、/resume 挑选旧会话、/fork 分叉当前会话、/compact 压缩旧上下文。

分叉会话(Fork):从旧会话另起一条分支

分叉(Fork)是在不破坏原会话的前提下,从某一段旧历史派生出新线程。官方文档对它的定位是:"Forking creates a new thread from an older session. The original stays intact."

interpreter fork --last          # 分叉最近一次会话
interpreter fork <SESSION_ID>    # 分叉指定会话
interpreter fork --all           # 从选择器中选择(含其他目录)会话进行分叉

底层语义:thread/fork

在 app-server 协议层面,分叉对应 thread/fork 方法,其行为在 codex-rs/app-server/README.md 有详细定义:

  • 通过复制已存储历史创建一个新的 thread id,返回结果中的 forkedFromId 指向源会话(若已知);
  • 可选 lastTurnId 参数,可只复制到指定轮次为止并丢弃其后轮次;beforeTurnId 则只复制该轮次之前的历史,两者不能同时使用;
  • 若源线程正在运行中,fork 会先对当前轮次做打断快照,再派生新线程,保证派生内容一致;
  • 传入 ephemeral: true 时 fork 仅驻留内存,不落盘,适合临时分支场景。

TUI 里的 /fork/side

在 TUI 内,除了 /fork 直接分叉当前会话外,还有 /side 命令。从 TUI 源码与测试来看,二者在交互场景中都被用于会话分支/派生侧栏线程的操作路径(相关测试覆盖见 codex-rs/tui/src/app/tests.rs 附近对 resume/fork 会话生命周期动作的断言)。它们返回的新会话同样会被持久化,之后可再次 resume 回来。

恢复非交互(Exec)会话

Open Interpreter 支持在非交互模式下执行一次性任务,这类会话同样会被记录并且可以恢复:

interpreter exec resume --last "continue with the implementation"

上面的命令会把最近一次非交互会话恢复到 exec 上下文中,并直接注入一条提示语继续推进。这一语法被 CLI 测试显式覆盖,例如 codex exec --json resume --last "2+2" 的解析断言见 codex-rs/cli/src/main.rs

如果你希望在交互式 interpreter resume 的选择器中也能看到这些非交互会话,就加上 --include-non-interactive 开关——这正是 codex-rs/cli/src/main.rs 中该参数的用途说明:"Include non-interactive sessions in the resume picker and --last selection"。

压缩长对话(Compact):给上下文瘦身

随着对话变长,模型可用的上下文窗口会被历史消息逐渐占满。压缩(Compaction)会把这串长对话提炼成一段较短的摘要,从而腾出上下文空间继续工作,同时保留关键信息。

手动压缩:/compact

在 TUI 中直接输入:

/compact

即可触发一次手动压缩。该命令会启动后台压缩任务,将旧上下文归纳为摘要注入后续对话。TUI 对 /compact 有完善的排队机制——如果当前已有轮次在运行,压缩命令会等到活跃轮次结束后再派发(见 codex-rs/tui/src/chatwidget/tests/slash_commands.rsslash_compact_eagerly_queues_follow_up_before_turn_startqueued_slash_compact_dispatches_after_active_turn 两个用例)。

自动压缩阈值:model_auto_compact_token_limit

当活跃模型接近其上下文窗口上限时,系统可以自动执行压缩。如果你需要显式控制触发时机,可以在配置文件中设置:

model_auto_compact_token_limit = 120000
model_auto_compact_token_limit_scope = "total"

这两个配置项在配置解析源码 codex-rs/config/src/config_toml.rs 中的定义是:

  • model_auto_compact_token_limit:触发会话历史自动压缩的 token 用量阈值(Option<i64>),不设置则按内置默认策略触发;
  • model_auto_compact_token_limit_scope:阈值的作用范围,枚举定义于 codex-rs/protocol/src/config_types.rs
    • total(默认):对整个活跃上下文计数;
    • body_after_prefix:只对"继承前缀之后的采样输出与后续增长"部分计数。

压缩核心执行逻辑集中在 codex-rs/core/src/compact.rs,包括 run_compact_task(常规压缩)与 run_inline_auto_compact_task(内联自动压缩);在 app-server 协议层,手动压缩对应 thread/compact/start JSON-RPC 方法,调用即返回并随后通过标准 turn/item 通知流式输出进度(见 codex-rs/app-server/README.md)。

历史控制(History Controls):决定记录什么、记录多久

Open Interpreter 默认会把交互记录写入本地历史文件(history.jsonl,见 codex-rs/message-history/src/lib.rs)。[history] 配置段用于控制这条记录通道的行为,对应配置结构体 History 定义于 codex-rs/config/src/types.rs

完全禁用已保存的历史

[history]
persistence = "none"

persistence 字段的取值定义在 HistoryPersistence 枚举中(codex-rs/config/src/types.rs):

取值 行为
save_all(默认) 将所有历史条目写入磁盘
none 不向磁盘写入任何历史条目

注意:该开关只影响 history.jsonl 记录通道;会话本身(可用于 resume/fork 的 rollout 记录)仍受其他机制管理。若希望对会话/线程存储做更细粒度控制,可进一步参考 docs/config.md 中的 History and Memory 一节以及配置全量参考 docs/config-reference.md

限制历史文件大小

[history]
max_bytes = 104857600

max_bytes 为可选字段(Option<usize>),含义是历史文件的最大字节数;一旦文件超过该上限,最旧的条目会被丢弃以控制体积。上述示例即把上限设为约 100 MiB。若不设置该字段,则历史文件不受字节数硬性限制,只会随使用不断增长,因此建议在长期使用场景中主动配置。

完整示例也可对照 docs/config.md,其中给出了 [history] persistence = "none" 的标准写法。

守护进程模式:多客户端共享同一运行时

默认情况下 interpreter 以前台进程方式运行:终端 UI 与运行时在同一进程内,退出 UI 即干净地结束会话,普通使用并不需要守护进程。守护进程只在你希望"一个运行时服务多个客户端"时才派上用场——例如编辑器集成与终端同时挂到同一台机器。

守护进程的基本管理

官方文档 docs/daemon.md 提供了完整的守护进程管理命令族:

interpreter app-server daemon start      # 启动后台守护进程(监听本地 unix socket)
interpreter app-server daemon restart    # 重启
interpreter app-server daemon stop       # 停止
interpreter app-server daemon version    # 查看版本

其中 start 会在守护进程健康后就绪并返回;重复调用 start 会复用已健康的运行实例,而不会派生第二个进程。官方会话文档(本文主体 docs/sessions.md)特别提醒可以用 interpreter app-server daemon stop 停掉共享运行的服务。

让客户端连接到守护进程

终端 UI 等任何 app-server 客户端都可以通过 --remote 指向守护进程的端点:

interpreter --remote <ws-url-or-unix-socket>

守护进程的运行时文件(含日志)位于 Open Interpreter 主目录(默认 ~/.openinterpreter,可用 INTERPRETER_HOME 覆盖),启动排障时应首先查看守护进程日志。更多细节请阅读 docs/daemon.md;远程端点部署与编程式客户端分别参见 docs/remote.mddocs/sdk.md

会话状态为何能跨命令、跨 TUI 保持一致

无论是 resumefork 还是 exec resume,最终都汇入同一套"线程状态机 + 本地持久化"模型:app-server 侧的 thread/resumethread/forkthread/compact/start 方法定义于 codex-rs/app-server/README.md;会话的增删查、归档、分页读取则统一由 thread-store 的本地存储实现承接(codex-rs/thread-store/src/local/mod.rs)。理解这一点,你就明白为什么 CLI 会话、TUI 会话与守护进程共享的会话之间可以无缝衔接——它们读写的是同一套本地记录与同一份配置。

小结:一套完整的本地会话工作流

场景 推荐操作
继续手头工作 interpreter resume --last
从旧会话开出新方向 interpreter fork --last,或 TUI 内 /fork/side
恢复一次性任务现场 interpreter exec resume --last "..."
让选择器涵盖所有来源 resume/fork--all、加 --include-non-interactive
长对话续写前先瘦身 TUI 输入 /compact,或配置 model_auto_compact_token_limit
不想留记录 [history] persistence = "none"
限制记录体积 [history] max_bytes = <字节数>
多客户端共享运行时 interpreter app-server daemon start,客户端加 --remote

掌握以上命令与配置后,你便能在 Open Interpreter 中像管理版本分支一样管理自己的每一次编码会话:随时回到上次中断的现场、大胆从旧历史中试出新路线,并让上下文始终保持在模型可控的范围内。相关命令的完整 CLI 说明可继续查阅 docs/cli-reference.md,会话相关斜杠命令的交互式体验说明见 docs/interactive.md

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.14 K
2.75 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
860
1.35 K
docsdocs
暂无描述
Markdown
899
5.83 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
924
1.85 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.84 K
1.02 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
533
599
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.03 K
525
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.37 K
1.46 K
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
548
394