跳转到内容

终端

Bub 应用提供两种终端交互方式:bub run 和 bub chat,两者都使用相同的模型、工具和 Tape 能力:

  • bub run 处理单条消息,适用于一次性任务;
  • bub chat 则保持会话打开,可以连续对话。

在终端输入如下命令会进入到交互式会话界面中,此时你可以输入内容并按回车发送。

bub chat

此外,输入 ,help 指令列出当前可用的内部命令;如需退出,可按下 Ctrl+D 键或使用 ,quit 或 ,exit 指令。

底部工具栏显示最近一次模型调用的输出速度:从收到第一个流式分片开始计时,到响应结束为止。分子是全部输出 token(含思考 token),分母不含首分片之前的等待时间,也不含工具执行时间;紧跟其后的 ttft 就是被排除的首字等待时间。提供商未返回用量时显示 speed:- tok/s。

当然,你也可以在启动时直接提交第一条消息:

bub chat "Inspect this repository and suggest a first task."

在等待模型回复期间,如果发现模型的输出偏离了你的预期,或者你想补充一些约束条件,可以在界面中直接输入新指令以引导 Agent 的行为。

引导(Steering)用于在当前 Turn 尚未结束时补充指令,让 Agent 调整正在执行的任务。生成过程中不必等待回复结束,直接输入并回车即可:

先不要修改文件,只列出问题和建议。

Bub 应用会把消息放到引导收件箱中。Agent 在后续构建模型请求时读取它,正在执行的模型或工具调用不会被强制中断。

Bub 的准入动作称为 steer 和 follow_up,区别在于消息何时生效:

方式 处理方式 适合什么
引导(Steering) 注入当前对话的后续模型请求;来不及消费时转为待处理消息 纠正方向、补充约束、提供与当前任务有关的新信息
后续处理(Follow up) 等当前 Turn 结束后,再作为后续任务处理 追加另一项任务、按顺序执行多个需求

默认情况下,Bub 应用对运行期间的普通输入使用引导,没有单独的后续处理快捷键。未被当前消费的引导消息会自动进入待处理队列,不会直接丢失。

需要停止当前会话的任务时,使用 ,quit;它会清理待处理消息并取消运行中的任务。

输入 ,thinking 以展开和折叠模型思考过程:

,thinking

它只控制终端是否显示模型返回的 reasoning 增量,不会改变模型或推理力度。如需调整推理力度请使用:

,reasoning_effort high

具体可选值由模型提供商决定。该设置从下一轮对话起生效,并保存在当前会话的 Tape 中。

bub run 默认使用 cli:local 作为会话 ID,bub chat 则默认使用 cli_session。显式指定相同的会话 ID,可以在两个入口之间延续历史:

bub chat --session-id cli:echo
bub run --session-id cli:echo "Summarize what we discussed."

命令前缀默认为 ,,用于跳过模型调用、直接执行工具:

bub run ",help"
bub run ",fs.read path=README.md"

交互式会话中也可以直接输入命令。按 Ctrl-X 在 Agent 与 Shell 输入模式之间切换;Shell 模式会自动为输入添加命令前缀。常用命令如下:

命令 用途
,model openai:gpt-5-mini 切换当前会话的模型
,reasoning_effort high 设置当前会话的推理力度
,code_mode enable=true 开启代码模式
,tape.info 查看条目、anchor 和 token 用量
,tape.search query=error 搜索当前会话记录
,tape.anchors 列出上下文分界点
,tape.handoff name=reviewed summary='...' 移动默认上下文起点,并保存摘要
,tape.reset archive=true 归档当前 Tape 后重新开始
,thinking 展开或折叠推理输出

注意:

  • ,tape.reset archive=true 会把主 Tape 和 sidecar 备份到 <BUB_HOME>/tapes/,文件名带有 UTC 时间戳和 .bak 后缀。使用 archive=false 或直接 ,tape.reset 则不备份。重置后会产生新的 session/start anchor,旧文件不会被自动恢复。
  • 交接(handoff)不会自动生成或注入摘要。summary 保存在 anchor 的 state 中;后续是否读取它,取决于提示词或上下文策略。详见 Tape。

在 bub chat 中,用 background=true 使用单独的后台进程来运行相关命令:

,bash command='npm run dev' background=true

执行返回结果中包含 shell_id。我们使用它增量读取输出或终止进程:

,bash.output shell_id=bsh-12345678
,bash.output shell_id=bsh-12345678 offset=1200 limit=4000
,bash.kill shell_id=bsh-12345678

注意:

  • offset 是已缓冲输出的字符位置,不是行号;返回值中的 next_offset 可用于下一次读取。limit 限制本次返回的字符数。
  • 前台 bash 默认等待 30 秒。超时后进程不会被直接判定失败,而是转为后台并返回 shell_id;可通过 timeout_seconds 调整。后台任务应在同一个 bub chat 或网关进程中管理,退出应用时会执行清理。