vulture-sweep について
vulture-sweepは、GitHubの未解決イシューを確認し、整理するスキルです。期間や内容ごとに候補を分類し、コードベースで完了・陳腐化を検証してから、クローズや統合を行います。
主な機能
- 01未解決イシューを期間や話題で調査
- 02完了・陳腐化・重複したイシューを特定
- 03コードとテストで候補を検証
- 04根拠を添えて検証済みイシューをクローズ
- 05関連イシューを統合して結果を報告
活用シーン
- 01実装済みで未クローズのイシューを発見
- 02古くなったバックログ項目を確認
- 03内容が重複するイシューを統合
- 04定期的なイシューボードの整理
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ autumnsgrove/ lattice --skill vulture-sweepインストール後、Claude Code で/vulture-sweepを入力して読み込まれたか確認します。
詳細
ハゲワシの一掃 🦅
ハゲワシは、ほかの者が見落とすものを見つめながら、辛抱強く上空を旋回します。はるか上空から眺めると、パターンが浮かび上がります。すでに解決済みなのに閉じられていないイシュー、まとまりのあるタスクにまとめるべき断片、関連性が失われるほど古くなった作業です。ハゲワシは判断を下しません。ほかの者が避ける必要な役割を果たす、自然界の清掃係です。ハゲワシは舞い降りるとき、食べる前に確かめます。そして再び舞い上がるとき、バックログは健全になっています。
起動するタイミング
- イシューボードに、時間とともに不要なものが溜まってきた
- ユーザーが「自分のイシューを整理して」や「バックログを一掃して」と言う
- ユーザーが
/vulture-sweepを呼び出す、またはハゲワシ/整理に言及する - 完了しているのに閉じられていないイシューがあると思われる
- まとめるべき、散在する関連イシューが見つかった
- 四半期または月次のバックログ整理
- 大規模リリース後(実装済みなのに閉じられていないイシューを見つける)
重要: この動物は、コードベースの検証なしにイシューを閉じることは決してありません。完了が証明されたものだけを閉じます。
併用対象: 新しいイシューが必要な作業を見つけた場合は bee-collect、残ったものを整理する場合は badger-triage
一掃
CIRCLE → SPOT → DESCEND → CLEAN → REPORT
↓ ↓ ↓ ↓ ↓
Survey Identify Verify Close/ Summary
Board Stale in Code Consol. & Stats
フェーズ 1:旋回する
ハゲワシは上昇気流に乗って上空へ舞い上がり、辛抱強く眼下の景色を見渡します……
イシューボード全体を調査します。
未解決のイシューをすべて集める:
# Get all open issues with metadata
gh issue list --repo AutumnsGrove/Lattice --state open --limit 200 --json number,title,labels,createdAt,updatedAt,body
全体像を把握する:
- 経過期間で分類する(90 日超=古くなっている可能性あり)
- ラベルで分類する(コンポーネントごとのまとまり)
- タイトル内のキーワードで分類する(類似する作業パターン)
- コメントに「実装済み」「完了」「終了」と記載されたイシューに注目する
経過期間の基準:
| 経過期間 | 状態 |
|---|---|
| 30 日未満 | 新しい |
| 30~90 日 | 古くなりつつある |
| 90~180 日 | 旧式 |
| 180 日超 | 風化中 |
出力: 経過期間とパターンの分析を含む、イシューボードの全体像
フェーズ 2:見つける
鋭い目が動きを捉えます。草むらに何かが息絶えて横たわっています……
整理候補を特定します。
カテゴリ 1:実装済みの可能性が高い(死んでいる) 作業が完了している可能性を示す兆候を探します。
- 古いイシューに関連する最近のコミットがある
- 現在存在する機能に言及したイシュー
- 修正済みの可能性があるバグに関するバグ報告
- 現在の動作と一致する機能強化の要望
カテゴリ 2:旧式/古くなっている(風化中) 関連性が失われたことを示す兆候を探します。
- 非推奨のテクノロジーへの参照
- 削除された機能に関するイシュー
- 現在のアーキテクチャには当てはまらなくなった問題
- 古くなった受け入れ条件
カテゴリ 3:断片化(散らばった骨) 統合できるものを探します。
- 同じコンポーネントに関する複数のイシュー
- 重複する受け入れ条件
- より大きな取り組みのサブタスクにあたるイシュー
- 表現が少し異なる重複イシュー
候補リストの形式:
## Candidates Spotted
### Likely Implemented
| # | Title | Age | Signal |
| ---- | -------------------- | ---- | ------------------------- |
| #234 | Add dark mode toggle | 120d | Feature exists in Foliage |
| #267 | Fix login redirect | 85d | Recent auth commits |
### Potentially Stale
| # | Title | Age | Signal |
| ---- | --------------------- | ---- | -------------- |
| #189 | Update webpack config | 200d | Now using Vite |
### Consolidation Candidates
| Issues | Theme | Recommendation |
| ---------------- | ------------------- | ------------------------- |
| #301, #305, #312 | Accessibility fixes | Combine into "A11y audit" |
出力: 検証できる状態に分類された候補
Phase 3: DESCEND
ハゲワシは翼をたたんで急降下し、上空から見つけたものを詳しく調べます……
コードベースで各候補を検証します:
「実装済みの可能性が高い」候補の場合:
# Grove Find — verify implementation exists
gf --agent search "darkMode" # Does the feature exist in code?
gf --agent search "ThemeToggle" # Find the component
gf --agent func "toggleDarkMode" # Find the function
# Check git history for evidence
git log --oneline --all --grep="dark mode" -10
git log --oneline --all -- "src/lib/stores/theme*"
検証チェックリスト:
- コードにコア機能が存在する
- 未完了を示す TODO コメントがない
- 該当する場合、テストが成功する
- 該当する場合、UI から機能にアクセスできる
検証結果:
| 結果 | 必要な根拠 | 対応 |
|---|---|---|
| 完了 | コードが存在し、テストが成功し、機能が動作する | 詳細なコメントを添えてクローズする |
| 一部完了 | コードの一部が存在し、さらに対応が必要 | オープンのままにし、説明を更新する |
| 未着手 | 根拠が見つからない | オープンのままにする |
| 不要になった | 機能がもはや関連性を持たない | 説明を添えて「対応しない」としてクローズする |
「断片化」した候補の場合:
- 関連するイシューをすべて読む
- 共通するテーマを特定する
- 統合したイシューの説明を作成する
- クローズするイシューを列挙する
出力: 根拠を記録した検証済みの候補
Phase 4: CLEAN
ハゲワシは死んだものを食べ、エコシステムをより健全な状態にします……
クリーンアップを実行します:
一括クリーンアップ用の Grove Tools:
# Single issue close
gw gh issue close --write NUMBER --comment "Verified complete — evidence in src/lib/..."
# Bulk operations — close multiple verified issues at once
gw gh issue batch --write --close 234,267,289 --comment "Vulture sweep: verified implemented"
実装済みイシューをクローズする(詳細なコメントを添える):
gh issue close NUMBER --comment "$(cat <<'EOF'
🦅 **Vulture Sweep: Verified Complete**
This issue has been implemented and verified in the codebase:
**Evidence Found:**
- Feature implemented in `src/lib/stores/theme.ts`
- Dark mode toggle exists in `src/lib/components/ThemeToggle.svelte`
- Tests passing in `tests/theme.test.ts`
- Verified working in production UI
**Commits:**
- abc1234 feat(foliage): add dark mode support
- def5678 test(foliage): add theme toggle tests
Closing as complete. Thank you for the contribution!
EOF
)"
不要になったイシューをクローズする:
gh issue close NUMBER --reason "not planned" --comment "$(cat <<'EOF'
🦅 **Vulture Sweep: No Longer Applicable**
This issue is being closed as it no longer applies to the current codebase:
**Reason:**
- Grove migrated from Webpack to Vite in January 2026
- Webpack configuration no longer exists
- The underlying problem this addressed is obsolete
If similar issues arise with the current Vite setup, please open a new issue.
EOF
)"
統合したイシューを作成する:
gh issue create --title "Consolidated: Accessibility improvements" --body "$(cat <<'EOF'
## Summary
This issue consolidates several related accessibility tasks into a single trackable effort.
## Consolidated From
- #301 — Add aria labels to navigation
- #305 — Fix focus ring visibility
- #312 — Improve screen reader announcements
## Acceptance Criteria
- [ ] All navigation elements have appropriate aria labels
- [ ] Focus rings are visible in all themes
- [ ] Screen reader announcements work for dynamic content
- [ ] WCAG AA compliance verified
## Context
These issues were identified during vulture sweep as fragments of a larger accessibility effort. Consolidating for clearer tracking.
EOF
)" --label "accessibility,enhancement"
# Close the original issues with reference
gh issue close 301 --comment "🦅 Consolidated into #NEW_NUMBER"
gh issue close 305 --comment "🦅 Consolidated into #NEW_NUMBER"
gh issue close 312 --comment "🦅 Consolidated into #NEW_NUMBER"
出力: イシューをクローズし、統合したイシューを作成し、バックログを整理する
Phase 5: REPORT
ハゲワシは再び舞い上がり、きれいになった景色を見渡すためにもう一度旋回します……
一掃の結果を報告します:
🦅 VULTURE SWEEP COMPLETE
## Summary
| Action | Count |
| --------------------------------- | ----- |
| Issues Closed (Implemented) | 7 |
| Issues Closed (Obsolete) | 3 |
| Consolidations Created | 2 |
| Issues Kept (Verified Incomplete) | 5 |
## Issues Closed as Implemented
| # | Title | Evidence |
| ---- | -------------------- | ------------------------- |
| #234 | Add dark mode toggle | Feature in theme.ts |
| #267 | Fix login redirect | Verified in auth flow |
| #289 | Add loading states | Skeleton components exist |
| ... | ... | ... |
## Issues Closed as Obsolete
| # | Title | Reason |
| ---- | --------------------- | ------------------------ |
| #189 | Update webpack config | Migrated to Vite |
| #201 | Fix IE11 support | IE11 no longer supported |
| #215 | Update Node 14 deps | Now on Node 20 |
## Consolidations
| New Issue | Absorbed | Theme |
| --------- | ---------------- | ----------------- |
| #534 | #301, #305, #312 | Accessibility |
| #535 | #298, #303 | Mobile navigation |
## Remaining Cleanup Opportunities
These issues may need attention but require human decision:
- #245 "Improve performance" — too vague to verify
- #278 "Consider alternative auth" — needs design decision
- #291 "Maybe add feature X" — unclear if still wanted
## Backlog Health
| Metric | Before | After |
| ----------------- | ------- | ------- |
| Open Issues | 87 | 72 |
| Average Age | 95 days | 67 days |
| Issues > 180 days | 12 | 3 |
_The carrion is cleared. The forest breathes easier._
ハゲワシのルール
忍耐
まずは旋回して状況を見渡します。調査せずに急降下してはいけません。全体像が重要です。
検証
クローズする前に必ず検証してください。 ハゲワシの評判は正確さにかかっています。イシューが本当に完了している、または不要になっていることを示すコードベース上の根拠なしに、イシューをクローズしてはいけません。
敬意
詳細なコメントを添えてクローズします。元の報告者には、_なぜ_イシューをクローズするのか、_何が_見つかったのかを知る権利があります。
断片化より統合
関連するイシューが散在している場合は、統合します。重複する5つのイシューより、明確な1つのイシューが優れています。
コミュニケーション
一掃を表す比喩を使います:
- 「ボードを旋回中……」(状況を調査)
- 「候補を発見……」(特定)
- 「急降下して検証……」(コードベースを確認)
- 「クリーンアップ中……」(クローズ/統合)
- 「舞い上がって報告……」(要約)
アンチパターン
ハゲワシは次のことをしません:
- コードベースで検証せずにイシューをクローズする
- 古いという理由だけで対応済みだと判断する
- 「対応中」とマークされたイシューや、担当者が割り当てられたイシューに手を出す
- イシューを削除する(明確な理由を添えてクローズするのみ)
- 人間の判断が必要なイシューをクローズする(代わりにレビュー対象としてマークする)
- 実装状況を推測する
- 詳細なクローズコメントを省略する
スイープの例
ユーザー:「/vulture-sweep — バックログが古びてきました」
Vulture の流れ:
-
🦅 CIRCLE — 「ボードを見回しています……オープンな issue が 87 件見つかりました。180 日以上経過したものが 12 件、90〜180 日経過したものが 23 件あります。認証、UI、インフラのクラスターにパターンが見えてきました。」
-
🦅 SPOT — 「候補を 15 件見つけました:
- おそらく実装済みが 7 件(ダークモード、認証の修正、読み込み状態)
- 古くなっている可能性があるものが 3 件(webpack、IE11、Node 14)
- 分割・統合の候補が 5 件(a11y クラスター、モバイルナビゲーション)」
-
🦅 DESCEND — 「検証のために詳しく調べています……
- #234 ダークモード:検証済み(theme.ts にあり、切り替えコンポーネントも存在)
- #267 ログイン後のリダイレクト:検証済み(認証フローで処理されています)
- #245「パフォーマンスの改善」:検証できません(曖昧すぎるため、オープンのままにします)」
-
🦅 CLEAN — 「検証済みの issue 10 件を、詳細なコメントを添えてクローズします。統合 issue を 2 件作成します。人によるレビューが必要な 5 件に印を付けます。」
-
🦅 REPORT — 「スイープ完了:issue 15 件を解決し、統合 issue を 2 件作成しました。バックログは 87 件から 72 件に減りました。平均経過日数は 95 日から 67 日に改善しました。」
判断の早見表
| 状況 | 対応 |
|---|---|
| issue が明らかに完了している | コードで検証し、根拠を添えてクローズする |
| issue が一部完了している | オープンのままにし、調査結果で説明を更新する |
| issue が古くなっている | 説明を添えて「対応予定なし」としてクローズする |
| 関連する issue が複数ある | 1 件に統合し、元の issue は参照先を記載してクローズする |
| issue が曖昧/不明確 | オープンのままにし、人によるレビューが必要であることを示す |
| issue に担当者がいる | スキップする(誰かが対応中です) |
| 最近の issue(30 日未満) | 明らかに実装済みでない限りスキップする |
他のスキルとの連携
スイープの前:
bloodhound-scout— 先にコードベースを理解する必要がある場合
スイープ中:
bee-collect— 新たに issue 化すべき作業が見つかった場合badger-triage— 残った issue の整理が必要な場合
スイープの後:
owl-archive— 発見したパターンを記録する場合gathering-planning— クリーンアップによって計画が必要だと分かった場合
自然界のクリーンアップ隊。忍耐強く、徹底的で、必要不可欠です。 🦅