程序状态
终端中运行的程序可以向 Server Box 主动上报当前状态:运行中、等待确认、已完成或执行失败。Server Box 会在终端标题旁实时展示状态指示,并在终端处于后台时发送系统通知。
服务器端无需安装任何附加组件。程序只需向标准输出写入简短的控制序列(escape sequence),Server Box 即可通过 SSH、Monitor 终端或本机终端自动解析。
支持的状态协议
Section titled “支持的状态协议”| 控制序列 | 常见发送方 | 上报状态 |
|---|---|---|
| OSC 7501 | 支持程序状态协议的程序 | idle(空闲)、working(运行中,含进度)、done(已完成)、blocked(等待审批、输入或登录)或 error(失败),可附带标题与说明 |
| OSC 9;4 | systemd、winget 及其他支持终端进度条的程序 |
进度百分比、失败、暂停 |
| OSC 133 | 启用了 Shell 集成的 Shell(如 fish 4) | 命令开始执行、命令执行完毕及退出码 |
状态展示位置
Section titled “状态展示位置”- 终端名称前的状态圆点:展示在终端标签切换器、终端列表及侧边栏中。等待操作时为橙色,执行失败时为红色,已完成时为绿色,运行中为主题强调色(含进度时显示为进度环);空闲状态下不显示圆点。
- 终端工具栏状态按钮:汇总展示当前会话的所有状态报告,依次为外层 Shell 状态及各个
tmux窗格(pane)的状态。已完成或失败的记录会一直保留,直到程序刷新状态或你手动清除。 - tmux 集成:窗口标签采用其下属窗格中优先级最高的状态颜色,窗格菜单内可分别查看各窗格的状态详情。即便某个窗格当前未在屏幕显示,其上报的状态依然会被实时捕获。
- 系统通知:当终端不在当前前台(如已切换到其他标签页或应用退至后台)时,若程序进入等待操作、完成或失败状态,或是耗时超过 30 秒的命令执行结束,应用都会发送系统通知,点击通知即可直接跳转到对应终端。可在 设置 → SSH → 程序需要操作时通知 中关闭。
- Android 常驻通知与 iOS 实时活动(Live Activity):在锁屏或通知栏展示当前会话中程序的状态(等待操作、已完成、失败或运行中)。由于锁屏界面无需解锁即可查看,此处仅显示状态类别,不展示具体标题与消息正文;关闭上述通知开关后将不再显示。
- AI Agent:Agent 会结合终端屏幕内容一并读取状态报告,从而准确判断程序是否正在等待交互输入。
- Monitor Web 面板:在网页终端顶部展示当前优先级最高的状态报告。
在自定义脚本中上报状态
Section titled “在自定义脚本中上报状态”状态序列格式为 ESC ] 7501 ; key=value:key=value ESC \,其中 msg 与 title 字段需使用 Base64 编码:
status() { printf '\e]7501;state=%s:msg=%s\e\\' "$1" "$(printf '%s' "$2" | base64 | tr -d '\n')"}
status working 'Backing up /srv'# ...status done 'Backup finished'发送 state=clear 可清除当前状态。当启用了 Shell 集成并显示下一个命令提示符,或终端会话结束时,working、blocked 和 idle 状态会自动清除,done 与 error 状态则会保留。关于多任务并发上报及 id 标识的完整规范,请参阅协议文档。
tmux 透传说明
Section titled “tmux 透传说明”Server Box 客户端使用控制模式(control mode)连接 tmux,可直接获取每个窗格的原始输出,因此无需额外配置即可识别状态序列。
Monitor Web 面板则通过常规 tmux 客户端连接,由于 tmux 默认会过滤未知的控制序列,需在 ~/.tmux.conf 中开启透传(set -g allow-passthrough on),并由脚本将控制序列按 tmux 透传格式封装(ESC P tmux; … ESC \,且内部每个 ESC 需双写转义),状态报告才能传递到网页面板。
此外,在 tmux 会话内查询终端是否支持状态协议(OSC 7501 ; ?)时无法收到应答,但直接发送状态序列不受影响。