VibeCoding · 文章

做了个把 Mac 刘海当状态栏的工具,专为vibe coding时代的开发者打造

起因

我平时会同时开几个编码智能体,Claude Code、Codex,有时还有一个在远程服务器上。让它们开始干活之后我就去做别的事了,麻烦出在它们停下来的时候:要批准一条命令,要回答一个问题,或者测试跑挂了。这些都发生在某一个终端窗口里,我不在那个窗口,就不会知道。

每个智能体都有自己的提醒办法,终端响铃、改标签页标题、发系统通知都有。但三个智能体就是三种写法,而且提醒总是落在它自己的窗口上。

对于目前群相争霸的时代,选择合适的模型来进行任务非常重要,不仅可以提高开发效率,还能节省tokens,也就是省钱!众所周知的顶级模型,比如Claude、codex、Gemini(曾经是,但是目前尚不清楚最新模型的真正实力,所以这个位置也可以由Grok坐一下),以及国内的GLM,DeepSeek、qwen等,几乎每个月都在更新,所以我的选择是,大型复杂任务、项目架构尽可能采用顶级模型(我用Claude code),简单的小任务,小BUG的fix,页面布局的调整、内容改动等等这些没什么难度的任务就交给性价比高的模型,DeepSeek啥的都是不错的选择,如果要多模态也可以选择使用glm5.3系列,这些模型时不时的还会发点鸡蛋,用来完成小任务基本上用不完。

这就避不开一个同事跑多个agent的问题了,在没有做runnock之前,我都是一个个终端打开看进度,看状态、需要人工授权干预的时候进行操作,确实没什么难度,鼠标点点的事情,但是多少有些浪费时间了,大部分情况下都是任务派出去之后就干别的事情了,会经常忘记在多个终端之间来回切换,特别是那种在授权期间忘记操作的,再看到的时候已经卡很久了....

我想要的东西不复杂:一个固定的位置,平时是空的,有事才出现;能看出是哪个智能体、在做什么;需要我处理的话,点一下就回到那个终端。

MacBook 屏幕顶部正中间的刘海刚好符合。它在视线范围里,又不遮任何内容。至于windows嘛,我自己没有,所以优先利用MacBook的这个特性,有了Runnock的想法。


Runnock 是什么

一个 macOS 应用,只在刘海里显示,没有 Dock 图标。没有任务的时候它什么都不画。

刘海里的几个状态

智能体在工作时,收起的刘海很窄:左边是智能体的图标和状态,右边是这个任务已经跑了多久。状态用方块像素画,每种状态形状不同:运行中是三颗液滴,等待是一只手,完成是对勾,失败是感叹号。这样不靠颜色也分得清。

任务名放在哪,要看你的屏幕。没有硬件刘海的屏幕上,Runnock 自己画一个,任务名在中间,工作时会轮流显示你交代的事、它刚说的话、清单里正在做的步骤和它正在用的工具。有硬件刘海的 MacBook 上,中间是摄像头,字放不下,所以任务名在摄像头下面单独占一行。

没有硬件刘海的屏幕上,收起的刘海有硬件刘海时,任务名在摄像头下面

同时有多个会话时,需要我处理的排在前面:等待批准最优先,其次是失败,再是正在运行的。主岛下面最多挂三个气泡,再多的收进 +N。


在刘海里批准命令

支持的智能体发来权限请求时,刘海自动展开,显示它要执行的命令,下面有允许、始终允许、拒绝,还有一个「终端」按钮,选它就交回给智能体自己的提示。

审批卡片

智能体问选择题的时候也可以在刘海里直接选。

选择题

这两项要智能体本身提供可以回答的接口才行,目前是一部分智能体支持。不支持的,刘海只会告诉你它在等你,点一下回到终端。

看它在干什么

只知道「在跑」和「等你」不够,很多时候我想知道它这一刻做到哪了。所以对 Claude Code,把鼠标移到刘海上展开,里面是它这一轮的实时过程:

  • 你交代的事,连同你发给它的图片

  • 它说的话,按 Markdown 画,有标题、列表和代码块

  • 每一次工具调用,运行中、完成、失败各有一个标记;点一下有输出的调用,展开看它打印了什么

  • 改文件的调用直接显示 diff,删除的行红底、新增的行绿底,带行号

内容随进度自动往下走,你往上翻看更早的东西,它不会把你拉回底部。卡片是先长到够高,装不下才出现滚动条。

展开后的实时过程发送给智能体的图片显示在消息下面

这些来自 Claude Code 自己保存在你电脑上的对话文件,Runnock 每隔一两秒读一下它的末尾。内容只放在内存里,不写磁盘,也不上传。这里有一个要说清楚的限制:文字里的密钥和令牌会被遮盖,图片没法遮盖,会原样显示;而且 diff 和读文件的输出里可能就是你的源码,屏幕共享或者录屏的时候要留意。设置里有个「实时消息」的开关,关掉之后这个文件根本不会被打开。

目前只有 Claude Code 有这部分。Codex 也把对话存在文件里,格式我看过,可以做,还没做;别的智能体我还没查它们的文件。


没有做的:在刘海里给智能体发消息

