0. 为什么想给 AI 编程配个手持遥控器?
最近用终端跑 AI 编程(比如 OpenAI Codex、Claude Code、WorkBuddy 或者各种 CLI Agent)越来越多。用了一段时间后,能明显感觉到工作流里最大的变化是:打字量变少了,但对话和确认变多了。
以前写代码大部分时间是在敲键盘,现在很多时候是:
- 整理一段思路,用自然语言向 Agent 描述需求;
- 看着它输出代码和 Diff;
- 敲回车确认执行命令,或者在中途按中断;
- 在几个不同的终端窗口或工作区之间切来切去,看各个 Agent 跑完了没有。
在这样的节奏下,语音输入确实是一个实打实的效率提升——说话往往比手打一段长 Prompt 快得多。但如果纯靠键盘上的按键去唤醒语音,人还是得一直坐在桌子正前方、手放在键盘上。
前段时间 OpenAI 的硬件原型 Codex Micro 公开后,社区里跟风出现了很多各色各样的「Vibe Coding 实体按键/小硬件」。但实际看下来,很多 DIY 小外设要么做工粗糙、按键松垮,要么属于早期的实验性玩具,稳定性和连接体验参差不齐。
其实完全不需要去买那些溢价外设或折腾 3D 打印。手边一个日常能买到的小米电视蓝牙语音遥控器 2 Pro(型号 RC003),成本大概 50~60 元,本身就是大厂量产、模具成熟、自带蓝牙 BLE 和语音麦克风的成品硬件。

拿它当掌上控制器,核心诉求其实很朴素:
- 按住即说(Push-to-Talk):单手按住遥控器上的语音键直接口述 Prompt,松手自动上屏;
- 免键鼠盲切:靠在椅子上时,单手用方向键切换终端 Tab 和 Workspace,按中间 OK 键确认放行,按返回键中断。
这套方案不仅适用于我日常在用的 macOS,社区目前也提供了 Windows 的运行路径。下面记录具体的配置方法与排坑细节。
1. 硬件细节:为什么选 RC003?
小米这款遥控器在二手平台或电商平台售价通常在 50 到 60 元左右。选它主要看中几个硬件细节:

- 原生蓝牙 BLE 直连:走标准蓝牙协议,不需要外挂 USB 接收器,电脑自带的蓝牙就能直接配对连接;
- 远超几十元价位的金属质感: 许多低价小硬件或 DIY 按钮最大的痛点是外壳轻飘、塑料感强,甚至有 3D 打印的明显毛刺。而 RC003 作为小米高端电视的原配遥控器,整机做工非常扎实:
- 一体成型的金属质感机身:香槟金色表面经过了细腻的磨砂处理,触感温润微凉且不易留指纹,拿在手里有一定的分量感和重心平衡,绝非轻飘飘的薄塑料;
- 干脆清晰的按键段落感:按键内部并非软塌塌的导电胶手感,触发时有类似微动的清脆确认感(Clicky),行程适中、回弹利落,盲操时按没按下去心里一清二楚;
- 不突兀的桌搭颜值:极简的黑金撞色设计,平时随手放在键盘掌托、实木桌面或数码桌垫上,看起来就像一件专门打造的掌上数码配件,毫无违和感;
- 适合盲操的按键布局:
- 中间 OK 键有明显的下凹弧度,大拇指搭上去就能瞬间定位;
- 外圈方向环在上下左右四个方向都有凸起的微小刻度,不用眼睛看也能清楚确认按键方位;
- 顶部的麦克风键独立居中,单手握持时食指托底、拇指自然落在语音键上;
- 近场人声拾音:电视遥控器内置的麦克风本身针对近距离人声做了拾音调优,环境杂音相对较小,很适合日常口述 Prompt。

