Search the public web and fetch readable HTML, JSON, CSV, text, and PDF content with a local-first, zero-paid-API workflow...
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.
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.
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 5
After 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,browser
Consider 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.
--domains for a strict allowlist and --prefer-domain to rank primary domains first.--recency d|w|m|y only when freshness is required.FREE_WEB_RESEARCH_SEARXNG_URL to use a self-hosted SearXNG instance; otherwise auto uses DDGS.--insecure, verify=False, credential harvesting, CAPTCHA bypass, or proxy rotation.--with-browser and direct extraction is inadequate.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.