Web access
Atomic bundlesweb_search for searching the web and fetch_content for reading pages. web_search works with no setup; the sections below cover how it picks a provider and how to configure one.
Searching with web_search
Pass query, or queries for several angles at once. provider can be auto (the default), exa, perplexity, or gemini.
With auto, Atomic uses the first provider that works:
- Exa: with a key it calls the Exa API; without one it uses Exa’s free keyless MCP endpoint (
mcp.exa.ai), so an unconfigured machine with network access still gets results. - Perplexity, with a key.
- Gemini API, with a key.
- Gemini Web, using your signed-in Chromium-based browser. Browser cookie access is off by default; enable it with
allowBrowserCookies: trueorATOMIC_ALLOW_BROWSER_COOKIES=1.
~/.atomic/web-search.json:
provider sets the default provider. When no provider can be reached, the error names these settings.
The search curator
By defaultweb_search returns raw results. /curator on (or "workflow": "summary-review" in web-search.json) opens a browser page where you review the results and approve a summary before the agent sees them; /curator off turns it back off. The curator changes how results are reviewed, not which provider is used.
It needs an interactive session with a person at a browser. Subagents, workflow stages, and non-interactive runs skip it and return raw results. If the page cannot open, for example on a machine with no desktop browser, web_search returns raw results with a note instead of failing; run /curator off to stop trying.
Fetching with fetch_content
Atomic’s bundled fetch_content tool reads webpages, PDFs, GitHub repositories, YouTube videos, and local video files.
Arguments
Always pass the lowercaseurls field as a nonempty array of strings, even for one URL:
prompt:
./ or ../ relative paths, and file:// URLs. Escape Windows backslashes in JSON, for example {"urls": ["C:\\Videos\\recording.mp4"], "frames": 1}.
For webpages, urls is enough. prompt and model apply to video analysis, not webpage filtering or extraction. forceClone applies only to GitHub repositories.
Use frames and timestamp only when you want images from YouTube or local video files. Omit both for readable text or transcripts. frames alone samples the whole video; timestamp accepts seconds, a time such as 1:25, or a range such as 1:25-2:00.
frames and timestamp and are fetched normally, even in a batch containing videos. Video inputs still validate timestamps and report extraction errors.
Existing prompts or integrations using {"url": "..."} must change to {"urls": ["..."]}. The singular url field is no longer accepted by fetch_content. This does not change the url selector on get_search_content.
Atomic can normalize a scalar urls string into a one-item array. Always use the documented array form in prompts and integrations; the legacy url field is not normalized.
Troubleshooting
If argument validation fails, check that:- The field is
urls, notURLsorurl. - Its value is an array, not a string or an object.
- The array contains at least one nonempty string.
- The call has no unrecognized fields.
fetch_content({ urls: ["<failed URL>"] }). For blocked pages or repeated extraction failures, try an accessible alternate URL or use web_search. get_search_content cannot recover missing content from a failed fetch.
When fetched content is truncated, follow the returned get_search_content call to retrieve the stored content.