MITCHELL HASHIMOTO 官方提案 · 终端新协议

OSC 7501 终端状态协议:
智能小工状态灯 与 Agent 集中收件箱

告别猜窗口标题和傻等静默!HashiCorp / Ghostty 创始人 Mitchell Hashimoto 提出全新终端转义序列:让任何后台任务与 AI Coding Agent 随时向终端主动汇报是空闲、在忙、卡在等确认还是已完工!

📜 协议代号:OSC 7501 (Program Status Protocol)
🚦 五大核心状态:idle · working · blocked · done · error
🤖 核心杀手场景:Agent Inboxes(AI 智能体全局收件箱)
🛡️ 纯净设计:只传状态数据,彻底解耦前端 UI 渲染

🥊 交互对决:传统猜谜法 vs OSC 7501 主动汇报

❌ 传统土法:瞎猜窗口与盲人摸象
终端模拟器 无状态/盲目 正则匹配屏幕文本? 超过30秒没输出就算完工? Terraform / AI 其实在等密码输入 (无人察觉,白等半天)
  • 启发式误判: 靠输出静默时间来猜,程序卡在等用户输入确认时,终端以为挂起了。
  • 窗口标题被滥用: 把进度条和 Emoji 全塞在窗口 Title 里,不仅易碎还毫无结构。
  • Agent 管理地狱: 开了 10 个 Coding Agent,根本不知道哪个在等权限、哪个报错跑崩。
VS
✨ OSC 7501:结构化主动宣告协议
Terraform / AI state=blocked kind=permission OSC 7501 Ghostty / Rex 统一收件箱聚焦 弹窗/徽章/推送
  • 毫秒级准确定位: 程序明确发出 state=blocked:kind=permission,终端秒懂。
  • 多任务树状层级: 部署多区域时,id=us-east 和 id=eu-west 独立跟踪状态。
  • 表现形式完全自由: 终端爱弹窗就弹窗、爱放状态栏就放状态栏,协议绝不指手画脚。
🚦

5岁也能听懂的超级比喻:“施工队头顶的智能三色状态灯”

以前你在办公室雇了一群小工(跑编译、跑测试、跑 AI 智能体)。他们关着门在小黑屋里干活,如果中间缺工具或者要你签字批准,他们只会干坐在那一声不吭(终端挂起等待输入)。你必须每隔五分钟跑去挨个推门看一眼。
OSC 7501 就像给每个小工的工位门顶装了一盏“智能三色信号灯”:在干活就亮绿灯转圈(working);完工了就亮蓝灯闪烁(done);被卡住等老板签字就亮黄灯并用喇叭喊原因(blocked: permission);搞砸了就亮红灯(error)。老板坐在工位主控台(Agent 收件箱),一眼就能看到谁需要自己审批!

🏛️ 协议的三大极简基石

💡

只传递纯状态,绝不定义 UI

协议里没有任何关于“红色”、“弹通知”、“声音”或“弹窗”的字眼。它只纯粹告诉终端客观事实:程序处于 5 个核心状态之一,表现形式完全由终端模拟器自行决定。

🧩 理念:Data Over Presentation
🌲

树状任务 ID(多子任务并发)

支持类似 deploy/us-east 的斜杠分级 ID!主程序在运行的同时,子任务可以分别汇报各自进度,父节点一键继承应用程序名称(app),还能一键级联清空。

🌿 机制:Hierarchical Task Records
📬

专为“Agent 智能体收件箱”而生

同时挂着 5 个 Claude Code、OpenCode 或批处理任务时,状态集中流转到中央统一 Inbox,哪个任务缺权限、哪个写完代码一目了然,无需在 10 个 Tab 间切来切去。

🤖 破局:Agentic Inbox 统一调度

🎮 交互实验室:体验 OSC 7501 转义序列与终端收件箱响应

切换不同程序(Terraform 审批、Rsync 备份、AI 编码智能体)的状态报文,观察终端如何精准捕获和响应!

当前汇报状态(State): blocked
阻塞原因类别(Kind): permission (等确认)
所属应用(App): terraform
终端关注度 / 优先级指数 需要人工干预 (95%)
解码消息(Decoded Msg): Apply 3 to add, 1 to change...
原始终端转义序列(Escape Sequence):
ESC ] 7501 ; state=blocked:... ESC \

🔍 架构深水区:为什么以前的序列搞不定?

Sequence Comparison

OSC 9;4 与 99 为什么不够用?

很多人会问:终端不是早就有进度条和桌面通知了吗?

  • OSC 9;4 进度条: 只能报告百分比或忙碌,根本无法表达“我卡在等用户输入”以及“我在等什么”。
  • OSC 9 / 99 桌面通知: 是一次性事件。一旦弹窗消失,终端就失去了一切当前真实状态。
  • OSC 133 Shell 集成: 只能由 Shell 汇报命令开始和结束,进到内部程序后完全是个黑盒。
Wire Protocol

紧凑健壮的报文语法

采用极度贴合终端惯例的键值对语法,杜绝冗余的 JSON 解析依赖:

  • key=value 之间用冒号 : 分割,语法自解,无转义负担
  • 自由文本(msg, title)一律经由 Base64 传输,严禁控制字符破坏终端
  • 未识别的键直接忽略,未来随时平滑升级扩展
State Lifetime

生命周期与进程清理机制

终端不需要心跳检测,而是绑定在已有的 PTY 事件生命周期上:

  • 当进程退出或新 Shell Prompt(OSC 133 A)出现时,自动清理 working 和 blocked
  • done 和 error 状态在进程退出后依然保留,直到用户切回查看
  • 一键 state=clear 级联销毁自身与所有子任务记录
🎯

Mitchell Hashimoto 的洞见:终端正在从“打字机”变成“多智能体工作台”

在几十年前,终端是一个人在前台盯一个程序跑;而在 2026 年的今天,开发者往往在后台并发挂着几十个长期任务与自主写代码的 AI Agents。“终端不该是一个看不见房间里发生了什么的黑盒子。” OSC 7501 用极其优雅、小巧而标准的终端原生转义码,打通了程序内心与现代 GUI 窗口管理之间的最后一公里!