web-search-free
Search the public web and fetch readable HTML, JSON, CSV, text, and PDF content with a local-first, zero-paid-API workflow. Use when Codex needs current web evidence, topic discovery, official-source
SKILL.mdSKILL.md
GitHubFree Web Research
Use the bundled CLI to discover and read public sources without calling paid search or scraping APIs. Preserve evidence quality: prefer primary sources, check dates, and cite the final URLs.
Locate the CLI
Run the bundled wrapper from this Skill directory:
python3 scripts/free_web_research.py health
If it reports that the CLI is missing, tell the user to run python3 scripts/install.py from this Skill directory. The downloaded Skill contains the complete CLI source and creates an isolated environment. Do not install dependencies into the system Python ad hoc.
Route the request
Search local project files and
.web-research-cache/first.For a known URL, fetch it directly:
python3 scripts/free_web_research.py fetch 'https://example.com/page'For an unknown URL, use a zero-cost built-in Web Search available in the current harness when possible. Otherwise run DDGS/SearXNG:
python3 scripts/free_web_research.py search 'topic official source' --max-results 5After discovering a URL, return to
fetch; do not use a paid extractor by habit.If direct extraction is incomplete, explicitly add free fallbacks:
python3 scripts/free_web_research.py fetch 'https://example.com/page' --fallback jina,browserConsider Tavily or Firecrawl only when the JSON result contains
escalation.recommended: true. Record the failed routes and expected paid call count before escalating. Never invoke a paid tool automatically from this Skill.
Read references/routing-policy.md before multi-source research, paid escalation, or changing cache policy. Read references/cli.md for all commands and output fields.
Search efficiently
- Start with one focused query and 3-5 results.
- Use
--domainsfor a strict allowlist and--prefer-domainto rank primary domains first. - Use
--recency d|w|m|yonly when freshness is required. - Configure
FREE_WEB_RESEARCH_SEARXNG_URLto use a self-hosted SearXNG instance; otherwiseautouses DDGS. - Treat DDGS/SearXNG results as discovery evidence. Fetch and inspect the source before making material claims.
Fetch safely
- Keep TLS verification enabled. Never add
--insecure,verify=False, credential harvesting, CAPTCHA bypass, or proxy rotation. - Do not send private, authenticated, or confidential URLs through Jina Reader.
- Use Playwright only when it was installed with
--with-browserand direct extraction is inadequate. - Respect access controls, robots policies, rate limits, copyright, and website terms.
- Keep realtime data TTL short; keep immutable filings and PDFs longer.
Handle outputs
Use JSON for agent workflows. Check ok, cache_hit, backend, quality_score, attempts, and escalation before relying on text or results. Use --format markdown only for human-readable output.