> ## Documentation Index
> Fetch the complete documentation index at: https://chatcli.edilsonfreitas.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Entrada de PDF

> Anexe PDFs no chat, no coder, no one-shot, na web UI, em editores ACP e em todos os canais do gateway. Documento nativo onde o modelo lê PDF, texto extraído nos demais — nenhum provider fica de fora.

O ChatCLI lê PDFs em **todos os providers**. Anexe um e o modelo responde com base nele: no **chat, `/coder`, one-shot (`-p`)**, na **web UI**, em **editores ACP** e nos **canais do gateway** (Telegram, WhatsApp, Slack, Discord, webhook).

***

## Como anexar

Aponte o `@file` para um PDF. Ele é anexado como documento, nunca colado como bytes crus:

```text theme={"system"}
@file ~/Downloads/contrato.pdf quais são as cláusulas de rescisão?
@file relatorio-q3.pdf resuma os incidentes e o custo
```

No `/coder`, o modelo pode abrir um PDF por conta própria com o `@view`, a mesma tool que usa para imagens:

```text theme={"system"}
@view docs/spec.pdf
```

O documento entra no turno seguinte, e o modelo o lê por inteiro (inclusive páginas escaneadas, nos modelos que leem PDF nativamente).

***

## Como cada provider recebe

A decisão é feita por provider e por modelo, no envio da mensagem:

| Provider | Entrada de PDF |
| - | - |
| Anthropic (Claude) | **Nativa** — todos os modelos |
| OpenAI | **Nativa** — GPT-4o, GPT-4.1, GPT-5 e posteriores |
| Google (Gemini) | **Nativa** — todos os modelos Gemini |
| OpenRouter | **Nativa** — qualquer modelo (o OpenRouter converte para os que não leem) |
| AWS Bedrock | **Nativa** — modelos Claude e Amazon Nova Lite/Pro/Premier; **texto** para os demais |
| Z.AI | **Nativa** — GLM-5.3-Flash; **texto** para os outros GLM |
| xAI, Moonshot, MiniMax, Ollama, Copilot, Devin, StackSpot, OpenAI Assistants, plugins de provider | **Texto extraído** |

* **Nativa**: o modelo recebe o próprio PDF: texto, tabelas, gráficos e páginas escaneadas.
* **Texto extraído**: o ChatCLI extrai o texto localmente (Go puro, sem ferramenta externa), página a página com marcadores `--- page N ---`, para o modelo poder citar páginas.

Um PDF acima do limite nativo do provider vai como texto: 32 MB na Anthropic, 20 MB no Bedrock InvokeModel, 4,5 MB no Bedrock Converse (até 5 documentos), 50 MB nos demais, e no máximo 100 páginas no modo nativo.

### PDFs escaneados em modelo só-texto

Um PDF escaneado não tem camada de texto, então não há o que extrair. Quando ele vai para um modelo sem entrada nativa de PDF, o ChatCLI pede antes a um modelo configurado que **lê** PDF para transcrevê-lo (o provider atual, depois qualquer outro configurado). Essa transcrição inclui figuras e diagramas, descritos brevemente. É ela que o modelo atual recebe:

```text theme={"system"}
  O PDF scan.pdf é escaneado; transcrito por claudeai/claude-sonnet-4-5 para o modelo atual.
```

Se nenhum modelo configurado conseguir lê-lo, você é avisado, e o modelo é instruído a não inventar o conteúdo.

<Tip>
  `CHATCLI_VISION_PROVIDER` / `CHATCLI_VISION_MODEL` também escolhem o modelo dessa transcrição, quando esse modelo lê PDF.
</Tip>

***

## Onde mais os PDFs são lidos

| Onde | O que acontece |
| - | - |
| `@read` / `@coder read` | Devolve o texto do PDF, com marcadores de página (`--- page N ---`). A leitura em base64 continua devolvendo os bytes. |
| `/context`, `@file <dir>` | PDFs de um diretório entram como texto, inclusive no modo knowledge. |
| [`@docs-flatten`](/pt/context/knowledge-base) | PDFs viram chunks com títulos `## Page N`; o crawl de URL segue links para PDF. |
| Web UI | O botão de anexo aceita PDFs (exibidos como chip). |
| Editores ACP | Recursos PDF embutidos e `resource_link`s para PDFs locais chegam ao modelo como texto. |
| Gateway | Telegram, WhatsApp, Slack e Discord aceitam arquivos PDF; o webhook aceita `document_b64` / `document_url` (veja [Webhook](/pt/gateway/webhook)). Um PDF sem legenda recebe uma instrução padrão de "leia este documento". |

Um PDF que chega pela web UI ou por um cliente RPC também é salvo no diretório de estado privado do ChatCLI, e o caminho vai para o modelo, que pode relê-lo depois com `@read`.

***

## Configuração

| Variável | Descrição | Padrão |
| - | - | - |
| `CHATCLI_PDF_INPUT` | `auto` (por provider/modelo, como na tabela acima), `native` (sempre envia o documento, por exemplo para um modelo fora do catálogo que lê PDF), `text` (sempre envia o texto extraído), `off` (ignora PDFs anexados). | `auto` |
| `CHATCLI_GATEWAY_MAX_DOCUMENT_BYTES` | Maior PDF que um canal do gateway baixa ou aceita. | `52428800` (50 MB) |

Um modelo também pode ser marcado no catálogo com a capability `pdf` (força nativo) ou `no_pdf` (força texto).

Limites da extração: 50 MB por PDF anexado, até 500 páginas e 2 milhões de caracteres de texto, 60 segundos. PDFs protegidos por senha continuam sendo anexados para modelos nativos, que podem abri-los; a extração de texto não consegue lê-los.

<CardGroup cols={2}>
  <Card title="Entrada de Imagem (Visão)" icon="eye" href="/pt/usage/vision-input">
    Anexe imagens: a mesma abordagem por provider.
  </Card>

  <Card title="Variáveis de ambiente" icon="sliders" href="/pt/reference/environment-variables">
    Todas as configurações em um só lugar.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.