| name | repository-dissect |
| description | This skill should be used when the user wants to analyze a repository and extract reusable knowledge into Zettelkasten notes. Triggers on 'リポジトリを分析して', 'リポジトリを解剖', 'このリポジトリの知見をまとめて', 'コードベースを分析して Zettelkasten に', 'dissect this repo', 'analyze this codebase', 'extract knowledge from this repo'. |
Repository Dissect
リポジトリを段階的に分析し、重要な設計判断・アーキテクチャパターン・汎用知見を Zettelkasten ノートとして蓄積する。
Vault パス
~/Documents/Zettelkasten
対象リポジトリ
- 引数なし: CWD の git リポジトリ
- 引数あり: 指定されたパス or GitHub URL(URL の場合は
ghq get で取得してから分析)
分析フェーズ
Phase 1: 表層スキャン(メインエージェント)
リポジトリの全体像を把握する。以下を読む:
- README.md / AGENTS.md / CLAUDE.md
- ディレクトリ構造(
find . -type f | head -200 程度)
- package.json / Cargo.toml / go.mod 等の依存定義
- 設定ファイル(tsconfig.json, .eslintrc, CI 設定等)
- エントリポイント(main, index, app 等)
function phase1_surface_scan(repo_path):
overview = {}
overview.readme = read_if_exists(repo_path, "README.md")
overview.agents = read_if_exists(repo_path, "AGENTS.md")
overview.structure = list_directory_tree(repo_path, depth=3)
overview.deps = read_package_manifest(repo_path)
overview.config = read_config_files(repo_path)
overview.entry_points = find_entry_points(repo_path)
interesting_areas = identify_interesting_areas(overview)
return overview, interesting_areas
表層スキャンの結果から、深掘りすべき領域を特定する。領域の例:
- アーキテクチャ構造(レイヤー分割、モジュール設計)
- データフロー(API → DB、イベント駆動)
- 独自のパターン・規約(カスタム lint ルール、コード生成)
- エラーハンドリング戦略
- テスト戦略
- CI/CD パイプライン
- セキュリティ境界
Phase 2: 深層分析(サブエージェント)
Phase 1 で特定した興味深い領域ごとにサブエージェントを起動する。各サブエージェントは担当領域のコードを読み、発見を JSON 形式で返す。
function phase2_deep_analysis(repo_path, interesting_areas):
findings = []
for area in interesting_areas:
agent = spawn_subagent(
model="sonnet",
prompt=build_analysis_prompt(repo_path, area),
)
area_findings = agent.run()
findings.extend(area_findings)
return findings
サブエージェントへのプロンプトには以下を含める:
- 分析対象の領域とファイルパス
- Phase 1 の概要(コンテキスト提供)
- 抽出すべき知見の種類(汎用パターン / リポジトリ固有の重要判断)
- 出力フォーマット(タイトル、要約、詳細、タグ、汎用性判定)
サブエージェントの同時実行数は 5 以下に保つ。
Phase 3: ノート生成(メインエージェント)
サブエージェントの結果を統合し、Zettelkasten ノートを生成する。
function phase3_generate_notes(repo_name, findings):
notes_created = []
for finding in findings:
if finding.is_universal:
note = create_permanent_note(finding)
else:
note = create_literature_note(finding, source=repo_name)
write_note(note)
notes_created.append(note)
structured = create_structured_note(repo_name, notes_created)
write_note(structured)
link_to_existing_notes(notes_created)
git_commit_all()
return notes_created, structured
ノート生成ルール
Literature Notes
リポジトリのドキュメント・コードから読み取った事実をパラフレーズする。
sources にリポジトリ名とファイルパスを記録する
- そのリポジトリ固有の設計判断・構造の記録に使う
- 1ノート1トピック
Permanent Notes
複数の発見を統合した汎用的な知見。
- 他のプロジェクトでも適用可能なパターン・原則
- 既存の Permanent Notes と重複する場合は、既存ノートに wikilink を張るだけにする
- 1ノート1トピック
Structured Note
リポジトリの索引。分析で生成した全ノートへの wikilink を集約する。
- ファイル名:
<リポジトリ名>-解剖マップ.md
type: structured
- 領域ごとにグルーピングした wikilink リスト
- リポジトリの概要(1-2文)を冒頭に置く
既存ノートとの接続
ノート生成後、既存の Vault ノートとの関連を検索する。既存ノートと意味的に関連する新規ノートがあれば、双方向の wikilink を追加する。
ノート形式
${CLAUDE_PLUGIN_DIR}/assets/note-format.md に従う。
手順
- 分析対象のリポジトリを特定する(CWD or 引数)
- Vault の存在を確認する(なければ
${CLAUDE_PLUGIN_DIR}/assets/note-format.md の「Vault セットアップ」に従って初期化する。pre-commit hook のセットアップを含む)
- Pre-commit hook が未設置なら
${CLAUDE_PLUGIN_DIR}/assets/note-format.md の「Pre-commit Hook セットアップ」に従って設置する
- Phase 1: 表層スキャンを実行する
- Phase 2: 興味深い領域ごとにサブエージェントで深層分析する
- Phase 3: 結果を統合し、ノートを生成する
- Literature Notes(リポジトリ固有の発見)
- Permanent Notes(汎用知見)
- Structured Note(索引)
- 既存ノートとの接続を検索し、wikilink を追加する
- wikilink 検証: 生成・変更したすべてのノート内の
[[wikilink]] が Vault 内の既存ノートに解決できることを確認する。解決できないリンクがある場合は、リンク先のノートを作成するか wikilink を修正する
- git add + git commit する
- 生成したノートの一覧をユーザーに報告する