Skip to content

底部面板 ​

会话记录与输入编辑器之间是底部 dock:三个被动面板按优先级自上而下叠放——workflow → activity → 通知栏,通知栏紧贴编辑器上方(状态栏仍在编辑器下方)。agents、jobs、goal、todo 不是面板:它们是状态栏里的条目(见状态栏)。无内容时各面板渲染零行——dock 不会跳变。BTW 和 /agents 打开的会话不属于 pane:它们是显示在 transcript 面板中的旁支会话。

Dock 行数预算 ​

dock 最多占终端高度的三分之一。多个面板同时出现时共用一条分隔线,不再各画一条;行数按固定规则分配:先从最靠近编辑器的面板开始,保证每个面板至少有标题或汇总这一行,剩余行再按同样顺序轮流分配。内容超出配额的面板保留开头,末行显示灰色的 … +K more rows;面板之间不会从中间丢行,也不会互相穿插。面板的每一行都是单行——过长的内容以 … 截断而不换行。

活动面板(activity) ​

当前 Agent 唯一的实时状态行:会话记录只记录已经发生的事,这一行说明现在正在发生什么——阶段字形、现在时标签、回合耗时、token 计数(↑ 上下文,↓ 估算输出,字符数 / 4)、文本流式输出时的速率,以及轮换提示:

🌔 深度求索中 · 3s · 提示:…
⠋ 思考中 · 8s · ↓2 · ≈42 tok/s · 提示:…
⠋ 输出中 · 14s · ↓120 · ≈40 tok/s · 提示:…
🌔 正在运行命令 · 21s · ↑30k ↓4k · pnpm test
模式呈现
waiting填充字形 + 深度求索中;工具调用参数仍在流式生成时显示准备标签(准备写入文件)
tool静止的 ● + 正在运行的类别(正在运行命令、正在读取文件、正在调用工具);派生 subagent 时保持 深度求索中,由 Agents 条目展示
thinking绽放字形 + 思考中
composing填充字形 + 输出中——没有输出光标,这行就是"正在写"的信号
stopping中断排空期间显示静态 ■ 正在中断...
idle一行占位(dock 边缘稳定)
对话框打开整行隐藏(面板占据编辑器槽位时)

Standard 模式下,提示的位置改为显示当前动作:命令、路径或查询(通用工具与 MCP 工具显示名称,如 server › tool),思考时显示最新一段思考内容。Compact 保持精简,Detailed 与 Verbose 已在会话记录中显示运行中的卡片,因此不附详情;文件写入与编辑的 diff 卡片已在屏幕上,同样不附详情。终端变窄时,这一行先舍弃尾部(过长的详情先截断再舍弃),再依次舍弃速率、计数、耗时,最后是标签;始终不换行。

通知栏(notification) ​

编辑器上方的一行——无内容时为空行,所以编辑器不会移动。它显示此刻该读的通知:应用与当前会话的记录中最严重、其次最新的一条,后面用灰色 · +N 表示排在后面的条数。通知靠右,可以用满左右边距之间的整行;仍然太长时在前部以 … 截断,并保留结尾的计数或倒计时(⚠ Rate lim… · retrying in 9s · 1/5)。普通信息没有标记字形,文字本身就是通知。会话流滚离尾部时,这一行还会在中间显示 Back to bottom · Ctrl+↓ 标签。

没有通知时,这一行显示提示符正在等待的内容(Searching files…,带加载动画)、提示符历史的位置(↑ history 2/4),或光标所在 token 的按键;否则提示离开提示符的按键(Alt+↑ conversation · Alt+↓ view),回合运行期间轮换显示引导或中断回合的按键、草稿的按键,以及计划与模型的按键。打开旁支会话时,右侧以 F7 btw · F8 close 开头,并取代这条通用提示。

焦点在会话或搜索时,该模式的按键占据这一行的左侧,按优先级从后往前收起——↑/↓ select · Enter expand · c copy · / ? search · Ctrl+G editor · Ctrl+C JSON · Esc back,Esc 最后才被收起;在排队或引导消息上,该行自己的按键排在前面(e edit · s send now · d cancel · Enter expand · c copy · ↑/↓ select · Esc back)。模式持续期间通知退让为它的标记和结尾。

排队消息 ​

你在 agent 运行中提交的 follow-up 进入 harness inbox 排队。它们不是面板:每条是会话流末尾的一行(提示符样式),标记为 ⏎ 排队中(等待下一 turn)或 ⏎ 引导中(在当前 turn 的下一个 step 读取;仅用户消息)。Alt+↑ 把焦点移入会话流并落在最新一行,↑/↓ 逐行移动;在排队消息行上,e 把消息取回提示符编辑,s 立即发送(作为 steer),d 取消,几秒内可按 u 撤销。Enter 展开全文;c、Ctrl+C、Ctrl+G 复制或在 $EDITOR 中打开。提示符的 ↑/↓ 归编辑器历史(见输入编辑器)。

todo 视图(todo) ​

