OSC 7501:让终端程序主动汇报状态
A Terminal Protocol for Program Status (OSC 7501)
我制定了一个新的终端转义序列规范 OSC 7501,旨在解决长期运行任务的状态反馈难题。无论是构建、部署还是日益普及的 coding agents,程序现在可以直接通过 pty 向终端汇报其当前状态:是正在工作、等待用户输入、已完成还是出错。这终结了依赖屏幕内容猜测或窗口标题正则匹配的笨拙方式,也无需为每个 agentic inbox 单独开发非终端 API。该协议通用且原生,任何终端开发者和应用开发者都能轻松参与,让程序自己告诉我们它正在做什么。
我不想再靠阅读屏幕或进程树来猜测程序在做什么,程序自己已经知道了,让我们给它一个告诉我们的方法!
HN 评论区
16- drewg123
BSD 系统早就有了这个功能,而且已经很多年了。如果你在终端按下 ^T,就会向你正在等待的应用程序发送一个 SIGINFO 信号。默认情况下,你会看到程序名称、它阻塞在何处,以及关于实际/用户/系统时间和内存使用量的信息。
在前景启动一个 emacs 窗口:
% emacs
^T
load: 0.32 cmd: emacs-31.1 64938 [select] 2.89r 0.75u 0.06s 6% 122404k
- weinzierl
几十年来,我一直在使用一个简陋版的这个功能。
我的 iTerm2 配置为在标签页中显示活动状态、新输出和视觉响铃。在 Linux 上,我使用 WezTerm 的一个近似方案。
我有一个 bell 命令,可以在管道或序列中使用,以便在我感兴趣的事件发生时发出响铃。最简单的情况是当程序完成时。
我还有一个花哨的别名,可以在 shell 命令序列中使用,除了发送终端响铃外,还能根据前一条命令的退出状态发出不同的声音。
- flopsamjetsam
这让我想起了旧式 IBM 3270 终端的状态行(一切旧事物都是新事物 :)。实际上,我觉得这个主意相当不错。