🎹 用手机聊天代替电脑打字:TypeBridge 诞生记

215 阅读12分钟

手机说完话,Mac 光标处自动出现文字。这不是魔法,是一个 macOS 菜单栏小工具。

TypeBridge

GitHub 仓库github.com/parksben/ty…  |  App官网typebridge.parksben.xyz

如果这个小工具让你觉得有点意思,欢迎点个 Star ⭐ 支持一下,对我来说是非常大的鼓励!


🤔 这个小工具是怎么来的

想先跟你分享一个我每天都在经历的瞬间——

坐在电脑前码字,飞书文档开着,光标在闪。脑子里突然冒出一段话想记下来,但打字太慢,拿起手机用语音转文字。说完,手机屏幕上出现了那段文字。

然后呢?然后就开始做一件可能你也做过无数次的事:

复制 → 发到文件传输助手 → 手放回键盘 → 选中 → 再复制 → 切回文档 → 粘贴。

就为了把一段文字从手机搬到电脑上,七步。而且不是偶尔一次——是每天十几次。

更让人难受的是那种"被打断"的感觉。手指从键盘挪到手机上,刚写了一半的思路已经飘远了。等做完一整轮搬运,回到电脑前,刚才想好的下一句话变得模模糊糊。

我就在想:这一步能不能省掉?手机说完,电脑光标处直接出现,不行吗?

于是就有了 TypeBridge。

说实话,这不是什么宏大的愿景,也没有改变世界的野心。就是一个小到不能再小的念头——别让翻来覆去的复制粘贴,打断你正在做的事。


💡 它和剪贴板同步有什么不一样

其实 Apple 生态自带 Universal Clipboard,市面上也有很多跨设备剪贴板工具。我用过不少,但它们都有一个相同的逻辑:内容搬过来了,但你得自己贴上去。

TypeBridge 的想法是反过来的——它不太关心"内容在哪",它关心的是"输入到哪":

  • ✅ 不需要先复制、再切窗口、再粘贴。
  • ✅ 甚至不需要碰 Mac 的键盘。
  • ✅ 在手机上说完一句话,Mac 当前那个正在闪烁的光标处,自动就有了这段文字。

打个不太恰当的比方:剪贴板同步像是"我帮你把砖搬到工地了",TypeBridge 想做的是"砖已经在墙上了"。

听起来区别不大,但实际用起来,少的那几步,就是少了的打断。


🎯 五个或许你也用得上的场景

下面是我们设计 TypeBridge 时主要考虑的几个使用场景,都不大,但都是高频小事。

场景一:说话就是打字 🎤

写周报、回邮件、填表单——对着手机说完,文字直接在电脑光标处出现。

现在各类手机应用的语音转文字效果已经很强大了(比如飞书聊条的语音转文字功能,不仅准确率高,还可以自动转成比较书面化的结构性表达),中文 200+ 字/分钟没什么压力,比大多数人的键盘速度快一截。唯一的小麻烦是:转出来的文字还在手机里。TypeBridge 让它直接落在电脑上。

  • 填写又臭又长的调查问卷,手机口述胜过键盘码字
  • 写代码注释,手机口述,编辑器里实时落字

打开 TypeBridge 的「自动提交」开关,说完话连回车都可以不用按

自动提交功能

🎯 一句话:把嘴变成键盘。


场景二:给 AI 配一个声音遥控器 🤖

在 Claude Code、Cursor、Copilot Chat 里,用手机说出需求,AI 拿到完整指令直接开干。

用 AI 写代码的时候,其实有相当一部分交互是在"描述你想要什么"。有时候需求比较复杂——比如"帮我把这个函数改成 async 的,保持异常处理不变,顺便把参数校验独立出去"——打字描述反而容易丢细节,说出来反而一气呵成。

  • 手机说一句「给这段代码写单测」,Cursor 对话框里收到指令,AI 开始生成
  • 重构到一半不想切思路,手机口头描述下一步,AI 继续
  • 开会时想到一个 bug,手机发给 AI,回来就能看到修复方案

🎯 一句话:给 AI 配一个声音遥控器。

手机端说话(飞书机器人聊天)桌面端出字(Claude Code)
FeishuBotClaudeCode

场景三:写文档,边说边出稿 📝

写技术文档、会议纪要——对着手机边想边说,文字实时流进电脑编辑器。

写文档最难的其实不是"写",而是"坐下来开始敲第一个字"。手机语音的好处是降低了这个门槛——随手拿起来就能开始,不用“正襟危坐”。

  • 写周报,手机逐条口述这周做了什么,Notion 里逐行出现
  • 写技术文档,手机描述思路结构,Markdown 编辑器实时生成段落
  • 会议刚结束,趁记忆还新鲜口述纪要,电脑上直接有初稿

🎯 一句话:让文档以说话的速度产出。


场景四:跨设备粘贴,一步到位 🔗

手机上看到一段代码、一个网址、一个地址——发给机器人,电脑上立刻出现。

这可能是最常用也最"解渴"的场景了。手机浏览器里看到一个网址想收藏,同事发来一段 SQL 想跑一下,快递地址要填到网页表单里……以前那套"复制→发给自己→再复制→粘贴",现在一步搞定。

  • 手机浏览器看到一个网址,发给机器人,电脑地址栏直接出现
  • 手机收到一段 SQL,转发给机器人,终端里就能直接用
  • 截图发给机器人,自动写入电脑剪贴板,任意位置粘贴

🎯 一句话:比 AirDrop 更快,比微信文件传输更顺手。

手机端输命令(WebChat)终端出字(并自动回车)
WebChatTerminal

🏗️ 架构长什么样

TypeBridge 的体积很小,安装包不到 15MB。背后的技术思路也比较朴素:走最简单的路,做最可靠的交付。

整个链路就四步:收到消息 → 入队 → 写剪贴板 → 粘贴到目标应用。

sequenceDiagram
    participant Phone as 手机
    participant TB as TypeBridge
    participant Mac as Mac 应用
    Phone->>TB: 发送消息
    TB->>TB: 写入 FIFO 队列
    TB->>Mac: 剪贴板 + Cmd+V
    Mac-->>TB: 状态反馈
    opt 自动提交
        TB->>Mac: Enter / 自定义按键
    end

我们一开始也试过更"讲究"的方案——通过 macOS Accessibility API 逐字符模拟键盘输入,像真人打字一样。说实话那个思路本身没有问题,但在 Electron 应用和许多网页富文本编辑器上兼容性不太好。后来我们改了主意,回到最简单的路上来。

现在这套方案的好处是:它不依赖目标应用的内部结构。 不管你是 VSCode、终端、浏览器网页、Notion 还是 Slack,只要这个应用支持粘贴(macOS 下几乎没有不支持的),消息就能进去。

TypeBridge 同时支持飞书、钉钉、企业微信和内置 WebChat 四种接入方式。多种渠道收到的消息进入同一个队列,按先后顺序依次处理,不会出现多条消息抢焦点的问题。

IM 协议的长连接维护、token 刷新、断线重连——这些细节都交给一个独立的 Go 进程去处理,Rust 主进程只负责系统交互和消息调度。两边通过 stdout JSON Lines 通信,简单直白。

技术方案说不上多精巧,但至少是经过真实使用打磨过的。


📦 下载安装

你可以从这两个地方获取安装包:

TypeBridge 官网typebridge.parksben.xyz(选择对应架构,直接下载最新版本)

GitHub Releasesgithub.com/parksben/ty…

目前支持 Apple Silicon(M1/M2/M3/M4)和 Intel(x86_64)两种架构,macOS 13 及以上系统。

⚠️ 首次安装需要多一步

因为应用目前还没有经过 Apple 官方公证,macOS 可能会在首次打开时拦截。这是 Gatekeeper 的正常行为,不是什么安全问题。任选下面一种方法就能正常使用:

方法 A:系统设置里点「仍要打开」

打开 系统设置 → 隐私与安全性,往下翻,你会看到一条关于 TypeBridge 的拦截提示,点击旁边的 「仍要打开」 按钮。

这个方法需要先尝试打开一次 .app(被拦截后),提示才会出现。

方法 B:终端执行一行命令

先把 TypeBridge 拖进「应用程序」文件夹,然后在终端粘贴下面这行命令,回车即可:

sudo xattr -r -d com.apple.quarantine /Applications/TypeBridge.app

它会移除 macOS 给未公证应用打上的隔离标记。之后就正常双击打开了。

如果大家对 App 安全性有疑虑,也可以直接参考 github 代码,自己本地构建

首次启动:开启辅助功能权限

第一次打开 TypeBridge 时,它会自动弹出一个引导页,请你开启辅助功能权限:

辅助功能授权

这个权限只用于一件事:向前台应用发送 Cmd+V 和 Enter 等粘贴与提交按键。TypeBridge 不会读取屏幕内容,也不会监控你的输入。

在系统设置里勾选 TypeBridge 之后,引导页会自动消失(我们每 3 秒检查一次权限状态,几乎实时生效)。