会话的 todo 列表(整表快照,last-write-wins)是状态栏里的 todo 视图。状态栏只显示 ● todo 2/12 4m 12s(完成数/总数,以及列表已跟踪的时间;行拥挤时最先去掉计时);列表完结后显示 ✓ todo 12/12 12s 五秒后消失。Alt+↓ 在状态栏下方打开它的面板(状态栏保持不变,该条目下方画一条粗线):带三态标记的全部行——✓ 已完成(muted 加删除线)、● 进行中(primary 粗体)、○ 待办——没有标题、计数和时间。面板长度固定,超出则纵向滚动,最后一行统计下方还有多少行(↓ 6 more);它不增加自己的按键(↑/↓ 滚动,←/→ 切换条目,Esc 返回)。

  • 历史 —— 只有 viewHistory 设置打开(默认关闭)时才列出已完成项。
  • 中断的运行 —— 最近一次运行失败或被停止且列表未完成时,面板以灰色的 interrupted 开头。

todo_write 调用在会话流里只作为单行过程成员出现(✓ 更新了计划 · 已完成 3/5);这个面板是 todo 的实时呈现面。

旁支会话(/btw 与 /agents) ​

Mayfly 同时保留主会话与任意数量的旁支会话,但 transcript 面板一次只显示其中一个。/btw <question> 创建临时旁路 Agent——以当前会话的全量事件流为种子,并继承 provider、model、reasoning effort 和 agent preset。/agents 则打开当前主会话的完整 descendant 树:

  • 所有会话都在同一个 transcript 面板中渲染。live BTW 或 continuable subagent 成为 mayflyCurrentAgent.current(),状态栏、底部面板、命令与完整编辑器随之切换到该 Session;BTW 保留完整父会话种子作为模型上下文,但 transcript 从 BTW 的第一个问题开始,隐藏继承的历史;图片、follow-up、steer、撤回与中断走同一条输入管线;
  • one-shot child 或当前不驻留的 continuable child 不激活 Agent:它的 transcript 从原生历史加载到同一面板,保留自己的运行中 turn 标题(没有活动行跟随它),状态栏标注 只读 或 回复以恢复。编辑器仍在:只读会话中提交的草稿留在编辑器并给出提示;可恢复会话中发送会唤醒 child:Enter 把消息排队到它的下一个 turn,Ctrl+Enter 转向它。斜杠命令仍作用于主会话;
  • 打开的会话多于一个时,状态栏用一个标签(main、btw、subagent)标出当前会话,通知栏右侧以 F7 btw · F8 close 开头(子代理为 F8 detach),取代通用的按键提示。F7 返回上一个显示的会话;F8 关闭当前显示的旁支会话,显示主会话时则关闭 F7 对端。关闭普通 subagent 只 detach,关闭 BTW 会 dispose 临时 Agent;
  • 再打开其他 child 不会关闭已打开的会话;新的 BTW 会替换旧的 BTW。无参 /btw 关闭当前 BTW;/new、/resume、/fork 会关闭所有旁支会话,/rewind 与 /agents 浏览会先显示主会话;
  • 只有当前显示的会话和它的 F7 对端保留 transcript 状态;其余会话在你切回之前不占用任何 transcript 资源,因此同时打开很多会话依然轻量;
  • /agents 中 Enter 查看 child,Space 或 ← / → 展开分支,Tab 到 Stop selected,停止 live continuable child 前会弹出 Yes / No 确认(默认聚焦 No)。对 one-shot、cold/inactive 或仍有 live 后代的 child,Stop 会直接说明为何不可用而不弹确认。/agents stop <id> 提供直接停止路径。Harness 销毁 Agent 时会递归销毁它拥有的 live 后代,因此 Mayfly 对仍有 live 后代的目标直接拒绝,要求先从叶子节点开始停止。

Agents 视图 ​

本会话的子智能体是状态栏里的 Agents 视图,不是 dock 面板。状态栏显示 ● agents 1/3 41s(已结束数/总数,以及最早仍在工作的那个已运行多久),并在整个会话期间保留:✓ agents 3/3 41s,有子智能体自身失败则为 ✕;你自己停止的不算失败。成员是 spawn 类调用(subagent 与任意 subagent_* provider),所以子智能体从调用开始的那一刻就出现:没有结果的调用是会阻塞本回合的前台子智能体(fg),已收到 started subagent 确认的是后台子智能体(bg)。会话里调用那一行跟随它的 child:● Subagent(…) · running in background,之后是 ✓ … 41s、✕ … failed 或 ⊘ … stopped。

Alt+↓ 在状态栏下方打开面板:本会话每个子智能体的列表,工作中的在前,每个一行、各列对齐——标记(● 工作中、✓ 完成、✕ 失败、⊘ 已停止)、名称、任务、fg/bg、工具数、token(总数、↑ 输入、↓ 输出)、流式输出时的速率,最后是时间。行变窄时按固定顺序舍弃列(速率、↑、↓、标签、工具数),保留名称、任务和时间。↑/↓ 选择行,Enter 像 /agents 一样打开它的会话(F8 关闭并回到打开它的视图;/agents 自己打开浏览器,关闭后不回到这里),x 在 Yes / No 确认(默认聚焦 No)后停止 continuable child,b(前台转后台)已列出但暂不可用,要等 Harness 提供结束运行中前台调用的接口。旁支会话(/btw 或子智能体)只列出它自己派生的子智能体。

Workflow 面板 ​

原生 workflow/* lifecycle 归因到当前 Agent 后,面板显示 workflow 名称、当前 phase、运行/完成/失败的子 Agent 树与逐秒 elapsed。超过六个子 Agent 的运行先列出运行中的子 Agent,其余在末行 … +K more 中计数。运行结束的摘要会保留到下一次相关状态替换;切换显示的会话时,面板与其他 session-scoped UI 一起切换。

预览版 · v0.1.4-rc.1