终端界面
bingo 画画所用的语法、驱动它的按键,以及子代理和房间如何成为你能走进去的一行。
屏幕上有什么
终端界面在运行期间占住整个屏幕。对话记录上方什么都不放;唯一一件家具在输入框下面。
> what is in this workspace?
⏺ I'll read the manifest first.
⏺ Read(Cargo.toml)
⎿ Read 42 lines
⏺ reviewer(review the manifest)
⎿ Done (4 tools · 8.1k tokens · 40s)
⏺ One workspace, 27 crates: a kernel and its plugins.
✻ Tinkering… (esc to interrupt · 4s · ↓ 0.4k tokens)
╭──────────────────────────────────────────────────────────────╮
│ > ▌ │
╰──────────────────────────────────────────────────────────────╯
⏵⏵ accept edits on (shift+tab to cycle) context 84% gpt-5.4
这套语法
| 符号 | 含义 |
|---|---|
> | 你说的话,落在一条抬起的条上 |
⏺ | 模型说的或做的——每个块一个圆点 |
⎿ | 回来的东西:一个结果、一张回执、一个子会话的进展 |
✻ | 在场:回合运行期间的活动行,以及欢迎标记 |
一行工具的圆点带着它的状态:调用进行中时温暖并脉动,完成时变绿,失败时变红,待定或
被打断时变暗。颜色从不独自承载一个事实——每种状态都有一个符号或一个词,所以
NO_COLOR 和单色终端什么也不会丢。
结果会折起来只剩尾巴,写作 … +12 lines (ctrl+o to expand)。活动行的动词是 bingo
自己的那一批,每个回合抽一次:Simmering、Noodling、Tinkering、Rummaging、Mulling、
Weaving、Sketching、Percolating。
状态行
输入框下面,三个位置:
- 左 —— 权限模式:
⏵⏵ accept edits on (shift+tab to cycle)。default不显示 模式,只显示提示。 - 中 —— 只显示此刻为真的东西:
1 needs you (ctrl+g)、2 running、context 84%,或者最新的通知,显示四秒;当输入框为空且没有别的事为真时,显示? for shortcuts。 - 右 —— 你在哪里、你在什么上面:
in reviewer · gpt-5.4。
按键
这就是 ? 面板所读的那张绑定表,所以一个按键在它被绑定的地方就有文档。
| 按键 | 做什么 |
|---|---|
enter | 发送消息 · 打开聚焦的块 |
shift+enter | 换行(ctrl+j · alt+enter · \ 再回车) |
esc | 浮层 → 卡片 → 下拉框 → 打断 |
esc esc | 倒回到更早的一个回合 |
ctrl+c | 打断 · 清空输入 · 按两次退出 |
ctrl+d | 在空输入上退出 |
up/down | 在第一行和最后一行时翻输入历史 |
left/right | 会话条 · down 打开它 |
ctrl+a/ctrl+e | 行首 / 行尾(home · end) |
alt+b/alt+f | 移动一个词 |
ctrl+w/ctrl+u/ctrl+k | 删词 · 删到行首 · 删到行尾 |
pgup/pgdn | 滚动对话记录 |
ctrl+g | 切到某个子代理的视图 |
ctrl+t | 插件状态(任务、房间) |
tab | 补全光标处的命令 |
shift+tab | 轮换权限模式 |
1-9 · y/a/n | 回答打开着的对话框 |
ctrl+e | 展开对话框的预览 |
ctrl+o | 展开最新的结果 · 再按一次展开全部 |
ctrl+b | 把运行中的命令放到后台 |
/ · ! | 运行一条命令 · 运行一行 shell |
? | 开关快捷键面板 |
ctrl+f 搜索对话记录;搜索行占住键盘,直到 esc 关掉它。鼠标可以滚动、点一行卡片
或一行子会话、拖出一段选区——但它从来不是必需的。
esc 是一个有序的栈,先关最里面那一层:先是浮层,然后是正在提问的卡片(离开一张卡
片本身就是取消或拒绝),再是下拉框;什么都没开着时,它打断当前回合。
ctrl+o 只会往开的方向走——折起、展开、分页器——而 esc 把它折回去。
会话就是一行
子代理是有父会话的会话,房间是没有模型的会话(ADR-0002)。两者都由和别的东西完全 相同的代码画出来,也都出现在它们开始的地方,作为对话记录里的一行:
⏺ reviewer(review the manifest)
⎿ Starting…
⎿ Running… 3 tools · 1.2k tokens
⎿ Done (4 tools · 8.1k tokens · 40s)
⎿ Needs you
在那一行上按 enter 就走进子会话的对话记录,状态行的右侧位置随即显示
in reviewer。房间的那一行只有它的名字;在房间里,发言读作 > reviewer: …,提示符
是 #design > 。
在它们之间移动有两种方式:
ctrl+g打开切换器,一个浮在输入框上方的下拉框,一行一个会话——❯ reviewer ⏺ running · needs you。enter过去,esc关掉。- 在空输入框上按
down把状态行变成一条标签条——❯ ⏺ project ⏺ reviewer #design,先代理后房间——left/right随光标移动实时 切换视图,到两端会绕回。up、esc或者开始打字就把状态行还回去。
需要人的子会话会一直脉动,直到你过去;状态行也会数着它:1 needs you (ctrl+g)。
面板与边栏
一个插件可以往屏幕上放一个实时的、进日志的或一次性的视图,而完全不必知道终端是什么
(ADR-0013)。超过 120 列时,这些会变成右侧边栏里的卡片——待办、一条进度条、一个房间
里未回应的提及;不足 120 列时,同样的卡片画在运行中的那些行下面,内联显示。ctrl+t
打开面板浮层,在那里按 enter 把一个面板钉进这次会话的边栏。tab 在边栏卡片之间走,
输入框为空时按一个数字就触发某张卡片写明的按钮。
插件所写的那套词汇是 UI 即数据。
恢复
/resume 打开一个选择器:bingo 为这次会话推出的标题、它有多少条消息、上次动它是多久
以前。
Resume
❯ 1. fix the parser · 12 msgs · 2h ago
2. 请帮我把这个解析器修好 · 1 msg · 1d ago
3. untitled · 5d ago
/clear 在同一个目录里开一个全新会话。从 shell 里,bingo --continue 重新打开这里
最近的那个会话,bingo --resume <id> 按 id 重新打开一个。
离开
退出时,界面会把对话最后一屏打印到 shell 的正常屏幕上,所以之后对话记录仍留在你的终端
里。--no-print-on-exit 让终端保持原样。
环境
外观在内核启动之前就定下来了,所以这些是环境变量而不是设置:
| 变量 | 效果 |
|---|---|
NO_COLOR | 不用颜色;由字重和符号承载每一个事实 |
BINGO_MOTION=off | 每一个动效都停在它的静止帧 |
BINGO_ASCII=1 | 用 ASCII 代替那些符号 |
BINGO_THEME=light | dark | 强制一套配色,而不是读终端的 |