任务正跑到一半,突然想问个问题?/btw 让你当场问、不打断


你一定经历过这个场景:Hermes 正在跑一个长任务——批量改代码、整理仓库、或者盯一个部署流程——你突然想到一个相关的问题:“刚才它提到的那行报错到底在哪个文件?“以前你只有两条路:要么打断它,问完再让它继续;要么另开一个会话,但那个会话对当前上下文一无所知,问啥都要从头解释。两条路都糟。8 月 29 日合并的 PR #97937(以及随后的 #97974)把第三条路做成了内置命令:/btw <问题>,在任务不中断的前提下,用当前会话的完整上下文当场回答你的侧问。同一次改动里,/background 退役,/bg 转正为后台任务命令,/btw 不再只是它的别名。

以前为什么这么别扭

/bg/btw 原本都是 /background 的别名:都表示“把一句话丢到后台会话里跑”。听起来没问题,但有个致命缺陷——后台会话是全新会话,没有当前上下文

于是常见的用法变成这样:

/btw 刚才那个错误在哪个文件?

结果后台那个“啥都不知道”的 agent 只能回答“我并不知道你刚才的错误”,或者让你把上下文粘贴过去。侧问的初衷——“借当前对话的语境问一个小问题”——完全没实现。

/btw 现在是怎么工作的

新实现的核心思路:问句不进入主会话,而是带着主会话的快照,在“旁边”单独回答一次。官方实现(agent/side_question.py)有两条路径,自动选择:

路径一:缓存热读取的分叉(首选)。 如果当前会话的 agent 还活着,/btw 会创建一个“缓存对齐分叉”(cache-parity fork)——和后台自我改进评审用的是同一套机制。这个分叉继承父会话的运行时、完全一致的 system prompt 和工具列表、共享的 session_id,然后原样重放当前会话的消息快照。因为前缀缓存对这个重放序列是热的,侧问能看到完整的、未截断的对话,而成本只是缓存读取的价格。分叉里所有工具调用被禁用(空线程白名单),持久化完全分离——不会写 state.db、不会轮换会话、不会动外部记忆。用量记在父会话头上。

路径二:一次性摘要兜底。 如果当前会话的 agent 已经被换出(比如网关把缓存的 agent 逐出了,此时 provider 缓存本来就是冷的),就退化成渲染一份“新近优先”的纯文本对话摘要,用一次性的辅助调用(one-shot)回答。摘要里不含 system prompt,工具调用和结果会被压缩成简短描述。

两条路径下,主会话的历史、角色交替结构、prompt 缓存都完全不受影响——这是设计的硬约束。

怎么用

在 CLI、TUI 和网关(Telegram/Discord/Slack 等)上都可用,而且支持 agent 正忙时调用(busy_policy="dispatch",即任务跑着也能插话):

# 任务跑着,突然想问
/btw 刚才那个报错在哪个文件?
→ /btw 会用当前会话的完整上下文回答:是在 src/utils/parser.py 第 42 行……

# 问与当前任务相关的背景问题
/btw 我们刚才决定用什么方案处理重试?

想换模型回答侧问?配置里有一套独立的辅助任务设置:

auxiliary:
  side_question:
    provider: anthropic
    model: claude-sonnet-4-5

不配置就默认用主模型。注意:换模型后缓存是冷的,会退回紧凑摘要路径。

顺带的变化:/bg 转正

/background 这个冗长的命令名被移除了(社区建议:统一用 /btw 式的短命令),后台任务现在只有一个正式名字:

/bg 帮我把这个目录下所有 TODO 整理成一份报告

/btw/bg 各归其位:/bg 派发独立任务,/btw 借当前语境回答小问题。老习惯敲 /background 的话,需要改一下肌肉记忆。

什么时候用 /btw 最划算

  • 长任务进行中:部署、批量迁移、代码审查跑到一半,想问“我们现在到哪一步了”“刚才那个警告是什么”——不用打断,不用等任务结束。
  • 需要当前语境的问题:“我们之前约定的命名规范是什么”“这个仓库的 AGENTS.md 里怎么说的”——侧问能看到完整对话。
  • 不想污染主会话:侧问的快照是只读的,不会在历史里留下痕迹,也不影响压缩和缓存。

需要说明的是:这两个 PR 是 8 月 29 日刚合并的,目前只在 main 分支上,还没进任何正式 release tag(v0.20.6 是 8 月 27 日打的,不含这两项)。想尝鲜就跑 hermes update 更新到最新代码;想等正式版就留意下一个 release。

小结

/btw 把“借当前上下文问小问题”这个高频需求做成了零成本的正式命令:不打断任务、不烧主会话的缓存、不污染历史。配合 /bg 的职责划分,会话里的“提问”和“派活”从此分得清清楚楚。下次任务跑到一半想插话时,试试先打一句 /btw——它会比你想的更懂你在说什么。

想更系统地了解斜杠命令生态,可以看看我们的命令面板指南;对“任务跑到一半”的更多控制手段(不打断地插话、排队、转向),/busy 系列命令也值得一试。这两个 PR 都属于 v0.20.6 之后 main 分支上的新动向,v0.20.6 发版笔记里有这一轮窗口的整体梳理。