字节笔记本
2026年8月29日
Gemini CLI 会话太长就交接:怎么开新会话继续干
Gemini CLI 会话拖太长,模型会开始编、绕圈、忘掉刚改过的文件。别硬续,先让它给下一任写一份交接,再开新会话。官方会话文档在 Session management,仓库是 google-gemini/gemini-cli。
交接,不是 resume
gemini --resume(或 -r)会把整段历史拉回来:提示、回复、工具输入输出、token 统计。问题正是这段历史太长。交接是另一件事:旧会话产出一份精简 brief,新会话只吃这份 brief,不背整本聊天记录。
会话会自动存到 ~/.gemini/tmp/<project_hash>/chats/,按项目根目录哈希分开。换目录等于换一套历史。默认留 30 天。这套自动保存方便你回看,不会帮你把窗口瘦下来。
什么时候该切
底部上下文百分比往下掉、同样的错改完又冒出来、工具输出把窗口塞满,就可以切。不必等到报错。也可以主动限长:
{
"model": {
"maxSessionTurns": 100
}
}交互模式碰到上限会停发请求,提示你自己开新会话。非交互模式直接退出。-1 是不限(默认)。
先确认自己还在哪个会话里:
gemini --list-sessions交互里敲 /stats,能看到本轮时长、工具调用和 token。
退出前让它写交接
关会话之前,把下面这段交给当前模型(按任务改细节即可):
本次对话的上下文已经太长了,我打算关掉并重新开一个新的会话。
你有什么想对你的继任者说的,以便它能更好的理解你当前的工作并顺利继续?
请写成一份交接,保存为仓库根目录的 HANDOFF.md,只写下一任立刻用得上的内容:
- 当前目标(一句话)
- 已经做成的事,以及关键文件路径
- 做过的取舍和原因(别写过程流水账)
- 踩过的坑,不要再走
- 仓库现在的状态(能编译吗、测过吗、未提交的改动)
- 下一任打开后要跑的第一条命令一份能用的交接大概长这样:目标是在 Windows 上编过某个 C++/Lua 游戏客户端;已经修过 USE_BULLET、补过 CMake 源文件列表、加过 Winsock 头;下一步直接 msbuild ... /p:Configuration=Debug。文件路径、CMake 开关、下一条命令都写死。少写「我们讨论了很久」。
让它用 write_file 落到 HANDOFF.md。只显示在聊天框里,关掉就没了。
新会话怎么接着干
退出:/quit。需要清掉这次的聊天记录和工具输出,用 /quit --delete。
然后开一个全新会话,不要 --resume:
gemini进去之后:
@HANDOFF.md 按这份交接继续。先核对仓库现状,再执行「下一步」里的第一条命令。有出入先停下来问我。
@ 会把文件内容塞进提示。下一任读的是交接,不是旧窗口。
还不想退出:先 /compress
还想待在同一个终端里,先瘦身:
/compress
它会用一份摘要替换整段聊天上下文,省后面的 token。摘要会丢掉细节,压缩完扫一眼,关键路径和未完成项还在再继续。压缩阈值可以在 /settings 里改。
/clear 更狠:清掉当前对话上下文并开新会话,屏幕滚动也清。Ctrl+L 只重绘界面,上下文还在。
同一会话里的分叉点用检查点,别跟交接混:
/resume save decision-point
/resume list
/resume resume decision-point/chat 是同一组命令的别名。检查点适合「试一条路,不行回到分叉」;交接适合「这条会话已经脏了,换人」。
做成一条斜杠命令
把交接提示存成自定义命令,每次敲 /handoff 就行。用户级放 ~/.gemini/commands/,项目级放 .gemini/commands/(可进仓库)。项目同名会盖过用户级。
mkdir -p ~/.gemini/commands~/.gemini/commands/handoff.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
gemini --session-file my-backup.json--session-file、--resume、--session-id 不能一起用。导入会生成新的 session id,按「尽力解析」恢复对话消息。适合搬家,不适合治幻觉。
一次完整流程
- 发现变笨:上下文掉得快,或同样的错反复出现。
- 旧会话里跑
/handoff(或把上面那段提示贴进去),确认HANDOFF.md已写入。 - 需要留档再
/resume share archive.md。然后/quit。 - 同一目录开
gemini,不要--resume。 @HANDOFF.md按交接继续。项目规矩已经在GEMINI.md里的,不必再贴一遍。
会话默认 30 天清理。想改保留策略:
{
"general": {
"sessionRetention": {
"enabled": true,
"maxAge": "30d",
"maxCount": 50
}
}
}相关链接
- 会话:Session management
- 斜杠命令:CLI commands
- 自定义命令:Custom commands
- 项目上下文:GEMINI.md
- 仓库:google-gemini/gemini-cli
- 导出会话:feat: export session to file and import via flag
先用真实任务走通一次:写交接、关会话、新窗口只喂 HANDOFF.md。主路径熟了,再决定要不要 /handoff 进仓库。