[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6G2C2AT2SA8HKRJAPYAMMJE":3,"skill-same:01M6G2C2AT2SA8HKRJAPYAMMJE":58},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":29,"linkOnly":30,"markdownContent":31,"markdownBody":32,"frontMatter":33,"refName":35,"commitSha":36,"skillDirectory":37,"forksCount":38,"repositoryHtmlUrl":39,"repositoryHomepageUrl":6,"ownerHtmlUrl":40,"ownerBlogUrl":41,"ownerDescription":42,"updatedAt":43,"install":44,"resources":57},"01M6G2C2AT2SA8HKRJAPYAMMJE","search-first",null,"研究优先于编码的工作流程。在编写自定义代码之前，搜索现有的工具、库和模式。调用研究员代理。","oabdelmaksoud\u002FAgention","oabdelmaksoud","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F50699149?v=4","01M6D5CVVN778ZCDP1WHS816SP","Omar Abdelmaksoud","01M6D8A4TE76V3DCSH3D94VG1V",2,"MIT","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fdocs\u002Fzh-CN\u002Fskills\u002Fsearch-first\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究","SCENARIO","使用场景",[24,25,26,27,28],"search","first","search first","搜索","工具","2026-11-10 10:12:30",false,"---\nname: search-first\ndescription: 研究优先于编码的工作流程。在编写自定义代码之前，搜索现有的工具、库和模式。调用研究员代理。\norigin: ECC\n---\n\n# \u002Fsearch-first — 编码前先研究\n\n系统化“在实现之前先寻找现有解决方案”的工作流程。\n\n## 触发时机\n\n在以下情况使用此技能：\n\n* 开始一项很可能已有解决方案的新功能\n* 添加依赖项或集成\n* 用户要求“添加 X 功能”而你准备开始编写代码\n* 在创建新的实用程序、助手或抽象之前\n\n## 工作流程\n\n```\n┌─────────────────────────────────────────────┐\n│  1. NEED ANALYSIS                           │\n│     Define what functionality is needed      │\n│     Identify language\u002Fframework constraints  │\n├─────────────────────────────────────────────┤\n│  2. PARALLEL SEARCH (researcher agent)      │\n│     ┌──────────┐ ┌──────────┐ ┌──────────┐  │\n│     │  npm \u002F   │ │  MCP \u002F   │ │  GitHub \u002F │  │\n│     │  PyPI    │ │  Skills  │ │  Web      │  │\n│     └──────────┘ └──────────┘ └──────────┘  │\n├─────────────────────────────────────────────┤\n│  3. EVALUATE                                │\n│     Score candidates (functionality, maint, │\n│     community, docs, license, deps)         │\n├─────────────────────────────────────────────┤\n│  4. DECIDE                                  │\n│     ┌─────────┐  ┌──────────┐  ┌─────────┐  │\n│     │  Adopt  │  │  Extend  │  │  Build   │  │\n│     │ as-is   │  │  \u002FWrap   │  │  Custom  │  │\n│     └─────────┘  └──────────┘  └─────────┘  │\n├─────────────────────────────────────────────┤\n│  5. IMPLEMENT                               │\n│     Install package \u002F Configure MCP \u002F       │\n│     Write minimal custom code               │\n└─────────────────────────────────────────────┘\n```\n\n## 决策矩阵\n\n| 信号 | 行动 |\n|--------|--------|\n| 完全匹配，维护良好，MIT\u002FApache 许可证 | **采纳** — 直接安装并使用 |\n| 部分匹配，基础良好 | **扩展** — 安装 + 编写薄封装层 |\n| 多个弱匹配 | **组合** — 组合 2-3 个小包 |\n| 未找到合适的 | **构建** — 编写自定义代码，但需基于研究 |\n\n## 使用方法\n\n### 快速模式（内联）\n\n在编写实用程序或添加功能之前，在脑中过一遍：\n\n0. 这已经在仓库中存在吗？ → 首先通过相关模块\u002F测试检查 `rg`\n1. 这是一个常见问题吗？ → 搜索 npm\u002FPyPI\n2. 有对应的 MCP 吗？ → 检查 `~\u002F.claude\u002Fsettings.json` 并进行搜索\n3. 有对应的技能吗？ → 检查 `~\u002F.claude\u002Fskills\u002F`\n4. 有 GitHub 上的实现\u002F模板吗？ → 在编写全新代码之前，先运行 GitHub 代码搜索以查找维护中的开源项目\n\n### 完整模式（代理）\n\n对于非平凡的功能，启动研究员代理：\n\n```\nTask(subagent_type=\"general-purpose\", prompt=\"\n  Research existing tools for: [DESCRIPTION]\n  Language\u002Fframework: [LANG]\n  Constraints: [ANY]\n\n  Search: npm\u002FPyPI, MCP servers, Claude Code skills, GitHub\n  Return: Structured comparison with recommendation\n\")\n```\n\n## 按类别搜索快捷方式\n\n### 开发工具\n\n* Linting → `eslint`, `ruff`, `textlint`, `markdownlint`\n* Formatting → `prettier`, `black`, `gofmt`\n* Testing → `jest`, `pytest`, `go test`\n* Pre-commit → `husky`, `lint-staged`, `pre-commit`\n\n### AI\u002FLLM 集成\n\n* Claude SDK → 使用 Context7 获取最新文档\n* 提示词管理 → 检查 MCP 服务器\n* 文档处理 → `unstructured`, `pdfplumber`, `mammoth`\n\n### 数据与 API\n\n* HTTP 客户端 → `httpx` (Python), `ky`\u002F`got` (Node)\n* 验证 → `zod` (TS), `pydantic` (Python)\n* 数据库 → 首先检查是否有 MCP 服务器\n\n### 内容与发布\n\n* Markdown 处理 → `remark`, `unified`, `markdown-it`\n* 图片优化 → `sharp`, `imagemin`\n\n## 集成点\n\n### 与规划器代理\n\n规划器应在阶段 1（架构评审）之前调用研究员：\n\n* 研究员识别可用的工具\n* 规划器将它们纳入实施计划\n* 避免在计划中“重新发明轮子”\n\n### 与架构师代理\n\n架构师应向研究员咨询：\n\n* 技术栈决策\n* 集成模式发现\n* 现有参考架构\n\n### 与迭代检索技能\n\n结合进行渐进式发现：\n\n* 循环 1：广泛搜索 (npm, PyPI, MCP)\n* 循环 2：详细评估顶级候选方案\n* 循环 3：测试与项目约束的兼容性\n\n## 示例\n\n### 示例 1：“添加死链检查”\n\n```\nNeed: Check markdown files for broken links\nSearch: npm \"markdown dead link checker\"\nFound: textlint-rule-no-dead-link (score: 9\u002F10)\nAction: ADOPT — npm install textlint-rule-no-dead-link\nResult: Zero custom code, battle-tested solution\n```\n\n### 示例 2：“添加 HTTP 客户端包装器”\n\n```\nNeed: Resilient HTTP client with retries and timeout handling\nSearch: npm \"http client retry\", PyPI \"httpx retry\"\nFound: got (Node) with retry plugin, httpx (Python) with built-in retry\nAction: ADOPT — use got\u002Fhttpx directly with retry config\nResult: Zero custom code, production-proven libraries\n```\n\n### 示例 3：“添加配置文件 linter”\n\n```\nNeed: Validate project config files against a schema\nSearch: npm \"config linter schema\", \"json schema validator cli\"\nFound: ajv-cli (score: 8\u002F10)\nAction: ADOPT + EXTEND — install ajv-cli, write project-specific schema\nResult: 1 package + 1 schema file, no custom validation logic\n```\n\n## 反模式\n\n* **直接跳转到编码**：不检查是否存在就编写实用程序\n* **忽略 MCP**：不检查 MCP 服务器是否已提供该能力\n* **过度定制**：对库进行如此厚重的包装以至于失去了其优势\n* **依赖项膨胀**：为了一个小功能安装一个庞大的包\n","# \u002Fsearch-first — 编码前先研究\n\n系统化“在实现之前先寻找现有解决方案”的工作流程。\n\n## 触发时机\n\n在以下情况使用此技能：\n\n* 开始一项很可能已有解决方案的新功能\n* 添加依赖项或集成\n* 用户要求“添加 X 功能”而你准备开始编写代码\n* 在创建新的实用程序、助手或抽象之前\n\n## 工作流程\n\n```\n┌─────────────────────────────────────────────┐\n│  1. NEED ANALYSIS                           │\n│     Define what functionality is needed      │\n│     Identify language\u002Fframework constraints  │\n├─────────────────────────────────────────────┤\n│  2. PARALLEL SEARCH (researcher agent)      │\n│     ┌──────────┐ ┌──────────┐ ┌──────────┐  │\n│     │  npm \u002F   │ │  MCP \u002F   │ │  GitHub \u002F │  │\n│     │  PyPI    │ │  Skills  │ │  Web      │  │\n│     └──────────┘ └──────────┘ └──────────┘  │\n├─────────────────────────────────────────────┤\n│  3. EVALUATE                                │\n│     Score candidates (functionality, maint, │\n│     community, docs, license, deps)         │\n├─────────────────────────────────────────────┤\n│  4. DECIDE                                  │\n│     ┌─────────┐  ┌──────────┐  ┌─────────┐  │\n│     │  Adopt  │  │  Extend  │  │  Build   │  │\n│     │ as-is   │  │  \u002FWrap   │  │  Custom  │  │\n│     └─────────┘  └──────────┘  └─────────┘  │\n├─────────────────────────────────────────────┤\n│  5. IMPLEMENT                               │\n│     Install package \u002F Configure MCP \u002F       │\n│     Write minimal custom code               │\n└─────────────────────────────────────────────┘\n```\n\n## 决策矩阵\n\n| 信号 | 行动 |\n|--------|--------|\n| 完全匹配，维护良好，MIT\u002FApache 许可证 | **采纳** — 直接安装并使用 |\n| 部分匹配，基础良好 | **扩展** — 安装 + 编写薄封装层 |\n| 多个弱匹配 | **组合** — 组合 2-3 个小包 |\n| 未找到合适的 | **构建** — 编写自定义代码，但需基于研究 |\n\n## 使用方法\n\n### 快速模式（内联）\n\n在编写实用程序或添加功能之前，在脑中过一遍：\n\n0. 这已经在仓库中存在吗？ → 首先通过相关模块\u002F测试检查 `rg`\n1. 这是一个常见问题吗？ → 搜索 npm\u002FPyPI\n2. 有对应的 MCP 吗？ → 检查 `~\u002F.claude\u002Fsettings.json` 并进行搜索\n3. 有对应的技能吗？ → 检查 `~\u002F.claude\u002Fskills\u002F`\n4. 有 GitHub 上的实现\u002F模板吗？ → 在编写全新代码之前，先运行 GitHub 代码搜索以查找维护中的开源项目\n\n### 完整模式（代理）\n\n对于非平凡的功能，启动研究员代理：\n\n```\nTask(subagent_type=\"general-purpose\", prompt=\"\n  Research existing tools for: [DESCRIPTION]\n  Language\u002Fframework: [LANG]\n  Constraints: [ANY]\n\n  Search: npm\u002FPyPI, MCP servers, Claude Code skills, GitHub\n  Return: Structured comparison with recommendation\n\")\n```\n\n## 按类别搜索快捷方式\n\n### 开发工具\n\n* Linting → `eslint`, `ruff`, `textlint`, `markdownlint`\n* Formatting → `prettier`, `black`, `gofmt`\n* Testing → `jest`, `pytest`, `go test`\n* Pre-commit → `husky`, `lint-staged`, `pre-commit`\n\n### AI\u002FLLM 集成\n\n* Claude SDK → 使用 Context7 获取最新文档\n* 提示词管理 → 检查 MCP 服务器\n* 文档处理 → `unstructured`, `pdfplumber`, `mammoth`\n\n### 数据与 API\n\n* HTTP 客户端 → `httpx` (Python), `ky`\u002F`got` (Node)\n* 验证 → `zod` (TS), `pydantic` (Python)\n* 数据库 → 首先检查是否有 MCP 服务器\n\n### 内容与发布\n\n* Markdown 处理 → `remark`, `unified`, `markdown-it`\n* 图片优化 → `sharp`, `imagemin`\n\n## 集成点\n\n### 与规划器代理\n\n规划器应在阶段 1（架构评审）之前调用研究员：\n\n* 研究员识别可用的工具\n* 规划器将它们纳入实施计划\n* 避免在计划中“重新发明轮子”\n\n### 与架构师代理\n\n架构师应向研究员咨询：\n\n* 技术栈决策\n* 集成模式发现\n* 现有参考架构\n\n### 与迭代检索技能\n\n结合进行渐进式发现：\n\n* 循环 1：广泛搜索 (npm, PyPI, MCP)\n* 循环 2：详细评估顶级候选方案\n* 循环 3：测试与项目约束的兼容性\n\n## 示例\n\n### 示例 1：“添加死链检查”\n\n```\nNeed: Check markdown files for broken links\nSearch: npm \"markdown dead link checker\"\nFound: textlint-rule-no-dead-link (score: 9\u002F10)\nAction: ADOPT — npm install textlint-rule-no-dead-link\nResult: Zero custom code, battle-tested solution\n```\n\n### 示例 2：“添加 HTTP 客户端包装器”\n\n```\nNeed: Resilient HTTP client with retries and timeout handling\nSearch: npm \"http client retry\", PyPI \"httpx retry\"\nFound: got (Node) with retry plugin, httpx (Python) with built-in retry\nAction: ADOPT — use got\u002Fhttpx directly with retry config\nResult: Zero custom code, production-proven libraries\n```\n\n### 示例 3：“添加配置文件 linter”\n\n```\nNeed: Validate project config files against a schema\nSearch: npm \"config linter schema\", \"json schema validator cli\"\nFound: ajv-cli (score: 8\u002F10)\nAction: ADOPT + EXTEND — install ajv-cli, write project-specific schema\nResult: 1 package + 1 schema file, no custom validation logic\n```\n\n## 反模式\n\n* **直接跳转到编码**：不检查是否存在就编写实用程序\n* **忽略 MCP**：不检查 MCP 服务器是否已提供该能力\n* **过度定制**：对库进行如此厚重的包装以至于失去了其优势\n* **依赖项膨胀**：为了一个小功能安装一个庞大的包\n",{"name":5,"origin":34,"description":7},"ECC","main","a318f48de3c5718e8ea2e9f6fae7790e8a759e85","upstream-sync\u002Fwork\u002Fecc\u002Fdocs\u002Fzh-CN\u002Fskills\u002Fsearch-first",0,"https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fo-abdelmaksoud\u002F","Full-Stack Engineer | AI Systems Architect | Building autonomous multi-agent systems","2026-03-08 21:23:03",{"source":8,"skillName":5,"commands":45,"prompt":55,"zipAvailable":56},[46,49,52],{"tool":47,"command":48},"npx","npx skills add oabdelmaksoud\u002FAgention --skill search-first",{"tool":50,"command":51},"bunx","bunx skills add oabdelmaksoud\u002FAgention --skill search-first",{"tool":53,"command":54},"pnpm","pnpm dlx skills add oabdelmaksoud\u002FAgention --skill search-first","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fdocs\u002Fzh-CN\u002Fskills\u002Fsearch-first\u002FSKILL.md",true,[],[59,81,95,128,154,174],{"skillNo":60,"name":61,"nameZh":6,"description":62,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":63,"categories":64,"keywords":68,"publishedAt":29},"01M6G2QFCBNBYAJF2KTK85G9A6","visa-doc-translate","Translate visa application documents (images) to English and create a bilingual PDF with original and translation","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fvisa-doc-translate\u002FSKILL.md",[65],{"categoryNo":66,"categoryName":67,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理",[69,70,71,72,73,74,75,76,77,78,79,80],"translate","doc","visa doc translate","bilingual","with","english","application","PDF","translation","documents","create","images",{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":29},"01M6G2QB09TSK6BY4ME5X20EVQ","verification-loop","A comprehensive verification system for Claude Code sessions.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fverification-loop\u002FSKILL.md",[],[88,89,90,91,92,93,94],"verification","loop","verification loop","sessions","code","claude code sessions","system",{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":112,"publishedAt":29},"01M6G2Q6V2F7G03VAAF27FXPJR","tdd-workflow","Use this skill when writing new features, fixing bugs, or refactoring code. Enforces test-driven development with 80%+ coverage including unit, integration, and E2E tests.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Ftdd-workflow\u002FSKILL.md",[101,104,107],{"categoryNo":102,"categoryName":103,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":105,"categoryName":106,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":108,"categoryName":109,"taxonomyType":110,"taxonomyTypeDesc":111},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[113,114,115,116,117,118,119,120,121,92,122,123,124,125,73,126,127],"workflow","tdd","tdd workflow","use","unit","coverage","refactoring","e2e","integration","development","e2e tests","tests","driven","test","writing",{"skillNo":129,"name":130,"nameZh":6,"description":131,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":134,"publishedAt":29},"01M6G2Q359YJRWAR2PFCEQAXF3","swiftui-patterns","SwiftUI architecture patterns, state management with @Observable, view composition, navigation, performance optimization, and modern iOS\u002FmacOS UI best practices.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fswiftui-patterns\u002FSKILL.md",[],[135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,73],"patterns","swiftui","swiftui patterns","architecture","macos","performance","state management","best practices","state","ui","Optimization","ios","architecture patterns","Composition","performance optimization","view","management","swiftui architecture","navigation",{"skillNo":155,"name":156,"nameZh":6,"description":157,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":158,"categories":159,"keywords":161,"publishedAt":29},"01M6G2PY8B2FWZTWPZ84H83Y7C","swift-protocol-di-testing","Protocol-based dependency injection for testable Swift code — mock file system, network, and external APIs using focused protocols and Swift Testing.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fswift-protocol-di-testing\u002FSKILL.md",[160],{"categoryNo":102,"categoryName":103,"taxonomyType":21,"taxonomyTypeDesc":22},[162,163,164,165,92,166,167,168,169,94,170,171,172,173],"swift protocol di testing","protocol","swift","testing","protocols","file","network","injection","dependency","swift testing","dependency injection","mock",{"skillNo":175,"name":176,"nameZh":6,"description":177,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":178,"categories":179,"keywords":180,"publishedAt":29},"01M6G2PSCN2GXV9FFZDRRRWVB6","swift-concurrency-6-2","Swift 6.2 Approachable Concurrency — single-threaded by default, @concurrent for explicit background offloading, isolated conformances for main actor types.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fswift-concurrency-6-2\u002FSKILL.md",[],[181,182,183,164,184,35,185],"concurrency","swift concurrency","swift concurrency 6 2","default","types"]