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, 开发工具, 插件, 日志审计, 音频播放