Ask three search engines, not one.
Brave, Tavily, and Exa run concurrently. URLs are normalized, duplicates become agreement signals, and one deterministic ranked list comes back.
$ webctx search "durable agent runtimes"Search across Brave, Tavily, and Exa. Paste a useful URL and get the part an agent actually needs. Map an entire site before deciding where to look. Three verbs, one small binary.
npm i -g webctxwebctx search "agent web research"01 / Why federated search
Independent agreement is a stronger relevance signal than any provider's confidence score.
webctx treats provider disagreement as useful information. It asks three systems the same question, normalizes their URLs, and rewards the pages they independently surface.
The result is not three pasted lists. It is one stable, deduplicated answer an agent can inspect, save, diff, and cite.
02 / The whole interface
Small enough to learn from --help. Broad enough for an entire research loop.
Each command exists because a real agent workflow needed it. The output stays plain so the next tool never has to scrape the first one.
Brave, Tavily, and Exa run concurrently. URLs are normalized, duplicates become agreement signals, and one deterministic ranked list comes back.
$ webctx search "durable agent runtimes"A repository becomes an overview. A line anchor becomes those lines. A PR thread becomes that thread. An Actions job becomes that job and log. Normal pages still come back as clean text.
$ webctx read-link <url>Map a documentation or product site into a URL inventory, then let the agent choose which pages are worth opening.
$ webctx map-site <url>03 / The URL already knows a lot
Keep the meaning of the link instead of flattening every page into the same scrape.
A GitHub line link means source lines. An Issue link means a conversation. A review-thread link means one thread. A job link means one CI job. webctx recognizes those shapes first, then uses markdown or page extraction only when the URL does not already describe a cleaner resource.
See what read-link understandsDoes the URL identify something specific?
Return that resource directlySource · conversations · diffs · history · CI jobsIs clean text already available?
Use the markdown pageFast · focused · low noiseDoes the page need rendering?
Crawl it as a fallbackRendered page → useful text04 / The research loop
Terminal-native context means every output is already composable.
Search broadly or map the site first.
Pass the useful URL to read-link.
Keep line, comment, review, diff, or job URLs when you have them.
Pipe, save, quote, or hand the markdown to an agent.
05 / Documentation
Start with task-focused examples. When you want the technical model, the How it works guides explain automatic URL fast paths and federated search ranking without turning into a code walkthrough.
Browse every guideInstall it, paste a URL, and start giving agents cleaner web context.
Search keys, Firecrawl, and optional GitHub authentication without extra setup ceremony.
Find candidate pages without manually comparing three search engines.
Give webctx a URL; it chooses the cleanest available read path and preserves precise URL intent when it can.
Turn a docs or product site into a navigable URL inventory.
Small command sequences that give an agent focused evidence instead of browser noise.
Native GitHub reads, direct markdown, and Firecrawl form an automatic cost-and-quality ladder.
Provider position and independent agreement turn three search result sets into one useful list.