search-first — Claude skill: find existing tools before coding
A skill that makes the agent search npm, PyPI, MCP servers and GitHub for existing tools before it writes custom code.
npx skills add affaan-m/ECC --skill search-first -a claude-codeWhat search-first does
search-first lays out a research-before-coding order: define the need, then run parallel searches across npm and PyPI, MCP server catalogs, skills and GitHub. Candidates get scored on functionality, maintenance, community, docs, license and dependencies. Then comes the call: adopt as-is, extend with a thin wrapper, compose two or three small packages, or build custom.
For non-trivial work it launches a researcher subagent and asks for a structured comparison with a recommendation. There is also a quick inline mode: grep the repo with rg, check npm or PyPI, look in ~/.claude/settings.json and ~/.claude/skills/. A preflight step runs first, so if gh isn't authenticated or the registry is unreachable, the skill reports the skipped channel instead of quietly returning nothing.
Worth installing if you keep catching yourself writing another helper. Less useful in projects with tight dependency limits, where the search usually ends with the same answer: build it yourself.
What it helps with
- find an existing package instead of writing a helper
- check whether an MCP server already covers the task
- compare candidates by maintenance and license
- pick a library that fits project constraints
- decide between adopting a package and wrapping it
Example prompts for the agent
- Add dead link checking to markdown files — search for an existing tool first
- I need an HTTP client with retries, check npm and PyPI before writing one
- Launch the researcher and compare options for config validation
How to install search-first
1Skills CLI (Vercel)
npx skills add affaan-m/ECC --skill search-first -a claude-code2Manually: put the files in place
~/.claude/skills/search-first/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/search-first/
1Skills CLI (Vercel)
npx skills add affaan-m/ECC --skill search-first -a codex2Manually: put the files in place
.agents/skills/search-first/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add affaan-m/ECC --skill search-first -a cursor2Manually: put the files in place
.cursor/skills/search-first/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install affaan-m/ECC search-first2Manually: put the files in place
.github/skills/search-first/SKILL.md1Skills CLI (Vercel)
npx skills add affaan-m/ECC --skill search-first -a gemini-cli2Platform CLI
gemini skills install https://github.com/affaan-m/ECC --path skills/search-firstManually: put the files in place
.devin/skills/search-first/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add affaan-m/ECC --skill search-first -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
From the same set146
The whole set →Similar
Questions about search-first
How to install search-first in Claude?
Run npx skills add affaan-m/ECC --skill search-first -a claude-code. The skill file lands at ~/.claude/skills/search-first/SKILL.md.
What does search-first do?
It searches npm, PyPI, MCP servers, skills and GitHub before any code is written, evaluates what it finds, and recommends adopting, extending or building.
What does the skill need to work?
Nothing mandatory. If gh isn't authenticated or a package registry is unreachable, the skill tells you which search channels were skipped.
Source text
SKILL.md · MIT
--- name: search-first description: "Research-before-coding workflow: search npm/PyPI, MCP servers, skills, and GitHub for existing tools before writing custom code, then adopt, extend, or build. Launches the researcher agent for non-trivial needs. Use when starting a feature, adding a dependency or integration, or about to write a utility that may already exist." metadata: origin: ECC --- # /search-first — Research Before You Code Systematizes the "search for existing solutions before implementing" workflow. ## Trigger Use this skill when: - Starting a new feature that likely has existing solutions - Adding a dependency or integration - The user asks "add X functionality" and you're about to write code - Before creating a new utility, helper, or abstraction ## Workflow ``` ┌─────────────────────────────────────────────┐ │ 0. TOOL AVAILABILITY PREFLIGHT │ │ Check search channels before relying on │ │ them; report skipped channels honestly │ ├─────────────────────────────────────────────┤ │ 1. NEED ANALYSIS │ │ Define what functionality is needed │ │ Identify language/framework constraints │ ├─────────────────────────────────────────────┤ │ 2. PARALLEL SEARCH (researcher agent) │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ npm / │ │ MCP / │ │ GitHub / │ │ │ │ PyPI │ │ Skills │ │ Web │ │ │ └──────────┘ └──────────┘ └──────────┘ │ ├─────────────────────────────────────────────┤ │ 3. EVALUATE │ │ Score candidates (functionality, maint, │ │ community, docs, license, deps) │ ├─────────────────────────────────────────────┤ │ 4. DECIDE │ │ ┌─────────┐ ┌──────────┐ ┌─────────┐ │ │ │ Adopt │ │ Extend │ │ Build │ │ │ │ as-is │ │ /Wrap │ │ Custom │ │ │ └─────────┘ └──────────┘ └─────────┘ │ ├─────────────────────────────────────────────┤ │ 5. IMPLEMENT │ │ Install package / Configure MCP / │ │ Write minimal custom code │ └─────────────────────────────────────────────┘ ``` ## Decision Matrix | Signal | Action | |--------|--------| | Exact match, well-maintained, MIT/Apache | **Adopt** — install and use directly | | Partial match, good foundation | **Extend** — install + write thin wrapper | | Multiple weak matches | **Compose** — combine 2-3 small packages | | Nothing suitable found | **Build** — write custom, but informed by research | ## How to Use ### Step 0: Tool Availability Preflight This is agent guidance, not an executable setup script. Check only the channels that are relevant to the task and project in front of you. | Channel | Check | If missing | |---------|-------|------------| | Repository search | `rg --files` and targeted `rg` queries | State that only visible files were inspected | | Package registry | `npm --version`, `python -m pip --version`, or project package manager | Use web/docs search and avoid claiming registry coverage | | GitHub CLI | `gh auth status` | Use public web or local git history only | | MCP/docs tools | Available tool list or local MCP config | Fall back to official docs/web search | | Skills directory | `ls ~/.claude/skills ~/.codex/skills` where applicable | Say no local skill catalog was available | ### Quick Mode (inline) Before writing a utility or adding functionality, mentally run through: 0. Does this already exist in the repo? → `rg` through relevant modules/tests first 1. Is this a common problem? → Search npm/PyPI 2. Is there an MCP for this? → Check `~/.claude/settings.json` and search 3. Is there a skill for this? → Check `~/.claude/skills/` 4. Is there a GitHub implementation/template? → Run GitHub code search for maintained OSS before writing net-new code ### Full Mode (agent) For non-trivial functionality, launch the researcher agent: ``` Agent(subagent_type="general-purpose", prompt=" Research existing tools for: [DESCRIPTION] Language/framework: [LANG] Constraints: [ANY] Search: npm/PyPI, MCP servers, Claude Code skills, GitHub Return: Structured comparison with recommendation ") ``` Older Claude Code docs may call this `Task(...)`; use the current agent/subagent tool name exposed by the active harness. ## Search Shortcuts by Category ### Development Tooling - Linting → `eslint`, `ruff`, `textlint`, `markdownlint` - Formatting → `prettier`, `black`, `gofmt` - Testing → `jest`, `pytest`, `go test` - Pre-commit → `husky`, `lint-staged`, `pre-commit` ### AI/LLM Integration - Claude SDK → Context7 for latest docs - Prompt management → Check MCP servers - Document processing → `unstructured`, `pdfplumber`, `mammoth` ### Data & APIs - HTTP clients → `httpx` (Python), `ky`/`undici` (Node) - Validation → `zod` (TS), `pydantic` (Python) - Database → Check for MCP servers first ### Content & Publishing - Markdown processing → `remark`, `unified`, `markdown-it` - Image optimization → `sharp`, `imagemin` ## Integration Points ### With planner agent The planner should invoke researcher before Phase 1 (Architecture Review): - Researcher identifies available tools - Planner incorporates them into the implementation plan - Avoids "reinventing the wheel" in the plan ### With architect agent The architect should consult researcher for: - Technology stack decisions - Integration pattern discovery - Existing reference architectures ### With iterative-retrieval skill Combine for progressive discovery: - Cycle 1: Broad search (npm, PyPI, MCP) - Cycle 2: Evaluate top candidates in detail - Cycle 3: Test compatibility with project constraints ## Examples ### Example 1: "Add dead link checking" ``` Need: Check markdown files for broken links Search: npm "markdown dead link checker" Found: textlint-rule-no-dead-link (score: 9/10) Action: ADOPT — npm install textlint-rule-no-dead-link Result: Zero custom code, battle-tested solution ``` ### Example 2: "Add HTTP client wrapper" ``` Need: Resilient HTTP client with retries and timeout handling Search: npm "http client retry", PyPI "httpx retry" Found: got (Node) with retry plugin, httpx (Python) with built-in retry Action: ADOPT — use got/httpx directly with retry config Result: Zero custom code, production-proven libraries ``` ### Example 3: "Add config file linter" ``` Need: Validate project config files against a schema Search: npm "config linter schema", "json schema validator cli" Found: ajv-cli (score: 8/10) Action: ADOPT + EXTEND — install ajv-cli, write project-specific schema Result: 1 package + 1 schema file, no custom validation logic ``` ## Anti-Patterns - **Jumping to code**: Writing a utility without checking if one exists - **Ignoring MCP**: Not checking if an MCP server already provides the capability - **Silent skipping**: Reporting "nothing found" when a search channel was unavailable - **Over-customizing**: Wrapping a library so heavily it loses its benefits - **Dependency bloat**: Installing a massive package for one small feature
© affaan-m · MIT · affaan-m/ECC