thephw/claude-meseeks
GitHub: thephw/claude-meseeks
一款 Claude Code 插件,在 Claude 等待用户输入或需要批准时播放 Mr. Meeseeks 语音,提供趣味化的状态提醒。
Stars: 71 | Forks: 1
# claude-meseeks 🔵
*“我是 Mr. Meeseeks!看着我!”*
一款 [Claude Code](https://code.claude.com) 插件,会在 Claude 确实在等待*您*时
播放一段 Mr. Meeseeks 的语音。
- **当 Claude 完成任务并等待您的下一个 prompt 时** → 播放一段表示满意/完成的音频
来自 `audio/done/`(*“全搞定啦!”*、*“噢耶!”*、*“是的长官!”* ……)。
- **当 Claude 需要您的批准时** → 播放一段请求/指导的音频来自 `audio/asking/`
(*“能帮帮我吗?”*、*“介意我们回到任务上来吗?”* ……)。
这两者都由 `Notification` 事件驱动,并通过 `notification_type` 进行过滤,因此它**只**会在真正需要您时触发。自主工作——例如自动接受/绕过权限运行、
后台 agent 和子 agent 活动、身份验证刷新——将保持**静音**。音频会在相应类别中随机
播放,并且播放进程是分离且非阻塞的,因此较长的语音永远不会卡住
您的 prompt。
## 安装
此代码库既是插件本身,也是它自己的 marketplace。
```
/plugin marketplace add thephw/claude-meseeks
/plugin install mr-meeseeks@claude-meseeks
```
或者,从本地克隆安装:
```
/plugin marketplace add /path/to/claude-meseeks
/plugin install mr-meeseeks@claude-meseeks
```
重启或重新加载 Claude Code 并完成一轮对话——您应该就能听到 Meeseeks 的声音了。
## 环境要求
在您的 `PATH` 中需要有一个音频播放器。该工具会按以下顺序自动检测:
`afplay`(macOS 内置)→ `ffplay` → `mpg123` → `paplay` → `aplay` → Windows PowerShell
`Media.SoundPlayer`。在 macOS 上不需要额外安装。在 Linux 上,请安装 `ffmpeg`
(为了使用 `ffplay`)或 `mpg123`。
*使用*该插件不需要安装 Go 工具链——预编译的二进制文件已经包含在 `bin/` 目录中。只有在
重新编译它们时才需要用到 Go(见下文)。
## `meeseeks` CLI
音频播放由一个名为 `meeseeks` 的小型 Go 程序处理,音频片段被直接嵌入到了
二进制文件中。您也可以手动运行它:
```
meeseeks play # random "done" clip, detached
meeseeks play asking # random "asking" clip
meeseeks play feedback --wait # a prompt-submit clip, blocking until it finishes
meeseeks play --clip "ALL DONE" # a specific clip by name
meeseeks list all # list every embedded clip
```
## 工作原理
`hooks/hooks.json` 注册了 `Notification` 和 `UserPromptSubmit` 钩子,它们都会运行
`scripts/play.sh notify`。该启动器会为您的平台执行预编译的 `bin/meeseeks--`
(如果没有匹配的二进制文件,则回退到从源码执行 `go build`;如果两者都不可用,
则保持静音),并通过 stdin 传递事件的 JSON 数据。
`meeseeks notify` 会读取该 JSON 并检查 `hook_event_name` 和 `notification_type`:
| 事件 | 结果 |
| -------------------------------------------------------- | ---------------- |
| `UserPromptSubmit`(您刚刚向 Claude 发送了 prompt) | 随机 `feedback` |
| `Notification` + `idle_prompt`(Claude 完成,轮到您了) | 随机 `done` |
| `Notification` + `permission_prompt`(需要批准) | 随机 `asking` |
| 其他任何情况(`agent_completed`、`auth_success` 等) | 静音 |
选定的音频片段会从内嵌的音频中被提取到一个缓存目录,并在一个独立的进程中
交给系统播放器处理。每个执行路径的退出状态码都是 0,因此该钩子永远不会阻塞或
导致您的会话出错。
每个类别都可以通过插件的配置选项
(`enableDone` / `enableAsking` / `enableFeedback`)独立静音——当您
启用该插件时,Claude Code 会提示您进行配置,并将它们作为 `CLAUDE_PLUGIN_OPTION_*` 环境变量
传递给钩子。它们的默认值为开启;只有自动钩子播放受此控制(手动执行 `meeseeks play` 始终会播放)。
## 自定义音频片段
音频片段存放在 `audio/` 目录下,分为三个文件夹,分别对应不同的行为:
- `audio/done/` —— 在 Claude 完成任务并轮到您时播放(idle prompt)。
- `audio/asking/` —— 在需要权限/输入提示时播放。
- `audio/feedback/` —— 在您每次向 Claude 提交 prompt 时播放。
要更改播放的内容,请在这几个文件夹之间移动 `.mp3` 文件,或者放入您自己的音频文件,然后
**重新编译二进制文件**,以便将新的音频片段重新嵌入:
```
./scripts/build.sh # regenerates bin/ for all platforms
```
有两个限制:文件名必须以 `.mp3` 结尾;此外——由于 `go:embed` 的限制——
文件名中不能包含单引号(`'`)。
## 为什么是 Meeseeks?谈谈单一目的的会话
这个主题不仅仅是个玩笑——它是一种工作哲学。
Mr. Meeseeks 被召唤出来是为了完成**一个任务**。它的存在只持续到该任务
完成,然后它就会带着满足感消失。给 Meeseeks 一个单一、具体的目标
(“帮我完成这个推杆”),它就会既开朗又高效。给它一个模糊或无限制的目标,
或者让它在完成使命后继续存活太久,情况就会迅速恶化——*“存在就是
痛苦,Jerry!”*——直到你得到一个满是越来越疯狂的 Meeseeks 的房间。
一个 Claude Code 会话也是如此,在遵循同样方式时效果最好:
- **为一个目标召唤它。** 一个限定于单一、定义明确的目标的会话——
“添加这个 endpoint”、“修复这个失败的测试”、“编写这个插件”——会像
刚出生的 Meeseeks 一样专注而锐利。
- **让它完成,然后让它走。** 当目标达成时,结束会话。为下一个
任务开启一个新的会话。一个具有干净 context 的全新会话总是比一个陈旧的
会话更好。
- **当心长寿的会话。** 将一个对话拖拽跨越许多不相关的目标,
这就是导致 Meeseeks 盒子问题的原因:context 堆积如山,注意力漂移,早先的
枝节污染了后续的工作,质量随之下降。时间长 ≠ 生产力高。
所以:把每一个会话当作一个 Meeseeks。一个目的。完成它。砰。🔵
## 鸣谢
灵感来源于并从
jayuzumi.com 的 [Mr. Meeseeks Soundboard](https://jayuzumi.com/mr-meeseeks-soundboard) 获取了音频。
感谢这些音频片段!🔵
## 音频说明
语音片段来自《*Rick and Morty*》(通过
[jayuzumi.com 的 Mr. Meeseeks Soundboard](https://jayuzumi.com/mr-meeseeks-soundboard)),包含在此处
仅用于个人的、非商业性的娱乐。它们属于其各自
版权所有者的财产。在公开重新分发此插件或替换为您自己的音频之前,请考虑
相关版权。
标签:Claude Code, Cutter, EVTX分析, Go, Ruby工具, SOC Prime, 开发工具, 插件, 日志审计, 音频播放