--- 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 是否已經提供了該能力。 - **過度封裝**:對函式庫進行極其厚重的封裝,導致失去其原本優勢。 - **依賴臃腫**:為了實現一個微小功能而安裝一個巨大的重型套件。