Flitのプライバシー:自分で確かめてください
主張:あなたの音声とテキストがMacの外に出ることはありません。決してありません。
Flitは、声の録音、文字起こし、テキストのクリーンアップをすべてデバイス上で行います:
| 段階 | 動くもの | 場所 |
|---|---|---|
| 音声テキスト変換 | Flit独自のローカル音声モデル、またはAppleの内蔵認識機能 | あなたのMac |
| スマート整形 | ローカルの整形モデル、またはmacOSが提供している場合はAppleのデバイス上のモデル | あなたのMac |
| 履歴 | ローカルのデータベース。オーディオファイルはオンにした場合のみ | ~/Library/Application Support/Flit |
アカウント、テレメトリ、アナリティクス、クラッシュレポーターは一切ありません。あなたの声やテキストをサーバーが見ることもありません。ネットワーク通信はすべて、明確に定められた3か所に限られるよう設計されています。以下にすべて記載します。
Flitが行うネットワーク通信はこれだけです
- 自分で開始したモデルのダウンロード:「設定」で「ダウンロード」をクリックすると、
huggingface.coからモデルファイルを取得します。Apple自身の音声と整形のアセットは、macOS自体が取得します。 - ライセンスのアクティベーション(Macごとに1回):ライセンスキーをペーストすると、Flitは
apps.fore.studioに、キー、このMacのプラットフォームUUIDのSHA-256ハッシュ(UUIDそのものは送りません)、Macの名前、macOSとFlitのバージョンを送り、署名済みのライセンスファイルを受け取ります。このファイルは、起動のたびにオフラインで検証されます。ライセンス登録中は、7日に1回を上限としてキーとハッシュを再確認し、取り消されたライセンスの署名済みリストを取得します。音声入力した内容は、このどれにも含まれません。また、試用期間中はネットワーク通信を一切行いません。 - アップデートの確認:初回起動時に、SparkleがFlitにアップデートの確認を許可するかを尋ねます。許可すると、
statics.fore.studio/flit/updates/appcast.xmlを定期的に取得し、適切なビルドを選べるように、インストール済みのバージョンとmacOSのバージョンを送信します。許可しなければ、自分でメニューから「アップデートを確認…」を選ばない限り、確認は行いません。
リストはこれですべてです。
デベロッパモード
コードエディタやターミナルに音声入力すると、FlitはmacOSのアクセシビリティAPI(ペーストにすでに使っているのと同じ許可)を通じて、フォーカスされているウインドウの書類のパスを読み取り、プロジェクトのルートを見つけて、そのプロジェクトのファイル名とフォルダ名をインデックスします。これにより、口にした識別子が正しいつづりになります。インデックスはメモリ上にのみ存在します:ディスクに書き込まれることも、履歴に含まれることも、どこかに送信されることもありません。ファイルの内容は読み取りません。オフにするには「設定」→「整形」を使います。
コンテキストに応じた整形
デフォルトではオフです。 オンにすると(「設定」→「整形」)、FlitはmacOSのアクセシビリティAPIを通じて、音声入力先のフォーカスされているテキストフィールドと、そのウインドウに表示されているテキストを読み取ります。これは、ペーストにすでに使っているのと同じ許可です。これにより、整形機能は会話中の表記どおりに名前を書き、書きかけの文を自然に続けられます。この取得内容がメモリ上にあるのは、ちょうど1回の音声入力の間だけです:ローカルの整形モデルにのみ渡され、ディスクや履歴に書き込まれることも、どこかに送信されることもありません。パスワードなどのセキュリティ保護されたフィールドでは、取得そのものを中止します。
選択範囲を音声で編集
この機能も画面を読み取るので、同じリストに含めます。デフォルトではオフです。 「選択範囲を音声で編集」をオンにすると(「設定」→「整形」)、選択範囲の上で行われ、かつ「make this shorter」のような指示に聞こえる音声入力は、その選択されたテキストをローカルの整形モデルに送り、その場で書き換えます。選択範囲はアクセシビリティAPIを通じて読み取られ、その1回の書き換えに使われたあと破棄されます。ディスクや履歴に書き込まれることも、Macの外に出ることもありません。選択範囲がなければ何も読み取りません。指示に聞こえない音声入力は、代わりに通常のテキストとして挿入されます。オフにするには「設定」→「整形」を使います。
Flitをインストールした時点では両方ともオフなので、初期状態では画面からテキストを一切読み取りません。 どちらの場合も確認するのは、フォーカスされている要素の役割だけです。これは検索ボックスと書類を区別するのに十分な情報で、音声入力した検索語が文章ではなく検索語として入るようにするためのものです。この確認ではテキストを読み取りません。オプトアウトする対象がないので、オフにする設定もありません。
修正からの学習
ペーストの数秒後、同じアプリにいる場合に限り、FlitはアクセシビリティAPIを通じてフォーカスされているフィールドを1回だけ読み取り、挿入した内容と比較します。比較はメモリ上で行われ、フィールドのテキストはすぐに破棄されます。ローカルに保存されるのは、繰り返し行われた単語の修正(書き出されたつづりと修正後のつづり)と、アプリごとのスタイルのカウンタ(たとえば「WhatsAppで文末のピリオドを削除、3回」:バンドルID、カテゴリ、数値だけで、あなたのテキストは含みません)です。どちらも、「設定」で「追加」と「閉じる」のボタンが付いた提案になるだけです。Flitが辞書やアプリのスタイルを勝手に変更することはありません。パスワードなどのセキュリティ保護されたフィールドは、この方法で読み取られることはありません。
ネットワークモニタで確かめる
Little Snitch、LuLu、Proxymanのいずれかを使います:
- 先にモデルをインストールします(「設定」→「モデル」/「整形」→「ダウンロード」)。
- ネットワークモニタを起動し、プロセス
Flitで絞り込みます。 - 何でも、どこでも、好きなだけ音声入力します。
- 音声入力中に確認される接続:なし。1日を通して見ても、確認されるのは最大で上記の3つだけです:自分でクリックしたダウンロード、
apps.fore.studioへのライセンス確認1回(多くても週1回で、音声入力中には行いません)、そして許可した場合のstatics.fore.studioへのアップデート確認です。
Flit.appは静的に調べることもできます:バイナリはアナリティクスのSDKを一切リンクしていません(otool -L Flit.app/Contents/MacOS/Flitを実行すると、Appleのシステムフレームワークと、オープンソースのアップデータであるSparkleだけが表示されます)。
自分で管理できるローカルデータ
- 文字起こしの履歴:任意で、件数に上限があり、「設定」→「履歴」ですべて削除できます。
- オーディオ履歴:デフォルトではオフです。自分でオンにした場合のみ有効になり、自動削除のルールを設定できます。
- クリップボードの衛生管理:音声入力したテキストは一時的なもの(
org.nspasteboard.TransientType)として扱われるため、クリップボードマネージャに保存されません。
質問がある場合や、この主張に穴を見つけた場合は、issueを作成してください。プライバシーに関する報告は最優先(P0)で対応します。