hermes chat -c:每个终端各续各的会话,找不到还能自动建一个

你习惯在 tmux 里开两个 pane:左边排查线上 bug,右边设计新 API。忙到一半切走,回来想接着聊,一个 hermes chat -c 下去——两个 pane 被拽进了同一个对话,左边在说 Redis 报错,右边在讨论接口签名,场面一度十分混乱。
这就是 v0.20.2 之前 -c 的行为:它永远恢复“全局最近”的会话,根本不关心你在哪个终端里。现在不一样了,Hermes 给每个终端都记了一本“小账本”。
终端面包屑:每个 pane 有自己的会话记忆
v0.20.2 引入了一个叫终端面包屑(terminal breadcrumbs)的机制(PR #87346):CLI 会为每个终端(tty、tmux pane、kitty 窗口、wezterm pane、Zellij pane、Windows Terminal 会话)各自记录“上次在这个终端里聊的是哪个会话”。
面包屑存放在 $HERMES_HOME/terminal-sessions/ 目录下,每个终端一个 JSON 文件,包含会话 ID、工作目录和时间戳。写入是原子的(临时文件 + os.replace),从不抛异常,超过 30 天的旧记录自动忽略并在写入时顺带清理。终端 ID 的推导优先级是:真实 tty 路径 → ZELLIJ_PANE_ID → TMUX_PANE → KITTY_WINDOW_ID → WEZTERM_PANE → TERM_SESSION_ID → WT_SESSION,都拿不到就干脆不记。
所以现在的行为是:
# 在 pane 1 里
hermes chat -c # 恢复 pane 1 上次的会话(排查 Redis 那个)
# 在 pane 2 里
hermes chat -c # 恢复 pane 2 上次的会话(设计 API 那个)
两个 pane 各回各家,互不干扰。想恢复指定名字的会话,直接给名字:
hermes chat -c "redis debug"
按名字恢复找不到?现在会大声报错
-c 带名字时按标题或会话 ID 匹配。v0.20.2 之前,找不到匹配会悄悄什么都不做——脚本里一个静默 no-op,你以为是恢复了,其实开了个新对话,上下文全没了。
现在(PR #87706)匹配失败会立刻在 stderr 报错并以退出码 1 结束,还会提示你下一步:
No session found matching 'redis debug'.
Use 'hermes sessions list' to see available sessions, or pass
--create-if-missing to start a new session with that title.
对写脚本的人来说这是天大的好消息:静默失败变成可检测的失败,CI 和定时任务终于能在“目标会话不存在”时给出明确反馈。
–create-if-missing:找不到就建一个
配合新加的 --create-if-missing 参数,你可以把“按名字恢复”升级成“按名字恢复,没有就创建”:
hermes chat -c "redis debug" --create-if-missing
匹配不到时,CLI 会创建一个标题为 “redis debug” 的全新会话并直接进入。会话 ID 沿用 CLI 新建会话的 时间戳_UUID短码 格式,标题以用户来源记录——之后自动起标题的机制不会覆盖你手动起的名字。
这个组合对程序化调用特别有价值:插件或脚本想要“把消息发到某个命名线程,没有就建”,以前做不到,现在一行命令就是确定的语义。注意 --create-if-missing 只对带名字的 -c 有意义;裸 -c 没有可创建的对象,会提示你先给名字。
从桌面端也可以
v0.20.2 桌面端的会话菜单同样支持“在终端里恢复”——选中任意会话,把它带回你自己的终端继续(#86338,8/14 合并)。配合 hermes sessions list 查看所有可恢复的会话,工作流更顺:
hermes sessions list # 找到目标会话
hermes chat -c "目标标题" # 恢复它
hermes chat -c "新标题" --create-if-missing # 或者直接建新的
小结
- 面包屑:每个终端各记各的会话,
-c不再把多个 pane 混进一个对话; - 大声失败:按名恢复找不到时 stderr 报错 + 退出码 1,脚本可检测;
- 自动创建:
--create-if-missing让“发到命名线程,没有就建”成为一行命令; - 配合使用:桌面端可把会话带回终端,
hermes sessions list是找回会话的入口。
想让会话更进一步利用起来,可以看看 /save 导出会话 和多 Profile 多实例;-c 的完整参数表在 hermes chat 命令参考。升级到 v0.20.2 后这些能力默认可用,hermes update 即可。