中文 | English
傲娇女仆风格的 Claude Code 语音通知插件 -- 通过 Hook 机制在各种事件触发时播放 MP3 语音提示。
- 覆盖 Claude Code 全部 Hook 事件,支持 21 种触发场景
- 跨平台支持(macOS / Windows)
- 可配置事件开关与音量
- 支持自定义语音替换
- Claude Code CLI 已安装
- Node.js >= 18
- 在 Claude Code 中添加 marketplace:
/plugin marketplace add kinglisky/claude-meido- 安装插件:
/plugin install claude-meido@claude-meido-marketplaceclaude --plugin-dir ./claude-meido/plugin uninstall claude-meido@claude-meido-marketplace或通过 CLI:
claude plugin uninstall claude-meido@claude-meido-marketplace退出重启启 Claude Code 后,如果听到会话开始的语音提示,说明插件已正常工作。
插件通过 Claude Code 的 Hook 机制监听事件,每个事件对应一个独立的语音文件(sounds/{事件ID}.mp3):
| Hook 类型 | 匹配条件 | 事件 ID | 触发场景 | 语音台词 | 默认启用 |
|---|---|---|---|---|---|
SessionStart |
startup |
session-start | 新会话启动 | 哼,主人你终于来了?我才没有在等你呢! | 是 |
SessionStart |
resume |
session-resume | 恢复已有会话 | 又回来了?真是的,工作要专心啊! | 是 |
SessionEnd |
- | session-end | 会话结束退出 | 哼,要走了吗?才不会想你呢! | 是 |
| Hook 类型 | 匹配条件 | 事件 ID | 触发场景 | 语音台词 | 默认启用 |
|---|---|---|---|---|---|
Stop |
- | task-complete | 主任务执行完成 | 任务做完了哦!…才不是特意帮你检查的呢,别误会了! | 是 |
SubagentStop |
- | subagent-stop | 子 Agent 任务完成 | 子任务也搞定了,哼,不用谢我! | 否 |
| Hook 类型 | 匹配条件 | 事件 ID | 触发场景 | 语音台词 | 默认启用 |
|---|---|---|---|---|---|
Notification |
permission_prompt |
notification-permission | 需要用户授权确认 | 喂!主人!这里需要你确认一下啦,快点过来! | 是 |
Notification |
idle_prompt |
notification-idle | 等待用户输入 | 喂,主人?还在吗?…才不是担心你呢,快回来干活! | 是 |
Notification |
auth_success |
notification-auth | 认证成功 | 认证通过了哦,哼,这种小事不用谢我。 | 是 |
| Hook 类型 | 匹配条件 | 事件 ID | 触发场景 | 语音台词 | 默认启用 |
|---|---|---|---|---|---|
UserPromptSubmit |
- | prompt-submit | 用户提交 Prompt | 又有新任务了?真拿你没办法 | 否 |
| Hook 类型 | 匹配条件 | 事件 ID | 触发场景 | 语音台词 | 默认启用 |
|---|---|---|---|---|---|
PreToolUse |
Bash |
pre-bash | 执行 Shell 命令 | 命令执行中…别催我,我知道了啦! | 是 |
PreToolUse |
Read |
pre-read | 读取文件内容 | 在看文件呢,别吵我! | 否 |
PreToolUse |
Write |
pre-write | 创建/写入文件 | 在写文件呢…别偷看! | 是 |
PreToolUse |
Edit |
pre-edit | 编辑修改文件 | 在改文件呢,安静等着! | 是 |
PreToolUse |
Glob |
pre-glob | 按模式搜索文件 | 在找文件呢…真麻烦。 | 否 |
PreToolUse |
Grep |
pre-grep | 按内容搜索文件 | 在搜内容呢,等一下啦! | 否 |
PreToolUse |
WebFetch |
pre-web-fetch | 抓取网页内容 | 在抓网页呢…这种事也要我做吗? | 是 |
PreToolUse |
WebSearch |
pre-web-search | 搜索网页信息 | 在搜网络呢,别催! | 是 |
PreToolUse |
Task |
pre-task | 启动子 Agent 任务 | 派小的们去干活了,哼,我可是很会指挥的! | 是 |
PreToolUse |
mcp__.* |
pre-mcp | 调用 MCP 工具 | 在调用外部工具呢…真是什么都要我来。 | 是 |
| Hook 类型 | 匹配条件 | 事件 ID | 触发场景 | 语音台词 | 默认启用 |
|---|---|---|---|---|---|
PostToolUse |
.* |
post-tool-error | 工具执行出错 | 呜…出错了啦!才不是我的错呢!主人快来看看! | 是 |
PreCompact |
- | compact | 上下文压缩 | 记忆要整理一下了…别担心,我不会忘记主人的事的! | 否 |
post-tool-error会匹配所有工具的 PostToolUse 事件,但内部会通过 stdin 读取工具返回结果,仅在检测到实际错误时才播放语音。
插件按以下优先级加载配置:
- 插件目录下的
meido.config.json(默认配置) ~/.claude/meido.config.json(用户配置,优先级更高)
用户配置会与默认配置浅合并,只需包含想要覆盖的字段即可。
{
"enabled": {
"session-start": true,
"session-end": true,
"task-complete": true,
"notification-permission": true,
"notification-idle": true,
"post-tool-error": true
},
"volume": 1.0
}| 字段 | 类型 | 说明 |
|---|---|---|
enabled |
Record<string, boolean> |
各事件的启用状态,true 启用,false 禁用 |
volume |
number |
播放音量,范围 0.0 - 1.0 |
只开启关键通知,降低音量:
{
"enabled": {
"session-start": true,
"session-end": true,
"task-complete": true,
"notification-permission": true,
"notification-idle": true,
"pre-bash": false,
"pre-read": false,
"pre-write": false,
"pre-edit": false,
"pre-glob": false,
"pre-grep": false
},
"volume": 0.5
}关闭所有工具调用提示音,只保留会话和通知类事件:
{
"enabled": {
"pre-bash": false,
"pre-read": false,
"pre-write": false,
"pre-edit": false,
"pre-glob": false,
"pre-grep": false,
"pre-web-fetch": false,
"pre-web-search": false,
"pre-task": false,
"pre-mcp": false
},
"volume": 1.0
}语音文件存放在插件的 sounds/ 目录下,文件名与事件 ID 一一对应。命名规则:{事件ID}.mp3,将自己的 MP3 文件重命名后替换对应文件即可,目前使用的语音是使用 minimaxi speech-2.8-hd 生成的有需要你可以自己定制自己的女仆音。
| 平台 | 播放方式 |
|---|---|
| macOS | afplay 系统命令 |
| Windows | PowerShell System.Windows.Media.MediaPlayer |
播放进程以 detached 模式启动,不会阻塞 Claude Code 的正常运行。