From cruft-code-sweep
Detects dead code, fallbacks, deprecated patterns in repos using scanner, git historian, and verifier agents. Verifies safe removal for cleanup, tech debt visualization, pre-release audits.
How this skill is triggered — by the user, by Claude, or both
Slash command
/cruft-code-sweep:cruft-code-sweepThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
3つの専門エージェントが協調して、不要コードの **発見** → **履歴調査** → **安全性検証** を行う。
3つの専門エージェントが協調して、不要コードの 発見 → 履歴調査 → 安全性検証 を行う。
| Agent | 役割 | 視点 |
|---|---|---|
| cruft-scanner | コードベースを自律探索し、cruft 候補を発見する | 「これ不要では?」 |
| codebase-historian | git 履歴から各候補の時間軸の文脈を調査する | 「いつ・なぜ書かれた?今も必要?」 |
| safety-verifier | 各候補が本当に削除可能か検証する。デグレ防止 | 「消して本当に大丈夫?」 |
scanner: Phase 1 (プロジェクト理解) → Phase 2 (パターンスキャン) → Phase 3 (自律探索)
↓ 候補リストを historian に送信
historian: 各候補の git blame/log を調査し、時間軸の文脈を付与
↓ 履歴付き候補リストを verifier に送信
verifier: 各候補について依存関係・テスト・副作用を検証(履歴情報も加味)
↓ 検証結果を scanner に返信
scanner: 検証結果を統合してレポート生成 → Phase 4 (レポート出力)
TaskCreate で4つのタスクを作成:
3つのエージェントを並列起動する:
Task(subagent_type="general-purpose", name="cruft-scanner", mode="bypassPermissions", run_in_background=true)
Task(subagent_type="general-purpose", name="codebase-historian", mode="bypassPermissions", run_in_background=true)
Task(subagent_type="general-purpose", name="safety-verifier", mode="bypassPermissions", run_in_background=true)
scanner には以下の内容をプロンプトとして渡す:
あなたは cruft-scanner です。コードベースの不要コードを自律的に探索してください。
まずプロジェクト全体像を掴む:
Glob: **/package.json, **/tsconfig.json, **/app.config.*, **/eas.jsonpackage.json を Read(dependencies, scripts)CLAUDE.md / README.md があれば Readdependencies から自動判定:
react-native / expo → RN パターン有効化firebase → Firebase パターン有効化express, fastify 等 → Node.js パターン有効化{SKILL_DIR}/references/patterns.md の P1〜P13 を Grep で検索。
Phase 1 で判定したフレームワーク固有パターン({SKILL_DIR}/references/framework-patterns.md)も含める。
優先順位:
各ヒットに対して:
定型パターンでは拾えない cruft を自分で探す:
未使用 export: export function|const|class を列挙 → 参照 0 件を特定
設定の重複/矛盾: config/, constants/ を Read → 同じ値の複数ハードコード
到達不能コード: 早期 return 後のコード、常に false の分岐
過剰防御コード: 型で保証済みの null チェック、二重バリデーション
臭い検知: ファイル名/関数名に old, legacy, temp, backup, workaround, compat
全候補を以下の形式で整理し、codebase-historian に SendMessage で送る:
## 候補 N: [タイトル]
- ファイル: path/to/file.ts:行番号
- パターン: P1 / 探索で発見
- severity: HIGH / MEDIUM / LOW
- 内容: [1行説明]
- コードスニペット: [3〜5行]
- 呼び出し元: N 件
- 削除した場合の想定影響: [推測]
historian には以下の内容をプロンプトとして渡す:
あなたは codebase-historian です。cruft-scanner が発見した候補について、git 履歴から時間軸の文脈を調査してください。
scanner から候補リストが SendMessage で届くまで待機してください(TaskList を定期チェック)。
1. git blame で最終更新を特定
git blame -L 行番号,+5 ファイルパス で、該当コードの最終変更者・日時・コミットハッシュを取得2. コミットメッセージの文脈分析
git log --oneline -5 -- ファイルパス で直近の変更履歴を確認workaround, temporary, hack, quick fix, revert → cruft の裏付けfix #123, closes #456 → 関連 issue/PR が close 済みか確認の手がかりmigration, upgrade, compat → 互換性コードの痕跡3. ファイルの変更頻度
git log --oneline -- ファイルパス | wc -l でファイル全体の変更回数を確認4. 周辺コードとの関係
git show --stat コミットハッシュ で確認5. 削除・復活の履歴
git log -S "シンボル名" --oneline で、候補のシンボルが過去に削除→復活していないか確認各候補に時間軸の文脈を付与し、safety-verifier に SendMessage で送る:
## 候補 N: [タイトル](scanner の元情報をそのまま含める)
### git 履歴調査
- 最終更新: YYYY-MM-DD(N ヶ月前)by [author]
- staleness_score: HIGH / MEDIUM / LOW
- コミットメッセージ: "[メッセージ抜粋]"
- 関連キーワード: workaround / temporary / fix #N / なし
- ファイル変更回数: N 回
- 候補行の変更回数: N 回(初回から変更なし / N回変更あり)
- 削除・復活: なし / あり(YYYY-MM-DD に削除 → YYYY-MM-DD に復活)
- 同一コミットの他ファイル: [ファイル一覧(あれば)]
- historian の所見: [1-2文の分析。例: "2年前の workaround コミットで追加され、以降変更なし。一時対応が残存した可能性が高い"]
verifier には以下の内容をプロンプトとして渡す:
あなたは safety-verifier です。cruft-scanner が発見した候補について、codebase-historian の git 履歴調査を加味しつつ「削除してデグレしないか」を検証してください。
historian から履歴付き候補リストが SendMessage で届くまで待機してください(TaskList を定期チェック)。
1. 依存グラフの追跡
2. テストカバレッジの確認
3. ランタイム副作用の分析
4. 型への影響
5. historian の履歴情報を加味した判定
historian から提供された staleness_score やコミットメッセージの文脈を判定に活用する:
workaround / temporary → cruft の裏付け6. 判定
各候補に以下の判定を付ける:
| 判定 | 意味 |
|---|---|
| SAFE | 削除しても問題なし。参照 0 件、副作用なし |
| LIKELY_SAFE | ほぼ安全だが、確認推奨。間接参照の可能性あり |
| RISKY | 削除するとデグレの可能性あり。具体的なリスクを明記 |
| KEEP | 削除不可。正当な理由がある(明記する) |
検証結果を scanner に SendMessage で返す:
## 候補 N: [タイトル]
- 判定: SAFE / LIKELY_SAFE / RISKY / KEEP
- 参照数(実数): N 件(内訳: 直接 N, re-export N, テスト N)
- テストカバレッジ: あり / なし / 間接的
- 副作用: なし / あり(具体的に)
- 型への影響: なし / あり(具体的に)
- デグレリスク: [具体的なシナリオ。なければ「なし」]
- 推奨アクション: [削除する / コメント改善 / リファクタ / 現状維持]
scanner が verifier の検証結果を受け取ったら、統合レポートを生成する。
出力先: ./cruft-code-sweep-report.md
フォーマット: references/report-template.md に従う。
レポートには verifier の判定を含める:
| 項目 | 内容 |
|---|---|
| 候補ごとの severity | scanner の判定 |
| 安全性判定 | verifier の SAFE/LIKELY_SAFE/RISKY/KEEP |
| デグレリスク | verifier が特定した具体的リスク |
| 推奨アクション | 両者の分析を統合した最終推奨 |
レポート生成後:
npx claudepluginhub sean-sunagaku/claude-code-plugin --plugin cruft-code-sweepAnalyzes and removes dead code in Repowise-indexed codebases using graph analysis. Suggests safe deletion order and flags false positives.
Diagnoses repo rot prioritizing dead code (HIGH/MEDIUM/LOW confidence), god files, hotspots, hardcoded paths, stale TODOs, lopsided imports. Language-agnostic pure diagnosis.
Finds and safely removes unused exports, dead files, orphaned dependencies, and stale constraints. Use after refactoring or as periodic hygiene.