硬件
10 颗 LED,一根线,没有仪表盘。
看看 Agent Andon Light 是如何把 hook 事件变成灯光的:从电路板、通信协议到固件(直接跑在芯片上的程序)。
空闲
桌上到底放了什么
一块小电路板(Waveshare RP2040-Zero),手工焊接在定制电路板上,驱动着 3D 打印扩散罩下的 10 颗可寻址 WS2812B LED。一根 USB-C 线同时负责供电和串口通信,不需要额外电源,不需要无线配对。唯一要做的配置,就是装好 CLI(靠打命令来操作、和板子通信的程序)。

一个字符,一种颜色
主机端 CLI 通过 USB 串口和固件通信,用的是能想到的最简单的协议:一个 ASCII 字符加换行。没有 JSON,也没有握手过程。
通信协议
| 指令 | 效果 | 含义 |
|---|---|---|
| G | 绿灯常亮 | Agent 正在工作 |
| Y | 黄灯常亮 | 等待你处理 |
| R | 红灯常亮 | 空闲 / 已停止 |
| C | 依次点亮 | 正在整理 |
| H | 无变化 | 心跳信号 |
即使你没在看,也靠得住
固件本身跑着一个 30 分钟的看门狗定时器。一旦主机端失联,红色区域不会停在常亮状态,而是切换成缓慢的呼吸式闪烁。一盏可以放心离开的状态灯,必须把异常明明白白地显示出来,而不是悄悄卡死。
直接接入 Claude Code 和 Codex CLI
Claude Code 和 Codex CLI 的 hooks 会一条一条按顺序调用 CLI,等前一条处理完才调用下一条。这样即使在工具调用密集的回合里,灯光也始终反映事件的真实顺序。
| Hook 事件 | 颜色 |
|---|---|
| SessionStart | 空闲 |
| UserPromptSubmit / PreToolUse | 工作中 |
| Notification / PermissionRequest | 等待中 |
| PreCompact | 整理中 |
| Stop / SessionEnd | 空闲 |
Windows 安装程序没有数字签名,在拿到签名之前,每次运行 Windows 都会弹出警告。macOS 还没测试过,官方不支持。这是个人维护的项目,不是公司出品,欢迎在 GitHub 上提交 Issue 或 Pull Request。