Built-in tools for web search and page fetching directly from agent/coder mode
ChatCLI includes three native web tools — @webfetch, @websearch and @wikipedia — that allow the agent to search the internet, fetch web pages and look things up on Wikipedia without depending on external MCP servers.
Web tools are native ChatCLI tools, automatically available in agent and coder modes. No MCP server configuration is required to use them.
Error pages are returned, not hidden. Any 2xx is a success. A 4xx/5xx is an error that carries the page as text (what a 404 says, a login wall, a bot challenge) and the move that follows: an access check (401/403/429/503) points to @browser and its visible hand-off, a 404/410 to searching for the current location, a 5xx to a single retry.
User: Fetch the content from https://go.dev/blog/error-handling-and-goAgent: I'll fetch the page content.[tool_call: webfetch {"url": "https://go.dev/blog/error-handling-and-go"}]Result: The article "Error handling and Go" explains Go's errorhandling patterns, including...
@webfetch respects redirects (up to 10), timeouts (30s), and returns clear errors for inaccessible URLs or SSL issues.
Endpoints like Prometheus /metrics, configuration dumps or long listings can easily exceed tens of thousands of characters. @webfetch accepts a set of parameters that perform line-level filtering before truncation, so the useful part is not discarded:
Parameter
Type
Description
filter
string (Go regex)
Keep only lines matching the regex. Applied before exclude and from_line/to_line.
exclude
string (Go regex)
Drop lines matching the regex. Applied after filter.
from_line
integer
Start of the window in the filtered view (1-based, inclusive).
to_line
integer
End of the window in the filtered view (1-based, inclusive).
save_to_file
boolean
Persist the full pre-filter body to the session scratch dir and return preview + absolute path. Triggered automatically when the body exceeds CHATCLI_WEBFETCH_AUTOSAVE_BYTES (default 10000) AND no filter/range is set.
save_path
string
Override the generated filename for save_to_file (any directory prefix is discarded — writes are always confined to the scratch dir).
max_length
integer
Maximum inline content length (default: 20,000). Content above this is truncated inline — or auto-saved to the scratch dir via auto-save.
render
boolean
Force (true) or suppress (false) headless rendering of JS pages — see Rendering JavaScript pages. Without the parameter, auto mode decides via heuristics.
[full response saved to /tmp/chatcli-agent-Xy7K3a/scratch/webfetch_1712...txt — 142,318 bytes.Use read_file with start/end to examine specific ranges.][first ~50K chars of content]
The agent can then issue a read_file against the absolute path returned, choosing the exact line range that matters.
save_to_file always confines writes to CHATCLI_AGENT_TMPDIR. If save_path is an absolute path or contains .., only filepath.Base is used and the write is validated to ensure the result stays within the scratch dir.
When the LLM calls @webfetchwithout filter, exclude, range or an explicit save_to_file, and the returned body exceeds the auto-save threshold, ChatCLI automatically promotes the call to save_to_file=true. This shields the context from giant pages without requiring the model to know the body size in advance.Default: bodies above 10,000 bytes (configurable via CHATCLI_WEBFETCH_AUTOSAVE_BYTES) trigger the auto-save. The inline result is a compact preview (~5,000 chars), and the response opens with an explicit marker:
[auto-saved: response was 142318 bytes — too large to inline. Full body is at /tmp/chatcli-agent-.../scratch/webfetch_1712....txt. Preview below; use read_file with start/end or rerun with filter/from_line/to_line for specific ranges.][first ~5000 chars of extracted text]...(auto-truncated — full body saved to disk)
To disable or loosen auto-save — e.g. offline batches where the agent needs the whole body inline — raise the threshold:
export CHATCLI_WEBFETCH_AUTOSAVE_BYTES=1000000 # 1 MB — effectively disabled for most pages
On a per-call basis, passing any filter (even .*), explicit from_line/to_line, or save_to_file=false disables the automatic promotion.
See Token Efficiency for the full rationale behind this default.
Pages that build their content client-side (SPAs, JS-rendered tables) return an empty “shell” on a static fetch — <div id="root"> plus bundles, no actual content. @webfetch solves this with an escalation chain:
1
Static fetch
Always the first step. Server-rendered pages stop here — zero extra cost.
A real Chromium renders the page (waits for load + DOM stability) and the settled DOM flows through the same extraction/filter/auto-save pipeline.
4
Browserless fallbacks
Without a browser, the embedded __NEXT_DATA__ state (Next.js) is recovered from the static HTML; as a last resort an honest note tells the model the fetch may be incomplete.
Browser discovery (in order): Chrome → Chromium → Edge → Brave → explicit path in CHATCLI_WEBFETCH_RENDER_BROWSER → opt-in download of a pinned Chromium (~150 MB, once) with CHATCLI_WEBFETCH_RENDER_AUTOPROVISION=true. No API keys, no external services.Production posture: one shared browser per process (lazy launch, health-checked reuse, shutdown after 2 idle minutes), a circuit breaker (2 launch failures → 5-minute pause), an incognito context per render (cookies never leak between sites) and SSRF enforced inside the browser — every sub-request the page fires is validated through CDP interception, mirroring the regular HTTP path guard. Rendered DOM capped at 10 MB.
Variable
Description
Default
CHATCLI_WEBFETCH_RENDER
auto (heuristics decide), always, never
auto
CHATCLI_WEBFETCH_RENDER_TIMEOUT
Render timeout in seconds
25
CHATCLI_WEBFETCH_RENDER_BROWSER
Absolute path to a specific Chromium-based binary
(auto-detect)
CHATCLI_WEBFETCH_RENDER_AUTOPROVISION
Allows the one-time download of a pinned Chromium when no browser exists
false
> @webfetch https://app-spa.example.com/dashboardPage appears JS-rendered; escalating to headless browser...
Performs a web search and returns results with title, URL and snippet. Supports two keyless backends by design — no third-party API key to register: DuckDuckGo (HTML scraping) is the zero-config default, and self-hosted SearxNG is preferred in corporate environments when you point to an internal instance.
Locked-down corporate networks — you control the backend, no egress to public scraping, aggregates several engines (Bing/Google/Qwant) through the instance
Requires running an internal container + enabling JSON in settings.yml
Brave Search
Nothing
Independent index (not a meta-search) — real diversity when DDG blocks
HTML scraping; layout may shift (parser anchored on stable semantic attributes)
Mojeek
Nothing
Independent index, UK-based crawler
Some networks receive a 403 for automated traffic — the chain simply moves on
For each query, ChatCLI builds an ordered chain of backends. If the first one fails or returns empty, the next one is tried automatically.Default order (CHATCLI_WEBSEARCH_PROVIDER unset or auto):
1. DuckDuckGo ← default, always available2. SearxNG ← only added to the chain when SEARXNG_URL is set3. Brave Search ← independent index, zero config4. Mojeek ← independent index, zero config
Result: the chain becomes searxng → duckduckgo → brave → mojeek. The others remain as fallbacks if the SearxNG instance fails. The same applies to any provider: CHATCLI_WEBSEARCH_PROVIDER=brave moves Brave to the front and keeps the rest behind it.
The SearxNG instance must have its JSON API enabled — it isn’t on by default. In the SearxNG settings.yml:
search: formats: - html - json
If you point SEARXNG_URL at an instance without JSON enabled, ChatCLI returns an actionable error instead of a cryptic decode failure:
SearxNG did not return JSON (Content-Type="text/html"). Enable JSON in settings.yml: search.formats: [html, json]
The official searxng/searxng Docker Hub image boots in 30 seconds. In a corporate environment, a single container with internal ingress is enough — and it solves the “DDG blocked by the proxy” problem once and for all.
SelectSearchChain() reads CHATCLI_WEBSEARCH_PROVIDER and SEARXNG_URL, returns an ordered list of backends to try.
2
Sequential attempt
For each backend in the chain: call the search function. If results come back, stop and format. If it fails or returns zero, log the reason and advance to the next.
3
Formatting
Results become formatted text with via <provider> in the header, numbered with title + URL + snippet.
websearch golang rate limiting best practices 2026
A JSON call without a usable query is an error naming the field — the tool never searches its own JSON text. The query is accepted as query, q, search, term, text or keywords, and the limit as maxResults, max_results, limit, n or count, in the envelope or flat.
User: Search how to set up OpenTelemetry with GoAgent: I'll search for up-to-date information on that.[tool_call: websearch {"query": "opentelemetry go setup tutorial"}]Search results for: "opentelemetry go setup tutorial" (via DuckDuckGo)1. Getting Started with OpenTelemetry in Go URL: https://opentelemetry.io/docs/languages/go/getting-started/ Official guide to instrumenting Go applications with OpenTelemetry...2. OpenTelemetry Go SDK - Complete Guide URL: https://example.com/otel-go-guide Step-by-step tutorial covering traces, metrics and logs...
The (via DuckDuckGo) or (via SearxNG) header makes it clear which backend responded — useful for diagnosing why a query returned nothing (e.g. DDG served a CAPTCHA → falls back to SearxNG).
Why keyless? ChatCLI is used in corporate environments where managing third-party API keys (Brave Search, Tavily, SerpAPI) creates operational friction — registration, rotation, approvals. Self-hosted SearxNG solves network lockdown without recurring cost; DuckDuckGo covers casual use without any config.
Looks things up on Wikipedia keyless, via the public MediaWiki API: it searches for article titles matching a term, or reads the plain-text intro (summary) of a specific article. A natural companion to @websearch/@webfetch for quick fact-checking — no API key, no MCP server.
search — takes a term and returns up to 5 matching article titles (the exact titles to pass to read).
read — takes the exact title of an article (alias title) and returns its plain-text intro (no HTML, no markup). With sections: true it lists the article’s headings with index and size; with section (a heading, case-insensitive, a unique substring of one, or its 1-based index) it returns just that section with its subsections; with full: true the whole text, capped by max_chars (default 12 000, max 60 000) with a note on what was cut. One fetch serves all three, so read the intro, list the sections, then read the one that matters instead of the page.
The language is configurable via lang (default en; e.g. pt, es, fr). Values like pt-BR are normalized to pt.
The LLM invokes @wikipedia automatically when it needs a verifiable fact. The typical flow is: search for the term, then read the exact title returned.
User: Who was Ada Lovelace?Agent: Let me check Wikipedia.[tool_call: wikipedia {"query": "Ada Lovelace"}][tool_call: wikipedia {"read": "Ada Lovelace"}]Ada Lovelace (1815-1852) was an English mathematician and writer, known forher work on Charles Babbage's Analytical Engine...
@wikipedia is keyless and respects the MediaWiki API etiquette (identified User-Agent). For quick fact-checking it is cheaper and more direct than chaining @websearch + @webfetch.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/schema.json","name":"ChatCLI","description":"Official ChatCLI documentation — a multi-provider AI CLI with agent mode, gRPC server and Kubernetes operator.","colors":{"primary":"#0F766E","light":"#2DD4BF","dark":"#0D9488"},"logo":{"light":"https://mintcdn.com/encom/Rcdb5Pr5hpjwN46r/images/logo-light.svg?fit=max\u0026auto=format\u0026n=Rcdb5Pr5hpjwN46r\u0026q=85\u0026s=965a0feb9bd2f65a11b3c486e2488101","dark":"https://mintcdn.com/encom/Rcdb5Pr5hpjwN46r/images/logo-dark.svg?fit=max\u0026auto=format\u0026n=Rcdb5Pr5hpjwN46r\u0026q=85\u0026s=ac3f6607cdea0039d0b66b80f700e512","href":"/"},"favicon":"https://mintcdn.com/encom/Rcdb5Pr5hpjwN46r/images/favicon.svg?fit=max\u0026auto=format\u0026n=Rcdb5Pr5hpjwN46r\u0026q=85\u0026s=c774e29d1b243b7c3b4bf5e173fef299","api":{"openapi":"api-reference/openapi.json","playground":{"display":"interactive"}},"appearance":{"default":"dark","strict":false},"background":{"color":{"light":"#F7F7F5","dark":"#0E0F10"}},"navbar":{"links":[{"href":"/cookbook/agent-refactoring","label":"Cookbook"},{"href":"/releases","label":"Releases"},{"href":"https://github.com/diillson/chatcli","type":"github"}],"primary":{"type":"button","label":"Install","href":"/start/installation"}},"footer":{"socials":{"github":"https://github.com/diillson/chatcli","x":"https://x.com/diillson"},"links":[{"header":"Resources","items":[{"label":"Documentation","href":"/"},{"label":"Cookbook","href":"/cookbook/agent-refactoring"},{"label":"API Reference","href":"/reference/api/overview"}]},{"header":"Community","items":[{"label":"GitHub","href":"https://github.com/diillson/chatcli"},{"label":"Issues","href":"https://github.com/diillson/chatcli/issues"},{"label":"Discussions","href":"https://github.com/diillson/chatcli/discussions"},{"label":"Releases","href":"https://github.com/diillson/chatcli/releases"}]},{"header":"Distribution","items":[{"label":"ArtifactHub","href":"https://artifacthub.io/packages/search?ts_query_web=chatcli"},{"label":"Helm Charts","href":"https://artifacthub.io/packages/helm/chatcli/chatcli"},{"label":"Container Registry","href":"https://github.com/diillson/chatcli/pkgs/container/chatcli"}]}]},"search":{"prompt":"Search"},"seo":{"metatags":{"og:type":"website","og:site_name":"ChatCLI Documentation","twitter:card":"summary_large_image","twitter:site":"@diillson"}},"fonts":{"heading":{"family":"Geist","weight":600},"body":{"family":"Geist"}},"styling":{"eyebrows":"section","codeblocks":"system","latex":true},"integrations":{},"errors":{"404":{"redirect":false}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity"],"display":"header"},"interaction":{"drilldown":true},"navigation":{"languages":[{"language":"en","default":true,"href":""},{"language":"pt-BR","footer":{"socials":{"github":"https://github.com/diillson/chatcli","x":"https://x.com/diillson"},"links":[{"header":"Recursos","items":[{"label":"Documentação","href":"/pt"},{"label":"Cookbook","href":"/pt/cookbook/agent-refactoring"},{"label":"API Reference","href":"/pt/reference/api/overview"}]},{"header":"Comunidade","items":[{"label":"GitHub","href":"https://github.com/diillson/chatcli"},{"label":"Issues","href":"https://github.com/diillson/chatcli/issues"},{"label":"Discussions","href":"https://github.com/diillson/chatcli/discussions"},{"label":"Releases","href":"https://github.com/diillson/chatcli/releases"}]},{"header":"Distribuição","items":[{"label":"ArtifactHub","href":"https://artifacthub.io/packages/search?ts_query_web=chatcli"},{"label":"Helm Charts","href":"https://artifacthub.io/packages/helm/chatcli/chatcli"},{"label":"Container Registry","href":"https://github.com/diillson/chatcli/pkgs/container/chatcli"}]}]},"navbar":{"links":[{"href":"/pt/cookbook/agent-refactoring","label":"Cookbook"},{"href":"/pt/releases","label":"Releases"},{"href":"https://github.com/diillson/chatcli","type":"github"}],"primary":{"type":"button","label":"Instalar","href":"/pt/start/installation"}},"href":"pt"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"encom","hasAudioNarration":false,"actualSubdomain":"encom","customDomains":["chatcli.edilsonfreitas.com"],"gitSource":{"type":"github","owner":"diillson","repo":"chatcli.ai","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6add34299e1712172edc47d1","collectionId":"277f6ff4-3a3c-4d0e-b0a1-dcd5341a5370","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6add34299e1712172edc47d1"},"entitlements":{},"buildId":"6add3f6f4a5b340ece6c5bdc","clientVersion":"0.0.3965","searchFilterCounts":[{"language":"en","tag":"Documentation","count":206},{"language":"pt-BR","tag":"Documentação","count":206},{"language":"en","tag":"Reference","count":55},{"language":"pt-BR","tag":"Referência","count":55},{"language":"en","tag":"REST API","count":50},{"language":"pt-BR","tag":"REST API","count":50},{"language":"en","tag":"Agents","count":20},{"language":"pt-BR","tag":"Agentes","count":20},{"language":"en","tag":"Context \u0026 memory","count":16},{"language":"en","tag":"Cookbook","count":16},{"language":"pt-BR","tag":"Contexto e memória","count":16},{"language":"pt-BR","tag":"Cookbook","count":16},{"language":"en","tag":"Using ChatCLI","count":15},{"language":"pt-BR","tag":"Usando o ChatCLI","count":15},{"language":"en","tag":"Kubernetes \u0026 AIOps","count":14},{"language":"pt-BR","tag":"Kubernetes e AIOps","count":14},{"language":"en","tag":"Tools","count":13},{"language":"pt-BR","tag":"Ferramentas","count":13},{"language":"en","tag":"Channels \u0026 gateway","count":11},{"language":"pt-BR","tag":"Canais e gateway","count":11}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"/* cyrillic-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n@keyframes cb-blink{50%{opacity:0}}@keyframes cc-nav-in{0%{opacity:0;transform:translateX(18px)}}@keyframes cc-nav-out{0%{opacity:0;transform:translateX(-18px)}}:root{--cc-accent:#0f766e;--cc-accent-strong:#115e59;--cc-accent-soft:rgb(13 148 136 / 0.08);--cc-accent-ring:rgb(13 148 136 / 0.32);--cc-glow:rgb(20 184 166 / 0.07);--cc-text:#17171a;--cc-text-2:#46464e;--cc-text-3:#6b6b74;--cc-surface:#ffffff;--cc-surface-2:#f1f0ed;--cc-code-bg:#f3f2ef;--cc-border:rgb(23 23 26 / 0.10);--cc-border-strong:rgb(23 23 26 / 0.18);--cc-shadow:0 1px 2px rgb(0 0 0 / 0.04), 0 8px 24px -12px rgb(0 0 0 / 0.10);--cc-radius:0.75rem;--cc-radius-sm:0.5rem;--cc-mono:\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace}html.dark{--cc-accent:#2dd4bf;--cc-accent-strong:#5eead4;--cc-accent-soft:rgb(45 212 191 / 0.12);--cc-accent-ring:rgb(45 212 191 / 0.40);--cc-glow:rgb(45 212 191 / 0.08);--cc-text:#ededed;--cc-text-2:#bcbcc4;--cc-text-3:#8e8e96;--cc-surface:#161719;--cc-surface-2:#1c1d20;--cc-code-bg:#121314;--cc-border:rgb(154 154 162 / 0.16);--cc-border-strong:rgb(154 154 162 / 0.28);--cc-shadow:0 1px 2px rgb(0 0 0 / 0.25), 0 12px 32px -16px rgb(0 0 0 / 0.6);--cc-live:#4ade80;--cc-live-soft:rgb(74 222 128 / 0.12)}::selection{background:var(--cc-accent-ring)}body::before{content:\"\";position:fixed;inset:0 0 auto auto;width:60vw;height:32rem;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 75% 0%,var(--cc-glow),transparent 65%)}#navbar{backdrop-filter:saturate(140%) blur(12px)}#navbar #search-bar-entry{border-color:var(--cc-border);background:var(--cc-surface);box-shadow:none}#sidebar-title,#topbar-cta-button a{font-weight:500}#sidebar-title{font-size:.75rem;letter-spacing:.01em;color:var(--cc-text-3)}#navbar #search-bar-entry,#sidebar #navigation-items a,#topbar-cta-button a{border-radius:var(--cc-radius-sm)}#sidebar #navigation-items a.text-primary,#sidebar #navigation-items a[class*=bg-primary]{background:var(--cc-accent-soft);color:var(--cc-accent);text-shadow:none;font-weight:500}.nav-tag-pill-text{font-family:var(--cc-mono);font-weight:500!important;letter-spacing:.02em}#header .eyebrow{color:var(--cc-accent);font-size:.8125rem;font-weight:500}#page-title{font-size:clamp(2rem,3.2vw,2.5rem);font-weight:600;letter-spacing:-.025em;line-height:1.15}#header .prose{color:var(--cc-text-2)}#page-context-menu button,#page-context-menu-button{border-radius:var(--cc-radius-sm)}#content{font-size:.975rem}#content h2,#content h3{letter-spacing:-.02em;font-weight:600}#content h3{letter-spacing:-.01em}#content a:not(.card):not([class*=cc-]){text-decoration-color:var(--cc-accent-ring);text-underline-offset:3px}#content a:not(.card):not([class*=cc-]):hover{text-decoration-color:var(--cc-accent)}.font-mono,code,kbd,pre{font-family:var(--cc-mono)!important}#content :not(pre)>code{font-size:.85em;padding:.1em .38em;border-radius:.375rem;border:1px solid var(--cc-border);background:var(--cc-surface-2)}.code-block,[data-component-part=code-block-root]{border-radius:var(--cc-radius)!important;border-color:var(--cc-border)!important}.callout,.code-block-background{border-radius:var(--cc-radius)!important}html.dark .code-block-background{background:var(--cc-code-bg)!important}#content table{font-size:.9rem}#content table thead th{font-size:.8125rem;font-weight:600;color:var(--cc-text-2);border-bottom:1px solid var(--cc-border-strong)}#content table td{border-color:var(--cc-border)}.callout{border:1px solid var(--cc-border)!important;background:var(--cc-surface)!important;box-shadow:var(--cc-shadow)}.callout>div:last-child,.callout>div:last-child *{color:var(--cc-text-2)}.callout>div:last-child code,.callout>div:last-child strong{color:var(--cc-text)!important}.callout[data-callout-type=warning]{border-left:3px solid #f59e0b!important}.callout[data-callout-type=danger]{border-left:3px solid #ef4444!important}.card{border-radius:var(--cc-radius)!important;border-color:var(--cc-border)!important;background:var(--cc-surface)!important;transition:border-color 160ms ease,transform 160ms ease}a.card:hover{border-color:var(--cc-accent-ring)!important}.card [data-component-part=card-icon]{display:grid;place-items:center;width:2.25rem;height:2.25rem;margin-bottom:.25rem;border-radius:var(--cc-radius-sm);border:1px solid var(--cc-border);background:var(--cc-surface-2)}.card [data-component-part=card-icon] svg{width:1rem!important;height:1rem!important;background-color:var(--cc-accent)!important}.steps [data-component-part=step-number]>div{background:var(--cc-surface)!important;box-shadow:0 0 0 1px var(--cc-accent-ring);color:var(--cc-accent)!important;font-family:var(--cc-mono)}[role=tablist] [data-state=active],[role=tablist] button[aria-selected=true]{color:var(--cc-accent)!important;border-color:var(--cc-accent)!important}#content-area:has([data-chatcli-banner]) #header,#content-area:has([data-chatcli-banner]) #header .eyebrow,#content-area:has([data-chatcli-banner]) #header .prose,#content-area:has([data-chatcli-banner]) #page-title{display:none}#content-area:has([data-chatcli-banner]) #content{margin-top:0}.chatcli-banner{margin:3rem 0 .75rem}.chatcli-banner-art{--cb-a:#0d9488;--cb-b:#0891b2;--cb-c:#2563eb;--cb-edge:rgb(23 23 26 / 0.28);--cb-glow:rgb(13 148 136 / 0.18);display:block;width:min(100%,30rem);height:auto;overflow:visible}html.dark .chatcli-banner-art{--cb-a:#2dd4bf;--cb-b:#22d3ee;--cb-c:#60a5fa;--cb-edge:rgb(237 237 237 / 0.22);--cb-glow:rgb(45 212 191 / 0.34)}.chatcli-banner .cb-fills rect{shape-rendering:crispEdges}.chatcli-banner .cb-fills{filter:drop-shadow(0 0 14px var(--cb-glow))}.chatcli-banner .cb-edges path{fill:none;stroke:var(--cb-edge);stroke-width:.55;stroke-linecap:square}.cb-prompt{margin:0 0 1.25rem;font-family:var(--cc-mono);font-size:.95rem;color:var(--cc-text-2)}.cb-prompt-sign{color:var(--cc-accent)}.cb-cursor{display:inline-block;width:.55em;height:1.1em;margin-left:.3em;vertical-align:-.18em;background:var(--cc-accent);animation:cb-blink 1.1s steps(1) infinite}@media (prefers-reduced-motion:reduce){.cb-cursor{animation:none}}.chatcli-banner-tagline{font-size:1.125rem;line-height:1.6;margin:0 0 2rem;max-width:44rem;color:var(--cc-text-2)}.chatcli-banner-tagline strong{color:var(--cc-text);font-weight:500}.cc-entry>div,a.cc-release{border:1px solid var(--cc-border);border-radius:var(--cc-radius);background:var(--cc-surface)}a.cc-release{display:flex;align-items:center;gap:.75rem;padding:.85rem 1.1rem;margin:0 0 1.25rem;color:var(--cc-text-2);font-size:.875rem;text-decoration:none!important;border-bottom-width:1px;transition:border-color 160ms ease}a.cc-release:hover{border-color:var(--cc-accent-ring)}.cc-release-label{color:var(--cc-text-3);white-space:nowrap}.cc-release-version{display:inline-flex;align-items:center;gap:.4rem;font-weight:600;color:var(--cc-text);white-space:nowrap}.cc-release-version::before{content:\"\";width:.4rem;height:.4rem;border-radius:999px;background:var(--cc-live);box-shadow:0 0 0 3px var(--cc-live-soft)}.cc-release-summary{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cc-release-cta{font-weight:500;color:var(--cc-text);white-space:nowrap}.cc-entry{margin:0 0 3rem}.cc-entry>div{gap:0!important;overflow:hidden}.cc-entry .card{margin:0!important;border:0!important;border-radius:0!important;background:0 0!important;height:100%}.cc-entry .card:hover{background:var(--cc-accent-soft)!important}@media (min-width:1024px){.cc-entry .card{border-left:1px solid var(--cc-border)!important}.cc-entry>div>.card:first-child,.cc-entry>div>:first-child .card{border-left:0!important}}@media (max-width:1023px){.cc-entry .card{border-top:1px solid var(--cc-border)!important}.cc-entry>div>.card:first-child,.cc-entry>div>:first-child .card{border-top:0!important}a.cc-release{flex-wrap:wrap}.cc-release-summary{flex-basis:100%;white-space:normal}}.cc-release-meta{display:flex;flex-wrap:wrap;gap:.5rem 1.25rem;margin:0 0 1.5rem;font-size:.875rem;color:var(--cc-text-3)}.cc-release-meta a{color:var(--cc-text-2)!important}.cc-scope{display:inline-block;margin-right:.35rem;padding:.05rem .4rem;border-radius:.375rem;border:1px solid var(--cc-border);background:var(--cc-surface-2);font-family:var(--cc-mono);font-size:.78em;color:var(--cc-text-2);vertical-align:.08em}a.cc-scope{text-decoration:none!important;color:var(--cc-accent)!important}.cc-refs{font-size:.85em;color:var(--cc-text-3);white-space:nowrap}.cc-refs a{color:var(--cc-text-3)!important}html{--cc-live:#15803d;--cc-live-soft:rgb(21 128 61 / 0.10)}.nav-tag-pill-text[data-nav-tag=\"Mais recente\"],.nav-tag-pill-text[data-nav-tag=Latest],.nav-tag-pill-text[data-nav-tag^=v]{display:inline-flex;align-items:center;gap:.3rem;color:var(--cc-live)!important;background:var(--cc-live-soft)!important}.nav-tag-pill-text[data-nav-tag=\"Mais recente\"]::before,.nav-tag-pill-text[data-nav-tag=Latest]::before,.nav-tag-pill-text[data-nav-tag^=v]::before{content:\"\";width:.35rem;height:.35rem;border-radius:999px;background:currentColor}.cc-nav-back{display:flex;align-items:center;gap:.6rem;width:100%;margin:0 0 1rem;padding:.6rem .85rem;border:1px solid var(--cc-border);border-radius:var(--cc-radius-sm);background:var(--cc-surface);color:var(--cc-text);font-weight:600;text-align:left;cursor:pointer;transition:border-color 160ms ease,background 160ms ease}#navigation-items[data-cc-focus] [data-cc-focused]>button,.cc-nav-back[hidden]{display:none}.cc-nav-back:hover,a.cc-channel:hover{border-color:var(--cc-accent-ring)}.cc-nav-back svg{flex:none;color:var(--cc-text-3)}#navigation-items[data-cc-focus] ul.sidebar-group>li:not([data-cc-focused]),#navigation-items[data-cc-focus]>div:not(:has([data-cc-focused])){display:none}#navigation-items[data-cc-focus]>div:has([data-cc-focused]){margin-top:0}#navigation-items[data-cc-focus]>div:has([data-cc-focused])>:not(ul){display:none}#navigation-items[data-cc-focus] [data-cc-focused]>ul>li>a,#navigation-items[data-cc-focus] [data-cc-focused]>ul>li>button{padding-left:1rem!important}#navigation-items[data-cc-focus] [data-cc-focused]>ul>li>ul a,#navigation-items[data-cc-focus] [data-cc-focused]>ul>li>ul button{padding-left:1.75rem!important}#navigation-items.cc-nav-in{animation:cc-nav-in 220ms cubic-bezier(.23,1,.32,1)}#navigation-items.cc-nav-out{animation:cc-nav-out 220ms cubic-bezier(.23,1,.32,1)}@media (prefers-reduced-motion:reduce){#navigation-items.cc-nav-in,#navigation-items.cc-nav-out{animation:none}}.cc-channels{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.85rem;margin:1.25rem 0 2rem}@media (max-width:900px){.cc-channels{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:520px){.cc-channels{grid-template-columns:1fr}}a.cc-channel{display:flex;align-items:center;gap:.85rem;padding:1rem 1.1rem;border:1px solid var(--cc-border);border-radius:var(--cc-radius);background:var(--cc-surface);color:var(--cc-text)!important;font-weight:500;font-size:.95rem;text-decoration:none!important;transition:border-color 160ms ease,transform 160ms ease}.cc-channel-icon{display:grid;place-items:center;flex:none;width:1.6rem;height:1.6rem}.cc-channel-icon svg{width:1.45rem;height:1.45rem}.cc-channel-name{flex:1;min-width:0}.cc-channel-arrow{flex:none;width:1rem;height:1rem;color:var(--cc-text-3);transition:transform 160ms ease,color 160ms ease}a.cc-channel:hover .cc-channel-arrow{color:var(--cc-text);transform:translateX(2px)}.cc-ch-telegram{color:#26a5e4}.cc-ch-slack{color:#e01e5a}.cc-ch-discord{color:#5865f2}.cc-ch-whatsapp{color:#25d366}.cc-ch-webhook{color:var(--cc-accent)}.cc-ch-all{color:var(--cc-text-3)}html.dark .cc-ch-discord{color:#8991ff}#sidebar #navigation-items a,#sidebar #navigation-items button{font-size:.8125rem!important;line-height:1.35rem;padding-top:.3rem!important;padding-bottom:.3rem!important}#sidebar #navigation-items svg{width:.95rem;height:.95rem}.cc-nav-back{font-size:.8125rem}#table-of-contents,#table-of-contents a,#table-of-contents li{font-size:.8125rem!important;line-height:1.3rem}#table-of-contents a{padding-top:.2rem;padding-bottom:.2rem}#content-container:has([data-chatcli-banner]){max-width:min(100%,1440px)!important}#content-container:has([data-chatcli-banner]) #content-area{max-width:none!important}#navigation-items li[data-title]:not([id])>button>div:not(:has(svg)){flex:1 1 auto;min-width:0;text-align:left}body::after{content:\"\";position:absolute;top:0;right:0;z-index:0;width:min(78vw,1100px);height:440px;pointer-events:none;background:linear-gradient(225deg,#2dd4bf 0,#22d3ee 40%,#60a5fa 75%,transparent 100%);-webkit-mask:url(/images/hero-halftone.svg) right top/100% 100% no-repeat;mask:url(/images/hero-halftone.svg) right top/100% 100% no-repeat;opacity:.6}html:not(.dark) body::after{background:linear-gradient(225deg,#0d9488 0,#0891b2 40%,#2563eb 75%,transparent 100%);opacity:.38}@media (max-width:760px){body::after{width:100vw;height:280px;opacity:.4}html:not(.dark) body::after{opacity:.26}}#navigation-items li[data-title]:not([id])>button{position:relative}#navigation-items li[data-title]:not([id])>button>:last-child svg,#navigation-items li[data-title]:not([id])>button>svg:last-child{visibility:hidden}#navigation-items li[data-title]:not([id])>button::after{content:\"\";position:absolute;top:50%;right:.7rem;width:12px;height:12px;margin-top:-6px;background:currentColor;-webkit-mask:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='m6 3.5 4.5 4.5L6 12.5' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\") center/contain no-repeat;mask:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='m6 3.5 4.5 4.5L6 12.5' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\") center/contain no-repeat;opacity:.42;pointer-events:none;transition:rotate 200ms cubic-bezier(.23,1,.32,1),opacity 160ms ease}#navigation-items li[data-title]:not([id])>button[aria-expanded=true]::after{rotate:90deg}#navigation-items li[data-title]:not([id])>button:hover::after{opacity:.75}@media (prefers-reduced-motion:reduce){#navigation-items li[data-title]:not([id])>button::after{transition:none}}"}],"page":{"pagePath":"tools/web-tools","slug":"/tools/web-tools","pageMetadata":{"title":"WebFetch \u0026 WebSearch","sidebarTitle":"Web Tools","description":"Built-in tools for web search and page fetching directly from agent/coder mode","icon":"globe","href":"/tools/web-tools"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Built-in tools for web search and page fetching directly from agent/coder mode\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,hr:`hr`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Card,CardGroup,CodeBlock,Heading,Info,Note,Step,Steps,Tab,Table,Tabs,Tip,Warning}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`ChatCLI includes three native web tools — `,_jsx(_components.strong,{children:`@webfetch`}),`, `,_jsx(_components.strong,{children:`@websearch`}),` and `,_jsx(_components.strong,{children:`@wikipedia`}),` — that allow the agent to search the internet, fetch web pages and look things up on Wikipedia without depending on external MCP servers.`]}),`\n`,_jsx(Info,{children:_jsx(_components.p,{children:`Web tools are native ChatCLI tools, automatically available in agent and coder modes. No MCP server configuration is required to use them.`})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`@webfetch`,children:`@webfetch`}),`\n`,_jsx(_components.p,{children:`Fetches a URL, strips the HTML, and returns the clean text content. Ideal for reading documentation, articles, READMEs, and any web page.`}),`\n`,_jsx(Heading,{level:`3`,id:`how-it-works`,children:`How It Works`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`HTTP request`,children:_jsx(_components.p,{children:`ChatCLI makes a GET request to the provided URL with standard browser headers.`})}),_jsx(Step,{title:`HTML parsing`,children:_jsxs(_components.p,{children:[`The received HTML is parsed using `,_jsx(_components.code,{children:`golang.org/x/net/html`}),`, extracting only the text content.`]})}),_jsx(Step,{title:`Cleanup`,children:_jsx(_components.p,{children:`Script, style, navigation tags and non-text elements are removed. The resulting text is cleaned and formatted.`})}),_jsx(Step,{title:`Return`,children:_jsx(_components.p,{children:`The text content is returned to the agent as the tool call result.`})})]}),`\n`,_jsx(Heading,{level:`3`,id:`usage`,children:`Usage`}),`\n`,_jsxs(_components.p,{children:[`The LLM invokes `,_jsx(_components.code,{children:`@webfetch`}),` automatically when it needs to access content from a URL. You can also request it explicitly:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Read the documentation at https://pkg.go.dev/net/http and explain the Client type to me`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`argument-formats`,children:`Argument Formats`}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`JSON`,id:`json`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"tool\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"webfetch\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"args\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://pkg.go.dev/net/http\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})}),_jsx(Tab,{title:`Positional`,id:`positional`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`webfetch https://pkg.go.dev/net/http`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Error pages are returned, not hidden.`}),` Any 2xx is a success. A 4xx/5xx is an error that carries the page `,_jsx(_components.strong,{children:`as text`}),` (what a 404 says, a login wall, a bot challenge) and the move that follows: an access check (401/403/429/503) points to `,_jsx(_components.code,{children:`@browser`}),` and its visible hand-off, a 404/410 to searching for the current location, a 5xx to a single retry.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`example`,children:`Example`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`9`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`User: Fetch the content from https://go.dev/blog/error-handling-and-go`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Agent: I'll fetch the page content.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`[tool_call: webfetch {\"url\": \"https://go.dev/blog/error-handling-and-go\"}]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Result: The article \"Error handling and Go\" explains Go's error`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`handling patterns, including...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`@webfetch`}),` respects redirects (up to 10), timeouts (30s), and returns clear errors for inaccessible URLs or SSL issues.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`filters-for-large-payloads`,children:`Filters for large payloads`}),`\n`,_jsxs(_components.p,{children:[`Endpoints like Prometheus `,_jsx(_components.code,{children:`/metrics`}),`, configuration dumps or long listings can easily exceed tens of thousands of characters. `,_jsx(_components.code,{children:`@webfetch`}),` accepts a set of parameters that perform `,_jsx(_components.strong,{children:`line-level filtering before truncation`}),`, so the useful part is not discarded:`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`left`},children:`Parameter`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Type`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`filter`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`string (Go regex)`}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`Keep only lines matching the regex. Applied before `,_jsx(_components.code,{children:`exclude`}),` and `,_jsx(_components.code,{children:`from_line`}),`/`,_jsx(_components.code,{children:`to_line`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`exclude`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`string (Go regex)`}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`Drop lines matching the regex. Applied after `,_jsx(_components.code,{children:`filter`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`from_line`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`integer`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Start of the window in the filtered view (1-based, inclusive).`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`to_line`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`integer`}),_jsx(_components.td,{style:{textAlign:`left`},children:`End of the window in the filtered view (1-based, inclusive).`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`save_to_file`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`boolean`}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`Persist the full pre-filter body to the `,_jsx(_components.a,{href:`/context/session-workspace`,children:`session scratch dir`}),` and return preview + absolute path. Triggered `,_jsx(_components.strong,{children:`automatically`}),` when the body exceeds `,_jsx(_components.code,{children:`CHATCLI_WEBFETCH_AUTOSAVE_BYTES`}),` (default `,_jsx(_components.code,{children:`10000`}),`) AND no filter/range is set.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`save_path`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`string`}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`Override the generated filename for `,_jsx(_components.code,{children:`save_to_file`}),` (any directory prefix is discarded — writes are always confined to the scratch dir).`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`max_length`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`integer`}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`Maximum inline content length (default: `,_jsx(_components.strong,{children:`20,000`}),`). Content above this is truncated inline — or auto-saved to the scratch dir via auto-save.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`render`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`boolean`}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`Force (`,_jsx(_components.code,{children:`true`}),`) or suppress (`,_jsx(_components.code,{children:`false`}),`) headless rendering of JS pages — see `,_jsx(_components.a,{href:`#rendering-javascript-pages-spa`,children:`Rendering JavaScript pages`}),`. Without the parameter, `,_jsx(_components.code,{children:`auto`}),` mode decides via heuristics.`]})]})]})]}),`\n`,_jsx(_components.p,{children:`Example — filter Prometheus by metric prefix:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"http://payments.prod.svc:9090/metrics\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"filter\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"^chatcli_\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"exclude\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"^# HELP|^# TYPE\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Example — page within the filtered payload:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"http://svc/very-long-changelog\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"filter\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"^- \"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"from_line\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`50`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"to_line\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`80`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Example — save everything to the scratch dir and read slices on demand:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"http://svc/metrics\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"save_to_file\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Response:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`[full response saved to /tmp/chatcli-agent-Xy7K3a/scratch/webfetch_1712...txt — 142,318 bytes.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Use read_file with start/end to examine specific ranges.]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`[first ~50K chars of content]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`The agent can then issue a `,_jsx(_components.code,{children:`read_file`}),` against the absolute path returned, choosing the exact line range that matters.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`save_to_file`}),` always confines writes to `,_jsx(_components.code,{children:`CHATCLI_AGENT_TMPDIR`}),`. If `,_jsx(_components.code,{children:`save_path`}),` is an absolute path or contains `,_jsx(_components.code,{children:`..`}),`, only `,_jsx(_components.code,{children:`filepath.Base`}),` is used and the write is validated to ensure the result stays within the scratch dir.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`smart-auto-save`,children:`Smart auto-save`}),`\n`,_jsxs(_components.p,{children:[`When the LLM calls `,_jsx(_components.code,{children:`@webfetch`}),` `,_jsx(_components.strong,{children:`without`}),` filter, exclude, range or an explicit `,_jsx(_components.code,{children:`save_to_file`}),`, and the returned body exceeds the auto-save threshold, ChatCLI `,_jsx(_components.strong,{children:`automatically promotes`}),` the call to `,_jsx(_components.code,{children:`save_to_file=true`}),`. This shields the context from giant pages without requiring the model to know the body size in advance.`]}),`\n`,_jsxs(_components.p,{children:[`Default: bodies above `,_jsx(_components.strong,{children:`10,000 bytes`}),` (configurable via `,_jsx(_components.code,{children:`CHATCLI_WEBFETCH_AUTOSAVE_BYTES`}),`) trigger the auto-save. The inline result is a compact preview (~5,000 chars), and the response opens with an explicit marker:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`[auto-saved: response was 142318 bytes — too large to inline.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Full body is at /tmp/chatcli-agent-.../scratch/webfetch_1712....txt.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Preview below; use read_file with start/end or rerun with`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` filter/from_line/to_line for specific ranges.]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`[first ~5000 chars of extracted text]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`...(auto-truncated — full body saved to disk)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(Tip,{children:[_jsx(_components.p,{children:`To disable or loosen auto-save — e.g. offline batches where the agent needs the whole body inline — raise the threshold:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` CHATCLI_WEBFETCH_AUTOSAVE_BYTES`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1000000`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # 1 MB — effectively disabled for most pages`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`On a per-call basis, passing any `,_jsx(_components.code,{children:`filter`}),` (even `,_jsx(_components.code,{children:`.*`}),`), explicit `,_jsx(_components.code,{children:`from_line`}),`/`,_jsx(_components.code,{children:`to_line`}),`, or `,_jsx(_components.code,{children:`save_to_file=false`}),` disables the automatic promotion.`]})]}),`\n`,_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/context/token-efficiency`,children:`Token Efficiency`}),` for the full rationale behind this default.`]}),`\n`,_jsx(Heading,{level:`3`,id:`rendering-javascript-pages-spa`,children:`Rendering JavaScript pages (SPA)`}),`\n`,_jsxs(_components.p,{children:[`Pages that build their content client-side (SPAs, JS-rendered tables) return an empty “shell” on a static fetch — `,_jsx(_components.code,{children:`\u003cdiv id=\"root\">`}),` plus bundles, no actual content. `,_jsx(_components.code,{children:`@webfetch`}),` solves this with an `,_jsx(_components.strong,{children:`escalation chain`}),`:`]}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Static fetch`,children:_jsx(_components.p,{children:`Always the first step. Server-rendered pages stop here — zero extra cost.`})}),_jsx(Step,{title:`JS-shell detection`,children:_jsxs(_components.p,{children:[`Heuristics: thin extracted text + structural signals (empty `,_jsx(_components.code,{children:`#root`}),`/`,_jsx(_components.code,{children:`#app`}),` mount points, `,_jsx(_components.code,{children:`\u003cnoscript>`}),` warnings, framework markers — React, Next, Angular, Vue, Nuxt, Svelte, Gatsby, Remix, Flutter).`]})}),_jsx(Step,{title:`Headless render via CDP`,children:_jsx(_components.p,{children:`A real Chromium renders the page (waits for load + DOM stability) and the settled DOM flows through the same extraction/filter/auto-save pipeline.`})}),_jsx(Step,{title:`Browserless fallbacks`,children:_jsxs(_components.p,{children:[`Without a browser, the embedded `,_jsx(_components.code,{children:`__NEXT_DATA__`}),` state (Next.js) is recovered from the static HTML; as a last resort an honest note tells the model the fetch may be incomplete.`]})})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Browser discovery`}),` (in order): Chrome → Chromium → Edge → `,_jsx(_components.strong,{children:`Brave`}),` → explicit path in `,_jsx(_components.code,{children:`CHATCLI_WEBFETCH_RENDER_BROWSER`}),` → opt-in download of a pinned Chromium (~150 MB, once) with `,_jsx(_components.code,{children:`CHATCLI_WEBFETCH_RENDER_AUTOPROVISION=true`}),`. No API keys, no external services.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Production posture:`}),` one shared browser per process (lazy launch, health-checked reuse, shutdown after 2 idle minutes), a `,_jsx(_components.strong,{children:`circuit breaker`}),` (2 launch failures → 5-minute pause), an incognito context per render (cookies never leak between sites) and SSRF enforced inside the browser — every sub-request the page fires is validated through CDP interception, mirroring the regular HTTP path guard. Rendered DOM capped at 10 MB.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`left`},children:`Variable`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Description`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Default`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`CHATCLI_WEBFETCH_RENDER`})}),_jsxs(_components.td,{style:{textAlign:`left`},children:[_jsx(_components.code,{children:`auto`}),` (heuristics decide), `,_jsx(_components.code,{children:`always`}),`, `,_jsx(_components.code,{children:`never`})]}),_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`auto`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`CHATCLI_WEBFETCH_RENDER_TIMEOUT`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`Render timeout in seconds`}),_jsx(_components.td,{\"data-numeric\":`true`,style:{textAlign:`left`},children:_jsx(_components.code,{children:`25`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`CHATCLI_WEBFETCH_RENDER_BROWSER`})}),_jsxs(_components.td,{style:{textAlign:`left`},children:[_jsx(_components.strong,{children:`Absolute`}),` path to a specific Chromium-based binary`]}),_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.em,{children:`(auto-detect)`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`CHATCLI_WEBFETCH_RENDER_AUTOPROVISION`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`Allows the one-time download of a pinned Chromium when no browser exists`}),_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`false`})})]})]})]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`> @webfetch https://app-spa.example.com/dashboard`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Page appears JS-rendered; escalating to headless browser...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`@websearch`,children:`@websearch`}),`\n`,_jsxs(_components.p,{children:[`Performs a web search and returns results with title, URL and snippet. Supports `,_jsx(_components.strong,{children:`two keyless backends`}),` by design — no third-party API key to register: `,_jsx(_components.strong,{children:`DuckDuckGo`}),` (HTML scraping) is the zero-config default, and `,_jsx(_components.strong,{children:`self-hosted SearxNG`}),` is preferred in corporate environments when you point to an internal instance.`]}),`\n`,_jsx(Heading,{level:`3`,id:`available-backends`,children:`Available backends`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`left`},children:`Backend`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Requires`}),_jsx(_components.th,{style:{textAlign:`left`},children:`When it shines`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Pain points`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.strong,{children:`DuckDuckGo`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`Nothing`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Default, works out of the box, zero config`}),_jsx(_components.td,{style:{textAlign:`left`},children:`DDG occasionally serves anti-bot interstitials (CAPTCHA) — may return empty results`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.strong,{children:`Self-hosted SearxNG`})}),_jsxs(_components.td,{style:{textAlign:`left`},children:[_jsx(_components.code,{children:`SEARXNG_URL`}),` pointing to your instance`]}),_jsx(_components.td,{style:{textAlign:`left`},children:`Locked-down corporate networks — you control the backend, no egress to public scraping, aggregates several engines (Bing/Google/Qwant) through the instance`}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`Requires running an internal container + enabling JSON in `,_jsx(_components.code,{children:`settings.yml`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.strong,{children:`Brave Search`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`Nothing`}),_jsxs(_components.td,{style:{textAlign:`left`},children:[_jsx(_components.strong,{children:`Independent index`}),` (not a meta-search) — real diversity when DDG blocks`]}),_jsx(_components.td,{style:{textAlign:`left`},children:`HTML scraping; layout may shift (parser anchored on stable semantic attributes)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.strong,{children:`Mojeek`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`Nothing`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Independent index, UK-based crawler`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Some networks receive a 403 for automated traffic — the chain simply moves on`})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`fallback-chain`,children:`Fallback chain`}),`\n`,_jsx(_components.p,{children:`For each query, ChatCLI builds an ordered chain of backends. If the first one fails or returns empty, the next one is tried automatically.`}),`\n`,_jsx(_components.p,{children:_jsxs(_components.strong,{children:[`Default order (`,_jsx(_components.code,{children:`CHATCLI_WEBSEARCH_PROVIDER`}),` unset or `,_jsx(_components.code,{children:`auto`}),`):`]})}),`\n`,_jsx(CodeBlock,{numberOfLines:`5`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`1. DuckDuckGo ← default, always available`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`2. SearxNG ← only added to the chain when SEARXNG_URL is set`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`3. Brave Search ← independent index, zero config`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`4. Mojeek ← independent index, zero config`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Explicit override to prefer SearxNG:`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` CHATCLI_WEBSEARCH_PROVIDER`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`searxng`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` SEARXNG_URL`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`https`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`://`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`searx`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`internal`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`corp`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Result: the chain becomes `,_jsx(_components.code,{children:`searxng → duckduckgo → brave → mojeek`}),`. The others remain as fallbacks if the SearxNG instance fails. The same applies to any provider: `,_jsx(_components.code,{children:`CHATCLI_WEBSEARCH_PROVIDER=brave`}),` moves Brave to the front and keeps the rest behind it.`]}),`\n`,_jsx(Heading,{level:`3`,id:`environment-variables`,children:`Environment variables`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`left`},children:`Variable`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Description`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Default`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`CHATCLI_WEBSEARCH_PROVIDER`})}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`Force a specific backend to the top of the chain: `,_jsx(_components.code,{children:`searxng`}),`, `,_jsx(_components.code,{children:`duckduckgo`}),`, `,_jsx(_components.code,{children:`brave`}),`, `,_jsx(_components.code,{children:`mojeek`}),`, or `,_jsx(_components.code,{children:`auto`}),`.`]}),_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`auto`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`SEARXNG_URL`})}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`Root URL of the SearxNG instance (e.g. `,_jsx(_components.code,{children:`https://searx.internal.corp`}),`). When set, SearxNG joins the chain.`]}),_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.em,{children:`(unset)`})})]})]})]}),`\n`,_jsxs(Heading,{level:`3`,id:`/websearch-command`,children:[_jsx(_components.code,{children:`/websearch`}),` command`]}),`\n`,_jsxs(_components.p,{children:[`Interactive manager for the preferred backend. `,_jsx(_components.strong,{children:`Autocomplete available`}),` for subcommands and provider names.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`left`},children:`Subcommand`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Effect`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{style:{textAlign:`left`},children:[_jsx(_components.code,{children:`/websearch`}),` or `,_jsx(_components.code,{children:`/websearch status`})]}),_jsx(_components.td,{style:{textAlign:`left`},children:`Show current provider + active chain`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`/websearch list`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`List known providers and which are configured`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`/websearch provider \u003csearxng|duckduckgo|brave|mojeek|auto>`})}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`Set preferred provider for the session (sets `,_jsx(_components.code,{children:`CHATCLI_WEBSEARCH_PROVIDER`}),` in the process)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`/websearch reset`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`Remove the override and return to auto mode`})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`/websearch provider`}),` applies only to the current session. To persist, export the env in your shell or add it to `,_jsx(_components.code,{children:`.env`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`configuring-self-hosted-searxng`,children:`Configuring self-hosted SearxNG`}),`\n`,_jsxs(_components.p,{children:[`The SearxNG instance must have its `,_jsx(_components.strong,{children:`JSON API enabled`}),` — it isn’t on by default. In the SearxNG `,_jsx(_components.code,{children:`settings.yml`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`search`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` formats`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`html`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`json`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`If you point `,_jsx(_components.code,{children:`SEARXNG_URL`}),` at an instance without JSON enabled, ChatCLI returns an actionable error instead of a cryptic decode failure:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`SearxNG did not return JSON (Content-Type=\"text/html\"). Enable JSON in settings.yml: search.formats: [html, json]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`The official `,_jsx(_components.code,{children:`searxng/searxng`}),` Docker Hub image boots in 30 seconds. In a corporate environment, a single container with internal ingress is enough — and it solves the “DDG blocked by the proxy” problem once and for all.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`how-it-works-internally`,children:`How it works internally`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Chain selection`,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`SelectSearchChain()`}),` reads `,_jsx(_components.code,{children:`CHATCLI_WEBSEARCH_PROVIDER`}),` and `,_jsx(_components.code,{children:`SEARXNG_URL`}),`, returns an ordered list of backends to try.`]})}),_jsx(Step,{title:`Sequential attempt`,children:_jsx(_components.p,{children:`For each backend in the chain: call the search function. If results come back, stop and format. If it fails or returns zero, log the reason and advance to the next.`})}),_jsx(Step,{title:`Formatting`,children:_jsxs(_components.p,{children:[`Results become formatted text with `,_jsx(_components.code,{children:`via \u003cprovider>`}),` in the header, numbered with title + URL + snippet.`]})})]}),`\n`,_jsx(Heading,{level:`3`,id:`argument-formats-2`,children:`Argument Formats`}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`JSON`,id:`json-2`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"tool\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"websearch\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"args\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"query\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"golang rate limiting best practices 2026\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})}),_jsx(Tab,{title:`Positional`,id:`positional-2`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`websearch golang rate limiting best practices 2026`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`A JSON call `,_jsx(_components.strong,{children:`without a usable query is an error`}),` naming the field — the tool never searches its own JSON text. The query is accepted as `,_jsx(_components.code,{children:`query`}),`, `,_jsx(_components.code,{children:`q`}),`, `,_jsx(_components.code,{children:`search`}),`, `,_jsx(_components.code,{children:`term`}),`, `,_jsx(_components.code,{children:`text`}),` or `,_jsx(_components.code,{children:`keywords`}),`, and the limit as `,_jsx(_components.code,{children:`maxResults`}),`, `,_jsx(_components.code,{children:`max_results`}),`, `,_jsx(_components.code,{children:`limit`}),`, `,_jsx(_components.code,{children:`n`}),` or `,_jsx(_components.code,{children:`count`}),`, in the envelope or flat.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`example-2`,children:`Example`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`16`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`16`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`User: Search how to set up OpenTelemetry with Go`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Agent: I'll search for up-to-date information on that.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`[tool_call: websearch {\"query\": \"opentelemetry go setup tutorial\"}]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Search results for: \"opentelemetry go setup tutorial\" (via DuckDuckGo)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`1. Getting Started with OpenTelemetry in Go`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` URL: https://opentelemetry.io/docs/languages/go/getting-started/`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Official guide to instrumenting Go applications with OpenTelemetry...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`2. OpenTelemetry Go SDK - Complete Guide`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` URL: https://example.com/otel-go-guide`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Step-by-step tutorial covering traces, metrics and logs...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`(via DuckDuckGo)`}),` or `,_jsx(_components.code,{children:`(via SearxNG)`}),` header makes it clear which backend responded — useful for diagnosing why a query returned nothing (e.g. DDG served a CAPTCHA → falls back to SearxNG).`]}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Why keyless?`}),` ChatCLI is used in corporate environments where managing third-party API keys (Brave Search, Tavily, SerpAPI) creates operational friction — registration, rotation, approvals. Self-hosted SearxNG solves network lockdown without recurring cost; DuckDuckGo covers casual use without any config.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`@wikipedia`,children:`@wikipedia`}),`\n`,_jsxs(_components.p,{children:[`Looks things up on Wikipedia `,_jsx(_components.strong,{children:`keyless`}),`, via the public MediaWiki API: it searches for article titles matching a term, or reads the plain-text intro (summary) of a specific article. A natural companion to `,_jsx(_components.code,{children:`@websearch`}),`/`,_jsx(_components.code,{children:`@webfetch`}),` for quick fact-checking — no API key, no MCP server.`]}),`\n`,_jsx(Heading,{level:`3`,id:`how-it-works-2`,children:`How It Works`}),`\n`,_jsx(_components.p,{children:`Two modes:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`search`}),` — takes a term and returns up to 5 matching article titles (the exact titles to pass to `,_jsx(_components.code,{children:`read`}),`).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`read`}),` — takes the exact title of an article (alias `,_jsx(_components.code,{children:`title`}),`) and returns its plain-text intro (no HTML, no markup). With `,_jsx(_components.code,{children:`sections: true`}),` it lists the article’s headings with index and size; with `,_jsx(_components.code,{children:`section`}),` (a heading, case-insensitive, a unique substring of one, or its 1-based index) it returns just that section with its subsections; with `,_jsx(_components.code,{children:`full: true`}),` the whole text, capped by `,_jsx(_components.code,{children:`max_chars`}),` (default 12 000, max 60 000) with a note on what was cut. One fetch serves all three, so read the intro, list the sections, then read the one that matters instead of the page.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`The language is configurable via `,_jsx(_components.code,{children:`lang`}),` (default `,_jsx(_components.code,{children:`en`}),`; e.g. `,_jsx(_components.code,{children:`pt`}),`, `,_jsx(_components.code,{children:`es`}),`, `,_jsx(_components.code,{children:`fr`}),`). Values like `,_jsx(_components.code,{children:`pt-BR`}),` are normalized to `,_jsx(_components.code,{children:`pt`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`usage-2`,children:`Usage`}),`\n`,_jsxs(_components.p,{children:[`The LLM invokes `,_jsx(_components.code,{children:`@wikipedia`}),` automatically when it needs a verifiable fact. The typical flow is: search for the term, then read the exact title returned.`]}),`\n`,_jsx(Heading,{level:`3`,id:`argument-formats-3`,children:`Argument Formats`}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`JSON (search)`,id:`json-search`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{ `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"tool\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"wikipedia\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"args\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"query\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Alan Turing\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } }`})]}),`\n`]})})})}),_jsx(Tab,{title:`JSON (read)`,id:`json-read`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{ `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"tool\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"wikipedia\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"args\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"read\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Alan Turing\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"lang\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"en\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } }`})]}),`\n`]})})})}),_jsx(Tab,{title:`Positional`,id:`positional-3`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`wikipedia quantum computing`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})})]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`left`},children:`Argument`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Description`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Default`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`query`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`Search term — returns up to 5 matching titles`}),_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.em,{children:`(required in search mode)`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`read`})}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`Exact article title (alias `,_jsx(_components.code,{children:`title`}),`) — returns the plain-text intro`]}),_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.em,{children:`(required in read mode)`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`sections`})}),_jsxs(_components.td,{style:{textAlign:`left`},children:[_jsx(_components.code,{children:`true`}),` — list the article’s section headings with index and size`]}),_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`false`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`section`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`Heading, unique substring of one, or 1-based index — returns just that section`}),_jsx(_components.td,{style:{textAlign:`left`},children:`—`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`full`})}),_jsxs(_components.td,{style:{textAlign:`left`},children:[_jsx(_components.code,{children:`true`}),` — the whole article text, capped by `,_jsx(_components.code,{children:`max_chars`})]}),_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`false`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`max_chars`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`Cap for section/full reads`}),_jsxs(_components.td,{\"data-numeric\":`true`,style:{textAlign:`left`},children:[_jsx(_components.code,{children:`12000`}),` (max `,_jsx(_components.code,{children:`60000`}),`)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`lang`})}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`Wikipedia language edition (`,_jsx(_components.code,{children:`en`}),`, `,_jsx(_components.code,{children:`pt`}),`, `,_jsx(_components.code,{children:`es`}),`, …)`]}),_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`en`})})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`example-3`,children:`Example`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`10`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`10`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`User: Who was Ada Lovelace?`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Agent: Let me check Wikipedia.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`[tool_call: wikipedia {\"query\": \"Ada Lovelace\"}]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`[tool_call: wikipedia {\"read\": \"Ada Lovelace\"}]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Ada Lovelace (1815-1852) was an English mathematician and writer, known for`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`her work on Charles Babbage's Analytical Engine...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`@wikipedia`}),` is `,_jsx(_components.strong,{children:`keyless`}),` and respects the MediaWiki API etiquette (identified User-Agent). For quick fact-checking it is cheaper and more direct than chaining `,_jsx(_components.code,{children:`@websearch`}),` + `,_jsx(_components.code,{children:`@webfetch`}),`.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`comparison`,children:`Comparison`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`left`},children:`Aspect`}),_jsx(_components.th,{style:{textAlign:`left`},children:`@webfetch`}),_jsx(_components.th,{style:{textAlign:`left`},children:`@websearch`}),_jsx(_components.th,{style:{textAlign:`left`},children:`@wikipedia`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.strong,{children:`Purpose`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`Read content from a specific URL`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Search the web for a query`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Search/read Wikipedia articles`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.strong,{children:`Input`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`URL`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Search query`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Term (search) or exact title (read)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.strong,{children:`Output`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`Clean text from the page`}),_jsx(_components.td,{style:{textAlign:`left`},children:`List of results (title + URL + snippet)`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Matching titles or article summary`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.strong,{children:`When to use`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`You know the exact URL`}),_jsx(_components.td,{style:{textAlign:`left`},children:`You need to find information`}),_jsx(_components.td,{style:{textAlign:`left`},children:`You need a verifiable encyclopedic fact`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.strong,{children:`Engine`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`HTTP GET + HTML parser`}),_jsx(_components.td,{style:{textAlign:`left`},children:`DuckDuckGo (HTML scraping) + SearxNG (JSON API)`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Public MediaWiki API (keyless)`})]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`availability`,children:`Availability`}),`\n`,_jsx(_components.p,{children:`Web tools are available in the following modes:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`left`},children:`Mode`}),_jsx(_components.th,{style:{textAlign:`left`},children:`@webfetch`}),_jsx(_components.th,{style:{textAlign:`left`},children:`@websearch`}),_jsx(_components.th,{style:{textAlign:`left`},children:`@wikipedia`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Chat`}),_jsx(_components.td,{style:{textAlign:`left`},children:`No`}),_jsx(_components.td,{style:{textAlign:`left`},children:`No`}),_jsx(_components.td,{style:{textAlign:`left`},children:`No`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{style:{textAlign:`left`},children:[`Agent (`,_jsx(_components.code,{children:`/agent`}),`)`]}),_jsx(_components.td,{style:{textAlign:`left`},children:`Yes`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Yes`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Yes`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{style:{textAlign:`left`},children:[`Coder (`,_jsx(_components.code,{children:`/coder`}),`)`]}),_jsx(_components.td,{style:{textAlign:`left`},children:`Yes`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Yes`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Yes`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{style:{textAlign:`left`},children:[`One-shot (`,_jsx(_components.code,{children:`-p`}),`)`]}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`Yes (with `,_jsx(_components.code,{children:`--agent`}),`)`]}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`Yes (with `,_jsx(_components.code,{children:`--agent`}),`)`]}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`Yes (with `,_jsx(_components.code,{children:`--agent`}),`)`]})]})]})]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`In interactive chat mode, web tools are `,_jsx(_components.strong,{children:`not`}),` available. You need to be in agent or coder mode for the LLM to invoke them as tool calls.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next Steps`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`MCP Integration`,icon:`link`,href:`/extensions/mcp-integration`,children:_jsx(_components.p,{children:`Integrate additional web tools via MCP servers.`})}),_jsx(Card,{title:`Agentic Plugins`,icon:`puzzle-piece`,href:`/agents/agentic-plugins`,children:_jsx(_components.p,{children:`See all tools available to the agent.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":"system","config":{},"pageMetadata":{"title":"WebFetch \u0026 WebSearch","sidebarTitle":"Web Tools","description":"Built-in tools for web search and page fetching directly from agent/coder mode","icon":"globe","href":"/tools/web-tools"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"@webfetch","slug":"@webfetch","depth":2,"children":[{"title":"How It Works","slug":"how-it-works","depth":3,"children":[]},{"title":"Usage","slug":"usage","depth":3,"children":[]},{"title":"Argument Formats","slug":"argument-formats","depth":3,"children":[]},{"title":"Example","slug":"example","depth":3,"children":[]},{"title":"Filters for large payloads","slug":"filters-for-large-payloads","depth":3,"children":[]},{"title":"Smart auto-save","slug":"smart-auto-save","depth":3,"children":[]},{"title":"Rendering JavaScript pages (SPA)","slug":"rendering-javascript-pages-spa","depth":3,"children":[]}]},{"title":"@websearch","slug":"@websearch","depth":2,"children":[{"title":"Available backends","slug":"available-backends","depth":3,"children":[]},{"title":"Fallback chain","slug":"fallback-chain","depth":3,"children":[]},{"title":"Environment variables","slug":"environment-variables","depth":3,"children":[]},{"title":"/websearch command","slug":"/websearch-command","depth":3,"children":[]},{"title":"Configuring self-hosted SearxNG","slug":"configuring-self-hosted-searxng","depth":3,"children":[]},{"title":"How it works internally","slug":"how-it-works-internally","depth":3,"children":[]},{"title":"Argument Formats","slug":"argument-formats-2","depth":3,"children":[]},{"title":"Example","slug":"example-2","depth":3,"children":[]}]},{"title":"@wikipedia","slug":"@wikipedia","depth":2,"children":[{"title":"How It Works","slug":"how-it-works-2","depth":3,"children":[]},{"title":"Usage","slug":"usage-2","depth":3,"children":[]},{"title":"Argument Formats","slug":"argument-formats-3","depth":3,"children":[]},{"title":"Example","slug":"example-3","depth":3,"children":[]}]},{"title":"Comparison","slug":"comparison","depth":2,"children":[]},{"title":"Availability","slug":"availability","depth":2,"children":[]},{"title":"Next Steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/encom/03414b2589eb02b8/flags.js","/_mintlify/custom/encom/f19b212850d023b6/sidebar-focus.js"],"subdomain":"encom","siteName":"ChatCLI","title":"WebFetch \u0026 WebSearch - ChatCLI","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/tools/web-tools","matchLevel":0},"pt-BR":{"href":"/pt/tools/web-tools","matchLevel":1}}},"lastModified":"2026-10-22T04:40:36.831Z","originalFileLocation":"tools/web-tools.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Built-in tools for web search and page fetching directly from agent/coder mode\">\u003cmeta data-mint-head name=\"application-name\" content=\"ChatCLI\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/encom/ilreks3OQttPbvib/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/encom/ilreks3OQttPbvib/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/encom/ilreks3OQttPbvib/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/encom/ilreks3OQttPbvib/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/encom/ilreks3OQttPbvib/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/encom/ilreks3OQttPbvib/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/encom/ilreks3OQttPbvib/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/encom/ilreks3OQttPbvib/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/encom/ilreks3OQttPbvib/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"WebFetch \u0026amp; WebSearch - ChatCLI\">\u003cmeta data-mint-head property=\"og:description\" content=\"Built-in tools for web search and page fetching directly from agent/coder mode\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"ChatCLI Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://chatcli.edilsonfreitas.com/tools/web-tools\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://encom.mintlify.app/_mintlify/api/og/v2?division=Tools\u0026amp;title=WebFetch+%26+WebSearch\u0026amp;description=Built-in+tools+for+web+search+and+page+fetching+directly+from+agent%2Fcoder+mode\u0026amp;theme=2d0e9c637e1db3aa3847e8f6\u0026amp;signature=f9c57398d1581f3e995c35915e5e40caaa4a755ead5aacab90326f15645c2d28\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"WebFetch \u0026amp; WebSearch - ChatCLI\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Built-in tools for web search and page fetching directly from agent/coder mode\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://encom.mintlify.app/_mintlify/api/og/v2?division=Tools\u0026amp;title=WebFetch+%26+WebSearch\u0026amp;description=Built-in+tools+for+web+search+and+page+fetching+directly+from+agent%2Fcoder+mode\u0026amp;theme=2d0e9c637e1db3aa3847e8f6\u0026amp;signature=f9c57398d1581f3e995c35915e5e40caaa4a755ead5aacab90326f15645c2d28\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/encom/ilreks3OQttPbvib/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"ChatCLI\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0F766E\">\u003clink data-mint-head rel=\"canonical\" href=\"https://chatcli.edilsonfreitas.com/tools/web-tools\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/tools/web-tools.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://chatcli.edilsonfreitas.com/tools/web-tools\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"pt-BR\" href=\"https://chatcli.edilsonfreitas.com/pt/tools/web-tools\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://chatcli.edilsonfreitas.com/tools/web-tools\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://chatcli.edilsonfreitas.com/#organization\",\"name\":\"ChatCLI\",\"url\":\"https://chatcli.edilsonfreitas.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/encom/Rcdb5Pr5hpjwN46r/images/logo-light.svg?fit=max\u0026auto=format\u0026n=Rcdb5Pr5hpjwN46r\u0026q=85\u0026s=965a0feb9bd2f65a11b3c486e2488101\"}},{\"@type\":\"WebSite\",\"@id\":\"https://chatcli.edilsonfreitas.com#website\",\"name\":\"ChatCLI\",\"url\":\"https://chatcli.edilsonfreitas.com\",\"publisher\":{\"@id\":\"https://chatcli.edilsonfreitas.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://chatcli.edilsonfreitas.com/tools/web-tools#webpage\",\"url\":\"https://chatcli.edilsonfreitas.com/tools/web-tools\",\"name\":\"WebFetch \u0026 WebSearch\",\"description\":\"Built-in tools for web search and page fetching directly from agent/coder mode\",\"dateModified\":\"2026-10-22T04:40:36.831Z\",\"isPartOf\":{\"@id\":\"https://chatcli.edilsonfreitas.com#website\"},\"breadcrumb\":{\"@id\":\"https://chatcli.edilsonfreitas.com/tools/web-tools#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://chatcli.edilsonfreitas.com/tools/web-tools#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Documentation\",\"item\":\"https://chatcli.edilsonfreitas.com/usage/basic-usage\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"WebFetch \u0026 WebSearch\",\"item\":\"https://chatcli.edilsonfreitas.com/tools/web-tools\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://chatcli.edilsonfreitas.com/tools/web-tools#article\",\"headline\":\"WebFetch \u0026 WebSearch\",\"name\":\"WebFetch \u0026 WebSearch\",\"description\":\"Built-in tools for web search and page fetching directly from agent/coder mode\",\"url\":\"https://chatcli.edilsonfreitas.com/tools/web-tools\",\"mainEntityOfPage\":{\"@id\":\"https://chatcli.edilsonfreitas.com/tools/web-tools#webpage\"},\"dateModified\":\"2026-10-22T04:40:36.831Z\",\"publisher\":{\"@id\":\"https://chatcli.edilsonfreitas.com/#organization\"},\"isPartOf\":{\"@id\":\"https://chatcli.edilsonfreitas.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"ChatCLI\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"ChatCLI","nav":{"global":null,"languages":[{"language":"en","default":true,"groups":[{"group":"Get started","pages":[{"title":"ChatCLI","sidebarTitle":"Overview","icon":"house","mode":"wide","href":""},{"title":"Quickstart","icon":"rocket","href":"/start/quickstart"},{"title":"Installation and Configuration","sidebarTitle":"Installation","icon":"download","href":"/start/installation"},{"title":"Deploy with Docker and Kubernetes","sidebarTitle":"Docker \u0026 Kubernetes","icon":"docker","href":"/start/docker-deployment"},{"title":"Auto-Update","sidebarTitle":"Auto-Update","icon":"arrows-rotate","href":"/start/auto-update"},{"title":"Configuration Migration","sidebarTitle":"Config Migration","icon":"arrows-rotate","href":"/start/config-migration"}]},{"group":"Documentation","pages":[{"group":"Using ChatCLI","icon":"terminal","pages":[{"title":"Basic Usage and Main Commands","sidebarTitle":"Basic Usage","icon":"terminal","href":"/usage/basic-usage"},{"title":"Adding Context (@ Commands)","sidebarTitle":"Context Commands","icon":"at","href":"/usage/context-commands"},{"title":"Agent Mode: Task Execution","sidebarTitle":"Agent Mode (/agent)","icon":"robot","href":"/usage/agent-mode"},{"title":"Coder Mode (/coder)","sidebarTitle":"Coder Mode (/coder)","icon":"code","href":"/usage/coder-mode"},{"title":"Non-Interactive Mode (One-Shot)","sidebarTitle":"One-Shot Mode","icon":"terminal","href":"/usage/non-interactive-mode"},{"title":"Conversation Control","sidebarTitle":"Conversation Control","icon":"clock-rotate-left","href":"/usage/conversation-control"},{"title":"Multiline Input","sidebarTitle":"Multiline Input","icon":"bars-staggered","href":"/usage/multiline-input"},{"title":"Real-Time Streaming","sidebarTitle":"Streaming","icon":"bolt","href":"/usage/streaming"},{"title":"Image Input (Vision)","sidebarTitle":"Image Input (Vision)","icon":"eye","href":"/usage/vision-input"},{"title":"PDF Input","sidebarTitle":"PDF Input","icon":"file-pdf","href":"/usage/pdf-input"},{"title":"Web UI","sidebarTitle":"Web UI","icon":"browser","href":"/usage/web-ui"},{"title":"Live Dashboard","sidebarTitle":"Live Dashboard","icon":"chart-network","href":"/usage/live-dashboard"},{"title":"Compact UI Mode","sidebarTitle":"Compact UI","icon":"minimize","href":"/usage/compact-ui"},{"title":"Theme System (Colors)","sidebarTitle":"Theme System","icon":"palette","href":"/usage/ui-theme"},{"title":"Internationalization (i18n)","sidebarTitle":"Internationalization","icon":"language","href":"/usage/i18n"}]},{"group":"Coder","icon":"code","pages":[{"title":"Plugin @coder","sidebarTitle":"Plugin @coder","icon":"hammer","href":"/coder/coder-plugin"},{"title":"Atomic Tools (@read, @search, @tree, @todo)","sidebarTitle":"Atomic Tools","icon":"wand-magic-sparkles","href":"/coder/atomic-tools"},{"title":"Coder Mode Security (Governance)","sidebarTitle":"Coder Mode Security (Governance)","icon":"shield-halved","href":"/coder/coder-security"},{"title":"Enhanced Permissions System","sidebarTitle":"Permissions","icon":"shield-halved","href":"/coder/enhanced-permissions"},{"title":"Git Worktrees","sidebarTitle":"Git Worktrees","icon":"code-branch","href":"/coder/worktrees"},{"title":"File Staleness Detection","sidebarTitle":"File Staleness","icon":"eye","href":"/coder/file-staleness"},{"title":"JSON Recovery","sidebarTitle":"JSON Recovery","icon":"screwdriver-wrench","href":"/coder/json-recovery"},{"title":"LSP Diagnostics","sidebarTitle":"LSP Diagnostics","icon":"stethoscope","href":"/coder/lsp-diagnostics"},{"title":"Interactive Questions (ask_user)","sidebarTitle":"Interactive Questions","icon":"list-check","href":"/coder/interactive-ask"},{"title":"Live Agent Progress","sidebarTitle":"Live Progress","icon":"chart-bar","href":"/coder/agent-progress-ui"}]},{"group":"Agents","icon":"robot","pages":[{"title":"Native Tool Use (Structured API)","sidebarTitle":"Native Tool Use","icon":"wrench","href":"/agents/native-tool-use"},{"title":"Agentic AI and Plugin System","sidebarTitle":"Agentic AI \u0026 Plugins","icon":"puzzle-piece","href":"/agents/agentic-plugins"},{"title":"Customizable Agents (Personas)","sidebarTitle":"Customizable Agents","icon":"user-gear","href":"/agents/customizable-agents"},{"title":"Multi-Agent Orchestration","sidebarTitle":"Multi-Agent","icon":"users","href":"/agents/multi-agent-orchestration"},{"title":"Agent Squad","sidebarTitle":"Agent Squad","icon":"people-group","href":"/agents/agent-squad"},{"title":"Task Graph","sidebarTitle":"Task Graph","icon":"diagram-project","href":"/agents/task-graph"},{"title":"Subagent Delegation","sidebarTitle":"Subagent Delegate","icon":"diagram-project","href":"/agents/subagent-delegation"},{"title":"Mixture-of-Agents (MoA)","sidebarTitle":"Mixture-of-Agents","icon":"layer-group","href":"/agents/mixture-of-agents"},{"title":"Model Routing (@model)","sidebarTitle":"Model Routing","icon":"shuffle","href":"/agents/model-routing"},{"title":"Agent Park \u0026 Resume — Non-blocking suspension","sidebarTitle":"Park \u0026 Resume","icon":"circle-pause","href":"/agents/agent-park"},{"group":"Harness (7 patterns + evals)","icon":"wand-magic-sparkles","pages":[{"title":"Agent Harness/Quality Pipeline","sidebarTitle":"Overview","icon":"sparkles","href":"/agents/harness/overview"},{"title":"#1 ReAct — Reason + Act","sidebarTitle":"ReAct","icon":"rotate","href":"/agents/harness/react"},{"title":"#2 Plan-and-Solve / ReWOO","sidebarTitle":"Plan-and-Solve","icon":"list-check","href":"/agents/harness/plan-and-solve"},{"title":"#3 Reflexion — Learn from Failures","sidebarTitle":"Reflexion","icon":"lightbulb","href":"/agents/harness/reflexion"},{"title":"#4 RAG + HyDE — Semantic Retrieval","sidebarTitle":"RAG + HyDE","icon":"database","href":"/agents/harness/rag-hyde"},{"title":"#5 Self-Refine — Critique and Rewrite","sidebarTitle":"Self-Refine","icon":"wand-magic-sparkles","href":"/agents/harness/self-refine"},{"title":"#6 Chain-of-Verification (CoVe)","sidebarTitle":"CoVe","icon":"check-double","href":"/agents/harness/cove"},{"title":"#7 Cross-Provider Reasoning Backbone","sidebarTitle":"Reasoning Backbone","icon":"brain-circuit","href":"/agents/harness/reasoning-backbone"},{"title":"Configuration — Env, Slashes and /config","sidebarTitle":"Configuration","icon":"sliders","href":"/agents/harness/configuration"},{"title":"Evals: measuring ChatCLI","sidebarTitle":"Evals","icon":"flask","href":"/agents/harness/evals"}]}]},{"group":"Context \u0026 memory","icon":"layer-group","pages":[{"title":"LongMemEval: how well chatcli remembers","sidebarTitle":"LongMemEval results","icon":"chart-simple","href":"/context/longmemeval"},{"title":"Persistent Context Management","sidebarTitle":"Contexts (/context)","icon":"database","href":"/context/persistent-context"},{"title":"Knowledge Base (keyless RAG)","sidebarTitle":"Knowledge Base","icon":"book-open","href":"/context/knowledge-base"},{"title":"Bootstrap and Persistent Memory","sidebarTitle":"Bootstrap and Memory","icon":"memory","href":"/context/bootstrap-memory"},{"title":"Knowledge Graph and Obsidian Vault","sidebarTitle":"Knowledge Graph","icon":"diagram-project","href":"/context/knowledge-graph"},{"title":"Path-Specific Rules","sidebarTitle":"Path Rules","icon":"folder-tree","href":"/context/path-rules"},{"title":"Filtering with .chatignore","sidebarTitle":".chatignore","icon":"filter","href":"/context/chatignore"},{"group":"Sessions","icon":"clock-rotate-left","pages":[{"title":"Session Management","sidebarTitle":"Sessions","icon":"clock-rotate-left","href":"/context/session-management"},{"title":"Conversation Search (@session)","sidebarTitle":"Conversation Search","icon":"magnifying-glass","href":"/context/session-search"},{"title":"Session Workspace (Scratch Dir)","sidebarTitle":"Session Workspace","icon":"folder-tree","href":"/context/session-workspace"},{"title":"Trajectory Export (ShareGPT)","sidebarTitle":"Export Trajectory","icon":"file-export","href":"/context/trajectory-export"}]},{"group":"Token efficiency","icon":"gauge-high","pages":[{"title":"Token Efficiency","sidebarTitle":"Token Efficiency","icon":"gauge-high","href":"/context/token-efficiency"},{"title":"Context Compression (CCR)","sidebarTitle":"Context Compression","icon":"file-zipper","href":"/context/context-compression"},{"title":"Chat Prefix Curation","sidebarTitle":"Prefix Curation","icon":"scissors","href":"/context/prefix-curation"},{"title":"Tool Result Management","sidebarTitle":"Tool Results","icon":"database","href":"/context/tool-result-management"},{"title":"Context Recovery","sidebarTitle":"Context Recovery","icon":"life-ring","href":"/context/context-recovery"}]}]},{"group":"Models \u0026 providers","icon":"shuffle","pages":[{"title":"Supported AI Models","sidebarTitle":"Supported Models","icon":"microchip","href":"/providers/supported-models"},{"title":"OAuth Authentication","sidebarTitle":"OAuth Authentication","icon":"key","href":"/providers/oauth-authentication"},{"title":"AWS Bedrock","sidebarTitle":"AWS Bedrock","icon":"aws","href":"/providers/bedrock"},{"title":"Devin Provider — the local Devin CLI as an LLM transport","sidebarTitle":"Devin Provider","icon":"robot","href":"/providers/devin-provider"},{"title":"Provider Fallback","sidebarTitle":"Provider Fallback","icon":"rotate","href":"/providers/provider-fallback"},{"title":"Rate Limits — provider limit visibility","sidebarTitle":"Rate Limits","icon":"gauge-high","href":"/providers/rate-limits"},{"title":"Cost Tracking","sidebarTitle":"Cost Tracking","description":"Track token costs and price estimates per session across all modes, with real API data, budgets, persistence and /cost subcommands","icon":"money-bill-trend-up","href":"/providers/cost-tracking"}]},{"group":"Tools","icon":"toolbox","pages":[{"title":"WebFetch \u0026 WebSearch","sidebarTitle":"Web Tools","icon":"globe","href":"/tools/web-tools"},{"title":"Browser Automation (@browser)","sidebarTitle":"Browser Automation","description":"Drive a real local Chrome/Chromium over the DevTools Protocol — open a page, read it as text with numbered interactive elements (shadow DOM and iframes included), find text, click with a real mouse, type into inputs and rich-text editors, run JS, screenshot and see it, read response bodies, list downloads, detect bot challenges and hand the window to the user. The verification loop for web work and a browser for any site. Keyless, zero new dependency.","icon":"chrome","href":"/tools/browser-automation"},{"title":"API Explorer (@api-explorer)","sidebarTitle":"API Explorer","icon":"compass","href":"/tools/api-explorer"},{"title":"Git Forge (@forge)","sidebarTitle":"Git Forge","icon":"code-pull-request","href":"/tools/git-forge"},{"title":"Image Generation \u0026 Editing (@image)","sidebarTitle":"Image Generation \u0026 Editing","icon":"image","href":"/tools/image-generation"},{"title":"Diagrams (@diagram)","sidebarTitle":"Diagrams","icon":"diagram-project","href":"/tools/diagram"},{"title":"Interactive graph (@graphview)","sidebarTitle":"Interactive graph","icon":"circle-nodes","href":"/tools/graphview"},{"title":"Image Tags (@registry-tags)","sidebarTitle":"Registry Tags","icon":"tags","href":"/tools/registry-tags"},{"title":"Structured data and diffs (@json, @diff)","sidebarTitle":"JSON \u0026 Diff","icon":"brackets-curly","href":"/tools/json-diff"},{"title":"Calendar arithmetic (@date)","sidebarTitle":"Dates","icon":"calendar-days","href":"/tools/date"},{"title":"Archives (@archive)","sidebarTitle":"Archives","icon":"file-zipper","href":"/tools/archive"},{"title":"Builtin Skills","sidebarTitle":"Builtin Skills","icon":"boxes-stacked","href":"/tools/builtin-skills"},{"title":"Scheduler (Chronos) — Durable scheduling","sidebarTitle":"Scheduler","icon":"clock","href":"/tools/scheduler"}]},{"group":"Extensions","icon":"plug","pages":[{"title":"Plugin System","sidebarTitle":"Plugin System","icon":"plug","href":"/extensions/plugin-system"},{"title":"Provider Plugins","sidebarTitle":"Provider Plugins","icon":"plug-circle-bolt","href":"/extensions/provider-plugins"},{"title":"MCP (Model Context Protocol)","sidebarTitle":"Connect MCP Servers","icon":"link","href":"/extensions/mcp-integration"},{"title":"Skill Registry","sidebarTitle":"Skill Registry","icon":"store","tag":"NEW","href":"/extensions/skill-registry"},{"title":"Skill Authoring (@skill)","sidebarTitle":"Skill Authoring","icon":"wand-magic-sparkles","href":"/extensions/skill-authoring"},{"title":"Slash Commands","sidebarTitle":"Slash Commands","icon":"terminal","tag":"NEW","href":"/extensions/slash-commands"},{"title":"Hooks System","sidebarTitle":"Hooks","icon":"webhook","href":"/extensions/hooks-system"}]},{"group":"Channels \u0026 gateway","icon":"comments","pages":[{"title":"Chat gateway","sidebarTitle":"Chat gateway","icon":"messages","href":"/gateway/chat-gateway"},{"title":"Telegram","icon":"telegram","href":"/gateway/telegram"},{"title":"Slack","icon":"slack","href":"/gateway/slack"},{"title":"Discord","icon":"discord","href":"/gateway/discord"},{"title":"WhatsApp","icon":"whatsapp","href":"/gateway/whatsapp"},{"title":"Webhook","icon":"webhook","href":"/gateway/webhook"},{"title":"Conversation Hub — conversation continuity across channels","sidebarTitle":"Conversation Hub","icon":"share-nodes","href":"/gateway/conversation-hub"},{"title":"MCP Channels","sidebarTitle":"MCP Channels","icon":"tower-broadcast","href":"/gateway/mcp-channels"},{"title":"Proactive Messaging (@send)","sidebarTitle":"Proactive Messaging","icon":"paper-plane","href":"/gateway/proactive-messaging"},{"title":"Text-to-Speech \u0026 Gateway Voice","sidebarTitle":"Text-to-Speech","icon":"volume-high","href":"/gateway/text-to-speech"},{"title":"Gateway Voice Replies","sidebarTitle":"Voice Replies","icon":"microphone","href":"/gateway/voice-replies"}]},{"group":"Server \u0026 IDE","icon":"server","pages":[{"title":"Server Mode (chatcli server)","sidebarTitle":"Server Mode","icon":"server","href":"/server/server-mode"},{"title":"Remote Connection (chatcli connect)","sidebarTitle":"Remote Connection","icon":"plug","href":"/server/remote-connect"},{"title":"MCP Server — ChatCLI as a server (and ACP)","sidebarTitle":"ChatCLI MCP Server","icon":"server","href":"/server/mcp-server"},{"title":"ACP — ChatCLI inside your IDE","sidebarTitle":"ACP (IDE Agent)","icon":"plug-circle-bolt","href":"/server/acp"}]},{"group":"Kubernetes \u0026 AIOps","icon":"dharmachakra","pages":[{"title":"Kubernetes Monitoring (K8s Watcher)","sidebarTitle":"K8s Watcher","icon":"binoculars","href":"/kubernetes/k8s-watcher"},{"title":"Kubernetes Operator (AIOps)","sidebarTitle":"K8s Operator","icon":"dharmachakra","href":"/kubernetes/k8s-operator"},{"title":"AIOps Platform (Deep-Dive)","sidebarTitle":"AIOps Platform","icon":"brain","href":"/kubernetes/aiops-platform"},{"title":"ArtifactHub","sidebarTitle":"ArtifactHub","icon":"cube","href":"/kubernetes/artifacthub"},{"group":"AIOps platform","icon":"siren-on","pages":[{"title":"Incident Lifecycle","sidebarTitle":"Lifecycle","icon":"arrows-spin","href":"/kubernetes/aiops/incident-lifecycle"},{"title":"Notifications and Escalation","sidebarTitle":"Notifications","icon":"bell","href":"/kubernetes/aiops/notifications"},{"title":"SLOs and SLAs","sidebarTitle":"SLOs and SLAs","icon":"gauge-high","href":"/kubernetes/aiops/slo-sla"},{"title":"Approval Workflow","sidebarTitle":"Approvals","icon":"shield-check","href":"/kubernetes/aiops/approval-workflow"},{"title":"AI-Powered Decision Engine","sidebarTitle":"Decision Engine","icon":"brain-circuit","href":"/kubernetes/aiops/decision-engine"},{"title":"Multi-Cluster Federation","sidebarTitle":"Multi-Cluster Federation","icon":"network-wired","href":"/kubernetes/aiops/federation"},{"title":"Chaos Engineering","sidebarTitle":"Chaos Engineering","icon":"explosion","href":"/kubernetes/aiops/chaos-engineering"},{"title":"Audit and Compliance","sidebarTitle":"Audit and Compliance","icon":"clipboard-check","href":"/kubernetes/aiops/audit-compliance"},{"title":"Capacity Planning and Cost Attribution","sidebarTitle":"Capacity \u0026 Costs","icon":"chart-line","href":"/kubernetes/aiops/capacity-cost"},{"title":"Web Dashboard and Grafana","sidebarTitle":"Dashboard \u0026 Grafana","icon":"chart-mixed","href":"/kubernetes/aiops/web-dashboard"}]}]},{"group":"Security","icon":"shield-halved","pages":[{"title":"Enterprise Security","sidebarTitle":"Security","icon":"shield-halved","href":"/security/overview"},{"title":"Encryption at Rest","sidebarTitle":"Encryption at Rest","icon":"lock","href":"/security/encryption-at-rest"},{"title":"Security Hardening Upgrade Guide","sidebarTitle":"Hardening upgrade","icon":"shield-exclamation","href":"/security/hardening-upgrade"},{"title":"Vulnerability Scan (@osv)","sidebarTitle":"Dependency Scan","icon":"shield-halved","href":"/security/dependency-scan"},{"title":"Secrets Scan (@secrets)","sidebarTitle":"Secrets Scan","icon":"key","href":"/security/secrets-scan"}]},{"group":"Cookbook","icon":"kitchen-set","pages":[{"title":"Recipe: Safe Refactoring with Agent Mode","sidebarTitle":"Refactoring with Agent","icon":"screwdriver-wrench","href":"/cookbook/agent-refactoring"},{"title":"Fix tests with /coder","sidebarTitle":"Fix tests with /coder","icon":"vial","href":"/cookbook/coder-fix-tests"},{"title":"Recipe: Catching a Regression with Evals","sidebarTitle":"Catching a Regression with Evals","icon":"flask","href":"/cookbook/eval-regression"},{"title":"Recipe: Debugging Error Logs with Pipes","sidebarTitle":"Debug Error Logs","icon":"bug","href":"/cookbook/debugging-logs-with-pipes"},{"title":"One-Shot, Pipes, and Automation","sidebarTitle":"One-Shot and Pipes","icon":"wand-magic-sparkles","href":"/cookbook/oneshot-pipelines"},{"title":"Recipe: K8s Monitoring with AI","sidebarTitle":"K8s Monitoring","icon":"chart-line","href":"/cookbook/k8s-monitoring"},{"title":"Recipe: Managing Multiple Projects with Contexts and Sessions","sidebarTitle":"Multi-Project Workflow","icon":"folder-tree","href":"/cookbook/multi-project-workflow"},{"title":"Recipe: Understanding a Code Project","sidebarTitle":"Understand a New Project","icon":"rocket","href":"/cookbook/onboarding-new-project"},{"title":"Recipe: Generating Release Notes with @git","sidebarTitle":"Generate Release Notes","icon":"scroll","href":"/cookbook/release-notes-automation"},{"title":"Recipe: Remote Server for Teams","sidebarTitle":"Team Server","icon":"network-wired","href":"/cookbook/remote-server-setup"},{"title":"AIOps: Complete Production Setup","sidebarTitle":"AIOps Production Setup","icon":"rocket","href":"/cookbook/aiops-production-setup"},{"title":"Recipe: Scaling Instances","sidebarTitle":"Scaling Instances","icon":"arrows-left-right","href":"/cookbook/scaling-instances"},{"title":"AIOps: Incident Response Guide","sidebarTitle":"Incident Response","icon":"siren-on","href":"/cookbook/aiops-incident-response"},{"title":"Production Security Hardening","sidebarTitle":"Security Hardening","icon":"lock","href":"/cookbook/security-hardening-production"},{"title":"Scheduler automation recipes","sidebarTitle":"Scheduler: automations","icon":"book-open","href":"/cookbook/scheduler-automations"},{"title":"Recipe: Cross-Layer Debugging with 3 Knowledge Bases","sidebarTitle":"Cross-Layer Debugging","icon":"diagram-project","href":"/cookbook/cross-layer-knowledge-debug"}]},{"group":"Reference","icon":"rectangle-list","pages":[{"title":"Complete Command Reference","sidebarTitle":"Command Reference","icon":"rectangle-list","href":"/reference/command-reference"},{"title":"Environment Variables","sidebarTitle":"Environment Variables","icon":"sliders","href":"/reference/environment-variables"},{"title":"Configuration Reference (.env)","sidebarTitle":"Configuration (.env)","icon":"gear","href":"/reference/configuration"},{"title":"MCP Configuration (mcp_servers.json)","sidebarTitle":"MCP Config","icon":"gear","href":"/reference/mcp-config"},{"title":"Architecture and Code Structure","sidebarTitle":"Architecture","icon":"sitemap","href":"/reference/architecture"},{"group":"REST API","icon":"code","pages":[{"group":"Introduction","icon":"compass","pages":[{"title":"API Overview","sidebarTitle":"Overview","icon":"compass","href":"/reference/api/overview"}]},{"group":"Incidents","icon":"siren-on","pages":[{"title":"List Incidents","openapi":"GET /incidents","icon":"list","href":"/reference/api/list-incidents"},{"title":"Get Incident","openapi":"GET /incidents/{name}","icon":"magnifying-glass","href":"/reference/api/get-incident"},{"title":"Acknowledge Incident","openapi":"POST /incidents/{name}/acknowledge","icon":"check","href":"/reference/api/acknowledge-incident"},{"title":"Resolve Incident","openapi":"POST /incidents/{name}/resolve","icon":"circle-check","href":"/reference/api/resolve-incident"},{"title":"Snooze Incident","openapi":"POST /incidents/{name}/snooze","icon":"clock","href":"/reference/api/snooze-incident"},{"title":"Get Incident Timeline","openapi":"GET /incidents/{name}/timeline","icon":"timeline","href":"/reference/api/get-timeline"},{"title":"Get Incident Remediation","openapi":"GET /incidents/{name}/remediation","icon":"wrench","href":"/reference/api/get-remediation"}]},{"group":"AI Insights","icon":"lightbulb","pages":[{"title":"List AI Insights","openapi":"GET /aiinsights","icon":"list","href":"/reference/api/list-aiinsights"},{"title":"Get AI Insight","openapi":"GET /aiinsights/{name}","icon":"lightbulb","href":"/reference/api/get-aiinsight"}]},{"group":"Remediations","icon":"wrench","pages":[{"title":"List Remediations","openapi":"GET /remediations","icon":"list","href":"/reference/api/list-remediations"},{"title":"Get Remediation Plan","openapi":"GET /remediations/{name}","icon":"wrench","href":"/reference/api/get-remediation-detail"}]},{"group":"Runbooks","icon":"book-open","pages":[{"title":"List Runbooks","openapi":"GET /runbooks","icon":"list","href":"/reference/api/list-runbooks"},{"title":"Get Runbook","openapi":"GET /runbooks/{name}","icon":"book-open","href":"/reference/api/get-runbook"},{"title":"Create Runbook","openapi":"POST /runbooks","icon":"plus","href":"/reference/api/create-runbook"},{"title":"Update Runbook","openapi":"PUT /runbooks/{name}","icon":"pen-to-square","href":"/reference/api/update-runbook"},{"title":"Delete Runbook","openapi":"DELETE /runbooks/{name}","icon":"trash","href":"/reference/api/delete-runbook"}]},{"group":"Approvals","icon":"circle-check","pages":[{"title":"List Approvals","openapi":"GET /approvals","icon":"list","href":"/reference/api/list-approvals"},{"title":"Get Approval","openapi":"GET /approvals/{name}","icon":"magnifying-glass","href":"/reference/api/get-approval"},{"title":"Approve Request","openapi":"POST /approvals/{name}/approve","icon":"circle-check","href":"/reference/api/approve"},{"title":"Reject Request","openapi":"POST /approvals/{name}/reject","icon":"circle-xmark","href":"/reference/api/reject"}]},{"group":"SLOs","icon":"gauge","pages":[{"title":"List SLOs","openapi":"GET /slos","icon":"list","href":"/reference/api/list-slos"},{"title":"Get SLO","openapi":"GET /slos/{name}","icon":"gauge","href":"/reference/api/get-slo"},{"title":"Get SLO Error Budget","openapi":"GET /slos/{name}/budget","icon":"coins","href":"/reference/api/get-slo-budget"}]},{"group":"PostMortems","icon":"magnifying-glass-chart","pages":[{"title":"List PostMortems","openapi":"GET /postmortems","icon":"list","href":"/reference/api/list-postmortems"},{"title":"Get PostMortem","openapi":"GET /postmortems/{name}","icon":"magnifying-glass","href":"/reference/api/get-postmortem"},{"title":"Review PostMortem","openapi":"POST /postmortems/{name}/review","icon":"user-pen","href":"/reference/api/review-postmortem"},{"title":"Developer Feedback","openapi":"POST /postmortems/{name}/feedback","icon":"comment","href":"/reference/api/feedback-postmortem"},{"title":"Acknowledge Human Action","openapi":"POST /postmortems/{name}/ack-human-action","icon":"user-check","href":"/reference/api/ack-human-action-postmortem"},{"title":"Close PostMortem","openapi":"POST /postmortems/{name}/close","icon":"lock","href":"/reference/api/close-postmortem"}]},{"group":"Analytics","icon":"chart-line","pages":[{"title":"Analytics Summary","openapi":"GET /analytics/summary","icon":"chart-line","href":"/reference/api/analytics-summary"},{"title":"Analytics MTTR","openapi":"GET /analytics/mttr","icon":"stopwatch","href":"/reference/api/analytics-mttr"},{"title":"Analytics MTTD","openapi":"GET /analytics/mttd","icon":"stopwatch","href":"/reference/api/analytics-mttd"},{"title":"Analytics Trends","openapi":"GET /analytics/trends","icon":"arrow-trend-up","href":"/reference/api/analytics-trends"},{"title":"Analytics Top Resources","openapi":"GET /analytics/top-resources","icon":"ranking-star","href":"/reference/api/analytics-top-resources"},{"title":"Analytics Remediation Stats","openapi":"GET /analytics/remediation-stats","icon":"chart-pie","href":"/reference/api/analytics-remediation-stats"},{"title":"Analytics Compliance","openapi":"GET /analytics/compliance","icon":"clipboard-check","href":"/reference/api/analytics-compliance"},{"title":"Analytics Capacity","openapi":"GET /analytics/capacity","icon":"server","href":"/reference/api/analytics-capacity"},{"title":"Analytics Cost","openapi":"GET /analytics/cost","icon":"coins","href":"/reference/api/analytics-cost"}]},{"group":"Clusters","icon":"diagram-project","pages":[{"title":"List Clusters","openapi":"GET /clusters","icon":"list","href":"/reference/api/list-clusters"},{"title":"Get Cluster","openapi":"GET /clusters/{name}","icon":"diagram-project","href":"/reference/api/get-cluster"},{"title":"List Policies","openapi":"GET /policies/{kind}","icon":"list-check","href":"/reference/api/list-policies"},{"title":"Get Policy","openapi":"GET /policies/{kind}/{name}","icon":"file-lines","href":"/reference/api/get-policy"},{"title":"Global Cluster Status","openapi":"GET /clusters/global-status","icon":"globe","href":"/reference/api/global-status"}]},{"group":"Federation","icon":"network-wired","pages":[{"title":"Federation Status","openapi":"GET /federation/status","icon":"network-wired","href":"/reference/api/federation-status"},{"title":"Federation Clusters","openapi":"GET /federation/clusters","icon":"list","href":"/reference/api/federation-clusters"},{"title":"Federation Correlations","openapi":"GET /federation/correlations","icon":"diagram-project","href":"/reference/api/federation-correlations"}]},{"group":"Audit","icon":"clipboard-check","pages":[{"title":"List Audit Events","openapi":"GET /audit","icon":"list","href":"/reference/api/list-audit"},{"title":"Export Audit","openapi":"GET /audit/export","icon":"file-export","href":"/reference/api/export-audit"}]},{"group":"Health","icon":"heart-pulse","pages":[{"title":"Health Endpoints","openapi":"GET /healthz","icon":"heart-pulse","href":"/reference/api/health-endpoints"}]}]}]},{"group":"Releases","icon":"rocket","tag":"v1.226.0","pages":[{"title":"Release notes","icon":"tag","href":"/releases"},{"title":"v1.226.0","tag":"Latest","href":"/releases/1.226.0"},{"title":"v1.225.0","href":"/releases/1.225.0"},{"title":"v1.224.0","href":"/releases/1.224.0"},{"title":"v1.223.0","href":"/releases/1.223.0"},{"title":"v1.222.0","href":"/releases/1.222.0"},{"title":"v1.221.3","href":"/releases/1.221.3"},{"title":"v1.221.2","href":"/releases/1.221.2"},{"title":"v1.221.1","href":"/releases/1.221.1"},{"title":"v1.221.0","href":"/releases/1.221.0"},{"title":"v1.220.0","href":"/releases/1.220.0"}]},{"group":"Help","icon":"life-ring","pages":[{"title":"Troubleshooting","sidebarTitle":"Troubleshooting","icon":"life-ring","href":"/help/troubleshooting"},{"title":"Contributing to ChatCLI","sidebarTitle":"Contributing","icon":"code-pull-request","href":"/help/contributing"}]}]}]},{"language":"pt-BR","footer":{"socials":{"github":"https://github.com/diillson/chatcli","x":"https://x.com/diillson"},"links":[{"header":"Recursos","items":[{"label":"Documentação","href":"/pt"},{"label":"Cookbook","href":"/pt/cookbook/agent-refactoring"},{"label":"API Reference","href":"/pt/reference/api/overview"}]},{"header":"Comunidade","items":[{"label":"GitHub","href":"https://github.com/diillson/chatcli"},{"label":"Issues","href":"https://github.com/diillson/chatcli/issues"},{"label":"Discussions","href":"https://github.com/diillson/chatcli/discussions"},{"label":"Releases","href":"https://github.com/diillson/chatcli/releases"}]},{"header":"Distribuição","items":[{"label":"ArtifactHub","href":"https://artifacthub.io/packages/search?ts_query_web=chatcli"},{"label":"Helm Charts","href":"https://artifacthub.io/packages/helm/chatcli/chatcli"},{"label":"Container Registry","href":"https://github.com/diillson/chatcli/pkgs/container/chatcli"}]}]},"navbar":{"links":[{"href":"/pt/cookbook/agent-refactoring","label":"Cookbook"},{"href":"/pt/releases","label":"Releases"},{"href":"https://github.com/diillson/chatcli","type":"github"}],"primary":{"type":"button","label":"Instalar","href":"/pt/start/installation"}},"pages":[{"title":"pt-BR","href":"/pt/tools/web-tools"}]}]},"title":"WebFetch \u0026 WebSearch - ChatCLI","buildId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","deploymentId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","dynamics":[],"chunks":[]}