
Search First
FreeResearch existing solutions before coding.
Free · Opens the source repo
What Search First does
Search First is a workflow skill designed to streamline the process of researching existing tools, libraries, and patterns before writing custom code. This skill is particularly useful for developers and designers who are about to implement new features or add functionality to their projects. By systematizing the search for existing solutions, it helps avoid redundant work and leverages the vast ecosystem of available resources. The skill encourages a thorough analysis of needs and constraints, ensuring that any new development is built on a solid foundation of existing solutions.
The workflow begins with a need analysis, where the user defines the required functionality and identifies any constraints related to language or framework. Following this, the skill performs a parallel search across various platforms such as npm, PyPI, and GitHub to find relevant existing solutions. The evaluation phase then scores candidates based on several criteria including functionality, maintenance status, community support, documentation, and licensing. Finally, the user decides whether to adopt, extend, or build a custom solution based on the findings.
One of the key features of Search First is its emphasis on read-only research, which means it will not install packages or make changes without explicit user approval. This cautious approach ensures that the integrity of the project is maintained while still providing valuable recommendations. The skill is particularly beneficial when the user is unsure whether a solution already exists or when they are looking to integrate new dependencies into their project.
Overall, Search First is an essential tool for developers and designers who want to enhance their coding efficiency by minimizing the need to reinvent the wheel. By leveraging existing solutions, users can save time and resources, allowing them to focus on more critical aspects of their projects.
When to use it
Use Search First when starting a new feature, adding functionality, or when considering new dependencies.
When not to use it
This skill may not be suitable for situations requiring immediate coding or when the solution is highly specialized and unlikely to have existing counterparts.
What you can build with it
Adding a New Feature
When tasked with adding a new feature, use Search First to find existing libraries that can be integrated instead of writing new code from scratch.
Integrating a Dependency
Before integrating a new dependency into your project, use Search First to research available options and their suitability.
Creating Utility Functions
When considering creating new utility functions, run a search first to see if similar solutions already exist in the community.
How to install Search First
View source1. Install with the skills CLI
npx skills add affaan-m/ecc/search-first --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by affaan-m/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
Scope and Approval Rules
Default to read-only research: inspect the repo, package metadata, docs, and public examples before recommending a dependency or integration. Do not install packages, configure MCP servers, publish artifacts, open PRs, or make external write actions from this skill unless the user has explicitly approved that action in the current task.
When a candidate requires credentials, paid services, network writes, or project-wide config changes, return a recommendation and approval checkpoint instead of applying it directly.
Workflow
┌─────────────────────────────────────────────┐
│ 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. APPROVAL CHECKPOINT / IMPLEMENT │
│ Recommend package / MCP / custom code │
│ Apply only after explicit approval │
└─────────────────────────────────────────────┘
Decision Matrix
| Signal | Action |
|---|---|
| Exact match, well-maintained, MIT/Apache | Adopt — recommend the package and request approval before install or config changes |
| Partial match, good foundation | Extend — recommend the package plus a thin wrapper, then wait for approval before applying |
| Multiple weak matches | Compose — propose 2-3 small packages and the integration plan before installing anything |
| Nothing suitable found | Build — explain why custom code is warranted, then implement only within the approved task scope |
How to Use
Quick Mode (inline)
Before writing a utility or adding functionality, mentally run through:
- Does this already exist in the repo? → Search through relevant modules/tests first
- Is this a common problem? → Search npm/PyPI
- Is there an MCP for this? → Check MCP configuration and search
- Is there a skill for this? → Check available skills
- Is there a GitHub implementation/template? → Run GitHub code search for maintained OSS before writing net-new code
Full Mode (subagent)
For non-trivial functionality, delegate to a research-focused subagent:
Invoke subagent with prompt:
"Research existing tools for: [DESCRIPTION]
Language/framework: [LANG]
Constraints: [ANY]
Search: npm/PyPI, MCP servers, skills, GitHub
Return: Structured comparison with recommendation"
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 → Check for latest docs
- Prompt management → Check MCP servers
- Document processing →
unstructured,pdfplumber,mammoth
Data & APIs
- HTTP clients →
httpx(Python),ky/got(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 — recommend `textlint-rule-no-dead-link` and ask before installing it
Result: Zero custom code if approved, 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 — recommend `got`/`httpx` directly with retry config and ask before changing dependencies
Result: Zero custom code if approved, 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 — recommend `ajv-cli` plus a project-specific schema, then wait for approval before install/write
Result: 1 package + 1 schema file if approved, 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
- Over-customizing: Wrapping a library so heavily it loses its benefits
- Dependency bloat: Installing a massive package for one small feature
When to Use This Skill
- Starting new features
- Adding dependencies or integrations
- Before writing utilities or helpers
- When evaluating technology choices
- Planning architecture decisions
Frequently asked questions about Search First
Similar skills
Rhino 3D Scripting
Streamline your Rhinoceros 3D scripting tasks.
MVVM Toolkit
Streamline ViewModel development with source generators.
FreeCAD Scripts
Generate Python scripts for FreeCAD automation and modeling.
Azure Architecture Builder
Design and deploy Azure infrastructure using natural language.
Command Development
Streamline your command creation for Claude Code.
Create Cowork Plugin
Easily build and package plugins through guided sessions.
