As web tools são ferramentas nativas do ChatCLI, disponíveis automaticamente nos modos agent e coder. Não e necessário configurar servidores MCP para usa-las.
@webfetch
Faz o fetch de uma URL, remove o HTML e retorna o conteúdo textual limpo. Ideal para ler documentações, artigos, READMEs e qualquer página web.Como Funciona
1
Requisicao HTTP
O ChatCLI faz uma requisicao GET para a URL fornecida com headers padrão de navegador.
2
Parse HTML
O HTML recebido e parseado usando
golang.org/x/net/html, extraindo apenas o conteúdo textual.3
Limpeza
Tags de script, style, navegacao e elementos não-textuais são removidos. O texto resultante e limpo e formatado.
4
Retorno
O conteúdo textual e retornado ao agent como resultado da tool call.
Uso
O LLM invoca@webfetch automaticamente quando precisa acessar conteúdo de uma URL. Você também pode solicitar explicitamente:
Formatos de Argumentos
- JSON
- Posicional
Exemplo
Filtros para payloads grandes
Endpoints como Prometheus/metrics, dumps de configuração ou listagens longas podem facilmente exceder dezenas de milhares de caracteres. O @webfetch aceita um conjunto de parâmetros que aplicam filtragem por linha antes do truncamento, evitando que o miolo útil seja descartado:
Exemplo — filtrar Prometheus por prefixo de métrica:
read_file apontando para o caminho absoluto retornado, escolhendo o intervalo exato de linhas que importa.
Auto-save inteligente
Quando o LLM chama@webfetch sem filtro, exclude, range ou save_to_file explícito, e o body retornado supera o threshold de auto-save, o ChatCLI promove o fetch automaticamente para modo save_to_file=true. Isso protege o contexto contra páginas gigantes sem obrigar o modelo a saber o tamanho de antemão.
Default: bodies acima de 10.000 bytes (configurável via CHATCLI_WEBFETCH_AUTOSAVE_BYTES) passam pelo auto-save. O resultado inline fica em um preview compacto (~5.000 chars) e a resposta começa com um marker explícito:
Renderização de páginas JavaScript (SPA)
Páginas que constroem o conteúdo no client (SPAs, tabelas montadas via JavaScript) retornam um “casco” vazio no fetch estático —<div id="root"> e bundles, sem o conteúdo real. O @webfetch resolve isso com uma cadeia de escalonamento:
1
Fetch estático
Sempre o primeiro passo. Páginas server-rendered param aqui — zero custo extra.
2
Detecção de shell JS
Heurística: texto extraído fino + sinais estruturais (mount points vazios
#root/#app, aviso <noscript>, marcadores de framework — React, Next, Angular, Vue, Nuxt, Svelte, Gatsby, Remix, Flutter).3
Render headless via CDP
Um Chromium real renderiza a página (espera load + DOM estável) e o DOM resultante passa pelo mesmo pipeline de extração/filtros/auto-save.
4
Fallbacks sem browser
Sem browser disponível, o estado embutido
__NEXT_DATA__ (Next.js) é recuperado do HTML estático; em último caso, uma nota honesta avisa o modelo que o fetch pode estar incompleto.CHATCLI_WEBFETCH_RENDER_BROWSER → download opt-in de um Chromium pinado (~150 MB, uma vez) com CHATCLI_WEBFETCH_RENDER_AUTOPROVISION=true. Sem API keys, sem serviços externos.
Postura de produção: um browser compartilhado por processo (lançamento lazy, reuso com health-check, shutdown após 2 min ocioso), circuit breaker (2 falhas de launch → 5 min de pausa), contexto incógnito por render (cookies nunca vazam entre sites) e SSRF reforçado dentro do browser — cada sub-request da página é validado via interceptação CDP, espelhando o guard do caminho HTTP normal. DOM renderizado limitado a 10 MB.
@websearch
Realiza uma busca web e retorna os resultados com título, URL e snippet. Suporta dois backends keyless por design — nada de API key externa para cadastrar: DuckDuckGo (scraping HTML) é o default zero-config, e SearxNG self-hosted é o preferido em ambiente corporativo quando você aponta para uma instância interna.Backends disponíveis
Cadeia de fallback
A cada query, o ChatCLI monta uma cadeia ordenada de backends. Se o primeiro falha ou retorna vazio, o próximo é tentado automaticamente. Ordem default (CHATCLI_WEBSEARCH_PROVIDER não setado ou auto):
searxng → duckduckgo → brave → mojeek. Os demais continuam como fallback se a instância SearxNG falhar. O mesmo vale para qualquer provider: CHATCLI_WEBSEARCH_PROVIDER=brave move o Brave para o topo e mantém o resto atrás.
Variáveis de ambiente
Comando /websearch
Gerenciador interativo do backend preferido. Autocomplete disponível para subcomandos e nomes de provider.
O
/websearch provider é apenas para a sessão corrente. Para persistir, exporte a env no shell ou adicione ao .env.
Configurando SearxNG self-hosted
A instância SearxNG precisa ter a JSON API habilitada — não vem ativa por default. Nosettings.yml do SearxNG:
SEARXNG_URL para uma instância sem JSON habilitado, o ChatCLI retorna um erro acionável ao invés de uma mensagem de decode confusa:
Como funciona internamente
1
Seleção da cadeia
SelectSearchChain() lê CHATCLI_WEBSEARCH_PROVIDER e SEARXNG_URL, retorna uma lista ordenada de backends a tentar.2
Tentativa sequencial
Para cada backend na cadeia: chama a função de busca. Se retorna resultados, pára e formata. Se falha ou retorna zero, loga o motivo e avança para o próximo.
3
Formatação
Resultados viram texto formatado com
via <provider> no cabeçalho, numerados com título + URL + snippet.Formatos de Argumentos
- JSON
- Posicional
Exemplo
(via DuckDuckGo) ou (via SearxNG) deixa claro qual backend respondeu — útil para diagnosticar por que alguma query não voltou resultado (ex.: DDG serviu CAPTCHA → fallback para SearxNG).
Por que keyless? O ChatCLI é usado em ambientes corporativos onde gerenciar API keys de terceiros (Brave Search, Tavily, SerpAPI) gera atrito operacional — cadastro, rotação, approvals. SearxNG self-hosted resolve fechamento de rede sem custo recorrente; DuckDuckGo cobre o caso casual sem nenhuma config.
@wikipedia
Consulta a Wikipedia de forma keyless via a API pública do MediaWiki: busca títulos de artigos que combinam com um termo, ou lê a introdução (resumo em texto puro) de um artigo específico. Companheira natural do@websearch/@webfetch para checagem factual rápida — sem API key, sem servidor MCP.
Como Funciona
São dois modos:- search — recebe um termo e retorna até 5 títulos de artigos correspondentes (os títulos exatos para usar no
read). - read — recebe o título exato de um artigo e retorna a introdução em texto puro (sem HTML, sem markup).
lang (default en; ex.: pt, es, fr). Valores como pt-BR são normalizados para pt.
Uso
O LLM invoca@wikipedia automaticamente quando precisa de um fato verificável. O fluxo típico é: buscar pelo termo, depois ler o título exato retornado.
Formatos de Argumentos
- JSON (search)
- JSON (read)
- Posicional
Exemplo
Comparacao
Disponibilidade
As web tools estão disponíveis nos seguintes modos:Próximos Passos
MCP Integration
Integre ferramentas web adicionais via MCP servers.
Plugins Agenticos
Veja todas as ferramentas disponíveis para o agent.