Skip to content

会话与上下文 ​

Mirri Code 把每次对话持久化为一个「会话」,保留消息历史和元数据,可以随时关闭界面后再回来继续。本页介绍如何恢复会话、管理上下文,以及导出和派生会话。

会话存储 ​

所有会话保存在 $MIRRICODE_HOME/sessions/ 下(默认 ~/.mirri-code/sessions/),按工作目录分组存放:

text
~/.mirri-code/
├── config.toml
├── session_index.jsonl
└── sessions/
    └── <workDirKey>/
        └── <sessionId>/
            ├── state.json
            └── agents/
                ├── main/
                │   └── wire.jsonl
                └── <subagentId>/
                    └── wire.jsonl
  • state.json:会话标题、创建时间等元数据。
  • agents/*/wire.jsonl:Agent 事件流,用于会话恢复和回放;同时记录发给模型的请求轨迹(工具 schema、请求参数、MCP 工具清单),便于调试。

注意

sessions/ 目录下的文件请勿手动编辑,否则可能导致会话无法正常恢复。

启动与恢复会话 ​

历史会话都保存在本地,无需专门指定即可恢复:

在 Web UI 中恢复: 会话列表(左侧边栏)列出当前工作区的历史会话,点击即可继续。

列出全部会话:

sh
mirri session-list

在 Web UI 中切换会话 ​

不离开当前界面也可以管理会话:Web UI 左侧的会话列表支持浏览、切换和重命名历史会话。此外,以下斜杠命令在输入框中可用,仅在 Agent 空闲时生效:

  • /new(别名 /clear):切换到新会话,丢弃当前上下文。
  • /fork:派生当前会话(详见下文)。

恢复被中断的任务 ​

应用退出后重新打开——无论是你主动关闭还是引擎异常停止——退出时仍在运行的任务都不会丢失,也不需要自己去翻找哪个任务进行到一半:

  • 下次启动时,一张通知卡片会列出服务退出瞬间仍在运行的每个任务。每行显示工作区、会话标题和中断时间,并带有独立的「继续」与「忽略」按钮,底部还有「全部继续(N)」与「全部忽略」批量操作。关闭卡片只是本次窗口内收起它——不会忽略任何任务。
  • 会话侧边栏会用「运行中断」徽标标记被中断的会话,工作区分组旁附有计数。悬停被中断的会话行可看到同样的「继续」/「忽略」操作,因此即使关掉了通知卡片,也随时能恢复。
  • 继续会从中断处接着做:会话被打开并发起一个新回合从断点继续,不会重做已经完成的部分。如果被中断的回合当时正在等待某个后台命令,会先请你确认其结果再重新执行。
  • 被忽略的中断立即清除徽标;未处理的中断在 72 小时后自动淡出。已归档的会话不会显示为运行中断。

上下文压缩 ​

对话变长时,Mirri Code 会在上下文接近窗口上限时自动压缩历史消息,释放 token 空间。也可以随时手动触发:

/compact

压缩时可以附带指引,告诉模型优先保留哪些信息:

/compact 保留与数据库迁移相关的讨论

派生会话 ​

想在不破坏当前对话的前提下尝试新思路,使用 /fork:

/fork

派生后的两个会话彼此独立,互不影响,可以随时在会话列表中切回原来的会话。已保存的 /goal 不会复制到派生会话。如果你想在派生会话中进行自主 goal 工作,需要在那里开始一个新 goal。

导出会话 ​

用 mirri export 把会话打包为 ZIP,适合分享、归档或提交问题反馈:

sh
mirri export <sessionId>

不传 sessionId 时导出当前目录最近的会话(有交互式确认,加 -y 跳过)。用 -o 指定输出路径:

sh
mirri export <sessionId> -o ~/Desktop/my-session.zip

导出包含会话目录下的所有文件,包括诊断日志。全局诊断日志(~/.mirri-code/logs/mirri-code.log)默认也会打包;如不需要,加 --no-include-global-log 排除。

提示

导出文件可能包含代码、命令输出和路径等敏感信息,分享前请先确认内容。

下一步 ​