我想过这个,也看了同类开源项目是怎么做的:它通过 tmux 往终端里发按键。只有智能体跑在 tmux 里才有效,Terminal、iTerm2、Ghostty 用户用不了,同一个按钮对一部分人存在,对另一部分人不存在。而且往别的进程里塞按键没有回执,你正好在打字,或者正好弹出批准框的时候,字会落到错的地方。

所以我没做。刘海负责看和决定,对话还是在终端里。点一下,它会带你回到那个具体的窗口:Terminal 和 iTerm2 能直接定位到对应的标签页。


做的过程中碰到的几件事

收起的刘海该多高、多宽,改了好几次。 有硬件刘海的 Mac 上,我最早把任务名放在摄像头下面另起一行,结果有刘海的屏幕上收起的刘海比没有刘海的屏幕高出一截。后来想把字放进两侧,两侧一变宽,整个刘海成了一条很长的横条,宽高比看着不对。对照同类项目,才发现它收起时根本不放字,只有图标。最后的取舍是:两翼收窄、保留计时,任务名放在摄像头下面那一行。代价是有任务时刘海比摄像头高一点,我觉得比一条横条好看。没有刘海的屏幕上,我也把模拟刘海固定成 MacBook Pro 刘海的高度,不再跟着菜单栏高度走,否则外接显示器上看起来比 MacBook 上矮一截。

判断「还在不在跑」比想象的难。 智能体一段时间没有新事件,不等于它卡住了,可能只是在想,或者在跑一个长命令。所以 Runnock 显示的是「状态可能已过期」,不说「无响应」。

Claude Code 自己也在变。 做这些功能的几天里,Claude Code 更新了十几个版本,其中有两处直接影响到我。一处是它的对话文件里开始为每次 API 请求写一条大约 40KB 的记录,一次读取大文件的输出还能到几百 KB,只读文件末尾一小段就可能一条完整的消息都读不到。另一处是它会在会话空闲一段时间后自己压缩上下文,压缩结束后不会再有任何事件,如果按「回合中途的压缩」处理,这个会话就会一直显示「运行中」。这两处我都是读了更新日志、再拿真实的文件验证才发现的。

展开的会话窗口

一轮结束之后,和别的提醒

一轮做完会给一个变更摘要:改了哪些文件,加了多少行、删了多少行,点开是独立的 diff 窗口。文件多的时候,卡片先把它们尽量显示完,装不下才滚动。

一轮结束后的变更摘要

构建或测试失败、本地服务挂了、CI 失败,也会出现在刘海里,点一下打开日志或页面。Claude Code、Codex、Grok 的额度到 50%、80%、95% 时会提前提醒,用完时说明什么时候重置;点菜单栏图标也能直接看到各个智能体的额度。

额度提醒

会话窗口和 SSH

刘海同时只显示几个会话,多了看不全,所以另有一个会话窗口,列出所有智能体的会话,可以搜索项目、任务和工具,按来源筛选,窗口顶部能看到每台 SSH 主机的连接状态。点开一个会话能看到最近 20 分钟的状态变化,这些只存在内存里,不落盘。

远程服务器上的会话通过 SSH 读取:在设置里填一个你 SSH 配置里已有的主机,Runnock 用你自己的 SSH 连接,把那台机器上 Claude Code 和 Codex 的会话显示在同一个窗口里。这部分是只读的:审批仍然要在远程那台机器上做,Runnock 不转发端口,也不会替你回答密码或主机密钥的提示。

它会改你的配置,也会读你的文件

要接入智能体,Runnock 得往它们的配置文件里写 hooks。我只在你选择接入某个智能体时才写,保留你原来的内容,改动可以撤销。hooks 出问题不会影响智能体本身,只有你正在刘海里回答权限请求的时候,它才会等你的答复。

数据都留在本机,没有 Runnock 账号,不上传开发内容。任务摘要里的变量赋值、认证头和常见的密钥前缀会被打码。

不过有几点要说清楚:构建日志保留命令的原始输出,里面可能有敏感内容;Git 变更快照里包含文件内容;开着「实时消息」的时候,Runnock 会读 Claude Code 的对话文件,上面说过。联网也不是零,查 GitHub、查额度、验证许可证、检查更新都会联网。「完全不联网」这种话我不会写。


现状

要求 macOS 26 以上,面向 Apple Silicon。不走 App Store 沙盒,因为它需要往各个智能体的配置里写 hooks,也要读它们的会话文件。更新用 Sparkle,安装包做了签名和公证。

接入了十个智能体:Claude Code、Codex、Grok Build、Cursor CLI、GitHub Copilot CLI、Command Code、Devin、Qwen Code、Kimi Code、pi。适配深度不一样:Claude Code 和 Grok Build 的状态最完整,能显示压缩、模型、任务进度、子代理和失败原因,实时过程目前只有 Claude Code;Codex 有模型、计划进度和压缩;其余大多只有基本状态和批准。Gemini CLI 目前没有接入。

买断制,没有试用,不需要账号。

还有几项我没有验证完:SSH 连真实主机后的断线重连,VoiceOver 和键盘操作的完整验收,以及后台会话(claude agents)下的表现。用的时候碰到问题,可以直接发邮件给我。

https://runnock.com

版权声明

本文内容版权归作者或相关权利人所有。转载、引用或其他使用请遵循相应授权条款,并保留本文链接。

本文链接:https://xuyi.dev/2026-10-16-bdtc-t