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跨多个文件追踪 Bug
  2. 02重构前梳理依赖
  3. 03熟悉不熟悉的代码库
  4. 04查找函数或模式的所有用法

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/autumnsgrove/lattice --skill bloodhound-scout

安装后在 Claude Code 中输入/bloodhound-scout确认已加载。

详细介绍

Bloodhound Scout 🐕

猎犬不会漫无目的地游荡。它会找到气味——一个函数名、一条导入语句、一种模式——然后坚定不移地追踪下去。穿过错综复杂的导入关系,跨越模块边界,深入代码库最隐秘的角落。猎犬会绘制发现的路径,让其他人也能循迹而行。当你需要了解某项功能的工作原理时,猎犬会追踪到底。

何时启用

  • 用户询问“查找 X 在哪里使用”或“了解 Y 的工作原理”
  • 用户说“探索这个代码库”或“绘制这个系统的地图”
  • 用户调用 /bloodhound-scout 或提到 bloodhound/追踪
  • 加入新项目(熟悉环境)
  • 追踪跨多个文件的 Bug
  • 查找某种模式的所有实例
  • 了解依赖关系和关联
  • 准备重构(先熟悉环境)

搭配使用: 探索后使用 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)是猎犬的主要嗅觉工具——速度快、适合 Agent,且专为此设计:

# 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:使用原始 env.DB/env.STORAGE,而非 GroveDatabase/GroveStorage

依赖映射:

┌──────────────────────────────────────────────────────────────┐
│                    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 项改进”


快速决策指南

情况方法
生产环境中的 Bug从错误位置反向追踪到根本原因
添加功能寻找类似功能,遵循其模式
重构绘制所有依赖关系,确定安全的变更边界
准备代码审查侦察变更文件,了解上下文
新团队成员绘制整个代码库的区域地图和入口点
性能问题追查热点路径,追踪执行流程

与其他技能集成

侦察前:

  • eagle-architect — 如果需要先了解高层设计

侦察期间:

  • raccoon-audit — 如果追踪时发现安全问题
  • beaver-build — 了解测试模式

侦察后:

  • panther-strike — 修复发现的具体问题
  • elephant-build — 在绘制好的区域中实施变更
  • swan-design — 记录架构决策

每个代码库都是一片森林。猎犬知道如何在其中穿行。 🐕

评论

支持 Markdown