1仕組みと動作原理
パイプライン全体はSKILL.md内の8ステップの指示とモデルによる読み込みで構成され、ディレクトリ内にスクリプトは一切含まれません。展開はシェル、理解はモデル、集約は固定レポートテンプレートに依存します。
Extract, categorize, and analyze Google Takeout ZIP exports of Gemini Apps activity. The skill handles:
戦略選択の前にタイプを判定:3〜5個のファイルをサンプリングし、「話者ラベル / コンテンツ形態 / 長さの分布 / ファイル命名」の4つのシグナルを用いて「会議の文字起こし」か「プロンプト-応答」かを判別し、それぞれ異なる分析ルートを適用します。
Before full analysis, sample 3-5 files to determine the **conversation type**:
展開手順における明確な技術選定理由:macOS標準のunzipは中国語などのマルチバイトファイル名をサイレントに破損させるため、unarの使用が必須となります。
Google Takeout files contain Chinese/Unicode filenames. **macOS `unzip` corrupts these — always use `unar`.**
精読前に全体を棚卸し:find + sed/uniqを用いて拡張子の分布を集計し、txt一覧を作成、サイズ順に集計してリストを構築してから精読対象を決定します。
find <extract-dir> -type f | sed 's/.*\.//' | sort | uniq -c | sort -rn
キーワード検索は「答えではなく最初のステップ」と明確に位置付け:ヒット箇所の前後10行のコンテキストを必ず再確認して判定し、結果を3つに分類します。
**Read surrounding context** (10 lines before/after each match) — keyword matching alone produces massive false positives. "Investment" can mean business strategy, "option" can mean UI choice, "fund" can mean insurance feature
PIIの処理方針は「フラグ付けするが転記しない」:履歴書、バックグラウンド調査、連絡先リストなどを検出した場合はレポートのリスク項目に記載しますが、その内容自体はレポートやmemoryに絶対に転記しません。
- File: <name>, Type: <resume/background-check/etc.>, Risk: <high/medium/low>
コンテキスト予算を守るための大容量ファイルの階層的読み込みと大規模セットの並列読み込み:単一ファイルは先頭と末尾の各10%のみを読み、100以上のファイルは並列sub-agentに10〜15件ずつのバッチで割り当てます。
For 100+ files, spawn parallel sub-agents to read and summarize in batches (10-15 files each). Merge results. One agent reading all files sequentially will exhaust context.
出力構成は7セクションの固定レポート(概要/トピック分布/主要な発見/専門領域分析/注目すべき文書/価値ある引用/PIIリスク)とし、オプションでmemoryファイルを出力します。
# Gemini History Analysis Report
オプション生成物であるmemoryファイルには明確なプロトコルを定義:プロジェクト既存のmemory形式に準拠し、originSessionIdによるトレーサビリティを付与、MEMORY.mdのインデックスを更新し、既存内容との重複を排除します。
- Include `originSessionId` or source tag pointing back to the analysis
完了時のクリーンアップにはユーザー確認が必要:分析完了後にのみ展開ディレクトリをrm -rfで削除します。
# Remove extracted files after analysis complete (user confirms)
2コア機能
3外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| cli | unar(解包 Takeout ZIP,处理中文文件名) |
| package | Homebrew(仅在 unar 缺失时安装;命令带 2>/dev/null || true 容错) |
| cli | find / sed / sort / uniq / du(清单与统计) |
| cli | grep(领域关键词检索,随后必须人工回读上下文) |
| cli | rm(分析完成后清理解包目录,需用户确认) |
| api | 宿主 sub-agent 能力(100+ 文件时并行批处理) |
4推奨統制措置と判定根拠
- 网络端点: 外部ネットワークアクセスの宣言: 唯一の外部通信の可能性があるアクションはbrew install unarです。これはunarが存在しない場合にのみHomebrew経由でサードパーティ製パッケージを取得するために実行されます(SKILL.mdでは2>/を使用)。
- 本地工作目录: ファイルの読み書きと成果物の出力: <output-dir>/**:unarによって解凍されたTakeoutの全コンテンツ(txt文字起こし、画像、音声/動画、PDF/Officeドキュメント、ネストされたzipファイル)。
5二重目の独立検証
- [ok] 是否真的没有脚本(避免凭 description 臆测) — glob 结果:仅 SKILL.md。所有「处理」都是写在文档里让 agent 用通用 shell/工具执行的命令,非自带可执行文件。scripts_executed = []。
- [discrepancy] spawn 命中是否等于进程创建 — 〔第二遍标注:扫描器误报,已澄清〕SKILL.md 原文为『spawn parallel sub-agents to read and summarize in batches』,指宿主的 sub-agent 能力;全文件无 child_process / subprocess / exec / eval。
- [ok] brew install 是否被夸大成依赖 — 命令为 brew install unar 2>/dev/null || true,位于『Install unar if missing』注释下,失败被吞掉;SKILL.md 未把它列为前置条件(前置条件段落只说要 macOS 与 Takeout zip)。已在 external_deps 与 network_calls 中标为条件性、尽力而为。
- [discrepancy] rm -rf 的危险性是否被如实标注 — 〔第二遍标注:第一遍低估,已加强〕Step 8 的清理命令确为 rm -rf <extract-dir>,作用是删除解包出来的整棵目录树。命令上方注释写了『(user confirms)』,但这是文档级约束、无技术强制;已在 file_writes 与 verdict.risks 中单列,并指出它同时是隐私卫生措施(不留私人历史副本)——两个动机都要讲,避免读者只看到「破坏性」。
- [ok] PII 保护是否只是声明 — 报告第 7 节模板字段(File / Type / Risk)本身就是「不含内容」的结构;Pitfalls 4 条再次强调 do NOT include their contents;memory 段落要求 PII 摘要而非复制。三处一致,属可执行的结构性约束。
- [ok] 关键词检索纪律是否与实测证据一致 — Step 5 的四步(设计词表 → grep 全部文件 → 回读前后 10 行 → 三分类后全文重读)与 Pitfalls 2 的实测结论(80%+ 命中全为假阳性)互相印证,报告第 4 节要求列出假阳性条数与原因——方法、证据、交付物三者闭环。
- [ok] memory 写入是否有副作用管理 — Step 7 限定三个触发条件、要求遵循项目既有 frontmatter 约定、要带 originSessionId 溯源、要更新 MEMORY.md 索引、且『Never duplicate what's already in memory — update existing files instead』。副作用有明确协议。
- [ok] 元数据(license/stars/last_push) — 取自同 repo 同 commit 的池内既有值(MIT、1385★、2026-09-09T12:33:29Z);本次未联网复核 gh。
6結論
16d58ad7768cadfe…