👀 传统黑魔法:靠正则抓取屏幕(Screen Scraping)
终端宿主盲目监听滚屏文字:匹配到 ? (Y/n) 就猜它卡住了,匹配到 Password: 就猜它在等密码。一旦工具换了提示词、加了彩色输出、或者输出多国语言,状态判断当场失灵崩溃!
在过去,终端模拟器想知道命令有没有跑完、是不是卡在等用户输入密码,全靠极其脆弱的“屏幕正则抓取(Screen Scraping)”;而在 AI 编程智能体并发作战的今天,OSC 7501(Program Status Protocol)应运而生:程序只需向标准输出打出一行极小的终端转义序列,就能直接宣告自己是 working(干活中)、blocked(被卡住等批准)、还是 done(大功告成)。
一文彻底拆解:ANSI 转义序列语法规范、五大生命周期状态、多子任务分级树、Base64 安全消歧义传输,以及如何用一行代码让你自己的 Python/Shell 脚本直接点亮现代终端状态灯。
终端宿主盲目监听滚屏文字:匹配到 ? (Y/n) 就猜它卡住了,匹配到 Password: 就猜它在等密码。一旦工具换了提示词、加了彩色输出、或者输出多国语言,状态判断当场失灵崩溃!
程序不再当哑巴,而是直接在控制流中输出带结构的转义序列:ESC ] 7501 ; state=blocked:app=claude ST。终端宿主 100% 确定程序真实意图,毫秒级将状态冒泡到侧边栏、Tab 标签与系统通知栏!
规范明确定义了五种严苛状态:
• working:正在执行长任务,可附带 progress=40 进度;
• blocked:停止工作等待人类介入(如输密码、授权写文件);
• done:任务已完成(当用户切到该窗口后自动变更为 idle);
• error:发生异常中断;
• idle:常态就绪。
状态优先级严格递减:Blocked > Error > Done > Working > Idle,确保人类视线第一时间捕获堵塞点。
复杂的部署脚本可能一边在编译前端、一边在迁移数据库。OSC 7501 支持 id=build/frontend 与 id=build/db 分层记录!当整体完成时,只需一条 state=clear:id=build,就能一网打尽清除该分支下的所有子状态记录。
支持终端维护最多 256 条并发记录,完美契合复杂工程流水线。
给终端发消息最怕字符截断或注入恶意转义控制码。OSC 7501 规定自定义消息(如 msg=...)必须经由 Base64 编码!终端解析器一旦遇到非法解码或非法控制符,直接安全丢弃整包数据,严守 PTY 虚拟终端安全边界。
整个转义序列严格限制在 4,096 字节以内,杜绝内存缓冲区溢出攻击。
点击下方场景,体验不同状态指令如何在终端底层点亮信号灯:
注:本探针严格按照 Program Status Protocol (OSC 7501) 最新规范与 Herdr / Otty / Solo 终端解析标准构建。
如果脚本执行过程中崩溃甚至被 kill -9 强杀,没来得及发送清除指令怎么办?现代终端支持与 OSC 133(提示符标记) 联动:当 Bash/Zsh 重新打出下一行命令输入光标时,终端自动将之前的 working / blocked 状态清理干净!
脚本如何知道当前终端能不能听懂 OSC 7501?只需在启动时打印 ESC ] 7501 ; ? ST。如果终端支持,会立刻原样回复;若不支持则石沉大海。脚本由此决定是否开启结构化汇报,做到极致平滑降级兼容。
很多智能体的标准输出会被重定向到日志文件或管道中。为了保证信号灯依然能被终端捕获,优秀实现会直接将 OSC 7501 转义序列写向 /dev/tty 设备文件,避开数据流管道的吞咽拦截!
| 控制字段 | 允许的合法取值 | 通俗物理含义与行为 |
|---|---|---|
| 前缀与终结符 | 起始:]7501;终结: \ (ST) 或 (BEL) |
标准的操作系统控制(OSC)转义包裹格式,长度上限 4096 字节 |
| state(必填) | working · blocked · done · error · idle · clear |
声明当前程序最核心的物理生命状态;为 clear 时执行删除 |
| kind(可选) | permission · question · auth |
当状态为 blocked 时,进一步细化是等文件权限、等确认回答还是等密码 |
| progress(可选) | 0 到 100 的整数,或 indeterminate |
进度条百分比,直接驱动现代终端标签页上的环形或线性微进度条 |
| msg(可选) | 经 Base64 编码的 UTF-8 文本字符串 | 展示在状态悬浮气泡里的简述,严禁明文传递防止转义冲突注入 |
| id / app(可选) | [A-Za-z0-9_.-]+(如 app=cargo:id=test/unit) |
标识属于哪款应用与子任务路径,支持级联归属与局部精准清除 |
“半个世纪前发明的终端原本只负责吐出冰冷的死文本,而 OSC 7501 就像是给每一条运行在黑框里的代码装上了‘神经感知反射弧’——它让 AI 智能体在需要人类拍板的刹那,能够准确、优雅、不卑不亢地轻轻敲响你的房门。”
随着 Herdr、Harness、Solo、Otty 等新一代终端的全面支持,OSC 7501 正在成为连接人类直觉与多智能体集群之间不可或缺的通用数字握手协议。