herdr2dotvibe 副产品
一个 Herdr 插件:后台的 coding agent 一跑完,桌上那块 Quote/0 墨水屏就换成一张小卡片——哪个任务、哪个 agent、还有谁在跑。不用切回终端,不用看通知中心;抬眼一扫,知道该回去接手谁。和上面的法律 agent 产品线没有关系,是同一套「agent 驱动开发」顺手做出来的第三件东西。
它长什么样
屏幕上就是这一张卡:标题固定,第一行任务名,第二行 agent 与工作区,最后一行「还有谁在跑」,右下角时间。
Quote/0:2.66 英寸墨水屏,296 × 152 像素,磁吸,一次充电最长一年。它没有背光、不会亮起、不会响——正是这一点让它适合做「完成」这种不需要立刻处理、但想被看见的信号。
refreshNow 让屏幕立刻翻页。设计理念
同时开着四五个 agent 的时候,真正的成本不是等待,而是「不知道该看哪一个」。这块屏的任务只有一个:把注意力领回正确的那个窗口。
pane.agent_status_changed,且只处理 done。working、blocked、idle 都不推——屏幕上永远只有「你可以回去了」这一种消息。herdr agent get / list / workspace get。插件不维护任何自己的世界模型。claude、π - 之类的时候,没有信息量;插件退一步用工作区名,再退一步用目录名,最后才是「后台任务」。state_change_seq 做键,文件锁 + 原子写记下「上一次推的是哪一序号」,同一序号只推一次。herdr plugin log 查。这是一条通知链路的末端,它自己不该再产生通知。HERDR_DOT_DRY_RUN=1 就能把 payload 打印出来而不真的推。怎么工作
从 agent 停下到屏幕翻页,中间经过四站,通常一两秒。
传 JSON
Bearer
| 遇到什么 | 怎么做 |
|---|---|
| 状态变成 done | 问 Herdr 要 agent 详情、工作区名、其他 working 会话,拼卡片,推送 |
| 状态变成别的 | 直接退出,什么都不做 |
| 同一序号再来一次 | 记为重复,忽略 |
| 终端标题没信息量 | 依次退到工作区名 → 目录名 → 「后台任务」 |
| 没有其他会话在跑 | 末行写「进行中:无」——这本身是个好消息 |
| 设备休眠 / 离线 | 接口保存内容,设备醒来时显示;插件视为成功 |
| 推送失败 | 写日志、退出码 1;不重试,不弹窗 |
同一块屏还接着另一个小脚本:定时把 Codex 的额度用量(5 小时 / 7 天窗口、剩余百分比、重置时间)推成一张卡。两个推送源共用一台设备,Dot 端按任务轮播。
为什么叫 vibe 副产品
起因是一个具体的不便:在 Herdr 里同时开着几个 agent 做不同的事——写产品页、审合同、改 App——每一个都要跑几分钟。人在这几分钟里会去做别的,回来时得挨个窗口看谁完成了。桌上正好有一块 Quote/0,它有开放的 Text API;Herdr 正好在 0.8 加了插件事件。把两头接起来,就是这个插件。人说的只有一句话:agent 跑完,让墨水屏告诉我是哪一个。
- 08-07开始用 Herdr 管理多 agent 工作区;先给自己写了一份 Herdr 操作技能
- 08-26下午:读 Herdr 插件规范与 Dot Text API 文档,写出首版,当天 13:39 推出第一张卡;随后升 1.1.0,加「进行中」一行与钥匙串读密钥
- 至今一天多里推送 117 次,0 次失败,其中 7 次设备在睡觉、醒来后补显
这三个副产品放在一起看,共同点很明显:每一个都只做一件事,状态少到可以写在一行里,边界清楚到 agent 可以放心改。DailyNotes 的状态是一张日记的 ETag,flomo2obsidian 的状态是一个游标,herdr2dot 的状态是「上一次推的序号」。这和 LegalAVA 做法律工具的方法是同一个:先把边界与流向讲清楚,再谈自动化。
技术与状态
herdr-plugin.toml + notifier.py),要求 Herdr ≥ 0.8.2,macOS。Python 3 标准库,无第三方依赖。title / message / signature / refreshNow),限速 10 次/秒。同一设备另接 Codex 额度卡。