Web Finder
Overview
Use this skill as the top-level router for web discovery work.
Prefer local or self-hosted search and existing local skills first, then fall back to broader public web search, and only use API-key-dependent search when the chosen lane truly needs it.
The intended local-first companion stack is:
searxng-search for broad local web search
web-page-capture for post and page capture
article-extractor for cleaned article text
reddit-fetch for Reddit retrieval
youtube-transcript for video-to-text follow-up
Workflow
Normalize the request.
Decide whether the user is asking for:
- a source-specific search
- a topic-first discovery pass
- a comparison across sources
- a current-state or recent-discussion sweep
- a follow-up capture of already known URLs
Set the evidence target before searching.
Decide:
- freshness requirement: historical, recent, or latest
- source mix: official, community, media, or mixed
- deliverable: quick answer, source map, comparison brief, or reusable capture set
Check the environment only when needed.
In a new environment, or when a lane depends on optional tooling, run python3 ./scripts/check_setup.py.
Use --json only if machine-readable status is useful.
Choose the narrowest effective discovery lane.
Use the routing table in references/source-routing.md.
Keep the search local-first:
- existing MCP or connector search
searxng-search or another self-hosted local search stack
- platform-specific fetch or capture skill
- generic public web search
- optional API-key-backed search
Search in small passes.
Start with 1-3 focused queries, inspect the hit quality, then expand.
Do not spray dozens of weak queries when the first pass already shows the right source family.
Capture only the pages worth reusing.
When the result should survive beyond the current turn, capture priority pages into local artifacts instead of relying on transient browsing.
Prefer:
web-page-capture for X, Zhihu, Xiaohongshu, and generic pages
article-extractor for blog and article cleanup
reddit-fetch for Reddit threads
youtube-transcript for YouTube text extraction
Synthesize, do not just list.
Return:
- a short framing of what was searched
- the highest-signal sources
- grouped findings
- uncertainty or gaps
- recommended next captures or follow-up searches
Lane Selection
GitHub and developer ecosystem
Prefer GitHub-native search surfaces first:
- repo search
- code search
- issue and PR search
- release or changelog pages
Use generic web search only to widen discovery around public discussion, comparisons, blog posts, or issue threads not surfaced well by platform-native search.
Official docs, blogs, and product pages
Prefer self-hosted search if available locally.
If not, use targeted public web queries and domain filters.
Capture final pages locally when they are likely to be cited or revisited.
Forums and communities
Prefer platform-aware routes over blind generic search.
For Reddit, prefer reddit-fetch if present.
For Hacker News, use a platform-specific lane if available; otherwise use targeted web search.
Social posts and threads
If the URL is already known, switch from discovery to capture immediately.
If only the topic is known, discover candidate URLs first, then capture the strongest few.
Do not over-index on a single viral post when the user asked for broader discovery.
Video and media
Discover first, then extract text.
Prefer transcript or page capture once you know which items are worth reading.
Read references/query-recipes.md when query shaping or source-specific phrasing matters.
Output Contract
Default response shape:
Search frame
State what was searched, what freshness target was used, and which source families were included.
Source map
List the most useful sources with:
- title
- URL
- source type
- freshness
- why it matters
Synthesis
Group findings by theme, not by search engine.
Distinguish observed facts from inference when the evidence is mixed.
Gaps
Name what is still uncertain, thinly sourced, or missing.
Next step
Recommend the best follow-up:
- deeper GitHub search
- targeted forum sweep
- page capture
- transcript extraction
- optional tool configuration
Local-First Rules
- Prefer already-installed local skills and connectors before introducing new services.
- Treat optional API-key tools as upgrades, not prerequisites.
- Do not ask the user to configure everything up front.
- Ask for configuration only when a selected lane is blocked or would be materially better with that setup.
- If a missing tool is the only blocker, run
scripts/check_setup.py, summarize exactly what is missing, and guide the user through only that configuration.
Scope Control
- Favor 5-12 high-signal sources over noisy exhaustiveness unless the user explicitly asks for a broad scan.
- Prefer a mixed source set when the topic is controversial or fast-moving.
- Prefer official and primary sources when accuracy matters.
- Avoid turning one-page capture tools into whole-site crawlers.
- Avoid long verbatim excerpts when a short summary plus source links is enough.
Common Triggers
- "Find recent discussions about this repo across GitHub and blogs."
- "Search the web for high-signal takes on this tool."
- "帮我按 GitHub、论坛、博客、社交平台把这个主题搜一遍。"
- "Find current sources about this startup and summarize the strongest evidence."
- "Discover articles, threads, and repo discussions about this framework."
- "Search broadly, then capture the best pages locally."
1---2name: web-finder3description: Local-first router for internet discovery and evidence synthesis across GitHub, official docs, blogs, forums, news, and social platforms. Use when Codex needs to search, discover, compare, or collect current external sources about a topic, repo, company, tool, trend, product, or discussion; choose an adaptive search path by source and freshness; capture high-value pages locally when helpful; and return a concise, source-backed synthesis instead of a loose link dump.4---56# Web Finder78## Overview910Use this skill as the top-level router for web discovery work.11Prefer local or self-hosted search and existing local skills first, then fall back to broader public web search, and only use API-key-dependent search when the chosen lane truly needs it.12The intended local-first companion stack is:13- `searxng-search` for broad local web search14- `web-page-capture` for post and page capture15- `article-extractor` for cleaned article text16- `reddit-fetch` for Reddit retrieval17- `youtube-transcript` for video-to-text follow-up1819## Workflow20211. Normalize the request.22 Decide whether the user is asking for:23 - a source-specific search24 - a topic-first discovery pass25 - a comparison across sources26 - a current-state or recent-discussion sweep27 - a follow-up capture of already known URLs28292. Set the evidence target before searching.30 Decide:31 - freshness requirement: historical, recent, or latest32 - source mix: official, community, media, or mixed33 - deliverable: quick answer, source map, comparison brief, or reusable capture set34353. Check the environment only when needed.36 In a new environment, or when a lane depends on optional tooling, run `python3 ./scripts/check_setup.py`.37 Use `--json` only if machine-readable status is useful.38394. Choose the narrowest effective discovery lane.40 Use the routing table in [references/source-routing.md](./references/source-routing.md).41 Keep the search local-first:42 - existing MCP or connector search43 - `searxng-search` or another self-hosted local search stack44 - platform-specific fetch or capture skill45 - generic public web search46 - optional API-key-backed search47485. Search in small passes.49 Start with 1-3 focused queries, inspect the hit quality, then expand.50 Do not spray dozens of weak queries when the first pass already shows the right source family.51526. Capture only the pages worth reusing.53 When the result should survive beyond the current turn, capture priority pages into local artifacts instead of relying on transient browsing.54 Prefer:55 - `web-page-capture` for X, Zhihu, Xiaohongshu, and generic pages56 - `article-extractor` for blog and article cleanup57 - `reddit-fetch` for Reddit threads58 - `youtube-transcript` for YouTube text extraction59607. Synthesize, do not just list.61 Return:62 - a short framing of what was searched63 - the highest-signal sources64 - grouped findings65 - uncertainty or gaps66 - recommended next captures or follow-up searches6768## Lane Selection6970### GitHub and developer ecosystem7172Prefer GitHub-native search surfaces first:73- repo search74- code search75- issue and PR search76- release or changelog pages7778Use generic web search only to widen discovery around public discussion, comparisons, blog posts, or issue threads not surfaced well by platform-native search.7980### Official docs, blogs, and product pages8182Prefer self-hosted search if available locally.83If not, use targeted public web queries and domain filters.84Capture final pages locally when they are likely to be cited or revisited.8586### Forums and communities8788Prefer platform-aware routes over blind generic search.89For Reddit, prefer `reddit-fetch` if present.90For Hacker News, use a platform-specific lane if available; otherwise use targeted web search.9192### Social posts and threads9394If the URL is already known, switch from discovery to capture immediately.95If only the topic is known, discover candidate URLs first, then capture the strongest few.96Do not over-index on a single viral post when the user asked for broader discovery.9798### Video and media99100Discover first, then extract text.101Prefer transcript or page capture once you know which items are worth reading.102103Read [references/query-recipes.md](./references/query-recipes.md) when query shaping or source-specific phrasing matters.104105## Output Contract106107Default response shape:1081091. `Search frame`110 State what was searched, what freshness target was used, and which source families were included.1111122. `Source map`113 List the most useful sources with:114 - title115 - URL116 - source type117 - freshness118 - why it matters1191203. `Synthesis`121 Group findings by theme, not by search engine.122 Distinguish observed facts from inference when the evidence is mixed.1231244. `Gaps`125 Name what is still uncertain, thinly sourced, or missing.1261275. `Next step`128 Recommend the best follow-up:129 - deeper GitHub search130 - targeted forum sweep131 - page capture132 - transcript extraction133 - optional tool configuration134135## Local-First Rules136137- Prefer already-installed local skills and connectors before introducing new services.138- Treat optional API-key tools as upgrades, not prerequisites.139- Do not ask the user to configure everything up front.140- Ask for configuration only when a selected lane is blocked or would be materially better with that setup.141- If a missing tool is the only blocker, run `scripts/check_setup.py`, summarize exactly what is missing, and guide the user through only that configuration.142143## Scope Control144145- Favor 5-12 high-signal sources over noisy exhaustiveness unless the user explicitly asks for a broad scan.146- Prefer a mixed source set when the topic is controversial or fast-moving.147- Prefer official and primary sources when accuracy matters.148- Avoid turning one-page capture tools into whole-site crawlers.149- Avoid long verbatim excerpts when a short summary plus source links is enough.150151## Common Triggers152153- "Find recent discussions about this repo across GitHub and blogs."154- "Search the web for high-signal takes on this tool."155- "帮我按 GitHub、论坛、博客、社交平台把这个主题搜一遍。"156- "Find current sources about this startup and summarize the strongest evidence."157- "Discover articles, threads, and repo discussions about this framework."158- "Search broadly, then capture the best pages locally."