Peritus can search, read and cite web pages in Chat, Design, Review and coding runs, with any provider. Public page reading automatically uses native HTTP(S) or the official Stack Exchange API, without a paid key. When an HTML page is challenged or contains only a JavaScript shell, a coding run with Process permission automatically tries its isolated browser once. Search is compiled into Peritus using the MIT-licensed metasearch-rs library, pinned to 0.3.1 (the library release before its unrelated TUI dependency). There is no service to install or start, no first-use download, and no Python, Docker, Podman, API key or separate account requirement.
Search immediately:
peritus web search 'Rust ownership official documentation'
peritus web statusBuilt-in search queries Yahoo, DuckDuckGo, Brave and Startpage concurrently and merges duplicate URLs with reciprocal-rank fusion. Per process, only one fan-out runs at a time; engines have an eight-second network deadline. Cancellation also interrupts waiting searches. No search child processes or listening ports are created. Upstream engines can rate-limit, block, or change their HTML. Results report failed and empty engines separately; all-empty/all-failed searches return an actionable error, are not cached as successes, and do not prevent opening known URLs. Status reports local readiness, not a claim that upstream engines are reachable.
Native search accepts a comma-separated subset of those engines and up to 30 results. It supports the first ranked result set only (page=1); refine queries for further sources. Include date/language constraints in the query: native date/language filter parameters and later pages are explicitly rejected rather than silently ignored.
An optional existing SearXNG JSON server can still be selected:
peritus web setup https://search.example.org/search
peritus web setup # return to built-in Rust search; no provisioningThe endpoint must support SearXNG JSON (search.formats: [html, json]). External endpoints retain page/language/time/engine parameters. Configuration lives under web/settings.json in the user's Peritus data directory. PERITUS_WEB_SEARCH_URL overrides saved selection for that process. Legacy automatically managed container endpoints migrate to built-in search; their identity is retained only for explicit peritus web stop cleanup, with the existing exact ownership check. Containers are never started automatically. Built-in search has no background service to stop; external services are never stopped.
The model receives four tools:
web_read returns text without repeating the outgoing link catalog by default. Set
include_links=true at offset zero to retrieve those retained links. web_open still includes
links by default; either tool accepts include_links=false for focused text reading.
| Tool | Behavior |
|---|---|
web_search |
Discover URLs/snippets immediately, with optional native engine selection; external SearXNG additionally supports pages/date/language filters. |
web_open |
Read a URL, extract HTML or textual content, retain an immutable source, and return its first page and links. |
web_read |
Read exact UTF-8 byte pages from that source, including after reconnect or a new process. |
web_find |
Find literal text throughout a retained source and return matching offsets/line numbers. |
Native opens reuse snapshots for 15 minutes and report cache reuse. refresh=true fetches new content; previous source references retain their exact original extracted text. Search query caching lasts two minutes with at most 128 entries. Durable source evidence is not silently evicted or limited by a total-size quota. It lives under web/sources in the Peritus data directory; archive it before removing old files if historical references matter.
web_open defaults to mode="auto". Supported public Stack Exchange question and answer links use the official API, including question/answer/comment bodies, authors, licenses, canonical links and exact source paging. Retrieval metadata lists API response digests, quota/backoff information and official continuation URLs for additional or deferred pages. These URLs remain readable with ordinary web_open; an incomplete snapshot explicitly reports its remaining pages. API failures fall back to the ordinary page route. mode="http" forces native HTTP.
web_open render=true or mode="browser" forces the isolated Playwright runtime for JavaScript content. Native installation provisions it automatically on Linux, macOS, and Windows; portable and system-package installs prepare it on first interactive launch. peritus automation setup repairs the runtime. Rendering uses a temporary clean context, blocks non-HTTP(S) requests, closes unsolicited popups, dismisses dialogs and closes its browser afterward. A dedicated run-owned reader keeps web timeouts separate from interactive GUI sessions; a stalled reader is canceled at the controller RPC deadline and a later read opens a fresh one. It never attaches to personal profiles. The model can set wait_ms up to five seconds for delayed content. The renderer tracks the committed main document and captures its status and HTML together, including a challenge that navigates from 403 to 200. A challenge document never becomes a successful research source merely because its HTTP status is 200. Prefer automatic reads for ordinary documents.
Network opens/search need Read and Network permissions. Retained reads/find need Read only. Rendering additionally needs Process. Revocation cannot be bypassed by a cached result. These read tools do not grant workspace writes, browser interactions, file uploads or profile access. Page text and search snippets are untrusted evidence, and the role instructions require actual source reads and citations.
Pages default to 32 KiB, can request up to 1 MiB, and expose next_offset until the whole document is read. Offsets count UTF-8 bytes; preserve the returned continuation rather than guessing character offsets. Metadata includes source identity, original/final URL, title, retrieval time, HTTP status and digests. Links are limited to the first 500; this does not truncate page text. Text decoding honors the HTTP charset. PDF and binary extraction are explicitly unsupported; use an HTML/text version. Native page transfers/rendered HTML have a 64 MiB resource bound, redirects a ten-hop bound, and HTTP requests a 30-second deadline. Errors do not become successful source records. Product tool observations classify challenges, authentication requirements, access denials, rate limits, rendering requirements and transient upstream failures. Retry-After delta seconds and HTTP dates are honored by a bounded per-origin cooldown. Automatic recovery is bounded to one browser attempt and never grants additional permissions. Successful browser results are reused on subsequent automatic opens.
For a remaining challenge or signed-in source, select an HTTPS tab in the Peritus Chrome popup with Share this HTTPS tab, use browser_control extension_tabs and extension_attach, then pass the returned browser_session and matching URL to web_open. This reads the selected document without copying cookies. The bridge permits observation and reading on external HTTPS tabs; existing loopback development controls remain available. Cross-origin navigation, tab closure or Revoke this tab removes external access. A selected DOM snapshot reports http_status: null because the bridge does not observe an HTTP response; it never invents a 200. These snapshots are not reused by the public HTTP cache.
Direct CLI operations are useful for diagnostics and scripts:
peritus web open https://doc.rust-lang.org/book/
peritus web open https://stackoverflow.com/questions/54403058/
peritus web open https://example.com --http --refresh
peritus web read SOURCE_REFERENCE 0 32768
peritus web find SOURCE_REFERENCE 'ownership'The CLI prints JSON. JavaScript rendering is available to the model through its run-owned computer runtime; direct web open uses native HTTP. This is the foundation for research-assisted design and a later deep-research coordinator.