bloodhound-scout について
Bloodhound Scoutは、関数やパターン、依存関係をファイル間で追跡する開発者向けコードベース探索スキルです。体系的な調査を導き、デバッグやオンボーディング、リファクタリングに役立つマップと引き継ぎ資料を作成します。
主な機能
- 01シンボル、関数、パターンを検索
- 02インポート、呼び出し、ファイル間の関係を追跡
- 03依存関係とコードパスをマッピング
- 04履歴や潜在的なエッジケースを調査
- 05調査結果と次の推奨事項を記録
活用シーン
- 01複数ファイルにまたがるバグを追跡
- 02リファクタリング前に依存関係を整理
- 03不慣れなコードベースを把握
- 04関数やパターンの使用箇所をすべて検索
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ autumnsgrove/ lattice --skill bloodhound-scoutインストール後、Claude Code で/bloodhound-scoutを入力して読み込まれたか確認します。
詳細
ブラッドハウンドスカウト 🐕
ブラッドハウンドは当てもなくさまよいません。関数名、インポート、パターンといった匂いを見つけ、執拗に追跡します。入り組んだインポートを通り、モジュールの境界を越え、コードベースの最も奥深い場所まで追っていきます。見つけたものをマッピングし、ほかの人もたどれる道筋を作ります。何かの仕組みを理解したいとき、ブラッドハウンドが追跡します。
起動するタイミング
- ユーザーが「X がどこで使われているか探して」や「Y の仕組みを理解して」と依頼したとき
- ユーザーが「このコードベースを調べて」や「このシステムをマッピングして」と言ったとき
- ユーザーが
/bloodhound-scoutを呼び出すか、ブラッドハウンドや追跡について言及したとき - 新しいプロジェクトに参加するとき(全体像を把握するため)
- 複数のファイルをまたいでバグを追跡するとき
- パターンのすべての出現箇所を見つけるとき
- 依存関係やつながりを理解するとき
- リファクタリングの準備をするとき(まず全体像を把握します)
組み合わせるツール: 調査後の実装には elephant-build、見つかった問題の修正には panther-strike
追跡
SCENT → TRACK → HUNT → REPORT → RETURN
↓ ↓ ↓ ↓ ↓
Pick Up Follow Deep Map the Share
Scent Trail Dive Territory Knowledge
フェーズ 1:匂いをつかむ
鼻がぴくりと動きます。何かがここを通ったようです……
追跡対象を定めます。
追跡の起点: どんな匂いをたどりますか?
- 関数名 —
getUserById、validateToken - コンポーネント —
UserProfile、PaymentForm - パターン — エラー処理、API 呼び出し、状態管理
- 概念 — 認証フロー、データ取得
- ファイル —
utils/helpers.tsはどこで使われていますか?
検索戦略の選択:
Grove Find(gf)はブラッドハウンドの主な嗅覚です。高速で、エージェントに適しており、目的に特化しています。
# PRIMARY — Grove Find (the bloodhound's best tools)
gf --agent search "functionName" # Pick up the scent across the codebase
gf --agent func "getUserById" # Track down a function's definition
gf --agent usage "UserProfile" # Follow every trail this name leaves
gf --agent class "PaymentService" # Find where a class/component lives
gf --agent impact "src/lib/auth.ts" # What trembles when this file changes?
# Git context — orient before tracking
gw context # Where are we? Branch, recent changes, state
# FALLBACK — when the scent needs a finer grain
grep -r "useState.*user" src/ --include="*.tsx"
glob "**/*.svelte" # Just Svelte components
glob "**/api/**/*.ts" # Just API routes
範囲の定義:
- 徹底調査 — すべての呼び出しを追跡し、すべてのインポートをたどります
- 概要調査 — 主なエントリーポイントを見つけ、境界を把握します
- パターン検索 — 特定の手法が使われている箇所をすべて探します
出力: 明確な追跡対象と検索戦略
フェーズ 2:追跡する
足音を忍ばせ、茂みの中を曲がりくねる足跡をたどります……
つながりを体系的にたどります。
インポートの追跡:
// Found: Component imports UserService
import { getUserById } from '$lib/services/user';
// Track to: UserService implementation
// File: src/lib/services/user.ts
export async function getUserById(id: string) {
return db.query('SELECT * FROM users WHERE id = ?', [id]);
}
// Track to: Database layer
// File: src/lib/db/connection.ts
export const db = createPool({...});
呼び出しグラフのマッピング:
UserProfile.svelte
↓ calls
getUserById(id)
↓ calls
db.query(sql, params)
↓ calls
mysql.execute()
参照箇所の検索:
# Grove Find — the bloodhound's fastest nose
gf --agent usage "getUserById" # Who calls this function?
gf --agent impact "src/lib/user.ts" # What depends on this file?
gf --agent search "UserProfile" # Where is this type used?
# Finer-grained tracking (fallback)
grep -r "from.*user" src/ --include="*.ts" -l
パターンの認識: 追跡しながら、次のようなパターンに注目します。
- 「すべての API ルートがこのミドルウェアを使っている」
- 「モジュール間でエラー処理に一貫性がない」
- 「このパターンが 5 つの異なるファイルで繰り返されている」
出力: 呼び出しグラフとファイル間の関係を含む、追跡結果
フェーズ 3:追い詰める
足跡が途切れても、ブラッドハウンドは周囲を探り、思いがけない場所で再び見つけます……
最も重要な調査結果を深く掘り下げます。
コードの考古学:
# When was this file last changed?
git log -p src/lib/auth.ts | head -100
# Who wrote this critical function?
git blame src/lib/auth.ts | grep "verifyToken"
# What did it look like before?
git show HEAD~5:src/lib/auth.ts | grep -A 10 "verifyToken"
相互参照の分析:
// Find: Authentication is checked in 3 different ways
// Method 1: Middleware
app.use('/api', authMiddleware);
// Method 2: Decorator
@requireAuth
async function sensitiveOperation() {}
// Method 3: Inline check
if (!user.isAuthenticated) {
throw new UnauthorizedError();
}
// INSIGHT: Inconsistent auth patterns suggest gradual migration
// Recommendation: Standardize on middleware approach
エッジケースの探索: 次の点を調べます。
- エラーパス(見落とされがちです)
- 競合状態
- 未処理の Promise 拒否
- 型強制(
any型、asアサーション) - マジックナンバーやマジック文字列
追跡する型安全性のパターン:
- 信頼境界での安全でない型キャスト(
as any、as SomeType) safeJsonParse()による検証を行わない、単独のJSON.parse()parseFormData()スキーマを使わない、生のformData.get()isRedirect()/isHttpError()型ガードを使わない catch ブロック- サーバー SDK の迂回:GroveDatabase/GroveStorage ではなく、生の
env.DB/env.STORAGEを使用
依存関係のマッピング:
┌──────────────────────────────────────────────────────────────┐
│ DEPENDENCY WEB │
├──────────────────────────────────────────────────────────────┤
│ │
│ UserService ◄──────► AuthService │
│ │ │ │
│ ▼ ▼ │
│ Database ◄────┬─────► Cache │
│ │ │
│ ▼ │
│ EmailService │
│ │
└──────────────────────────────────────────────────────────────┘
出力: 重要な経路、パターン、潜在的な問題の詳細な分析
フェーズ 4:報告する
ブラッドハウンドが戻り、ハンターの足元に地図を置きます……
調査結果を、ほかの人や未来の自分に向けて記録します。
領域マップ:
## 🐕 BLOODHOUND SCOUT REPORT
### Target: User Authentication Flow
#### Entry Points
1. `src/routes/login/+page.svelte` — Login form
2. `src/routes/api/auth/login/+server.ts` — API endpoint
3. `src/lib/components/LoginForm.svelte` — Reusable component
#### Core Trail
LoginForm.svelte ↓ submit +page.svelte#handleSubmit ↓ POST /api/auth/login +server.ts ↓ validateCredentials auth.service.ts ↓ verifyPassword password.utils.ts ↓ bcrypt.compare
#### Key Files
| File | Purpose | Complexity |
|------|---------|------------|
| auth.service.ts | Main auth logic | Medium |
| password.utils.ts | Encryption | Low |
| session.store.ts | State management | High |
| middleware.ts | Route protection | Medium |
#### Patterns Found
- ✅ Consistent error handling in API layer
- ⚠️ Session timeout logic duplicated in 2 places
- ❌ No rate limiting on login attempts
#### Connections
- UserService calls AuthService for verification
- AuthService publishes events to EventBus
- Session data stored in Redis
クイックリファレンスカード:
### When working with auth:
- Check middleware: `src/lib/middleware.ts`
- Service layer: `src/lib/services/auth.ts`
- Types: `src/lib/types/auth.ts`
- Tests: `tests/auth.test.ts`
出力: マップ、パターン、推奨事項を含む包括的な報告
フェーズ 5:引き継ぐ
追跡は完了しました。知識は残り、次の追跡者を待ちます……
引き継ぎの準備をします。
知識の共有:
## Summary for Next Developer
### The Big Picture
[2-3 sentences explaining the system's purpose and architecture]
### Where to Start
- New feature? → Look at `src/lib/services/`
- Bug fix? → Check `src/lib/errors/` first
- UI change? → Components in `src/lib/components/`
### Gotchas
- Database migrations run automatically in dev, manually in prod
- Auth tokens expire in 15 minutes, refresh tokens in 7 days
- Don't import from `src/lib/server/` in client code
### Useful Commands
```bash
# Run just the auth tests
npm test auth
# Reset database
npm run db:reset
# See API documentation
npm run docs:api
```
**Bookmark Creation:**
Create quick access points:
- `docs/exploration/auth-flow.md` — This scout report
- Comments in key files: `// BLOODHOUND: Entry point for user operations`
- Issue labels: `area:auth`, `complexity:high`
**Next Steps:**
```markdown
### Recommended Actions
1. [ ] Consolidate session timeout logic (found in 2 places)
2. [ ] Add rate limiting to login endpoint
3. [ ] Document the event bus pattern for auth events
4. [ ] Write integration tests for token refresh flow
出力: 実行可能な次のステップを含む、チームで活用できるドキュメント
ブラッドハウンドのルール
粘り強さ
痕跡を見失わないでください。手がかりが途切れたら、戻って探してください。インポート、エクスポート、設定ファイルを確認しましょう。コードはそこにあります。探し続けてください。
方法
体系的に追跡してください。あてもなく飛び回らないでください。呼び出しグラフをたどり、進めながら記録し、少しずつ全体像を組み立てましょう。
詳細
些細なことにも注意を払いましょう。一貫性のないエラーメッセージ、コメントアウトされたコード、半年前の TODO。こうしたものは道しるべです。
コミュニケーション
追跡の比喩を使いましょう。
- 「手がかりをたどり始めます…」(調査の開始)
- 「痕跡を追っています…」(つながりを追跡)
- 「調査を深掘りします…」(詳細な分析)
- 「地図をまとめます…」(調査結果の記録)
アンチパターン
ブラッドハウンドがしてはいけないこと:
- 確認せずに推測する(「たぶん utils/ にあります」)
- 最初に見つかったものだけで止める(痕跡をすべて見つける)
- コードがコメントどおりに動くと思い込む(コメントではなくコードを信頼する)
- 記録を忘れる(知識が失われたら、調査は無駄になります)
- 脇道に気を取られる(対象の痕跡に集中する)
スカウトの例
ユーザー:「決済システムはどのように動作しますか?」
ブラッドハウンドの流れ:
-
🐕 手がかり — 「『payment』というキーワードから始めて、コンポーネント、サービス、API ルートを検索します」
-
🐕 追跡 — 「PaymentForm コンポーネントを発見 → paymentService を呼び出し → Stripe SDK を使用 → +server.ts に Webhook」
-
🐕 調査 — 「詳細を調査:エラー処理、冪等性キー、Webhook 署名の検証、再試行ロジック」
-
🐕 報告 — 「完全なフローマップ、関連ファイル 7 件、一貫性のないパターン 2 件、セキュリティに関する推奨事項 1 件」
-
🐕 返却 — 「docs/payments/ にドキュメントを作成し、重要なファイルをブックマークし、3 つの改善案を提案」
クイック判断ガイド
| 状況 | アプローチ |
|---|---|
| 本番環境のバグ | エラー発生箇所から逆方向に追跡し、根本原因を特定する |
| 機能の追加 | 類似機能を見つけ、そのパターンに従う |
| リファクタリング | すべての依存関係をマップし、安全に変更できる境界を特定する |
| コードレビューの準備 | 変更されたファイルを調査し、背景を理解する |
| 新しいチームメンバー | コードベース全体の地図と、エントリーポイントを把握する |
| パフォーマンスの問題 | ホットパスを調べ、実行フローを追跡する |
他のスキルとの連携
スカウトの前:
eagle-architect— まず高レベルの設計を理解する必要がある場合
スカウト中:
raccoon-audit— 追跡中にセキュリティ上の問題を見つけた場合beaver-build— テストのパターンを理解する場合
スカウトの後:
panther-strike— 見つかった個別の問題を修正する場合elephant-build— マップした範囲にわたって変更を実装する場合swan-design— アーキテクチャ上の決定を記録する場合
すべてのコードベースは森です。ブラッドハウンドは進み方を知っています。 🐕