claude-code/claude-zh/skills/search-first/SKILL.md

139 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
name: search-first
description: 「先研究後編碼」工作流。在撰寫自定義程式碼前,優先搜尋現有的工具、函式庫與模式。會調用研究員 (Researcher) Agent。
---
# /search-first — 先研究,再動手
系統化地落實「在開始實作前,優先搜尋現有解決方案」的工作流。
## 觸發時機
在以下情境時使用此技能:
- 開始一項新的功能開發,且該功能極大機率已有現成方案。
- 準備添加新的依賴項或整合。
- 使用者要求「增加 X 功能」,而你正準備開始撰寫程式碼時。
- 在建立新的工具函式 (Utility)、輔助程式 (Helper) 或抽象層之前。
## 工作流程
```
┌─────────────────────────────────────────────┐
│ 1. 需求分析 (Need Analysis) │
│ 定義所需的功能細節 │
│ 識別語言或框架的限制條件 │
├─────────────────────────────────────────────┤
│ 2. 並行搜尋 (Parallel Search) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ npm / │ │ MCP / │ │ GitHub / │ │
│ │ PyPI │ │ Skills │ │ Web │ │
│ └──────────┘ └──────────┘ └──────────┘ │
├─────────────────────────────────────────────┤
│ 3. 方案評估 (Evaluate) │
│ 針對候選方案評分(功能、維護狀況、社群、 │
│ 文件、授權證明、依賴量) │
├─────────────────────────────────────────────┤
│ 4. 做成決策 (Decide) │
│ ┌─────────┐ ┌──────────┐ ┌─────────┐ │
│ │ 直接採用 │ │ 擴展/封裝 │ │ 自行建構 │ │
│ │ (Adopt) │ │ (Wrap) │ │ (Build) │ │
│ └─────────┘ └──────────┘ └─────────┘ │
├─────────────────────────────────────────────┤
│ 5. 執行路徑 (Implement) │
│ 安裝套件 / 配置 MCP / 撰寫最小自研程式碼 │
└─────────────────────────────────────────────┘
```
## 決策矩陣
| 訊號特徵 | 採取行動 |
|--------|--------|
| 完全符合需求、維護良好、具備 MIT/Apache 等友善授權 | **直接採用 (Adopt)** — 安裝並直接使用 |
| 部分符合需求、基礎紮實 | **擴展 (Extend)** — 安裝後撰寫一層薄薄的封裝 (Wrapper) |
| 有多個小型的弱符合項 | **組合 (Compose)** — 結合 2 至 3 個小型套件 |
| 找不到任何適合的方案 | **自行建構 (Build)** — 根據研究心得撰寫自定義程式碼 |
## 如何使用
### 快速模式 (思維核對)
在撰寫工具函式或增加功能前,先在腦中跑過一遍:
1. 這是一般性的常見問題嗎? → 搜尋 npm / PyPI。
2. 是否已有對應的 MCP → 檢查 `~/.claude/settings.json` 並搜尋。
3. 是否已有相關技能 (Skill) → 檢查 `~/.claude/skills/`
4. GitHub 上是否有模板? → 在 GitHub 搜尋。
### 完整模式 (Agent 執行)
針對非瑣碎的功能需求,啟動研究員 (Researcher) Agent
```
Task(subagent_type="general-purpose", prompt="
研究現有工具以實現:[功能描述]
程式語言/框架:[語言]
限制條件:[任何特殊限制]
搜尋目標npm/PyPI, MCP servers, Claude Code skills, GitHub
結果要求:結構化對比表並給出具體建議
")
```
## 各類別搜尋快捷參考
### 開發工具類
- 代碼檢查 (Linting) → `eslint`, `ruff`, `textlint`, `markdownlint`
- 代碼格式化 (Formatting) → `prettier`, `black`, `gofmt`
- 測試工具 → `jest`, `pytest`, `go test`
- Pre-commit → `husky`, `lint-staged`, `pre-commit`
### AI/LLM 整合類
- Claude SDK → 參考 Context7 獲取最新文件
- 提示詞管理 → 優先檢查 MCP servers
- 文件處理 → `unstructured`, `pdfplumber`, `mammoth`
### 數據與 API 類
- HTTP 客戶端 → `httpx` (Python), `ky` / `got` (Node)
- 資料驗證 → `zod` (TS), `pydantic` (Python)
- 資料庫操作 → 優先檢查是否有可用的 MCP server
## 整合要點
### 與規劃者 (Planner) 整合
規劃者應在「階段 1架構審查」之前調用研究員
- 研究員識别可用工具。
- 規劃者將工具納入實作計劃。
- 避免在計畫中「重新發明輪子」。
### 與反覆擷取技能 (Iterative-retrieval) 整合
結合以進行漸進式探索:
- 循環 1廣泛搜尋 (npm, PyPI, MCP)。
- 循環 2詳細評估前幾名候選對象。
- 循環 3測試與專案限制的相容性。
## 實際案例
### 案例 1「增加無效連結檢查」
```
需求:檢查 Markdown 檔案中的損壞連結
搜尋npm "markdown dead link checker"
結果textlint-rule-no-dead-link (評分: 9/10)
行動:採用 — npm install textlint-rule-no-dead-link
成效:零自研程式碼,獲得經實戰驗證的方案
```
### 案例 2「封裝 HTTP 客戶端」
```
需求:具備重試與超時處理能力的強韌 HTTP 客戶端
搜尋npm "http client retry", PyPI "httpx retry"
結果got (Node) 內建插件, httpx (Python) 內建重試
行動:採用 — 直接設定 got/httpx 的重試配置
成效:零自研程式碼,使用被生產環境證明過的庫
```
## 應避免的反模式
- **直接開工**:在未確認是否有現成方案前,直接開始撰寫工具。
- **無視 MCP**:沒檢查 MCP server 是否已經提供了該能力。
- **過度封裝**:對函式庫進行極其厚重的封裝,導致失去其原本優勢。
- **依賴臃腫**:為了實現一個微小功能而安裝一個巨大的重型套件。