作者为 Claude Code 编写了 earshot(语音反馈)和 waypoint(目标追踪)两个插件,解决长会话中的信息过载和目标漂移问题。
我在 Citrix 担任软件工程师,每天都在用 Claude Code,两个小痛点在漫长的 Agent 化会话中反复出现:
每次都得读完所有的 diff 和工具调用输出,才能知道 Agent 是否卡住了,尽管其中 90% 都是例行公事。
在漫长的会话中,最初给 Agent 设置的目标会悄悄漂移,偏离初衷。
Claude Code 插件可以钩住生命周期事件(Stop、Notification、UserPromptSubmit 等),只需一条命令,于是我针对每个痛点各写了一个插件。
earshot 钩住了 Stop 和 Notification。它不会让你读完 Agent 的完整回复,而是用简短的语音摘要播报出来——默认情况下,如果 Agent 没有在提问、被阻塞或失败了,它就一声不吭。
这种"默认沉默"的行为并非我最初的想法——它来自两项针对盲人和低视力开发者在使用 AI 编程工具方面的同行评审研究。两项研究都发现,核心问题是听觉过载,而非沉默。已经在运行屏幕阅读器的开发者不需要第二个声音来重复朗读同样的文本。
waypoint 钩住了 UserPromptSubmit。你只需设置一次目标:
/goal-set Fix the login bug on the checkout page
从此以后,你发送的每条 prompt 都会自动携带一行该目标的提醒作为注入上下文——直到你用 /goal-done 清除它。无需在会话进行到 40 条消息、目标已经漂移时,再手动重新解释一遍。
$ /goal-status
Active goal (set 2h 15m ago): Fix the login bug on the checkout page
Hooks 就是一个你已经会写的 CLI。读 stdin,可能写点 JSON 到 stdout,exit 0。没有 SDK,没有框架——两个插件我都零 npm 依赖(纯 Node 的 fs/os/path)。
沉默是一种功能。对于每个 prompt 或每条回复都会触发的事件,要明确决定什么时候它什么都不说——默认话多的插件很快就会被关掉。
状态存在 ~/.claude/<plugin>/,纯 JSON,不需要数据库。
在真正加载插件之前,先通过 stdin 直接用样例 JSON 管道传给 hook 路径测试——这是最快的反馈循环。
两个插件都是 MIT 许可,一条命令安装:
/plugin marketplace add absep98/earshot
/plugin marketplace add absep98/waypoint
Repos: github.com/absep98/earshot · github.com/absep98/waypoint
有关 hook 生命周期或插件结构的问题,欢迎在评论区交流。