anon について
anon は、記録ファイルやフォルダーから個人情報をローカルで伏せるスキルです。パターン照合、Natasha、任意のローカル LLM を組み合わせ、分析後の復元に使う可逆マップもローカルに保存できます。
主な機能
- 01複数層によるローカル PII 検出と伏字化
- 02ファイルまたはフォルダーの処理
- 03可逆マップまたは非可逆モード
- 04ドライランの件数と伏字統計
- 05正規表現のみでのオフライン処理
活用シーン
- 01記録をレビューや共有向けに準備
- 02Markdown とテキストファイルを一括で伏字化
- 03伏字化したテキストをリモート分析し、ローカルで値を復元
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ glebis/ claude-skills --skill anonインストール後、Claude Code で/anonを入力して読み込まれたか確認します。
同梱ファイルscripts/anon.py
詳細
confide:anon — ローカルでの PII の墨消し
shared/confide_core.py のローカル多層スタックを使って、文字起こし(またはフォルダー全体)から個人を特定できる情報を墨消しします。正規表現(メールアドレス/URL/電話番号/ID/日付)
→ Natasha(ロシア語の固有表現)→ ローカル LLM(準識別子)の順に処理します。スパンは区間マージされ、プレースホルダーに置き換えられます。結果は、安全に確認できる GREEN コピーです。
デフォルトでは、anon は可逆マップを出力します。一意の予約済みセンチネルプレースホルダー(まったく同じ値は常に同じ [CONFIDE_<TYPE>_<NNNN>] になります。例:[CONFIDE_PERSON_0001]、[CONFIDE_EMAIL_0001]、[CONFIDE_DATE_0002])と、元の値と各プレースホルダーを対応付ける、同じ場所にある <name>.map.json(構造:schema_version、doc_id、green_sha256、created、entries[])を出力します。CONFIDE_ センチネルは予約済みのため、実際の文字起こしに含まれることはほぼなく、衝突のリスクはありません。また、rehydrate が「Person 1」のような通常の文章に触れることもありません。これはエンティティの照応ではなく、完全一致による照合です。語形変化した形式(例:ロシア語の「Марина」と「Марины」)は別々のプレースホルダーになります(見出し語への変換によるマージはありません)。このマップが秘密情報です。元の値を含む唯一の成果物であり、ローカルに保持されます。また、confide:rehydrate を使って、GREEN テキストのクラウド分析に実際の値を戻せます(墨消し → GREEN テキストを分析 → ローカルで復元、というラウンドトリップ)。従来の可逆ではない [TYPE] 形式を使う場合は、--no-map を指定してください(マップは書き込まれません)。
プライバシーの不変条件(必ず守ってください)
- ローカルのみ。 クラウド API は使いません。生テキストがマシンの外に出ることはありません。
- 設計上、元の PII が書き込まれるのは、ローカルにあり、アクセス権が 0600 に設定され、Git の追跡対象外となっている
<name>.map.jsonのみです。このファイルがマシンの外に出ることはありません。 元の値が表示されることはなく、GREEN コピーに書き込まれることもありません(GREEN に含まれるのはプレースホルダーのみです。元ファイルは読み込まれますが、書き換えられません)。マップは秘密情報であり、元の値を含む唯一の成果物です。.gitignoreには*.map.json、*.view.html、*.restored.mdが記載され、出力ディレクトリ内に作成または更新されるため、ローカルのみのこれらの成果物がコミットされることはありません。出力ディレクトリがクラウド同期対象(iCloud/Dropbox/OneDrive/Google Drive)のように見える場合、anon は秘密のマップがアップロードされるおそれがあると警告します。 - 件数のみ。 標準出力と
*.stats.jsonファイルに含まれるのは、タイプ別・レイヤー別の件数と墨消し率のみです。PII の値や墨消し済みテキストのダンプは含まれません。 - 人による確認が引き続き必要です。 墨消しは最低限の対策であり、保証ではありません。共有する前に、人が GREEN コピーを読む必要があります。残存する再特定リスクの確認には confide:red を併用してください。
実行方法
単一ファイルまたはディレクトリに対してスクリプトを実行します(すべての .md/.txt ファイルを処理します)。
python3 skills/anon/scripts/anon.py PATH
各入力ファイルの隣(または --out DIR で指定したディレクトリ)に、次のファイルが出力されます。
<name>.green.md— 墨消し済みテキスト(確認後に安全に閲覧・共有できる唯一のファイル)<name>.stats.json— 件数のみ<name>.map.json— 可逆マップ(秘密情報。アクセス権は 0600、Git の追跡対象外、ローカルのみ)。--no-mapを指定すると省略されます。*.map.jsonを含む.gitignoreも出力ディレクトリ内に作成または更新されます。
すでに出力済みの *.green.md/*.stats.json/*.map.json はスキップされるため、フォルダーを安全に再処理できます。
実行後
- 件数の概要(タイプ、レイヤー、墨消し率)を報告します。PII を貼り付けてはいけません。
- 共有する前に、GREEN コピーを人が確認する必要があることをユーザーに伝えます。
<name>.map.jsonが秘密情報(元の値)であること、ローカルに保持し、コミットも出荷もしないこと、そして confide:rehydrate がこのファイルを使って GREEN テキストのクラウド分析に実際の値を復元することを、ユーザーに再度伝えます。- 攻撃者がまだ推測したり関連付けたりできる情報を調べるために、confide:red の利用を提案します。
セットアップ
レイヤーの利用可否(Natasha、Ollama 経由のローカル LLM)とデフォルト設定は構成ファイルから取得されます。Natasha/Ollama がインストールされていない場合は、まず
confide:setup を実行してください。--layers regex は常にオフラインで動作します。