2. 软件配置:打通系统与语音输入
虽然遥控器的方向键蓝牙连接后就能作为普通输入设备使用,但遥控器上的语音键传输的是专用的语音数据包,操作系统默认不会把它识别为常规麦克风。
社区开源的 HD838A/remote-mic-app(SayAll) 解决了两件事:
- 在系统里生成一个虚拟音频输入设备(macOS 下为
MiRemoteV 2ch); - 监听遥控器的语音事件,按住语音键时接收音频并实时推流到虚拟麦克风,松手时结束。
配合支持「按住说话(PTT)」的语音输入法(如微信输入法),就能做到按住说话、松手上屏。
2.1 macOS 平台配置流程
- 配对遥控器:在 Mac 系统设置的蓝牙列表中,同时长按遥控器的「主页键(房子标)」和「菜单键(三条杠)」,等待指示灯闪烁,在 Mac 上点击配对连接;
- 安装 SayAll 与音频驱动:
- 从 GitHub Releases 下载安装
SayAll.app; - 打开后根据提示安装音频驱动插件(位于
/Library/Audio/Plug-Ins/HAL/MiRemoteV2ch.driver); - 打开「系统设置 ➔ 声音 ➔ 输入」,此时可以看到已出现输入设备
MiRemoteV 2ch;
- 从 GitHub Releases 下载安装
- 设置微信输入法(WeType):
- 微信输入法的语音识别率和标点断句很准确,并且支持长按快捷键说话;
- 在微信输入法设置中开启「按住快捷键说话」,将快捷键设为
Fn(或指定组合键); - 声音输入来源选择
MiRemoteV 2ch。
2.2 Windows 平台配置流程
如果你在 Windows 环境下使用(例如用 Windows 跑终端、运行 Codex 或 WorkBuddy):
- 同样在 Windows 设置的「蓝牙和其他设备」中长按配对遥控器;
- 运行 SayAll 的 Windows 预览版(或社区针对 RC003 的 Windows 适配方案,如
zhaozhuque/MIC-RC003-Windows); - Windows 预览版默认将语音快捷键映射为
Ctrl + Win; - 在 Windows 微信输入法中将语音输入快捷键同样匹配为
Ctrl + Win,麦克风选定遥控器映射出的音频设备即可。
3. 几个关键细节的快速排坑
实际配置过程中有几个容易卡住的体验细节,提前处理可以省不少时间:
技巧 1:SayAll 引导界面如果卡住怎么跳过?(macOS)
全新安装 SayAll 时,部分 macOS 版本在连接遥控器后,新手引导界面可能会一直停在最后一步无法点击完成。
无需重新安装,直接在终端执行一行命令写入完成标记即可:
defaults write com.hd838a.RemoteMic "onboarding.completedVersion" -int 1
defaults write com.hd838a.RemoteMic "onboarding.step" -string "complete"重启 SayAll 即可直接进入完整的按键映射设置界面。
技巧 2:微信输入法 Mac 版录入不上独立 Fn 键?
在 macOS 上,如果想用单按独立 Fn 键作为语音触发,微信输入法设置界面偶尔无法正常录入。推荐直接在微信输入法「快捷键」中设为一个冷门组合键(如 Control + Option + V),并在 SayAll 中同样映射为该组合键,零门槛且绝无冲突。
若执意使用单键 Fn,微信输入法配置由 MMKV 存储且带 CRC32 校验,通过以下精简脚本重算校验即可生效:
# 微信输入法 MMKV 配置修复 (重算 CRC32 校验)
import os, zlib, struct
path = os.path.expanduser("~/Library/Application Support/WeType/mmkv/wetype.settings")
data = bytearray(open(path, "rb").read())
open(path + ".crc", "wb").write(struct.pack("<I", zlib.crc32(data)))随后在 SayAll 里将语音模式选为 fn 即可无缝配合。
技巧 3:方向键快速连按无响应?打开「允许连续快速按」
很多用户在 SayAll 里把十字键映射为自定义快捷键后,会发现“按一下能切,但快速连按两下第二下没反应”。
原因:
- SayAll 默认对自定义快捷键开启了防连击保护,按键稳定前会过滤连续输入;
- 如果你在界面里设置了「双击」,单按时系统会额外等待几十毫秒去判断是否为双击,带来明显延迟。
手感优化设置:
- 在 SayAll 方向键设置中,清除所有「双击」绑定;
- 勾选对应按键下方的 「允许连续快速按」(Allow Rapid Repeated Presses)。
这样设置后,按键消除了双击等待窗口,单击零延迟触发,连续快速点按时也能每一次都即时响应。
4. 终端与 Agent 工作流配置:Herdr / Codex / WorkBuddy
遥控器到手后,最重要的价值是在开发工作流里配合终端复用器使用。
这里以我常用的 Herdr(专为多 Agent 协同设计的终端管理器,运行在 Ghostty 或任意终端中)为例,同时兼容 OpenAI Codex、腾讯 WorkBuddy (CodeBuddy) 和 Claude Code 等常见 Agent 工具。
4.1 空间直觉的按键映射
在多 Agent 场景下,界面的排布通常有天然的空间逻辑:
- 顶部是横向排列的 Tabs(标签页,通常放同一个项目里的不同任务或视图);
- 左侧是纵向排列的 Workspaces(工作区,比如分别跑着 Codex、WorkBuddy 和一个测试环境)。
我们将遥控器映射为直观的免前缀快捷键:
| 遥控器按键 | 发送的快捷键 | 对应动作 | 实际用途 |
|---|---|---|---|
| 方向左 ◀ | Ctrl + Alt + Left | 上一个 Tab | 拇指往左切,回到上一个代码或输出窗口 |
| 方向右 ▶ | Ctrl + Alt + Right | 下一个 Tab | 拇指往右切,查看右侧并行的终端输出 |
| 方向上 ▲ | Ctrl + Alt + Up | 上一个 Workspace | 向上切换工作区(如切到正在跑 Codex 的项目) |
| 方向下 ▼ | Ctrl + Alt + Down | 下一个 Workspace | 向下切换工作区(如切到 WorkBuddy 的执行区) |
| 中心 OK 键 | Enter | 回车确认 | Agent 提出操作确认时,按一下直接放行 |
| 返回键 ⮌ | Ctrl + C / Esc | 中断 / 取消 | 发现 Agent 运行偏离预期,按一下中断当前轮次 |
| 语音键 🎙 | Fn (长按 PTT) | 语音输入 | 按住口述 Prompt,松手文字自动落入命令行 |
4.2 保持键盘原有习惯:Herdr 的多键位数组
如果你在键盘上依然习惯 tmux 式的 Ctrl+B 然后按 p / n 切标签,在 Herdr 的配置文件(~/.config/herdr/config.toml)中支持用数组同时声明两套按键:
[keys]
previous_tab = ["prefix+p", "ctrl+alt+left"] # 左/右键:切 Tab
next_tab = ["prefix+n", "ctrl+alt+right"]
previous_workspace = ["prefix+up", "ctrl+alt+up"] # 上/下键:切工作区
next_workspace = ["prefix+down", "ctrl+alt+down"]修改后执行 herdr server reload-config 即可热加载生效。这样坐在桌前打字时键盘快捷键照常使用,靠在椅背上手持遥控器时又能单手免前缀直切。
4.3 在 Codex / WorkBuddy 中的实际配合
当你在多个工作区里并行跑不同的 Agent:
- 在 Codex 中:经常需要对生成的改动做多次确认。大拇指按住语音键:“这部分不要重构,只在原来的函数里加一个空值检查”,松手文字上屏,按一下中心 OK 提交;如果 Codex 询问是否允许执行 bash 脚本,再按一下 OK 放行;
- 在 WorkBuddy / CodeBuddy 中:多 Agent 分工执行时,左手可以完全离开键盘,右手按住遥控器下达任务:“帮我把刚才的 API 文档生成成 Markdown 格式”,随后用上下键切换到其它工作区去检查编译日志。
5. 日常使用感受
用了这套方案一段时间后,最真实的改变并不是什么工作方式的翻天覆地,而是生理上更舒服了:
- 长 Prompt 明显更愿意说了:以前敲三四句话的需求或者边界条件,经常懒得打字就精简成了半截话,导致 Agent 理解不准;现在按住遥控器自然地说完一两百字的完整上下文,识别准确度很高,沟通成本反而降了;
- 多终端巡视更顺手:几个 Agent 都在跑任务的时候,手里拿着遥控器按两下方向键巡视一眼状态,比把手移到触控板或鼠标上去切屏轻松很多;
- 硬件成本几乎没有心理负担:相比动辄上百美元的专用小硬件,几十块钱的小米遥控器坏了不心疼,模具做工也完全在线。
如果你平时也在重度使用各种 AI 编程工具,手边正好有闲置的小米蓝牙遥控器,或者花几十块淘一个,花上十几分钟配置好,会是一个低成本但体验很扎实的小外设升级。
