ByteNoteByteNote

字节笔记本

2026年8月29日

Gemini CLI 会话太长就交接:怎么开新会话继续干

API中转
¥120

Gemini CLI 会话拖太长,模型会开始编、绕圈、忘掉刚改过的文件。别硬续,先让它给下一任写一份交接,再开新会话。官方会话文档在 Session management,仓库是 google-gemini/gemini-cli

交接,不是 resume

gemini --resume(或 -r)会把整段历史拉回来:提示、回复、工具输入输出、token 统计。问题正是这段历史太长。交接是另一件事:旧会话产出一份精简 brief,新会话只吃这份 brief,不背整本聊天记录。

会话会自动存到 ~/.gemini/tmp/<project_hash>/chats/,按项目根目录哈希分开。换目录等于换一套历史。默认留 30 天。这套自动保存方便你回看,不会帮你把窗口瘦下来。

什么时候该切

底部上下文百分比往下掉、同样的错改完又冒出来、工具输出把窗口塞满,就可以切。不必等到报错。也可以主动限长:

json
{
  "model": {
    "maxSessionTurns": 100
  }
}

交互模式碰到上限会停发请求,提示你自己开新会话。非交互模式直接退出。-1 是不限(默认)。

先确认自己还在哪个会话里:

bash
gemini --list-sessions

交互里敲 /stats,能看到本轮时长、工具调用和 token。

退出前让它写交接

关会话之前,把下面这段交给当前模型(按任务改细节即可):

text
本次对话的上下文已经太长了,我打算关掉并重新开一个新的会话。
你有什么想对你的继任者说的,以便它能更好的理解你当前的工作并顺利继续?

请写成一份交接,保存为仓库根目录的 HANDOFF.md,只写下一任立刻用得上的内容:
- 当前目标(一句话)
- 已经做成的事,以及关键文件路径
- 做过的取舍和原因(别写过程流水账)
- 踩过的坑,不要再走
- 仓库现在的状态(能编译吗、测过吗、未提交的改动)
- 下一任打开后要跑的第一条命令

一份能用的交接大概长这样:目标是在 Windows 上编过某个 C++/Lua 游戏客户端;已经修过 USE_BULLET、补过 CMake 源文件列表、加过 Winsock 头;下一步直接 msbuild ... /p:Configuration=Debug。文件路径、CMake 开关、下一条命令都写死。少写「我们讨论了很久」。

让它用 write_file 落到 HANDOFF.md。只显示在聊天框里,关掉就没了。

新会话怎么接着干

退出:/quit。需要清掉这次的聊天记录和工具输出,用 /quit --delete

然后开一个全新会话,不要 --resume

bash
gemini

进去之后:

@HANDOFF.md 按这份交接继续。先核对仓库现状,再执行「下一步」里的第一条命令。有出入先停下来问我。

@ 会把文件内容塞进提示。下一任读的是交接,不是旧窗口。

还不想退出:先 /compress

还想待在同一个终端里,先瘦身:

/compress

它会用一份摘要替换整段聊天上下文,省后面的 token。摘要会丢掉细节,压缩完扫一眼,关键路径和未完成项还在再继续。压缩阈值可以在 /settings 里改。

/clear 更狠:清掉当前对话上下文并开新会话,屏幕滚动也清。Ctrl+L 只重绘界面,上下文还在。

同一会话里的分叉点用检查点,别跟交接混:

text
/resume save decision-point
/resume list
/resume resume decision-point

/chat 是同一组命令的别名。检查点适合「试一条路,不行回到分叉」;交接适合「这条会话已经脏了,换人」。

做成一条斜杠命令

把交接提示存成自定义命令,每次敲 /handoff 就行。用户级放 ~/.gemini/commands/,项目级放 .gemini/commands/(可进仓库)。项目同名会盖过用户级。

bash
mkdir -p ~/.gemini/commands

~/.gemini/commands/handoff.toml

toml
description = "让当前会话给下一任写一份交接并保存为 HANDOFF.md"

prompt = """
本次对话的上下文已经太长了,我打算关掉并重新开一个新的会话。
你有什么想对你的继任者说的,以便它能更好的理解你当前的工作并顺利继续?

请写成一份交接,用 write_file 保存为仓库根目录的 HANDOFF.md。只写下一任立刻用得上的内容:
- 当前目标(一句话)
- 已经做成的事,以及关键文件路径
- 做过的取舍和原因
- 踩过的坑,不要再走
- 仓库现在的状态
- 下一任打开后要跑的第一条命令

写完后用一两句话告诉我文件路径,以及新会话第一条该说什么。
"""

保存后在会话里 /commands reload,再用 /handoff。自定义命令说明:Custom commands

长期有效的偏好和项目规矩,别塞交接里,写进 GEMINI.md。全局在 ~/.gemini/GEMINI.md,项目在仓库根。会话里 /memory add ... 会往全局记忆追加;/memory show 能看到模型实际吃到的拼接结果。下一任会自动带上这些文件,交接只负责「这一轮做到哪」。

整段导出干什么用

需要把对话拷走、换机器或换 worktree,用导出,不是拿它当交接:

/resume share handoff-raw.md

也可以 /chat share handoff-raw.json。这是整段记录,体积大,下一任直接吞会把窗口再次撑满。

v0.43 起还有会话文件导入导出(PR 26514):

/export-session my-backup.json
bash
gemini --session-file my-backup.json

--session-file--resume--session-id 不能一起用。导入会生成新的 session id,按「尽力解析」恢复对话消息。适合搬家,不适合治幻觉。

一次完整流程

  1. 发现变笨:上下文掉得快,或同样的错反复出现。
  2. 旧会话里跑 /handoff(或把上面那段提示贴进去),确认 HANDOFF.md 已写入。
  3. 需要留档再 /resume share archive.md。然后 /quit
  4. 同一目录开 gemini,不要 --resume
  5. @HANDOFF.md 按交接继续。项目规矩已经在 GEMINI.md 里的,不必再贴一遍。

会话默认 30 天清理。想改保留策略:

json
{
  "general": {
    "sessionRetention": {
      "enabled": true,
      "maxAge": "30d",
      "maxCount": 50
    }
  }
}

相关链接

先用真实任务走通一次:写交接、关会话、新窗口只喂 HANDOFF.md。主路径熟了,再决定要不要 /handoff 进仓库。

分享: