Flit的隐私:请亲自验证
声明:你的音频和文本绝不会离开你的Mac。永远不会。
Flit完全在设备端录制你的语音、进行转写并加以整理:
| 阶段 | 运行的是什么 | 位置 |
|---|---|---|
| 语音转文本 | Flit自己的本地语音模型,或Apple的内置识别器 | 你的Mac |
| 智能格式化 | 本地格式化模型,或在macOS提供的情况下使用Apple的设备端模型 | 你的Mac |
| 历史记录 | 本地数据库,以及仅在你选择开启时保存的音频文件 | ~/Library/Application Support/Flit |
没有账户,没有遥测,没有分析,也没有崩溃报告器,任何服务器都不会看到你的语音或文本。按照设计,所有网络通信都限定在三个明确定义的地方,下面完整列出。
Flit会发起的网络请求仅有这些
- 你主动开始的模型下载:在设置中点按“下载”,会从
huggingface.co获取模型文件。Apple自己的语音和格式化资源由macOS自行获取。 - 许可证激活,每台Mac一次:当你粘贴许可证密钥时,Flit会向
apps.fore.studio发送该密钥、此Mac平台UUID的SHA-256哈希值(绝不发送UUID本身)、这台Mac的名称,以及macOS和Flit的版本号,并接收一个已签名的许可证文件,此后每次启动时都会离线验证该文件。在已获得许可期间,它最多每7天重新确认一次密钥和哈希值,并获取一份已签名的已吊销许可证列表。你听写的任何内容都不属于其中任何一项,试用版也完全不发起任何网络请求。 - 更新检查:首次启动时,Sparkle会询问是否允许Flit检查更新。如果你同意,它会定期获取
statics.fore.studio/flit/updates/appcast.xml,并发送已安装的版本和macOS版本,以便选出合适的构建版本。如果你拒绝,它就永远不会检查,除非你自己从菜单中选择“检查更新…”。
以上就是完整列表。
开发者模式
当你在代码编辑器或终端中听写时,Flit会通过macOS无障碍API(也就是它粘贴时已在使用的同一项权限)读取当前焦点窗口的文稿路径,找到项目根目录,并为该项目的文件名和目录名建立索引,从而让你说出的标识符拼写正确。该索引仅存在于内存中:从不写入磁盘,从不包含在历史记录中,也从不发送到任何地方。不会读取文件内容。可在设置 → 格式化中关闭。
情境感知格式化
默认关闭。 当你开启它时(设置 → 格式化),Flit会通过macOS无障碍API(也就是它粘贴时已在使用的同一项权限)读取听写目标中当前焦点所在的文本栏,以及其窗口中可见的文本,让格式化程序能按照对话中的写法拼写名称,并自然地续写未完成的句子。这些捕获的内容只在恰好一次听写期间存于内存中:仅提供给本地格式化模型,从不写入磁盘或历史记录,也从不发送到任何地方。遇到密码栏或安全输入栏时,会完全中止捕获。
用语音编辑所选内容
这项功能也会读取屏幕,因此归入同一列表。默认关闭。 当你开启“用语音编辑所选内容”时(设置 → 格式化),如果一次听写既是在有所选内容时进行的,并且听起来像一条指令(例如“make this shorter”),Flit会把这段所选文本发送给本地格式化模型,以便就地改写。所选内容通过无障碍API读取,仅用于这一次改写,随后即被丢弃;它从不写入磁盘或历史记录,也从不离开这台Mac。没有所选内容时不读取任何内容;不像指令的听写则会作为普通文本插入。可在设置 → 格式化中关闭。
安装Flit时两者均为关闭状态,因此在初始状态下,它完全不会读取屏幕上的任何文本。 无论哪种情况,它唯一会查看的是当前焦点元素的角色:这足以区分搜索框和文档,从而让听写的查询以搜索词而不是句子的形式输入。这项检查不读取任何文本,而且没有可以关闭的设置,因为没有什么需要选择退出。
从你的更正中学习
粘贴后几秒钟,并且只有在你仍处于同一个App中时,Flit才会通过无障碍API读取当前焦点所在的输入栏一次,并与它插入的内容进行比较。比较在内存中进行,输入栏中的文本会立即被丢弃。在本地保留的内容:重复出现的词语更正(写出的拼写和更正后的拼写),以及按App统计的风格计数器(例如“在WhatsApp中删除了句末句号,3次”:一个Bundle ID、一个类别和一个数字;绝不包含你的文本)。两者都只会成为设置中带有“添加”/“忽略”按钮的建议:Flit绝不会自行更改你的词典或App风格。密码栏或安全输入栏绝不会以这种方式被读取。
用网络监控工具验证
使用Little Snitch、LuLu或Proxyman:
- 先安装好你的模型(设置 → 模型/格式化 → 下载)。
- 启动网络监控工具,并按进程
Flit筛选。 - 在任何地方听写任何内容,想说多少就说多少。
- 听写期间观察到的连接:无。在一整天里,你最多只会看到上述三种情况:你点按的下载、一次发往
apps.fore.studio的许可证确认(最多每周一次,绝不在听写期间进行),以及在你允许的情况下发往statics.fore.studio的更新检查。
Flit.app也可以进行静态检查:该二进制文件没有链接任何分析SDK(otool -L Flit.app/Contents/MacOS/Flit显示的是Apple的系统框架,以及开源更新程序Sparkle)。
由你掌控的本地数据
- 转写历史记录:可选,有数量上限,可在设置 → 历史记录中全部删除。
- 音频历史记录:默认关闭;需你明确选择开启,并可设置自动删除策略。
- 剪贴板清洁:听写的文本会被标记为临时内容(
org.nspasteboard.TransientType),因此剪贴板管理器不会将其存档。
有疑问,或发现这一声明有漏洞?请提交issue。我们把隐私报告作为P0处理。