Enforce a research-before-coding workflow — search for existing tools, libraries, and patterns before writing custom code. Use this skill whenever the user asks to add functionality, integrate a new capability, create a utility or helper, or add a dependency. Trigger on phrases like "add X functionality", "integrate X", "I need a library for", "write a helper to", "implement X from scratch", or any time you're about to write non-trivial code that might already exist as a package or tool. When in doubt, search first — reinventing a solved problem is never the right call.
Systematizes the "search for existing solutions before implementing" workflow. Always run this before writing non-trivial code that might already be solved.
1. NEED ANALYSIS → Define what's needed, language/framework constraints
2. SEARCH → Repo → packages → MCP/skills → web
3. EVALUATE → Score candidates against decision matrix
4. DECIDE → Adopt / Extend / Compose / Build inline / Skip
5. IMPLEMENT → Minimal code, no reinvention
Before searching, state clearly:
Does this already exist in the codebase?
requirements.txt / pyproject.toml / package.json — the dep may already be installedUse web_search to find candidates:
web_search("pypi <capability> python") or "<capability> python library site:pypi.org"web_search("npm <capability> javascript")available_skills list in the current context — a skill may already cover thisweb_search("<capability> best library <language> <year>") — look for recent comparisons, awesome lists, or authoritative recommendations.
Score each candidate on:
| Criterion | What to check |
|---|---|
| Functionality | Does it cover the full need, or just part? |
| Maintenance | Last commit < 12 months? Open issues responded to? |
| Community | Download count, GitHub stars, Stack Overflow presence |
| Docs | README quality, examples, API reference |
| License | MIT/Apache = safe; GPL = check; no license = avoid |
| Dependencies | Does it pull in a large transitive tree for a small feature? |
| Signal | Action |
|---|---|
| Exact match, well-maintained, permissive license | 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, but need is real | Build — write custom, informed by research |
| Trivial to implement (< ~20 lines), any package is overkill | Build inline — no dependency needed |
| Cost of dependency exceeds benefit | Skip — reconsider whether the feature is necessary |
Verify currency before recommending — these reflect common choices as of early 2026.
Python / ML
httpx (async-native, retries built-in)pydantic (v2 preferred)polars (fast), pandas (ecosystem)pdfplumber, unstructured, mammothtyper, clickJavaScript / TypeScript
fetch + ky for retries/hookszodvitest (modern), jestremark, unifiedDev tooling
ruff (replaces pylint + flake8)eslintblack / prettierpre-commitNeed: Check markdown files for broken links
Search: web_search("markdown dead link checker npm")
Found: textlint-rule-no-dead-link (score: 9/10, active, MIT)
Decision: ADOPT
Result: npm install + config — zero custom code
Need: HTTP client with retries and timeout handling (Python)
Search: web_search("python http client retries 2025")
Found: httpx has built-in retry support via transport layer
Decision: ADOPT
Result: httpx already in pyproject.toml — no new dep needed
Need: Validate project JSON configs against a schema (Node)
Search: web_search("json schema validator cli npm")
Found: ajv-cli (score: 8/10) — validates but needs a schema file
Decision: EXTEND — install ajv-cli, write project-specific schema
Result: 1 package + 1 schema file, no custom validation logic
Need: Convert seconds to "2h 15m 30s" string (Python)
Search: pypi search → nothing worth the dependency
Decision: BUILD INLINE — 12-line utility function, no package needed
Result: Custom function in utils.py, zero new dependencies