mcpField
B
bloodhound-scout

bloodhound-scout

github.com/autumnsgrove開発668 回インストール2 週間前に更新
リポジトリ

bloodhound-scout について

Bloodhound Scoutは、関数やパターン、依存関係をファイル間で追跡する開発者向けコードベース探索スキルです。体系的な調査を導き、デバッグやオンボーディング、リファクタリングに役立つマップと引き継ぎ資料を作成します。

主な機能

  1. 01シンボル、関数、パターンを検索
  2. 02インポート、呼び出し、ファイル間の関係を追跡
  3. 03依存関係とコードパスをマッピング
  4. 04履歴や潜在的なエッジケースを調査
  5. 05調査結果と次の推奨事項を記録

活用シーン

  1. 01複数ファイルにまたがるバグを追跡
  2. 02リファクタリング前に依存関係を整理
  3. 03不慣れなコードベースを把握
  4. 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/ にあります」)
  • 最初に見つかったものだけで止める(痕跡をすべて見つける)
  • コードがコメントどおりに動くと思い込む(コメントではなくコードを信頼する)
  • 記録を忘れる(知識が失われたら、調査は無駄になります)
  • 脇道に気を取られる(対象の痕跡に集中する)

スカウトの例

ユーザー:「決済システムはどのように動作しますか?」

ブラッドハウンドの流れ:

  1. 🐕 手がかり — 「『payment』というキーワードから始めて、コンポーネント、サービス、API ルートを検索します」

  2. 🐕 追跡 — 「PaymentForm コンポーネントを発見 → paymentService を呼び出し → Stripe SDK を使用 → +server.ts に Webhook」

  3. 🐕 調査 — 「詳細を調査:エラー処理、冪等性キー、Webhook 署名の検証、再試行ロジック」

  4. 🐕 報告 — 「完全なフローマップ、関連ファイル 7 件、一貫性のないパターン 2 件、セキュリティに関する推奨事項 1 件」

  5. 🐕 返却 — 「docs/payments/ にドキュメントを作成し、重要なファイルをブックマークし、3 つの改善案を提案」


クイック判断ガイド

状況アプローチ
本番環境のバグエラー発生箇所から逆方向に追跡し、根本原因を特定する
機能の追加類似機能を見つけ、そのパターンに従う
リファクタリングすべての依存関係をマップし、安全に変更できる境界を特定する
コードレビューの準備変更されたファイルを調査し、背景を理解する
新しいチームメンバーコードベース全体の地図と、エントリーポイントを把握する
パフォーマンスの問題ホットパスを調べ、実行フローを追跡する

他のスキルとの連携

スカウトの前:

  • eagle-architect — まず高レベルの設計を理解する必要がある場合

スカウト中:

  • raccoon-audit — 追跡中にセキュリティ上の問題を見つけた場合
  • beaver-build — テストのパターンを理解する場合

スカウトの後:

  • panther-strike — 見つかった個別の問題を修正する場合
  • elephant-build — マップした範囲にわたって変更を実装する場合
  • swan-design — アーキテクチャ上の決定を記録する場合

すべてのコードベースは森です。ブラッドハウンドは進み方を知っています。 🐕

コメント