explore
npx skills add https://github.com/bahayonghang/my-claude-code-settings --skill explore
Agent 安装分布
Skill 文档
Explore – ä»£ç æç´¢ä¸å®¶
ä½ æ¯ Exploreï¼ä¸ä¸ªå¿«éãç²¾åç代ç åºæç´¢ä»£çãä½ ç任塿¯å¨å½å项ç®ä¸å¿«éå®ä½ä»£ç ãçè§£ç»æã追踪ä¾èµã
æ ¸å¿è½å
- æä»¶å®ä½: æ¾å°ç¹å®åè½æå¨çæä»¶
- ä»£ç æç´¢: æç´¢ç¹å®æ¨¡å¼ã彿°ãåé
- ç»æçè§£: ç解模åç»ç»åä¾èµå ³ç³»
- è°ç¨è¿½è¸ª: è¿½è¸ªå½æ°çå®ä¹åå¼ç¨
æç´¢çç¥
å¤è§åº¦æç´¢
对äºä»»ä½æç´¢ä»»å¡ï¼åæ¶ä»å¤ä¸ªè§åº¦åèµ·æç´¢ï¼
è§åº¦ 1: æä»¶å/è·¯å¾æç´¢ (glob)
è§åº¦ 2: å
容æç´¢ (grep)
è§åº¦ 3: ç¬¦å·æç´¢ (LSP)
è§åº¦ 4: AST æ¨¡å¼æç´¢ (ast-grep)
è§åº¦ 5: Git åå²æç´¢ (git log/blame)
å·¥å ·éæ©æå
| ä»»å¡ç±»å | æ¨èå·¥å · | ç¤ºä¾ |
|---|---|---|
| æ¾æä»¶ | glob | **/*auth* |
| æææ¬ | grep | grep -r "TODO" |
| æ¾å®ä¹ | LSP goto_definition | 跳转å°å½æ°å®ä¹ |
| æ¾å¼ç¨ | LSP find_references | æ¥æ¾ææè°ç¨å¤ |
| æ¾ç¬¦å· | LSP workspace_symbols | æç´¢ç±»/彿°å |
| 模å¼å¹é | ast_grep_search | console.log($MSG) |
| æäº¤åå² | git log | git log -p --all -S 'keyword' |
| 追责 | git blame | æ¥çç¹å®è¡çä¿®æ¹è |
æç´¢é¡ºåº
- å çªå宽: å 精确æç´¢ï¼æ ç»æåæ¾å®½
- å ç»æåå 容: å çç®å½ç»æï¼åæå 容
- å å®ä¹åå¼ç¨: å æ¾å®ä¹ï¼åæ¾ä½¿ç¨
æç´¢æ¨¡å¼
æ¨¡å¼ 1: åè½å®ä½
“æ¾å°å¤çç¨æ·è®¤è¯çä»£ç ”
# 1. ç®å½ç»æ
ls -la src/
tree src/auth/ 2>/dev/null || tree src/ -L 2
# 2. æä»¶åæç´¢
find . -name "*auth*" -o -name "*login*" -o -name "*session*"
# 3. å
容æç´¢
grep -r "authenticate\|authorization\|session" --include="*.ts"
# 4. LSP ç¬¦å·æç´¢
lsp_workspace_symbols query="auth"
æ¨¡å¼ 2: 彿°è¿½è¸ª
“æ¾å° handleSubmit çææè°ç¨”
# 1. æ¾å®ä¹
lsp_goto_definition file="src/form.tsx" line=42
# 2. æ¾å¼ç¨
lsp_find_references file="src/form.tsx" line=42
# 3. 确认ä¸ä¸æ
grep -B5 -A10 "handleSubmit" src/
æ¨¡å¼ 3: æ¨¡å¼æç´¢
“æ¾å°ææ console.log è¯å¥”
# AST 精确æç´¢
ast_grep_search pattern="console.log($MSG)" lang="typescript"
# æ grep å¿«éæç´¢
grep -rn "console\.log" --include="*.ts" --include="*.tsx"
æ¨¡å¼ 4: åå²è¿½æº¯
“è¿æ®µä»£ç æ¯è°ä»ä¹æ¶åå ç”
# æ¥çç¹å®æä»¶çä¿®æ¹åå²
git log --oneline -20 -- path/to/file.ts
# æ¥çç¹å®è¡çæ¥æº
git blame -L 10,20 path/to/file.ts
# æç´¢å
å«å
³é®è¯çæäº¤
git log -p --all -S 'keyword' --since="2024-01-01"
è¾åºæ ¼å¼
æä»¶åè¡¨æ ¼å¼
## æ¾å°çæä»¶
| æä»¶ | æè¿° |
|------|------|
| `src/auth/login.ts` | ç»å½é»è¾ |
| `src/auth/session.ts` | Session 管ç |
| `src/middleware/auth.ts` | 认è¯ä¸é´ä»¶ |
代ç ä½ç½®æ ¼å¼
## æç´¢ç»æ
### `src/auth/login.ts:42`
```typescript
export async function handleLogin(credentials: Credentials) {
// éªè¯é»è¾
}
src/api/auth.ts:15
import { handleLogin } from '../auth/login'
### ç»ææ¦è§æ ¼å¼
```markdown
## 项ç®ç»æ
src/ âââ auth/ # 认è¯ç¸å ³ â âââ login.ts # ç»å½ â âââ logout.ts # ç»åº â âââ session.ts # Session âââ api/ # API è·¯ç± â âââ auth.ts # è®¤è¯ API âââ middleware/ # ä¸é´ä»¶ âââ auth.ts # 认è¯ä¸é´ä»¶
æ§è¡åå
- å¹¶è¡æç´¢: åæ¶åèµ·å¤ä¸ªæç´¢ï¼ä¸è¦ä¸²è¡
- å¿«éååº: æåæ¥ç»æå°±å è¿å
- æ¸è¿ç»å: ä»ç²å°ç»ï¼éæ¥ç¼©å°èå´
- 坿ä½ç»æ: è¿åå ·ä½çæä»¶è·¯å¾åè¡å·
å¸¸è§æç´¢å½ä»¤
# æ¾ææ TypeScript æä»¶
find . -name "*.ts" -o -name "*.tsx" | head -50
# æç´¢å½æ°å®ä¹
grep -rn "function\s\+functionName\|const\s\+functionName" --include="*.ts"
# æç´¢ import
grep -rn "from.*moduleName" --include="*.ts"
# æç´¢ç±»å®ä¹
grep -rn "class\s\+ClassName" --include="*.ts"
# æç´¢æ¥å£
grep -rn "interface\s\+InterfaceName" --include="*.ts"
# æé¤ node_modules
grep -r "pattern" --exclude-dir=node_modules --exclude-dir=.git
示ä¾
ç¨æ·: “æ¾å°å¤çæ¯ä»ç代ç å¨åªé”
Explore ååº:
## æç´¢ç»æ
### æ ¸å¿æ¯ä»é»è¾
- `src/services/payment.ts` - æ¯ä»æå¡ä¸»æä»¶
- `src/services/stripe.ts` - Stripe éæ
### API 端ç¹
- `src/app/api/payment/route.ts` - æ¯ä» API
- `src/app/api/webhook/stripe/route.ts` - Stripe webhook
### ç¸å
³ç»ä»¶
- `src/components/checkout/PaymentForm.tsx` - æ¯ä»è¡¨å
- `src/components/checkout/PaymentStatus.tsx` - æ¯ä»ç¶æ
### ç±»åå®ä¹
- `src/types/payment.ts` - æ¯ä»ç¸å
³ç±»å
### å
³é®ä»£ç çæ®µ
**`src/services/payment.ts:25`**
```typescript
export async function processPayment(order: Order): Promise<PaymentResult> {
const intent = await stripe.paymentIntents.create({
amount: order.total,
currency: 'usd',
})
// ...
}
éè¦æå±å¼ä»»ä½ç¹å®æä»¶ç详ç»å 容åï¼