Community画像github.com

wxyz199/local-only-file-analysis

スプレッドシート、Word/PowerPoint文書、PDF、画像、テキストファイルをローカルマシン上でのみ分析し、すべてのモードで個人データ(氏名、電話番号、住所、ID番号、パスポート番号、銀行カード、メール、ナンバープレート、アカウントID)をマスキングし、クラウド文書、クラウドドライブ、知識ベース、オンラインコンバーター、OCRサービス、外部検索へのアップロードを一切行いません。ユーザーが統計、抽出、プロファイリング、要約のためにローカルファイルを提供する際に使用します。

local-only-file-analysis とは?

このスキルは、AIエージェント(Claude Code、Cursor、Codexなど)がユーザーのローカルマシン上のファイルを分析するためのものです。スプレッドシート、Word/ PowerPoint文書、PDF、画像、テキストファイルに対応し、すべての処理をローカルで完結させます。最大の特徴は、すべてのモードで個人データをマスキングすることです。氏名、電話番号、住所、ID番号、銀行カード情報など、多岐にわたる個人情報を検出し、安定した仮名(例:[NAME#1])に置き換えます。これにより、データの機密性を保ちながら統計や分析が可能です。ユーザーは「通常」モード(構造、統計、マスキングされたプレビュー)と「厳格」モード(集計メトリクスのみ、元のテキストは一切表示されない)を選択できます。スキルは、必ずローカルパスの入力を要求し、ファイルがチャット添付で送られた場合にはそのリスクを明示します。分析結果はローカルワークスペースに保存され、監査シートも生成されます。クラウドドキュメント作成、クラウドドライブ保存、知識ベースへの書き込み、外部検索、オンライン変換/OCR、外部送信などの行為は禁止(Red Line)されており、厳格に守られます。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/wxyz199/local-only-file-analysis/tree/HEAD

Installed? Explore more 画像 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

ローカル専用ファイル分析

目標

表形式ファイル、文書ファイル、PDFファイル、画像ファイルをクラウドサービスに送信せずに分析し、すべてのモードで個人データ(氏名、連絡先、住所、ID番号)をマスキングします。ソースファイルはローカルマシン上で読み取り専用として開かれ、抽出と統計はローカルスクリプトを通じて実行され、すべての成果物はローカルの作業ディレクトリ内に留まります。

ステップ1 — 最初にローカルパスを尋ねる(必須、スキップ禁止)

このスキルが起動した後の最初の文は、分析を開始するのではなく、ローカルパスを尋ねるものでなければなりません。以下の文言をコンテキストに合わせて使用し、4つのポイントを保持してください:何もアップロードされないこと、絶対パスが必要なこと、パスのコピー方法、オプションのファイルピッカー。

このファイルはこのマシン上でのみ分析します。いかなるクラウドサービスにも送信されず、レポート内の氏名、電話番号、住所、ID番号はマスキングされます。 絶対ローカルパスを指定してください。例:/Users/you/Documents/ledger.xlsx または D:\data\ledger.xlsx。複数のファイルは改行で区切ってください。 パスをコピーするには:ファイルを右クリックし、「パスとしてコピー」(Windows)、またはファイルをターミナルにドラッグするか、Finderで⌥⌘C(macOS)を使用します。 「ファイルを選択して」と言っていただければ、ローカルファイルダイアログを開きます。

フォロースルー:

  • ユーザーが「選択/ダイアログを表示」と言った場合 → python "<skill_dir>/scripts/pick_path.py"(複数選択可)または --single を実行します。出力されたパスを入力として使用します。終了コード2はGUIセッションがないことを意味し、ユーザーにパスを貼り付けるよう依頼します。
  • ユーザーが「添付されています」と言ったが、パスのない添付カードのみの場合 → 次のセクションに従って処理します。添付ファイルを黙って読み取らないでください。
  • パスを受け取った後、検証:パスが存在すること、拡張子がサポートされていること、ファイル数が妥当であること(約10ファイルを超える場合はタイプごとにグループ化)。

ユーザーがすでに添付ファイルをドロップした場合

何かを受け入れる前にリスクを明示します。

一つ注意点です:チャットにドロップされたファイルは、プラットフォームのサーバーにすでに保存されている可能性があり、そのパスはもはや完全にローカルとは言えません。 このファイルが機密情報や個人データを含む場合は、代わりにローカルパスを送信してください。そうすれば、このマシンからディスク上で読み取り、何も外部に出ることはありません。

ユーザーがそれでも添付ファイルを希望する場合、処理を進めますが、配信方法を正直に「入力はチャット添付からであり、プラットフォームのサーバーに到達した可能性があります」とラベル付けし、添付ファイルを「完全にローカル」とは決して呼ばないでください。

ステップ2 — ユーザーにモードを選択させる

2つのオプションからユーザーが選択する必要があります。指定がない場合は、通常モードを使用し、回答の最初の行でそのモードを明示します。

通常(デフォルト)厳格
レポートの内容構造 + 統計 + マスキングされた値のプレビュー(最初のN行、本文抜粋)集計メトリクスのみ:行/列、型、非NULL率、個別値の数、範囲、平均
生テキストマスキングされたテキストがレポートに入り、モデルに表示される一切表示されない;モデルはメトリクスのみを見る
適した用途一般的な内部データ、意味解釈、文章による結論顧客レコード、給与、医療データ、契約書、機密資料
コストマスキングされた内容が推論コンテキストに入る意味判断不可、統計のみの回答

文言:

モードを選択してください:① 通常 — 構造、統計、マスキングされたプレビューを表示し、内容を読んで結論を導き出せます;② 厳格 — メトリクスのみ、レポート内に元のテキストは一切ありません。デフォルトは通常です。

必須のマスキング(すべてのモード、無効化不可)

マスキングはオプションではなく、デフォルトの動作です。スクリプトにはオフスイッチがなく、--mode strict は「マスキングがオプション」を意味しません — 厳格モードは、マスキングの上に「元のテキストなし」を追加するものです。

カテゴリ対象フィールド結果
氏名名前、口座名義人、連絡先、法定代理人、所有者、担当者、アカウントマネージャー、申請者、受取人、カード名義人、株主[NAME#1]
連絡先携帯電話、固定電話(市外局番含む)、FAX、メール[PHONE#1] / [EMAIL#1]
住所住所、居住地、送付先住所、登録住所、本籍地都道府県/市区町村は保持、残りは [ADDRESS#1];--mask-region で地域も非表示
身分証明国民ID(18/15桁)、パスポート、渡航許可証、職員ID、統一社会信用コード[ID#1]
金融銀行カード、口座番号、カード番号[ACCOUNT#1]
その他識別子ナンバープレート、顧客番号、従業員番号、会員番号、学生番号、社会保障番号、保険証券番号[PLATE#1] / [IDNO#1]

3つの実装原則。配信ノートに引用可能:

  1. 安定した仮名。 同一のソース値は、同一実行内では常に同じ仮名にマッピングされます。「張三が3回出現」は「[NAME#1] が3回出現」となります — カウント、重複排除、結合は機能しますが、個人の特定はできません。
  2. ディスク上にマッピングなし。 値から仮名へのマップはメモリ内のみに存在します。report.md にも manifest.json にも含まれず、ヒット数のみが書き込まれます。
  3. 自由文に対するヒューリスティック。 構造化テーブルは列ヘッダーで分類され、列全体がマスキングされます。本文、PDF、スライド内の自由文は、正規表現と姓の辞書(「連絡先:張三」、「張さん」)に依存します。ヒューリスティックは見逃しがあります — 特に、文脈手がかりのない孤立した名前。そのため、正直に述べてください。「すべて検出された」とは決して主張しないでください。

都道府県/市区町村を保持するのは意図的です:地域レベルの分析をサポートしつつ、番地を公開しません。地域自体が機密の場合は --mask-region を使用します。

ステップ3 — ローカルで抽出

python "<skill_dir>/scripts/local_extract.py" "/path/to/ledger.xlsx" "/path/to/report.docx" \
  --workspace ".local_analysis"

厳格モードの場合は --mode strict を追加;地域を隠す場合は --mask-region;カスタムパターン用に --redact "EMP\\d{6}"(繰り返し可能)。

出力(すべて --workspace 内):

  • report.md — マスキングされた構造プロファイル + 統計 + プレビュー;以降の分析の唯一の入力
  • manifest.json — ファイルリスト、SHA-256、モード、masking.enabled=true、マスクヒット数、network_used: false

コンソールにはファイルごとのタイプ、サイズ、マスキングフィールド、ヒット数、「network requests: 0」が出力されます。その後、ローカルファイルリーダーで report.md を読み取ります;スクリーンショットやオンラインOCRで代用しないでください。

ステップ4 — ローカルで計算、決して頭の中で計算しない

合計、比率、個別値の数、ソート、グループ化、前期比変化:常にローカルスクリプトで計算します。全データを見ずにモデルが推定すると、ほとんどの場合間違っています。local_extract.py から parse_xlsx / parse_delimited / Masker を一時スクリプトで再利用し、計算してから数値をレポートに書き込みます。仮名は直接グループ化およびカウントできるため、元に戻す必要はありません。

ステップ5 — 監査シートを作成

python "<skill_dir>/scripts/local_audit.py" ".local_analysis" --note "processed locally, nothing uploaded"

監査シートは5つのパートで構成されます:ソースファイルの整合性(ハッシュ再チェックによる読み取り専用、コピーなしの証明)、マスキング実行(スイッチ状態、カテゴリ、今回の実行のヒット数)、成果物目録、行ごとのレッドラインチェック、結論。終了コード0 = 合格、1 = 処理中にソースファイルが変更された。

ステップ6 — レポート

結論を最初に、データを次に、締めくくりの一文:

この分析はこのマシン上でのみ実行され、クラウドサービスは一切関与していません。ソースファイルは読み取り専用で変更されておらず、レポートは氏名、電話番号、住所、ID番号をマスキングしています(安定した仮名)。成果物は .local_analysis/ に、監査シートは audit.md にあります。

レッドライン(絶対にトリガーしてはいけない)

カテゴリ禁止行為代表的なツール
クラウド文書オンラインシート/ドキュメントを作成、インポート、「編集」Tencent Docs, Kingsoft Docs, Feishu Docs コネクタ
クラウドドライブ / オブジェクトストレージファイルや成果物をアップロードTencent Drive, WeDrive, クラウドファイルストレージ
知識ベースライブラリに書き込む、URLを取り込むライブラリアップロード, ima 知識ベース
外部検索ソーステキストや断片をクエリとして使用Web検索、ページスクレイピング
オンライン変換 / OCRオンラインPDF変換、オンライン解凍、オンライン画像認識任意のオンラインツール、画像認識API
外部送信ファイルやサマリーをチャット、メール、ボットに送信WeComメッセージ、メール、会議ノートのアップロード

唯一の例外:ユーザーが明示的に「これはアップロード/送信してもよい」と言った場合。その場合でも、再表明し、行動する前に2回目の確認を得ます。

ファイルタイプごとのローカルパス

タイプ推奨ローカル方法注意事項
.xlsx .xlsmlocal_extract.py(zip + XML直接)複数シート、列レベルマスキング;日付はシリアル番号として表示される場合あり
.csv .tsv .txt .md .json .htmllocal_extract.pyUTF-8 / GB18030 および区切り文字を自動検出;CSVはヘッダーでマスキング
.docx .pptxlocal_extract.py(zip + XML直接)段落、見出しアウトライン、表、スライドごとの箇条書き;本文は自由文マスキング処理
.pdflocal_extract.pyローカルに workbuddy-pdf CLI があればそれを使用、なければ組み込みのzlibフォールバック
.png .jpg .gif .bmp .webplocal_extract.pyフォーマット、寸法、ハッシュのみ;ローカルOCRはtesseractが存在する場合のみ
.xls .doc .ppt レガシーバイナリユーザーにローカルで再保存、またはローカルエディターで開くよう依頼内容を抽出するためにオンラインコンバーターに送信しない
スキャンPDF / テキスト内の画像ローカルOCR、またはユーザーに内容を口述してもらうOCRがない場合、ギャップを正直に述べる — クラウドにルーティングしない

特に画像:tesseractがない場合、メタデータとしてのみ扱い、「画像内容は認識されませんでした」と述べ、2つのローカルオプション(OCRをインストールして再実行、ユーザーが説明)を提供します。ビジョンモデルで「見る」ことはしないでください — それは画像を推論パスに送り込み、ユーザーの要求に反します。

デグレーションルール

  1. ローカルスクリプトで解析可能 → スクリプトの出力を使用。
  2. 抽出可能なテキストがない(スキャン、レガシーフォーマット、暗号化) → 理由を説明し、ローカルでの代替手段(ローカル再保存、ローカルOCR、ユーザーによる口述)を提供。
  3. ユーザーが「すぐに結果を」と要求 → モードの質問に戻る:「現在の状態では統計的にしか回答できませんが、よろしいですか?」

よくある間違い

  • パスの要求をスキップして、チャット添付ファイルを直接分析する:ステップ1に違反。
  • report.md 全体を回答に貼り付ける:レポートはワーキングペーパーであり、回答には結論と主要な数値が含まれます。
  • 厳格モードがマスキングを不要にすると信じること:2つの次元は独立しています。
  • マスキングされていない値をコンソールや一時ファイルに出力して「データを見る」:マスキングは何かを書き出す前に行われなければなりません。
  • ローカルで計算する代わりに推定する:推定は全データスケールではほとんどの場合間違っています。
  • 「便利だから」と .xls をクラウドコンバーターに送信する:レッドラインに違反します;代わりにローカルで再保存してください。
  • エンコーディングを無視する:GB18030のCSVをUTF-8として読み取ると、文字化けが発生し列プロファイルが汚染されます。スクリプトは処理しますが、手書きコードも同様に処理する必要があります。

言語に関する注意事項

検出ルールは、中国語データ形式(国民ID番号、省/市の住所、中国の姓)に加え、一般的なパターン(メール、電話、銀行カード、ナンバープレート)を対象としています。レポートとコンソール出力は現在中国語です;検出ロジックは、パターンが許す限り言語に依存しません。英語のみの文書の場合、構造化テーブルのマスキングは列ヘッダーを介して機能しますが、自由文の名前検出は弱いです — 過剰に約束するのではなく、そのように述べてください。

関連スキル