$npx -y skills add virgo777/buddyme --skill search-firstResearch-before-coding workflow. Search for existing tools, libraries, and patterns before writing custom code. Invokes the researcher agent.
| 1 | # /search-first — 编码前先调研(Research Before You Code) |
| 2 | |
| 3 | 将“在实现前搜索现有解决方案”的工作流系统化。 |
| 4 | |
| 5 | ## 触发条件(Trigger) |
| 6 | |
| 7 | 在以下场景使用此技能(Skill): |
| 8 | - 开始开发一个很可能已有现成解决方案的新功能 |
| 9 | - 添加依赖项或集成 |
| 10 | - 用户要求“添加 X 功能”且你正准备编写代码 |
| 11 | - 在创建新的工具类(Utility)、辅助函数(Helper)或抽象层之前 |
| 12 | |
| 13 | ## 工作流(Workflow) |
| 14 | |
| 15 | ``` |
| 16 | ┌─────────────────────────────────────────────┐ |
| 17 | │ 1. 需求分析 (NEED ANALYSIS) │ |
| 18 | │ 定义所需功能 │ |
| 19 | │ 识别语言/框架约束 │ |
| 20 | ├─────────────────────────────────────────────┤ |
| 21 | │ 2. 并行搜索 (调研智能体 researcher agent) │ |
| 22 | │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ |
| 23 | │ │ npm / │ │ MCP / │ │ GitHub / │ │ |
| 24 | │ │ PyPI │ │ 技能 │ │ Web │ │ |
| 25 | │ └──────────┘ └──────────┘ └──────────┘ │ |
| 26 | ├─────────────────────────────────────────────┤ |
| 27 | │ 3. 评估 (EVALUATE) │ |
| 28 | │ 为候选方案打分(功能、维护、 │ |
| 29 | │ 社区、文档、许可证、依赖) │ |
| 30 | ├─────────────────────────────────────────────┤ |
| 31 | │ 4. 决策 (DECIDE) │ |
| 32 | │ ┌─────────┐ ┌──────────┐ ┌─────────┐ │ |
| 33 | │ │ 采用 │ │ 扩展 │ │ 自研 │ │ |
| 34 | │ │ (Adopt) │ │ (Extend)│ │ (Build) │ │ |
| 35 | │ └─────────┘ └──────────┘ └─────────┘ │ |
| 36 | ├─────────────────────────────────────────────┤ |
| 37 | │ 5. 实施 (IMPLEMENT) │ |
| 38 | │ 安装包 / 配置 MCP / │ |
| 39 | │ 编写最少量的自定义代码 │ |
| 40 | └─────────────────────────────────────────────┘ |
| 41 | ``` |
| 42 | |
| 43 | ## 决策矩阵(Decision Matrix) |
| 44 | |
| 45 | | 信号 | 行动 | |
| 46 | |--------|--------| |
| 47 | | 完全匹配、维护良好、MIT/Apache 协议 | **采用 (Adopt)** — 直接安装并使用 | |
| 48 | | 部分匹配、基础良好 | **扩展 (Extend)** — 安装 + 编写轻量封装层 | |
| 49 | | 多个弱匹配项 | **组合 (Compose)** — 结合 2-3 个小型包 | |
| 50 | | 未找到合适方案 | **自研 (Build)** — 编写自定义代码,但基于调研结论 | |
| 51 | |
| 52 | ## 如何使用 |
| 53 | |
| 54 | ### 快速模式(行内使用) |
| 55 | |
| 56 | 在编写工具类或添加功能前,大脑中先过一遍: |
| 57 | |
| 58 | 0. 仓库中是否已存在?→ 先通过 `rg` 搜索相关的模块/测试 |
| 59 | 1. 这是一个常见问题吗?→ 搜索 npm/PyPI |
| 60 | 2. 是否有相关的 MCP?→ 检查 `~/.claude/settings.json` 并搜索 |
| 61 | 3. 是否有相关的技能(Skill)?→ 检查 `~/.claude/skills/` |
| 62 | 4. 是否有 GitHub 实现/模板?→ 在编写全新代码前,针对维护良好的开源软件(OSS)运行 GitHub 代码搜索 |
| 63 | |
| 64 | ### 完整模式(智能体代理) |
| 65 | |
| 66 | 对于非平凡的功能,启动调研智能体(Researcher Agent): |
| 67 | |
| 68 | ``` |
| 69 | Task(subagent_type="general-purpose", prompt=" |
| 70 | 调研现有的工具,针对:[功能描述] |
| 71 | 语言/框架:[LANG] |
| 72 | 约束条件:[ANY] |
| 73 | |
| 74 | 搜索范围:npm/PyPI, MCP 服务器, Claude Code 技能, GitHub |
| 75 | 返回结果:带建议的结构化对比报告 |
| 76 | ") |
| 77 | ``` |
| 78 | |
| 79 | ## 按类别搜索快捷方式 |
| 80 | |
| 81 | ### 开发工具(Development Tooling) |
| 82 | - 代码检查(Linting)→ `eslint`, `ruff`, `textlint`, `markdownlint` |
| 83 | - 格式化(Formatting)→ `prettier`, `black`, `gofmt` |
| 84 | - 测试(Testing)→ `jest`, `pytest`, `go test` |
| 85 | - Pre-commit → `husky`, `lint-staged`, `pre-commit` |
| 86 | |
| 87 | ### AI/LLM 集成 |
| 88 | - Claude SDK → 参考 Context7 获取最新文档 |
| 89 | - 提示词管理(Prompt management)→ 检查 MCP 服务器 |
| 90 | - 文档处理 → `unstructured`, `pdfplumber`, `mammoth` |
| 91 | |
| 92 | ### 数据与 API |
| 93 | - HTTP 客户端 → `httpx` (Python), `ky`/`got` (Node) |
| 94 | - 验证(Validation)→ `zod` (TS), `pydantic` (Python) |
| 95 | - 数据库 → 优先检查 MCP 服务器 |
| 96 | |
| 97 | ### 内容与发布 |
| 98 | - Markdown 处理 → `remark`, `unified`, `markdown-it` |
| 99 | - 图像优化 → `sharp`, `imagemin` |
| 100 | |
| 101 | ## 集成点(Integration Points) |
| 102 | |
| 103 | ### 与规划智能体(Planner Agent)集成 |
| 104 | 规划器应在第一阶段(架构审查 Architecture Review)之前调用调研员: |
| 105 | - 调研员识别可用工具 |
| 106 | - 规划器将它们纳入实施计划 |
| 107 | - 避免在计划中“重复造轮子” |
| 108 | |
| 109 | ### 与架构智能体(Architect Agent)集成 |
| 110 | 架构师应就以下内容咨询调研员: |
| 111 | - 技术栈决策 |
| 112 | - 集成模式发现 |
| 113 | - 现有参考架构 |
| 114 | |
| 115 | ### 与迭代检索技能(Iterative-retrieval Skill)集成 |
| 116 | 结合使用进行渐进式发现: |
| 117 | - 第 1 轮:广泛搜索 (npm, PyPI, MCP) |
| 118 | - 第 2 轮:详细评估首选候选方案 |
| 119 | - 第 3 轮:测试与项目约束的兼容性 |
| 120 | |
| 121 | ## 示例 |
| 122 | |
| 123 | ### 示例 1:“添加死链检查” |
| 124 | ``` |
| 125 | 需求:检查 markdown 文件中的损坏链接 |
| 126 | 搜索:npm "markdown dead link checker" |
| 127 | 发现:textlint-rule-no-dead-link (得分: 9/10) |
| 128 | 行动:采用 (ADOPT) — npm install textlint-rule-no-dead-link |
| 129 | 结果:零自定义代码,经受过实战检验的解决方案 |
| 130 | ``` |
| 131 | |
| 132 | ### 示例 2:“添加 HTTP 客户端封装层” |
| 133 | ``` |
| 134 | 需求:具备重试和超时处理能力的弹性 HTTP 客户端 |
| 135 | 搜索:npm "http client retry", PyPI "httpx retry" |
| 136 | 发现:带重试插件的 got (Node), 内置重试的 httpx (Python) |
| 137 | 行动:采用 (ADOPT) — 直接使用带重试配置的 got/httpx |
| 138 | 结果:零自定义代码,生产环境验证过的库 |
| 139 | ``` |
| 140 | |
| 141 | ### 示例 3:“添加配置文件 Linter” |
| 142 | ``` |
| 143 | 需求:根据 Schema 验证项目配置文件 |
| 144 | 搜索:npm "config linter schema", "json schema validator cli" |
| 145 | 发现:ajv-cli (得分: 8/10) |
| 146 | 行动:采用 + 扩展 (ADOPT + EXTEND) — 安装 ajv-cli,编写项目特定的 schema |
| 147 | 结果:1 个包 + 1 个 schema 文件,无需自定义验证逻辑 |
| 148 | ``` |
| 149 | |
| 150 | ## 反模式(Anti-Patterns) |
| 151 | |
| 152 | - **直接编码**:不检查是否存在现成工具就编写工具类 |
| 153 | - **忽视 MCP**:不检查 MCP 服务器是否已经提供了该功能 |
| 154 | - **过度自定义**:对库进行过重封装,导致其丧失原有优势 |
| 155 | - **依赖膨胀**:为了一个很小的功能安装庞大的包 |