连接一个渠道

权限搞好之后,挑一个你方便的方式连过来:

渠道门槛优点局限
WebChat零配置没有接入成本,点「启动会话」→ 手机扫码 → 输入 OTP,最快 30 秒上手只能在同一局域网使用;若要语音输入,需要手机端输入法支持语音转文字
飞书 / 钉钉 / 企微需要一个自建应用手机和 PC 不需要在同一网络,消息可通过公网转发到桌面端有一定接入成本,需要在飞书/钉钉/企微开发者后台完成应用和机器人创建、功能权限与事件监听相关配置

TypeBridge 内置的 WebChat 功能界面如下:

WebChat 配置页WebChat - 手机端
WebChatPCWebChatMobile

💡 一个小提醒:点窗口的红色关闭按钮不会退出应用,TypeBridge 会继续在后台运行。只有按 Cmd+Q 或 Dock 右键退出才会真正关掉。


✨ 几个用起来比较舒服的细节

自动提交

消息粘贴完之后,可以自动帮你按一下 Enter。在聊天窗口就是"发出",在 AI 对话框就是"开始回复",在终端就是"执行命令"。

按键可以按自己习惯配置。ChatGPT 网页版用 Enter 提交,飞书文档用 ⌘ + Enter 提交——一个设置项就能切换。

图片也能传

手机发一张截图给机器人,Mac 上直接粘贴到你正在编辑的地方。文字和图片一起发的话,按原始顺序先粘字再粘图。


🧰 主要技术栈

技术角色
IM 协议层Go静态二进制,负责 WebSocket 长连接与 API 调用
核心逻辑层Rust (Tauri)进程调度、消息队列、系统交互
用户界面层React + TypeScript + Tailwind CSS配置窗口、历史记录
WebChat 服务Rust (axum + socketioxide)嵌入式 HTTP + Socket.IO
移动端 WebChatVite + React + socket.io-client手机浏览器里的聊天界面

选 Tauri 而不是 Electron,是考虑到应用需要常驻后台,内存占用是一个比较实际的问题。用系统自带的 WebView 而不是打包一个 Chromium,省下来的内存还是挺明显的。

WebChat 模式在桌面端启动了一个很小型的 HTTP 服务器,消息完全在局域网内流转,不过外网。没网也能用。


✅ 可能适合你,如果——

  • 🔹 在用 AI Coding 工具(Cursor / Copilot Chat / Claude),经常需要用自然语言描述需求
  • 🔹 写文档、周报、纪要的频率比较高,想试试用语音提提速
  • 🔹 经常在手机和电脑之间搬运文字,有点烦了
  • 🔹 团队里有共享配置、命令、地址之类的小需求

🤞 暂时还没做到的地方

  • 🔸 还没有 Windows 版本——目前只支持 macOS。我知道很多朋友在用 Windows,这是接下来的重要方向。如果你需要 Windows 版,欢迎在 GitHub Issue 或者评论区留个言,让我知道有多少人在期待,会优先排期!
  • 🔸 自带的 WebChat 渠道目前只支持在局域网使用(手机和 PC 连同一个 WiFi 即可),这么实现主要是出于成本、体验与安全性的综合考量:一是局域网内信息传输相对安全,二是作为一个开源免费项目,我本人不想花太大的成本在服务器等资源的长期投入上

特别说明:飞书、钉钉、企业微信走的是 IM 公有云长连接,手机和电脑在任何网络下都能通 —— 手机用 4G、电脑用办公室 WiFi,也完全没问题。目前个人实际使用下来飞书的接入和使用是几个 IM 中做的体验较好的,也是成本最低的。


🙏 最后想说的

TypeBridge 做的东西不大,代码量也不算多 —— 三个 Go 模块,一个 Rust 核心,一套 React UI。它不是那种让人"哇"一声的产品,也没有颠覆任何东西。

我写这个工具的初衷,就是不想再为了一句"把文字从手机搬到电脑"这种小事,把手从键盘上拿开,打断正在干的事。

如果你也有类似的烦恼,不妨试试看。如果能帮到你,我会很开心。如果遇到问题或者有什么想法,也欢迎随时提出来。

GitHub 仓库github.com/parksben/ty…

TypeBridge 官网typebridge.parksben.xyz

如果觉得这个小工具有点意思,恳请点个 Star ⭐,你的每一个 Star 都是开源作者莫大的鼓励 ❤️

有什么建议、Bug 反馈、或者 Windows 版的许愿,都欢迎在 Issue 区告诉我。


[觉得有意思的话,欢迎转发扩散本文 ❤️]