個人データ保護
コーディングエージェントは、あなたのデータをかなりの量、モデルプロバイダへ送ります。読んだファイル、コマンドの出力、目を通したデータベースのダンプや CSV の各行が、すべて会話に入ります。そのデータに個人情報 — 顧客名、メールアドレス、電話番号、カード番号、住所 — が含まれていれば、プロバイダもそれを受け取ります。
個人データ保護は、その個人データをあなたの Mac にとどめます。リクエストがモデルプロバイダへ出発する前に、ホスト側のプロキシがその中の個人データを見つけ、各値を現実的な代替値に置き換えます。本物の名前には作り上げた名前、本物のメールには @example.com のアドレス、というように。返信が戻ってくると、プロキシは本物の値に戻します。プロバイダが見るのは常に代替値だけです。エージェント、あなたのファイル、あなたのターミナルは本物の値で動き続け、エージェントが代替値を見ることはありません。
検出は端末上で、内蔵の Rampart モデルで行われます。走査のためにどこかへ送られるものはありません。
この章では、この機能が何を置き換えるか、代替値がどう振る舞うか、どこで働きを確かめられるか、そして限界を説明します。個人データ保護はマシンごと(設定エディタでは「ワークスペース」ごと)に設定します。項目のリファレンスは設定 → 個人データ保護にあります。
有効にする
マシンの設定を開き、サイドバーのセキュリティの下の個人データ保護を選びます。
このペインには保護というグループが 1 つあります。
| 設定 | 既定 | 対象 |
|---|---|---|
| 個人データをモデルに届く前に代替値に置き換える | オフ | マスタースイッチ。オフの間、下のカテゴリはグレー表示です。 |
| 人名 | オン | 名と姓。 |
| メールアドレスと電話番号 | オン | メールアドレス。7 桁以上の電話番号。 |
| カード番号、銀行口座番号、税番号 | オン | 決済カード番号、銀行口座番号とルーティング番号、税番号。 |
| 社会保障番号、パスポート、運転免許証などの ID | オン | 米国の社会保障番号やその他の公的 ID 番号。 |
| 番地までの住所 (市区町村、州、郵便番号はそのまま) | オン | 番地の行(建物番号、通り、部屋番号)をまとめて置き換えます。 |
保存をクリックしてください。設定はそのマシンの次の AI リクエストから効きます。
グループの下には、ソースコードはパターンルールに任される旨、そして各置き換えはセキュリティ タイムラインで数えられるが値が記録されることはない旨が書かれています。Rampart — National Design Studio, CC BY 4.0 のリンクは検出モデルのクレジットです。
注: 検出モデルはアプリに同梱されています。同梱していないビルドでは、スイッチを入れるとダウンロード(約 14 MB)が提案されます。ダウンロードを断るか失敗した場合、スイッチは自分でオフに戻ります。
何が置き換えられるか
検出は 2 つのパスを組み合わせます。
- パターンルール(検証付き)は構造化データを正確に見分けます。メールアドレス、カード番号(Luhn アルゴリズムで検査)、社会保障番号などです。
- Rampart モデルは Mac の CPU 上で動く小さなトークン分類器で、構造化されていない種類 — 名前と住所 — を、文章やデータの中から見つけます。
そのうえで Bromure はモデルの提案を絞り込み、ありふれたコードや製品名が人と間違われないようにします。
- ソースコードにはパターンルールだけが適用されます。 コード中の名前はほぼ常に識別子なので、コードはモデルのパスから外されます。コード中のメール、カード、社会保障番号は引き続き置き換えられます。
- よく知られた製品・企業・ツールの名前(Claude、GitHub、Docker、Postgres など)は決して人として扱われません。
- 市区町村、州、郵便番号はそのまま残り、URL や IP アドレスのように見えるものも残ります。住所のうち置き換えられるのは番地の行だけです。
- 値が行をまたぐことはなく、短すぎるかコードらしすぎて誰かのデータとは思えない断片はそのままにされます。
変わるのは会話のテキストだけです。プロキシはリクエストを文字列ごとに書き換え、それ以外のバイトはエージェントが送ったままにします。モデルの思考、署名、暗号化された内容はどちらの方向でも触られないので、プロバイダの整合性チェックは通ります。
代替値の振る舞い
各代替値は本物らしく見えるので、モデルはそのデータについて引き続き考えられます。
| 種類 | 代替値 |
|---|---|
| 名前 | 現実的で発音できる名前 |
| メール | @example.com のアドレス |
| 電話番号 | 元と同じ形式の番号 |
| カード番号 | Luhn 検査を通るテストカード番号 |
| 社会保障番号 | 発行されることのない 9xx 帯の番号 |
代替値はマシンごとに一貫しています。同じ本物の値には常に同じ代替値が付きます — ターンをまたいでも、アプリの再起動をまたいでも — それぞれがマシンごとの鍵でその値から導かれるからです。これには 2 つの意味があります。
- エージェントが毎ターン送り直す会話がバイト単位で同一のままになるので、プロバイダのプロンプトキャッシュが働き続けます。
- モデルは会話を通じて一貫した 1 人の人物・顧客を見ることになり、毎ターン新しいランダムな名前を見ることにはなりません。
各代替値は、使う前に辞書と他のすべてのエントリと照合されます。そのため返信の中で戻すときに、ありふれた単語を書き換えてしまうことはありません。日常語でもある名前(「Will」「Grace」)は、名前として検出された箇所でのみ置き換えられます。
マシンごとの鍵は ~/Library/Application Support/BromureAC/pii/<ワークスペース id>.key(モード 0600)にあります。値と代替値の対応表はディスクに書かれることはなく、値が再び現れるにつれてメモリ上で組み立て直されます。
本物の値に戻す
返信がストリームで戻ってくるあいだ、プロキシはエージェントが見る前に各代替値を本物の値に置き換えます。テキストの中でも、ツール呼び出しの引数の中でもです。そのためエージェントが書くファイルや実行するコマンドには本物のデータが渡ります。返信の復元は、Anthropic Messages API、OpenAI の Chat Completions と Responses API、そして Gemini について、ストリームでも一括でも行われます。ストリームのときは、2 つのチャンクに分かれた代替値も認識できるよう、プロキシが数文字ずつを手元に残します。
どこに適用されるか
個人データ保護は、エージェントからクラウドの AI プロバイダへのリクエスト — トレースが本文を取得できる既知の AI ホスト(HuggingFace を除く) — に、そのリクエストが会話を運んでいるときに働きます。次のものには適用されません。
- 端末内モデル。 Mac 自身の推論エンジンが応じたターンは Mac を出ないので、書き換えられません。
- 圧縮されたリクエスト本文。 クライアントが本文を圧縮したリクエストは、走査されずに通されます。
置き換えは Fusion が質問を振り分ける前に起きるので、Fusion パネルの他のモデルも代替値を受け取ります。
働きを確かめる
新しい値が置き換えられた各リクエストは、セキュリティ タイムラインに個人データ保護の行を追加します。種類ごとの件数と宛先ホスト(たとえば 名前 3 件 · 電話番号 1 件 → api.anthropic.com)が入り、判定は代替に置き換えです。行が持つのは件数だけで、値そのものが記録されることはありません。以前のターンで置き換えられ、履歴とともに再送された値は二重に数えられません。モデルの予算に対して大きすぎるリクエストには、何も置き換えられなかった場合でも、判定部分的 — モデル予算に到達。パターンのルールのみの行が付きます。
概要タブの置き換えた個人データタイルは直近 24 時間に置き換えた値を合計し、保護機能の表には個人データ保護の列があって、どのマシンでこの機能がオンかが分かります。
限界
- これは検出であり、保証ではありません。 このモデルは、コードでの誤検出を大幅に減らすために再現率をわずかに譲っています。珍しい形式、珍しい文脈にある名前、ソースコードの中の個人データは通り抜けることがあります。露出を大きく減らすものと捉え、個人データがプロバイダに届かなかった証拠とは考えないでください。
- 非常に大きなリクエストは一部がパターンのみになります。 モデルが読むのは 1 リクエストあたり新しいテキスト最大 300,000 文字で、新しいものから順です。その予算を超えた分にはパターンのルールだけが走り、セキュリティ タイムラインはそのリクエストを「部分的 — モデル予算に到達。パターンのルールのみ」と記録します。より古い履歴は以前のターンですでに扱われています。
- 変わるのは会話のテキストだけです。 画像、バイナリデータとして送られたファイル添付、id やモデル名などのフィールドは走査されません。
- トレースには本物の値が残ります。 トレースが AI の本文を取得する場合、保存されるリクエストはエージェントが送ったもの、保存される返信は復元後のものなので、どちらも本物の値を持ちます — どのトレース本文と同じく、あなたの Mac 上で暗号化されています。プロバイダが受け取った代替値版は保存されません。