内容
# 克劳德聆听
**正在进行 / 研究预览版**。适用于克劳德的免提语音循环
代码:你听到克劳德的回复,大声回答,你的话就会回到正确的克劳德代码会话中。不需要键盘,不需要窗口焦点。
说话的部分是一个 sibling 项目,
[克劳德说话](https://github.com/ohnotnow/claude-speaks) — 如果你只需要*听到*克劳德的回复,可以单独安装这个项目。这个仓库负责聆听:录音、本地转录,并将转录内容路由回请求的会话。要实现完整的循环,你需要同时使用这两个项目。
所有内容都是使用Python编写的,可以使用 [uv](https://docs.astral.sh/uv/) 运行。所有语音处理都是本地的(Parakeet 通过 Apple MLX 进行语音转文本,silero VAD 用于语音结束检测):你说的内容不会离开你的机器。
## 回复的传递过程
1. 克劳德完成一个回合;克劳德说话时,会大声朗读出来。
2. 当播放结束时,克劳德说话会写入一个一次性 *回复目标* (哪个会话获取你的答案)并通过 `bin/ears toggle` 启用麦克风。
3. 耳朵守护进程记录音频,在大约 2.5 秒的尾部静音后停止,并进行本地转录。
4. `bin/handy-reply` (命名为 [Handy](https://github.com/cjpais/Handy) 时代的产物)会使用回复目标,并将文本以 `<channel source="voice">` 事件的形式 POST 到所属会话的通道服务器中。
移动部件(通道服务器、会话注册中心、耳朵守护进程、`bin/` 粘合剂)都在
[TECHNICAL_OVERVIEW.md](TECHNICAL_OVERVIEW.md) 中有详细介绍,同时还有通道预览的线路合同。运行时状态(标志文件、注册中心、日志)存放在 `~/.claude-voice/` 下。
## 使用方法
[RUNNING.md](RUNNING.md) 是日常运行手册(注意事项、配置旋钮、故障排除)。简而言之:
1. 启动耳朵守护进程,分离后,它将比克劳德会话运行得更久:
```bash
nohup bash -c 'cd /path/to/claude-listens && exec uv run ears/earsd.py' \
>> ~/.claude-voice/ears-daemon.out 2>&1 &
```
复制 `ears/config.example.json` 到 `ears/config.json` 并列出你偏好的麦克风。第一个连接的匹配项在每次录音时都会赢得比赛,因此你的 AirPods 在配对时可以 beats 桌面麦克风。
2. 在项目的 `.mcp.json` 中注册通道服务器,并使用研究预览标志启动(每次都 expect 一个同意警告):
```json
{
"mcpServers": {
"voice": { "command": "uv", "args": ["run", "/path/to/claude-listens/src/server.py"] }
}
}
```
```bash
claude --dangerously-load-development-channels server:voice
```
如果你经常这样做,值得为此设置一个别名:`alias claudel="claude --dangerously-load-development-channels server:voice"`
3. `bin/handsfree on`,询问克劳德一个问题,然后大声回答。
## 锋利的边缘
- 通道是实验性的:标志、同意对话框和 API 都可能在我们使用过程中发生变化。某些组织帐户已完全禁用通道;如果标志被拒绝,请尝试使用个人帐户。
- macOS + Apple Silicon 仅限(MLX 执行转录)。
- `AskUserQuestion` 对话框仍需要键盘:口头回复会在打开的对话框后面排队,并在对话框被回答后传递。
- 只有在 `handsfree` 标志打开时,麦克风才会启用,守护进程会在启用、停止和取消时播放声音。15 秒内无语音会取消录音;90 秒是硬上限。
## 状态
第 1 阶段(循环)正在进行。第 2 阶段,克劳德通过同一注册表进行消息传递,已设计但未构建。`probe/` 包含第 0 阶段的临时实验,这些实验决定了架构。