从老式电话机到桌面工作台:我的 AI 效率外设折腾记
一、灵感萌芽:为什么需要一个物理工作台? 最初是受 Codex Micro 的启发,让我意识到,独立快捷小键盘在特定工作流里确实很有用。 当时在使用 Superpowers 这类工具时,我常需要反复输入固定指令,比如「跳过 spec,直接写」。如果手边有个实体按键,按一下就能完成「粘贴文本 + 回车
一、灵感萌芽:为什么需要一个物理工作台?
最初是受 Codex Micro 的启发,让我意识到,独立快捷小键盘在特定工作流里确实很有用。
当时在使用 Superpowers 这类工具时,我常需要反复输入固定指令,比如「跳过 spec,直接写」。如果手边有个实体按键,按一下就能完成「粘贴文本 + 回车」,能省去不少重复操作。

与此同时,我刷到了把老式电话机改造成语音输入终端、接入 Typeless 的视频。视频里的方案用了网络模块,还模拟了拨号效果。挺有意思,但对我来说,成本和实现都稍显复杂。
真正吸引我的是老式电话机的听筒,它恰好对应了两个需求:
改善收音:办公室底噪较大,听筒能让麦克风更靠近嘴边,有机会减少环境噪声的影响。
补上麦克风:我的 Mac mini 本身没有内置麦克风,正好需要一个语音输入设备。
我的构想很简单:把听筒里的麦克风和扬声器接到免驱 USB 声卡上;再改造底座的物理开关,把它作为一个独立按键接入小键盘。这样就能通过「拿起/放下」的动作,控制 Typeless 开始和结束语音输入。
这台老式电话机还有 22 个按键和一块小屏幕。如果能全部驱动起来,它本身就是一个现成的复古工作台,连外壳建模都省了。于是,我在闲鱼花十几块淘了一台老式座机。

二、验证与迭代:从 6 键小样到 18 键工作台
6 键版本:先把链路跑通
手头恰好有一块 ESP32-S3,我就借朋友的 3D 打印机,打了个最简单的 6 键外壳,接上几根杜邦线,先做最小可行性验证。
在 Codex 的协助下,我写出了第一版控制逻辑:分别定义按键按下和抬起时的行为,再组合延时、粘贴文本、模拟按键等操作。实际用下来,这条链路顺利跑通了。

9 键版本:小键盘和驱动初具雏形
6 键外壳的内部空间太小,塞不下单片机。于是,我找了一个底部空间更充裕的开源 9 键模型,打印出了小键盘的第一个正式版本。


配套的第一版驱动软件也在这时有了名字——Kivo。

18 键带屏版本:按键不够,就继续加
用了几天,我发现 9 个按键很快就有些捉襟见肘。
借助 Codex,我在原来的 9 键模型上改出了 12 键和 20 键版本。最终选定 20 键的布局,再让出两个轴位,嵌入一块显示状态信息的小屏幕,组成了 18 键带屏工作台。


伴生产物
当时买屏幕时多买了几块,我还顺手做了一个用量展示小屏幕,常驻在显示器左下角。
后来它也经过了改进,并入了同一套系统,后面的「最终的工作台」会再说到。

三、啃硬骨头:魔改老式听筒
拆开淘来的座机底座,我才发现里面用的是碳膜排线,没法按预想的方式直接焊接。复用原有按键和屏幕的计划,只好先作罢。

底座用不上,听筒还是可以留下。免驱声卡到货后,我在 ChatGPT 的指导下,测量了听筒里麦克风和扬声器的电阻,并确认接线。
幸运的是,这只听筒与这块声卡的组合不需要额外加电阻或电容,4 根引线直连就能正常工作。

接着,我让 Codex 协助重新建模听筒底座,在底部放入一颗机械键盘轴体,引出两根线接到单片机上。
听筒放下时压住轴体,拿起时松开,就能识别动作,实现「拿起开始录音、放下结束录音」。
老电话的机械手感,也算用另一种方式保住了。

四、拼出“完全体”:GPIO 告急与飞线噩梦
找了个风和日丽的周末,我量好各个元件的尺寸,让 Codex 帮忙设计了一个完整工作台,分成三个部分单独打印,再拼装到一起。
这次还加了两颗物理拨杆开关,其中一个用来临时断开听筒底座按键的信号。关闭触发后,拿起听筒就不会启动 Typeless,它可以单纯作为普通有线耳机,用来打电话。另一个是3档双开的还没想好干什么用。
功能是凑齐了,内部也越来越热闹:加上屏幕和各路轴体后,RP2040 的 GPIO 几乎用满,飞线更是乱成一团。
为什么不画 PCB 打板,或者改成矩阵扫描?
因为这只是自用原型,当时我更想先把它用起来。矩阵扫描需要重新规划布线和固件;如果还要处理多键同时按下的冲突,也得考虑二极管等细节。
PCB 确实能让接线和焊接规整很多。但按我当时查到的嘉立创报价,这个尺寸的 5 张板大约要 80 元,还没算出问题、改版后重新打样的成本。既然没有量产计划,我就暂时选择了飞线。




当然,飞线也留下了隐患。上面第三张照片里少了两个键帽,就是因为轴体的线留得太短:拔键帽时稍一用力,把轴体一起带出来,线就被拽断了。省下的布线工夫,最后还是得用维修补回来。
五、半路杀出程咬金:小米遥控器登场
正当我觉得这套设备用着还不错时,同事发来了一个项目:HD838A/remote-mic-app。
好家伙,居然有人把小米遥控器 2 Pro变成了便携语音输入工具:自带多个实体按键、续航长,还是无线连接。
再看看桌上那个红色大听筒,复古是复古,笨重也是真的笨重。


试用了一段时间,遥控器方案的体验确实不错。对我来说,当时主要的缺口是原项目没有 Windows 端支持。
遥控器驱动 Axonkey
于是,我又写了一款支持 macOS 和 Windows 的驱动工具——Axonkey,并扩展了快捷粘贴文本、模拟鼠标操作、一键打开应用或网址等功能,让遥控器也能承担一些日常快捷操作。


随着遥控器上位,红色听筒的出场机会越来越少。干脆把工作台左侧的听筒底座拆掉,让小键盘重新专心做快捷操作面板。
六、终局状态:各司其职的桌面搭档
最终的工作台
图里那块手机屏幕,用来实时展示 Codex Session 的运行状态,也支持点击后快速打开对应的会话。
这些能力来自我自建的基于 MQTT 的架构方案 Orbit。显示器左下角那块早期的「伴生产物」也被整合到这套架构进来。

折腾到现在,我的桌面协同方案基本稳定了下来:
小米遥控器:负责语音输入,以及快速切换屏幕和应用。
定制小键盘:负责高频文本粘贴、脚本宏和其他快捷操作。
外接状态屏:负责展示 Codex Session 状态并提供会话跳转入口,早期的用量监控屏也接入同一套系统。
最初只是想少敲几次重复指令,最后却一路折腾了小键盘、老式听筒、遥控器和状态屏。中间走了不少弯路,也留下过一团飞线,但看着这些自己拼出来的小东西每天派上用场,还是很有满足感。
至于它们到底是效率工具还是桌面玩具——能用,也好玩,就够了。