PluginBench
Skill
Review
Audit score 70

search-first

affaan-m/ecc

Research existing solutions before writing custom code—search npm, PyPI, MCP, and GitHub systematically.

What is search-first?

A research-before-coding workflow that systematizes checking for existing tools, libraries, and patterns before implementing custom solutions. Use this skill when starting a new feature, adding dependencies, or building utilities to avoid reinventing the wheel and make informed build-vs-buy decisions.

  • Guides parallel search across npm/PyPI, MCP servers, Claude Code skills, and GitHub for existing solutions
  • Provides a decision matrix to choose between adopting, extending, composing, or building custom code
  • Includes tool availability preflight checks to report honestly when search channels are unavailable
  • Offers quick inline mode for simple checks and full agent mode for non-trivial functionality research
  • Supplies search shortcuts by category (dev tooling, AI/LLM, data APIs, content publishing)
  • Integrates with planner and architect agents to incorporate discovered tools into implementation plans

How to install search-first

npx skills add null --skill search-first
Claude Code
Cursor
Windsurf
Cline

How to use search-first

  1. 1.Define the functionality needed and identify language/framework constraints
  2. 2.Run tool availability preflight: check if npm, PyPI, GitHub CLI, MCP tools, and skills directory are accessible
  3. 3.Search in parallel across npm/PyPI, MCP servers, Claude Code skills, and GitHub for candidates
  4. 4.Evaluate candidates using the decision matrix: score by functionality, maintenance status, community, docs, license, and dependencies
  5. 5.Decide whether to adopt as-is, extend with a thin wrapper, compose multiple packages, or build custom code
  6. 6.Implement the chosen option: install the package, configure MCP, or write minimal custom code informed by research

Use cases

Good for
  • Starting a new feature that likely has existing solutions (e.g., dead link checking for markdown)
  • Adding a dependency or integration and needing to evaluate options (e.g., HTTP client with retry logic)
  • Creating a new utility or helper function before checking if a maintained package already exists
  • Validating project config files against a schema without building custom validation logic
  • Discovering MCP servers or skills that provide needed capabilities before writing code
Who it's for
  • Developers building features who want to avoid duplicating effort
  • Teams adopting a research-first culture to reduce technical debt
  • Agents (planner, architect, general-purpose) that need to discover available tools before planning or implementing
  • Anyone integrating with Claude Code or Cursor who wants systematic dependency evaluation

search-first FAQ

When should I use search-first vs. just writing code?

Use search-first when starting a new feature, adding a dependency, or creating a utility—especially if it's a common problem. Use quick mode (mental checklist) for simple tasks; use full agent mode for non-trivial functionality.

What if I can't access a search channel (e.g., no GitHub CLI)?

Report honestly which channels were unavailable. Fall back to web search, official docs, or local inspection. Never claim registry coverage if you couldn't check it.

How do I choose between adopting, extending, or building?

Use the decision matrix: adopt exact matches that are well-maintained with permissive licenses; extend partial matches with good foundations; compose multiple weak matches; build custom only if nothing suitable exists.

Can I combine search-first with other skills or agents?

Yes. Integrate with planner agent (researcher identifies tools before Phase 1), architect agent (for stack decisions), or iterative-retrieval skill (for progressive discovery across cycles).

What are common anti-patterns to avoid?

Jumping to code without searching, ignoring MCP servers, silently skipping unavailable channels, over-customizing libraries, and installing massive packages for one small feature.

Full instructions (SKILL.md)

Source of truth, from affaan-m/ecc.


name: search-first description: Research-before-coding workflow. Search for existing tools, libraries, and patterns before writing custom code. Invokes the researcher agent. 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

SignalAction
Exact match, well-maintained, MIT/ApacheAdopt — install and use directly
Partial match, good foundationExtend — install + write thin wrapper
Multiple weak matchesCompose — combine 2-3 small packages
Nothing suitable foundBuild — 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.

ChannelCheckIf missing
Repository searchrg --files and targeted rg queriesState that only visible files were inspected
Package registrynpm --version, python -m pip --version, or project package managerUse web/docs search and avoid claiming registry coverage
GitHub CLIgh auth statusUse public web or local git history only
MCP/docs toolsAvailable tool list or local MCP configFall back to official docs/web search
Skills directoryls ~/.claude/skills ~/.codex/skills where applicableSay no local skill catalog was available

Quick Mode (inline)

Before writing a utility or adding functionality, mentally run through:

  1. Does this already exist in the repo? → rg through relevant modules/tests first
  2. Is this a common problem? → Search npm/PyPI
  3. Is there an MCP for this? → Check ~/.claude/settings.json and search
  4. Is there a skill for this? → Check ~/.claude/skills/
  5. 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