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_IDTMUX_PANEKITTY_WINDOW_IDWEZTERM_PANETERM_SESSION_IDWT_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 即可。