TUI 看板
在终端中运行 backlog board,即可启动基于字符界面的交互式看板。看板按状态分栏展示所有任务,支持键盘导航、任务移动、实时筛选和文件监控,无需离开终端即可掌握项目全貌。
启动看板
backlog board
首次启动时,看板会自动加载项目配置中的状态列,并将任务按状态归入对应列。旧式字符串配置默认 To Do、In Progress、Done 三列;新初始化的项目使用内置的七列默认状态机(见任务生命周期)。状态机中 display: false 的状态列会与列内任务一起隐藏。如果启用了里程碑模式,任务会按里程碑分组展示。
常用启动选项
# 垂直布局(状态列纵向堆叠,适合窄屏终端)
backlog board --vertical
# 显式指定布局方向
backlog board --layout vertical
backlog board --layout horizontal
# 里程碑分组模式(按里程碑泳道展示任务)
backlog board --milestones
键盘导航
看板启动后,使用以下按键进行操作:
| 按键 | 操作 |
|---|---|
↑ ↓ ← → |
在看板中移动选择焦点 |
Enter |
打开当前选中任务的详情弹窗 |
N |
打开任务创建器,直接在看板中新建任务 |
E |
在系统编辑器中打开当前任务文件(TUI 自动挂起,退出编辑器后恢复) |
Tab |
在看板视图与任务列表视图之间切换 |
M |
进入/确认看板移动模式 |
PageUp / Ctrl+U |
列表/滚动区向上翻页 |
PageDown / Ctrl+D |
列表/滚动区向下翻页 |
Home |
跳到列表/滚动区顶部 |
End |
跳到列表/滚动区底部 |
H J K L |
vim 风格的等价导航(与方向键并存) |
Q |
退出看板 |
提示:按
E编辑任务时,TUI 会自动挂起并恢复,无需手动重启看板。
按 E 时系统按该行的实际文件位置决定打开任务还是草稿:草稿目录中的行打开草稿文件、任务目录中的行打开任务文件——即使文件的 status 字段与所在目录不一致(如降级后状态未改写)也不会开错对象;提示文案中的名词(任务 / 草稿)与实际编辑对象一致。
vim 按键族与边界行为
列表组件同时支持方向键与 vim 按键族(h/j/k/l),两套按键的边界语义是统一的:
- 到达列表首/尾后,按键行为由所在面板决定:可以停在边界、翻页,或跳转到相邻面板——而不是无声无息地失效
- 该规则同样适用于筛选弹窗等复合列表,弹窗内也能用 vim 键导航
- 无需开启配置:vim 键默认可用,与方向键并存
在看板中创建任务
按 N 键可直接在看板中打开任务创建器,无需退出 TUI 或切换到 Web 界面:
- 字段:Title、Description、Status(包含 Draft 和工作流状态)、Priority,以及五个日期字段——Due、Planned from/to、Actual from/to;日期格式
YYYY-MM-DD或YYYY-MM-DD HH:mm,非法日期会被拒绝并聚焦回出错字段 - 使用方向键在字段间移动,
Tab/Shift+Tab切换字段 - 创建非 Draft 任务后,任务会立即插入看板并被聚焦
- 创建 Draft 任务后,系统会提示该草稿不会在看板中显示
- 空看板也保持可打开,创建器始终可用
创建器的交互细节
- 鼠标支持:直接点击 Title / Description / Status / Priority 字段即可聚焦或打开选择器
- 极端终端尺寸:弹窗高度与宽度按实际屏幕自适应,最低约 8 行的终端中输入框仍可编辑;宽度按配置的状态/优先级文案长度动态计算,超长状态名会自动切换为紧凑堆叠布局
- Unicode 安全输入:在 astral 字符(如某些生僻汉字)旁插入、删除文字不会造成乱码或光标错位,宽字符按两个显示单元处理(emoji 同样按双宽测量)
草稿会话
backlog draft list 的交互界面是一个以草稿为语料的看板会话:
- 按
N打开的创建器状态固定为 Draft,标题显示为「Create Draft」,字段与任务创建器完全相同(含日期) - 会话实时监听
backlog/drafts/目录:外部编辑、删除草稿即时反映;草稿被提升为任务后自动从会话中消失 - 任务看板会话始终不显示草稿文件
看板移动模式
移动模式允许你直接在终端中变更任务状态:
- 在看板中用方向键选中要移动的任务。
- 按
M进入移动模式,当前任务会被标记为待移动状态。 - 使用
←→选择目标状态列,用↑↓调整插入位置。 - 再次按
M或Enter确认移动,任务状态即刻更新并同步到 Markdown 文件。 - 按
Esc可取消移动并恢复原位。
注意:来自其他分支的跨分支任务无法在看板中直接移动,系统会在底部状态栏提示原因。
多选移动(Shift + 方向键)
移动模式支持一次移动多个任务:
- 按
M进入移动模式后,用Shift+↑/Shift+↓在目标列中移动高亮条(不影响看板顺序)。 - 按
M(或Shift+M)将高亮任务招募进移动集合;不支持 Shift 方向键的终端可用此键招募邻近任务。 - 招募后第一个普通方向键收起高亮,预览整组任务作为一个相邻块落位;确认后一次性写入。
- 写入期间方向键与取消键冻结;落在原位的移动是无操作。逐任务失败会在底部状态栏报告。
跨分支任务不能被招募。确认采用防抖设计,重复按 Enter 不会重复提交。
任务列表与筛选
按 Tab 键可从看板切换至任务列表视图。列表视图支持更精细的筛选:
- 状态筛选:只显示特定状态的任务。
- 负责人筛选:按
@用户名过滤。 - 标签筛选:按标签多选过滤。
- 里程碑筛选:只显示归属某一里程碑的任务。
- 优先级筛选:高 / 中 / 低。
- 搜索框:实时模糊匹配任务标题与描述。
在列表视图底部,按对应快捷键打开筛选面板,勾选条件后列表会即时刷新。筛选条件在看板视图与列表视图之间共享,返回看板后仍保持生效。
紧凑视图
当终端高度有限时,列表视图会自动切换为紧凑模式,隐藏部分元数据,仅保留任务 ID、标题和状态,确保在小型终端窗口中也能浏览大量任务。
里程碑看板视图
backlog milestones 提供侧栏 + 嵌入式看板的双栏布局:
- 左侧栏列出「未分配」桶与全部里程碑(含已完成标记),
↑/↓移动光标,Space将看板限定到该里程碑(行首显示▶),Enter打开里程碑详情弹窗(纯元数据,无任务列表) - 右侧为完整看板,键盘在看板与侧栏之间按焦点路由;筛选栏末尾显示
<当前显示>/<任务总数> N在侧栏创建里程碑、在看板创建任务(默认归属当前限定的里程碑);里程碑弹窗中按E打开编辑表单(标题、描述、Due、Planned / Actual 起止,日期格式YYYY-MM-DD或YYYY-MM-DD HH:mm;标题创建后只读)- 里程碑与任务变更都会实时同步:外部编辑里程碑后弹窗原地刷新,被归档 / 删除的里程碑弹窗会带提示关闭
非 TTY 环境下,backlog milestones list --plain 输出与 backlog board -m 一致的 Markdown 分组看板(先「No Milestone」,再按里程碑文件顺序分节,节内按状态分组),--show-completed 可纳入已完成任务。
实时文件监控
TUI 看板底层使用文件系统监控(Bun.watch),当以下情况发生时,看板会自动刷新:
- 在 Web UI 或其他终端中修改了任务状态
- 通过
backlog task edit命令更新了任务 - AI 代理通过 MCP 工具修改了任务文件
这意味着你可以同时打开 TUI 看板和 Web 界面,任意一侧的改动都会实时同步到另一侧。
实时刷新对原子写入(atomic writes)具有弹性:CLI 写入任务文件时可能触发短暂的部分内容事件,TUI 会等待文件稳定后再刷新,避免读取到不完整的任务内容。选中任务在刷新、移动、归档或删除后仍保持有效,删除后会自动选中相邻任务。
已打开弹窗的同步:看板任务弹窗与里程碑弹窗同样是"活"的——外部修改内容时按内容签名比对后原地重渲染,记录被移出当前视图时弹窗带提示关闭;无变化的刷新(如自己在弹窗内保存产生的回声)不会引起闪烁或重建。
验收标准进度指示
状态为 In Progress 且包含验收标准(AC)的任务,看板行会显示 ASCII 进度条,如 [#####-----] 5/10:
- 使用
#(已完成)与-(未完成)纯 ASCII 字符,任何终端字体都能正确渲染 - 列宽足够时显示 10 格条,紧凑列显示 5 格条(宽度阈值 40 列)
- 颜色按完成度:全部完成绿色、不足三分之一红色、其余黄色;只要有勾选就至少显示一格
- 从验收标准实时派生,不持久化;没有 AC 或非 In Progress 的任务不显示
- 任务详情面板不再显示进度条,只保留 checklist 本身——看板行是唯一的进度面
帮助弹窗
按 ? 打开帮助弹窗:弹窗高度随终端尺寸自适应(从不超出屏幕),调整终端大小时实时重排;滚动上限按实际渲染行数计算,窄终端中换行的说明文字也能滚到底。任务详情弹窗的背景遮罩同样随终端尺寸变化实时重排,缩放终端后不会残留错位区域。
主题自适应与稳定切换
TUI 看板采用终端主题自适应渲染,避免硬编码 ANSI 颜色带来的可读性问题:
- 大多数控件边框使用终端默认色,跟随当前配色方案
- 保留看板移动态的青色高亮,作为当前待移动任务的可识别标记
- 长列表和滚动区支持
PageUp/PageDown/Home/End快速定位,并显示滚动条指示器
Tab 键在看板与任务列表之间切换经过稳定性处理,切换前后不会丢失 stdin 输入或积累重复监听器,双向切换均可靠。
依赖就绪提示
任务详情面板会为含有依赖的任务显示一行 Readiness 判定:
✓ Ready to start— 依赖全部就绪,可以立即开工● Blocked by <ID>— 至少有一个依赖尚未完成或无法解析
判定采用 fail-closed:依赖数据不完整、循环或存在歧义时一律按"阻塞"处理,不会猜测。同一判定也出现在 Web 任务详情的 Dependencies 卡片、Web 任务详情的状态徽章、backlog task list --ready 以及 MCP task_list 的 ready: true 参数中。该提示只做展示与筛选,不会修改任务或改变排序。
隐藏空状态列
看板可以隐藏当前没有任何任务的状态列,减少视觉杂乱:
- 使用共享配置键
hide_empty_columns(与 Web 界面同一开关) - 在看板内切换时界面立即反映(乐观更新),写入异步落盘
- 退出 TUI 时会等待挂起的写入完成,避免配置丢失
- 拖拽/移动任务期间所有状态列保持可见,以便作为有效的放置目标
窗口标题
进入 TUI 时,终端窗口标题会更新为包含项目名的标题;退出时恢复原标题。标题的压入/弹出严格配对,在 tmux 等嵌套终端中也能通过透传序列正确恢复。
按键提示约定
底部 footer 与帮助面板中的按键提示统一使用大写字母表示可按键(如 N 新建、E 编辑、M 移动),避免大小写混用造成误解;footer 文案集中为常量,防止不同视图之间出现措辞漂移。
非终端环境的纯文本回退
当 backlog board 运行在非 TTY 环境(如 CI 流水线、脚本管道、IDE 集成终端)时,它会自动回退为纯文本输出,打印结构化的 Markdown 看板表格,而非启动交互式界面:
# 在 CI 中查看看板状态
backlog board > board-status.md
纯文本输出包含项目名、时间戳、各状态列的任务清单以及负责人和标签等元数据,便于存档和邮件分享。
同时运行多个视图
backlog board 与 backlog browser 可以并行运行。终端看板适合专注编码时快速查看状态,Web 界面适合详细编辑和拖拽操作,两者数据完全互通。