SpyBara
Go Premium

Documentation 2026-10-16 22:59 UTC to 2026-10-17 23:57 UTC

23 files changed +183 −71. View all changes and history on the product overview
2026
Fri 30 23:01 Thu 29 23:57 Wed 28 23:57 Tue 27 22:59 Mon 26 22:57 Sun 25 23:58 Sat 24 22:59 Fri 23 22:59 Thu 22 22:58 Wed 21 23:02 Tue 20 23:00 Mon 19 23:58 Sat 17 23:57 Fri 16 22:59 Thu 15 23:58 Wed 14 22:58 Tue 13 23:57 Sun 11 23:57 Sat 10 23:01 Fri 9 23:02 Thu 8 22:58 Wed 7 23:59 Tue 6 23:59 Mon 5 23:58 Sun 4 23:58 Sat 3 23:57 Fri 2 22:59 Thu 1 23:59
Details

165 Chamar uma ferramenta personalizada165 Chamar uma ferramenta personalizada

166</h3>166</h3>

167 167 

168Passe o servidor MCP que você criou para `query` via a opção `mcpServers`. A chave em `mcpServers` se torna o segmento `{server_name}` no nome totalmente qualificado de cada ferramenta: `mcp__{server_name}__{tool_name}`. Liste esse nome em `allowedTools` para que a ferramenta seja executada sem um prompt de permissão.168Passe o servidor MCP que você criou para `query` via a opção `mcpServers`. O [nome totalmente qualificado](/docs/pt/agent-sdk/mcp#tool-naming-convention) de cada ferramenta é `mcp__{server_name}__{tool_name}`, onde `{server_name}` é a chave que você atribui ao servidor em `mcpServers`. Se a chave contiver caracteres como `.` ou espaços, substitua-os por `_` ao escrever `{server_name}`. Liste o nome totalmente qualificado em `allowedTools` para que a ferramenta seja executada sem um prompt de permissão.

169 169 

170Estes trechos reutilizam o `weatherServer` do [exemplo de ferramenta de clima](#weather-tool-example) para perguntar a Claude qual é o clima em um local específico.170Estes trechos reutilizam o `weatherServer` do [exemplo de ferramenta de clima](#weather-tool-example) para perguntar a Claude qual é o clima em um local específico.

171 171 

Details

235 235 

236| Opção | Tipo | Padrão | Descrição |236| Opção | Tipo | Padrão | Descrição |

237| - | - | - | - |237| - | - | - | - |

238| `matcher` | `string` | `undefined` | Padrão correspondido contra o campo de filtro do evento, seguindo as [regras para matchers em arquivos de configuração](/docs/pt/hooks#matcher-patterns). Para hooks de ferramenta, este é o nome da ferramenta. As ferramentas integradas incluem `Bash`, `Read`, `Write`, `Edit`, `Glob`, `Grep`, `WebFetch`, `Agent` e outras (veja [Tipos de Entrada de Ferramenta](/docs/pt/agent-sdk/typescript#tool-input-types) para a lista completa). Ferramentas MCP usam o padrão `mcp__<server>__<action>`, onde `<server>` é a chave que você usa na configuração `mcpServers`. |238| `matcher` | `string` | `undefined` | Padrão correspondido contra o campo de filtro do evento, seguindo as [regras para matchers em arquivos de configuração](/docs/pt/hooks#matcher-patterns). Para hooks de ferramenta, esse campo é o nome da ferramenta. As ferramentas integradas incluem `Bash`, `Read`, `Write`, `Edit`, `Glob`, `Grep`, `WebFetch`, `Agent` e outras. Veja [Tipos de Entrada de Ferramenta](/docs/pt/agent-sdk/typescript#tool-input-types) para a lista completa. Ferramentas MCP usam o padrão `mcp__<server>__<action>`, onde `<server>` é a chave que você usa na configuração `mcpServers`, escrita conforme descrito na [convenção de nomenclatura de ferramentas](/docs/pt/agent-sdk/mcp#tool-naming-convention). |

239| `hooks` | `HookCallback[]` | - | Obrigatório. Array de funções de callback a executar quando o padrão corresponde |239| `hooks` | `HookCallback[]` | - | Obrigatório. Array de funções de callback a executar quando o padrão corresponde |

240| `timeout` | `number` | `undefined` | Timeout em segundos. Quando omitido, Claude Code aplica o [timeout padrão do evento](#hook-timeout). Seus callbacks do SDK seguem os padrões de hook `command` |240| `timeout` | `number` | `undefined` | Timeout em segundos. Quando omitido, Claude Code aplica o [timeout padrão do evento](#hook-timeout). Seus callbacks do SDK seguem os padrões de hook `command` |

241 241 

agent-sdk/mcp.md +10 −1

Details

196 Convenção de nomenclatura de ferramentas196 Convenção de nomenclatura de ferramentas

197</h3>197</h3>

198 198 

199As ferramentas MCP seguem o padrão de nomenclatura `mcp__<server-name>__<tool-name>`. Por exemplo, um servidor GitHub nomeado `"github"` com uma ferramenta `list_issues` se torna `mcp__github__list_issues`.199As ferramentas MCP são nomeadas `mcp__<server-name>__<tool-name>`, onde `<server-name>` é o nome sob o qual você registra o servidor, como sua chave em `mcpServers`.

200 

201Caracteres no nome do servidor, como `.` e espaços, são substituídos por `_`. Esta tabela mostra o nome completo de uma ferramenta `list_issues` para duas chaves de servidor:

202 

203| Chave em `mcpServers` | Nome completo da ferramenta |

204| :- | :- |

205| `github` | `mcp__github__list_issues` |

206| `my.server` | `mcp__my_server__list_issues` |

207 

208Use os nomes completos das ferramentas em `allowedTools` e nas [regras de permissão MCP](/docs/pt/permissions#mcp). Para um servidor fornecido por um [plugin](/docs/pt/agent-sdk/plugins), `<server-name>` assume a [forma com escopo de plugin](/docs/pt/mcp#plugin-provided-mcp-servers) e começa com `plugin_`.

200 209 

201<h3 id="auto-approve-with-allowedtools">210<h3 id="auto-approve-with-allowedtools">

202 Auto-aprovação com allowedTools211 Auto-aprovação com allowedTools

Details

16 16 

17<Steps>17<Steps>

18 <Step title="Hooks">18 <Step title="Hooks">

19 Execute [hooks](/docs/pt/agent-sdk/hooks) primeiro. Um hook pode negar a chamada completamente ou deixá-la passar. Um hook que retorna `allow` não ignora as regras de negação e pergunta abaixo; essas são avaliadas independentemente do resultado do hook. Um hook `PreToolUse` allow também não pode aprovar uma remoção `rm` ou `rmdir` direcionada a um [caminho crítico](/docs/pt/permission-modes#critical-paths).19 Execute [hooks](/docs/pt/agent-sdk/hooks) primeiro. Um hook pode negar a chamada completamente ou deixá-la passar. Um hook que retorna `allow` não ignora as regras de negação e pergunta abaixo; essas são avaliadas independentemente do resultado do hook. Um hook `PreToolUse` que retorna `allow` também não pode aprovar uma remoção `rm` ou `rmdir` direcionada a um [caminho crítico](/docs/pt/permission-modes#critical-paths). Para saber o que esse `allow` faz no modo de planejamento, consulte [Aprovações de hooks no modo de planejamento](/docs/pt/permissions#hook-approvals-in-plan-mode).

20 </Step>20 </Step>

21 21 

22 <Step title="Regras de negação">22 <Step title="Regras de negação">


161 161 

162<Tabs>162<Tabs>

163 <Tab title="No momento da consulta">163 <Tab title="No momento da consulta">

164 Passe `permission_mode` (Python) ou `permissionMode` (TypeScript) ao criar uma consulta. Este modo se aplica para toda a sessão, a menos que seja alterado dinamicamente.164 Passe `permission_mode` (Python) ou `permissionMode` (TypeScript) ao criar uma consulta.

165 165 

166 <CodeGroup>166 <CodeGroup>

167 ```python Python theme={null}167 ```python Python theme={null}


314 314 

315Claude explora a base de código e produz um plano sem editar seus arquivos de origem. Ferramentas somente leitura são executadas como fazem no modo de permissão `default`.315Claude explora a base de código e produz um plano sem editar seus arquivos de origem. Ferramentas somente leitura são executadas como fazem no modo de permissão `default`.

316 316 

317Edições de arquivo nunca são aprovadas automaticamente no modo plano, mesmo quando uma regra de permissão corresponde. Em vez disso, elas solicitam através de seu callback `canUseTool`. No Claude Code v2.1.212 ou posterior, comandos shell que modificam arquivos, como `touch` e `rm`, chegam ao seu callback `canUseTool` da mesma forma.317Edições de arquivo nunca são aprovadas automaticamente no modo de planejamento, mesmo quando uma regra de permissão corresponde ou um hook `PreToolUse` retorna `allow`. Em vez disso, elas solicitam através de seu callback `canUseTool`. No Claude Code v2.1.212 ou posterior, comandos shell que modificam arquivos, como `touch` e `rm`, chegam ao seu callback `canUseTool` da mesma forma.

318 318 

319Se você definir `allowDangerouslySkipPermissions: true` junto com `permissionMode: 'plan'`, edições de arquivo e comandos shell que modificam arquivos ainda chegam ao seu callback `canUseTool`. A opção permite que você alterne para `bypassPermissions` mais tarde com `setPermissionMode()`.319Se você definir `allowDangerouslySkipPermissions: true` junto com `permissionMode: 'plan'`, edições de arquivo e comandos shell que modificam arquivos ainda chegam ao seu callback `canUseTool`. A opção permite que você alterne para `bypassPermissions` mais tarde com `setPermissionMode()`.

320 320 


322 322 

323**Use quando:** você deseja que Claude proponha alterações sem executá-las, como durante revisão de código ou quando você precisa aprovar alterações antes que sejam feitas.323**Use quando:** você deseja que Claude proponha alterações sem executá-las, como durante revisão de código ou quando você precisa aprovar alterações antes que sejam feitas.

324 324 

325<h4 id="auto-mode-auto">

326 Modo auto (`auto`)

327</h4>

328 

329Um modelo classificador revisa ações como comandos shell e requisições de rede antes que sejam executadas, e permite ou bloqueia cada uma que revisa. Para os modelos e provedores que o modo auto exige e a ordem em que ele avalia as ações, consulte [Eliminar prompts de permissão com o modo auto](/docs/pt/permission-modes#eliminate-prompts-with-auto-mode).

330 

331Se você alternar uma sessão que está em modo auto para um modelo que o modo auto não suporta, usando [`set_model()`](/docs/pt/agent-sdk/python#claudesdkclient), [`setModel()`](/docs/pt/agent-sdk/typescript#query-object) ou [`applyFlagSettings()`](/docs/pt/agent-sdk/typescript#applyflagsettings), a sessão muda para o modo `default`:

332 

333* **O que você vê**: uma mensagem `system` com subtipo `status` e `permissionMode` definido como `"default"`, que o TypeScript SDK tipa como [`SDKStatusMessage`](/docs/pt/agent-sdk/typescript#sdkstatusmessage). A partir daí, chamadas que precisam de aprovação e não correspondem a nenhuma regra de permissão chegam ao seu callback `canUseTool`.

334* **Para retornar ao modo auto**: alterne para um modelo suportado e, em seguida, chame `set_permission_mode("auto")` ou `setPermissionMode("auto")`. Se você alternar o modelo de volta sem fazer essa chamada, a sessão permanece no modo `default`. Enquanto o modelo não suportado estiver ativo, a chamada falha com `Cannot set permission mode to auto: auto mode unavailable for this model`.

335 

336A mudança para o modo `default` após uma chamada `set_model()`, `setModel()` ou `applyFlagSettings()` requer Claude Code v2.1.299 ou posterior.

337 

325<h2 id="related-resources">338<h2 id="related-resources">

326 Recursos relacionados339 Recursos relacionados

327</h2>340</h2>

Details

610| `receive_response()` | Recebe mensagens até e incluindo uma ResultMessage |610| `receive_response()` | Recebe mensagens até e incluindo uma ResultMessage |

611| `interrupt()` | Envia sinal de interrupção (funciona apenas em modo de streaming) |611| `interrupt()` | Envia sinal de interrupção (funciona apenas em modo de streaming) |

612| `set_permission_mode(mode)` | Altera o modo de permissão para a sessão atual |612| `set_permission_mode(mode)` | Altera o modo de permissão para a sessão atual |

613| `set_model(model)` | Altera o modelo para a sessão atual. Passe `None` para redefinir para o [modelo padrão do Claude Code](/docs/pt/model-config) |613| `set_model(model)` | Altera o modelo para a sessão atual. Passe `None` para redefinir para o [modelo padrão do Claude Code](/docs/pt/model-config). Uma sessão no modo `auto` [muda para o modo `default`](/docs/pt/agent-sdk/permissions#auto-mode-auto) se o novo modelo não suportar o modo auto |

614| `rewind_files(user_message_id)` | Restaura arquivos para seu estado na mensagem de usuário especificada. Requer `enable_file_checkpointing=True`. Veja [File checkpointing](/docs/pt/agent-sdk/file-checkpointing) |614| `rewind_files(user_message_id)` | Restaura arquivos para seu estado na mensagem de usuário especificada. Requer `enable_file_checkpointing=True`. Veja [File checkpointing](/docs/pt/agent-sdk/file-checkpointing) |

615| `get_mcp_status()` | Obtém o status de todos os servidores MCP configurados. Retorna [`McpStatusResponse`](#mcpstatusresponse) |615| `get_mcp_status()` | Obtém o status de todos os servidores MCP configurados. Retorna [`McpStatusResponse`](#mcpstatusresponse) |

616| `get_context_usage()` | Obtém um detalhamento do uso da janela de contexto por categoria, skill e ferramenta. Os mesmos dados que `/context` mostra em uma sessão interativa. Retorna [`ContextUsageResponse`](#contextusageresponse). Para calcular o detalhamento, Claude Code faz várias solicitações de API de contagem de tokens que não aparecem no fluxo de mensagens; veja [como essas solicitações são tratadas](#contextusageresponse) |616| `get_context_usage()` | Obtém um detalhamento do uso da janela de contexto por categoria, skill e ferramenta. Os mesmos dados que `/context` mostra em uma sessão interativa. Retorna [`ContextUsageResponse`](#contextusageresponse). Para calcular o detalhamento, Claude Code faz várias solicitações de API de contagem de tokens que não aparecem no fluxo de mensagens; veja [como essas solicitações são tratadas](#contextusageresponse) |


3884 Defina `"failIfUnavailable": True` nas suas configurações de sandbox para parar em vez disso. O SDK encaminha `failIfUnavailable` para o Claude Code junto com os campos declarados de `SandboxSettings`. `query()` então relata uma `ResultMessage` com `subtype="error_during_execution"` e a razão em `errors`. Como esta é uma chamada `query()` de um único disparo, o SDK lança após ceder esse resultado de erro, então envolva o loop em um bloco try para continuar além dele. Veja [Lidar com o resultado](/docs/pt/agent-sdk/agent-loop#handle-the-result) para o contrato de erro.3884 Defina `"failIfUnavailable": True` nas suas configurações de sandbox para parar em vez disso. O SDK encaminha `failIfUnavailable` para o Claude Code junto com os campos declarados de `SandboxSettings`. `query()` então relata uma `ResultMessage` com `subtype="error_during_execution"` e a razão em `errors`. Como esta é uma chamada `query()` de um único disparo, o SDK lança após ceder esse resultado de erro, então envolva o loop em um bloco try para continuar além dele. Veja [Lidar com o resultado](/docs/pt/agent-sdk/agent-loop#handle-the-result) para o contrato de erro.

3885</Note>3885</Note>

3886 3886 

3887Para impedir que comandos em sandbox gravem em um arquivo, liste seu caminho absoluto em [`denyWrite`](/docs/pt/settings-reference#sandbox-filesystem-denywrite) nas suas configurações de sandbox, como `"filesystem": {"denyWrite": ["/home/user/project/.env"]}`. O SDK encaminha `filesystem` para o Claude Code junto com os campos declarados de `SandboxSettings`. Depois que o sandbox inicia, ele bloqueia gravações em cada caminho listado. Se você listar `.env` ou `./.env`, comandos em sandbox podem gravar no arquivo `.env` no diretório de trabalho da sessão.3887Para impedir que comandos em sandbox gravem em um arquivo, liste seu caminho absoluto em [`denyWrite`](/docs/pt/settings-reference#sandbox-filesystem-denywrite) nas suas configurações de sandbox, como `"filesystem": {"denyWrite": ["/home/user/project/.env"]}`. O SDK encaminha `filesystem` para o Claude Code junto com os campos declarados de `SandboxSettings`. Depois que o sandbox inicia, ele bloqueia gravações em cada caminho absoluto que você listou.

3888 3888 

3889<h4 id="example-usage">3889<h4 id="example-usage">

3890 Exemplo de uso3890 Exemplo de uso

Details

736| `interrupt()` | Interrompe a query. Disponível apenas no modo de entrada por streaming. Quando a CLI anuncia a capacidade `interrupt_receipt_v1` em [`SDKSystemMessage.capabilities`](#sdksystemmessage), é resolvido com um [`SDKControlInterruptResponse`](#sdkcontrolinterruptresponse) listando as mensagens que estavam pendentes quando a interrupção chegou. É resolvido como `undefined` em CLIs anteriores ao v2.1.205 |736| `interrupt()` | Interrompe a query. Disponível apenas no modo de entrada por streaming. Quando a CLI anuncia a capacidade `interrupt_receipt_v1` em [`SDKSystemMessage.capabilities`](#sdksystemmessage), é resolvido com um [`SDKControlInterruptResponse`](#sdkcontrolinterruptresponse) listando as mensagens que estavam pendentes quando a interrupção chegou. É resolvido como `undefined` em CLIs anteriores ao v2.1.205 |

737| `rewindFiles(userMessageId, options?)` | Restaura os arquivos ao estado em que estavam na mensagem de usuário especificada. Passe `{ dryRun: true }` para visualizar as alterações. Requer `enableFileCheckpointing: true`. Consulte [Checkpointing de arquivos](/docs/pt/agent-sdk/file-checkpointing) |737| `rewindFiles(userMessageId, options?)` | Restaura os arquivos ao estado em que estavam na mensagem de usuário especificada. Passe `{ dryRun: true }` para visualizar as alterações. Requer `enableFileCheckpointing: true`. Consulte [Checkpointing de arquivos](/docs/pt/agent-sdk/file-checkpointing) |

738| `setPermissionMode()` | Altera o modo de permissão (disponível apenas no modo de entrada por streaming) |738| `setPermissionMode()` | Altera o modo de permissão (disponível apenas no modo de entrada por streaming) |

739| `setModel()` | Altera o modelo (disponível apenas no modo de entrada por streaming). Passar `undefined` ou a string `"default"` redefine para o [modelo padrão do Claude Code](/docs/pt/model-config) |739| `setModel()` | Altera o modelo (disponível apenas no modo de entrada por streaming). Passar `undefined` ou a string `"default"` redefine para o [modelo padrão do Claude Code](/docs/pt/model-config). Uma sessão no modo `auto` [muda para o modo `default`](/docs/pt/agent-sdk/permissions#auto-mode-auto) se o novo modelo não suportar o modo auto |

740| `setMaxThinkingTokens()` | *Obsoleto:* use a opção `thinking` em vez disso. Altera o máximo de tokens de pensamento. Passar `null` redefine o pensamento para o padrão da sessão: um valor que sobrescreve no meio da sessão é limpo, e o pensamento permanece desativado em sessões que o têm desabilitado |740| `setMaxThinkingTokens()` | *Obsoleto:* use a opção `thinking` em vez disso. Altera o máximo de tokens de pensamento. Passar `null` redefine o pensamento para o padrão da sessão: um valor que sobrescreve no meio da sessão é limpo, e o pensamento permanece desativado em sessões que o têm desabilitado |

741| `applyFlagSettings(settings)` | Mescla configurações na camada de configurações de flag da sessão em tempo de execução (disponível apenas no modo de entrada por streaming). Consulte [`applyFlagSettings()`](#applyflagsettings) |741| `applyFlagSettings(settings)` | Mescla configurações na camada de configurações de flag da sessão em tempo de execução (disponível apenas no modo de entrada por streaming). Consulte [`applyFlagSettings()`](#applyflagsettings) |

742| `updateSettings(source, settings)` | Grava uma chave permitida no arquivo de configurações locais do projeto ou no seu arquivo de configurações de usuário, para que o valor persista em sessões posteriores. Consulte [`updateSettings()`](#updatesettings). Requer o TypeScript SDK v0.3.257 ou posterior, que inclui o Claude Code v2.1.257 |742| `updateSettings(source, settings)` | Grava uma chave permitida no arquivo de configurações locais do projeto ou no seu arquivo de configurações de usuário, para que o valor persista em sessões posteriores. Consulte [`updateSettings()`](#updatesettings). Requer o TypeScript SDK v0.3.257 ou posterior, que inclui o Claude Code v2.1.257 |


6370| Property | Type | Default | Description |6370| Property | Type | Default | Description |

6371| :- | :- | :- | :- |6371| :- | :- | :- | :- |

6372| `allowWrite` | `string[]` | `[]` | Padrões de caminho de arquivo para permitir acesso de escrita |6372| `allowWrite` | `string[]` | `[]` | Padrões de caminho de arquivo para permitir acesso de escrita |

6373| `denyWrite` | `string[]` | `[]` | Padrões de caminho de arquivo para negar acesso de escrita. Para bloquear escritas em sandbox em um arquivo no diretório de trabalho da sessão, liste seu caminho absoluto. Se você listar `.env` ou `./.env`, comandos em sandbox podem escrever no arquivo `.env` no diretório de trabalho da sessão |6373| `denyWrite` | `string[]` | `[]` | Padrões de caminho de arquivo para negar acesso de escrita. Para bloquear escritas em sandbox em um arquivo no diretório de trabalho da sessão, liste seu caminho absoluto. |

6374| `denyRead` | `string[]` | `[]` | Padrões de caminho de arquivo para negar acesso de leitura |6374| `denyRead` | `string[]` | `[]` | Padrões de caminho de arquivo para negar acesso de leitura |

6375 6375 

6376<h3 id="permissions-fallback-for-unsandboxed-commands">6376<h3 id="permissions-fallback-for-unsandboxed-commands">

agent-view.md +2 −2

Details

738O [modo de permissão](/docs/pt/permissions) depende de como você iniciou a sessão:738O [modo de permissão](/docs/pt/permissions) depende de como você iniciou a sessão:

739 739 

740* **Colocada em segundo plano com `/bg` ou `←`**: Claude Code mantém o modo de permissão em que a sessão estava, portanto um que você mudou para `acceptEdits` ou `auto` permanece lá após desanexar740* **Colocada em segundo plano com `/bg` ou `←`**: Claude Code mantém o modo de permissão em que a sessão estava, portanto um que você mudou para `acceptEdits` ou `auto` permanece lá após desanexar

741* **Despachada a partir de uma visualização de agentes que você abriu com `←`**: a configuração própria do alvo vem primeiro, e o modo de permissão da sessão da qual você veio se aplica quando nada mais define um741* **Despachada a partir de uma visualização de agentes que você abriu com `←`**: Claude Code toma o modo de permissão da nova sessão primeiro da configuração do diretório alvo, depois da sessão da qual você veio

742* **Despachada de `claude agents` iniciado em um shell, ou com `claude --bg`**: a nova sessão começa da forma que uma nova sessão `claude` nesse diretório começaria, a menos que você a tenha despachado a partir de uma visualização de agentes que você abriu com [padrões de despacho](#dispatch-defaults). [Em qual modo de permissão uma sessão começa](/docs/pt/permission-modes#which-mode-a-session-starts-in) lista a ordem742* **Despachada de `claude agents` iniciado em um shell, ou com `claude --bg`**: a nova sessão começa da forma que uma nova sessão `claude` nesse diretório começaria, a menos que você a tenha despachado a partir de uma visualização de agentes que você abriu com [padrões de despacho](#dispatch-defaults). [Em qual modo de permissão uma sessão começa](/docs/pt/permission-modes#which-mode-a-session-starts-in) lista a ordem

743 743 

744Para uma sessão que você despacha a partir de uma visualização de agentes aberta com `←`, Claude Code toma o modo de permissão do primeiro destes que se aplica:744Para uma sessão que você despacha a partir de uma visualização de agentes aberta com `←`, Claude Code toma o modo de permissão do primeiro destes que se aplica:


7461. O [`permissions.defaultMode`](/docs/pt/settings-reference#permissions-defaultmode) do diretório alvo. Duas regras de fonte se aplicam:7461. O [`permissions.defaultMode`](/docs/pt/settings-reference#permissions-defaultmode) do diretório alvo. Duas regras de fonte se aplicam:

747 * `auto` e `bypassPermissions` [entram em vigor apenas a partir de configurações gerenciadas, um arquivo `--settings` ou `~/.claude/settings.json`](/docs/pt/settings-reference#permissions-defaultmode).747 * `auto` e `bypassPermissions` [entram em vigor apenas a partir de configurações gerenciadas, um arquivo `--settings` ou `~/.claude/settings.json`](/docs/pt/settings-reference#permissions-defaultmode).

748 * Claude Code recusa um `defaultMode` do `.claude/settings.json` ou `.claude/settings.local.json` do projeto que seleciona um modo mais permissivo do que a sessão da qual você veio estava.748 * Claude Code recusa um `defaultMode` do `.claude/settings.json` ou `.claude/settings.local.json` do projeto que seleciona um modo mais permissivo do que a sessão da qual você veio estava.

7492. O modo de permissão da sessão da qual você veio7492. O modo de permissão da sessão da qual você veio. Se essa sessão estava no modo `bypassPermissions`, a nova sessão pode começar no modo Manual em vez disso, com o aviso `Bypass permissions was requested at launch and ignored`. Isso acontece quando sua aceitação do aviso de bypass está apenas em `.claude/settings.local.json` ou em um arquivo `--settings`. Continue no modo Manual, ou [adicione essa aceitação a `~/.claude/settings.json`](/docs/pt/permission-modes#bypass-permissions-acceptance).

750 750 

751Quando Claude Code recusa o modo de uma fonte como muito permissivo, a próxima fonte na lista decide. Por exemplo, se você despacha a partir de uma sessão em modo de planejamento para um diretório cujas configurações verificadas pedem `acceptEdits`, a nova sessão começa em modo de planejamento. Se você mover esse `defaultMode` para `~/.claude/settings.json`, ele se aplica independentemente do modo de permissão da sessão da qual você veio.751Quando Claude Code recusa o modo de uma fonte como muito permissivo, a próxima fonte na lista decide. Por exemplo, se você despacha a partir de uma sessão em modo de planejamento para um diretório cujas configurações verificadas pedem `acceptEdits`, a nova sessão começa em modo de planejamento. Se você mover esse `defaultMode` para `~/.claude/settings.json`, ele se aplica independentemente do modo de permissão da sessão da qual você veio.

752 752 

Details

84| `--continue`, `-c` | Carregar a conversa mais recente no diretório atual, incluindo uma [sessão de fundo que terminou](/docs/pt/sessions#where-the-session-picker-looks); abrir sessões de fundo terminadas requer Claude Code v2.1.257 ou posterior. Pula sessões criadas com `claude -p` ou o Agent SDK, e sessões cujo primeiro prompt foi `/loop`. `claude -p --continue` inclui sessões `-p`, SDK e `/loop`. Inclui sessões que adicionaram este diretório com `/add-dir` | `claude --continue` |84| `--continue`, `-c` | Carregar a conversa mais recente no diretório atual, incluindo uma [sessão de fundo que terminou](/docs/pt/sessions#where-the-session-picker-looks); abrir sessões de fundo terminadas requer Claude Code v2.1.257 ou posterior. Pula sessões criadas com `claude -p` ou o Agent SDK, e sessões cujo primeiro prompt foi `/loop`. `claude -p --continue` inclui sessões `-p`, SDK e `/loop`. Inclui sessões que adicionaram este diretório com `/add-dir` | `claude --continue` |

85| `--dangerously-load-development-channels` | Ativar [canais](/docs/pt/channels-reference#test-during-the-research-preview) que não estão na allowlist aprovada, para desenvolvimento local. Aceita entradas `plugin:<name>@<marketplace>` e `server:<name>`. Solicita confirmação, portanto entra em vigor em sessões interativas. Com `-p`, Claude Code ignora a flag | `claude --dangerously-load-development-channels server:webhook` |85| `--dangerously-load-development-channels` | Ativar [canais](/docs/pt/channels-reference#test-during-the-research-preview) que não estão na allowlist aprovada, para desenvolvimento local. Aceita entradas `plugin:<name>@<marketplace>` e `server:<name>`. Solicita confirmação, portanto entra em vigor em sessões interativas. Com `-p`, Claude Code ignora a flag | `claude --dangerously-load-development-channels server:webhook` |

86| `--dangerously-skip-permissions` | Pular prompts de permissão. Equivalente a `--permission-mode bypassPermissions`. Veja [modos de permissão](/docs/pt/permission-modes#skip-all-checks-with-bypasspermissions-mode) para o que isso faz e não faz. Para sessões iniciadas com `--bg`, o modo [persiste quando o supervisor reinicia a sessão](/docs/pt/agent-view#permission-mode-model-and-effort) | `claude --dangerously-skip-permissions` |86| `--dangerously-skip-permissions` | Pular prompts de permissão. Equivalente a `--permission-mode bypassPermissions`. Veja [modos de permissão](/docs/pt/permission-modes#skip-all-checks-with-bypasspermissions-mode) para o que isso faz e não faz. Para sessões iniciadas com `--bg`, o modo [persiste quando o supervisor reinicia a sessão](/docs/pt/agent-view#permission-mode-model-and-effort) | `claude --dangerously-skip-permissions` |

87| `--debug` | Ativar modo de depuração com filtragem de categoria opcional, como `--debug='mcp,startup'` ou `--debug='!1p'`. O filtro se vincula apenas na forma `=`; um filtro separado por espaço ativa o modo de depuração sem filtragem | `claude --debug='mcp,startup'` |87| `--debug` | Ativar modo de depuração com filtragem de categoria opcional, como `--debug='mcp,startup'` ou `--debug='!mcp'`. O filtro se vincula apenas na forma `=`; um filtro separado por espaço ativa o modo de depuração sem filtragem | `claude --debug='mcp,startup'` |

88| `--debug-file <path>` | Escrever logs de depuração em um caminho de arquivo específico. Ativa implicitamente o modo de depuração. Tem precedência sobre `CLAUDE_CODE_DEBUG_LOGS_DIR` | `claude --debug-file /tmp/claude-debug.log` |88| `--debug-file <path>` | Escrever logs de depuração em um caminho de arquivo específico. Ativa implicitamente o modo de depuração. Tem precedência sobre `CLAUDE_CODE_DEBUG_LOGS_DIR` | `claude --debug-file /tmp/claude-debug.log` |

89| `--desktop` | Abrir o [aplicativo Claude Desktop](/docs/pt/desktop) no diretório atual e sair sem iniciar uma sessão no terminal. Adicione `--continue` ou `--resume` com um ID de sessão para [abrir essa sessão no Desktop](/docs/pt/desktop#coming-from-the-cli) em vez disso. `--resume` aqui leva apenas um ID de sessão, não um nome ou caminho de transcrição. Não leva prompt e nenhum outro sinalizador exceto `--verbose` e os sinalizadores `--debug`, já que o aplicativo inicia a sessão em si. Disponível em macOS e Windows x64 quando você está conectado com uma assinatura Claude. Requer Claude Code v2.1.285 ou posterior | `claude --desktop` |89| `--desktop` | Abrir o [aplicativo Claude Desktop](/docs/pt/desktop) no diretório atual e sair sem iniciar uma sessão no terminal. Adicione `--continue` ou `--resume` com um ID de sessão para [abrir essa sessão no Desktop](/docs/pt/desktop#coming-from-the-cli) em vez disso. `--resume` aqui leva apenas um ID de sessão, não um nome ou caminho de transcrição. Não leva prompt e nenhum outro sinalizador exceto `--verbose` e os sinalizadores `--debug`, já que o aplicativo inicia a sessão em si. Disponível em macOS e Windows x64 quando você está conectado com uma assinatura Claude. Requer Claude Code v2.1.285 ou posterior | `claude --desktop` |

90| `--disable-slash-commands` | Desativar todas as skills e comandos para esta sessão | `claude --disable-slash-commands` |90| `--disable-slash-commands` | Desativar todas as skills e comandos para esta sessão | `claude --disable-slash-commands` |

costs.md +1 −1

Details

429Uma sessão que está aberta há horas pode usar muito mais dos limites do seu plano do que sua atividade sugere, geralmente por um destes motivos:429Uma sessão que está aberta há horas pode usar muito mais dos limites do seu plano do que sua atividade sugere, geralmente por um destes motivos:

430 430 

431* **Contexto longo**: Claude Code envia sua conversa completa com cada solicitação, e cada vez que Claude usa ferramentas, envia outra solicitação contendo esse lote de resultados de ferramentas. Com [prompt caching](/docs/pt/prompt-caching), Claude Code relê esse histórico na [taxa de token em cache](https://platform.claude.com/docs/en/about-claude/pricing), então uma pergunta de uma linha em uma sessão que está aberta o dia todo ainda consome uso para toda a conversa. Veja [Gerenciar contexto proativamente](#manage-context-proactively) para formas de manter seu contexto pequeno431* **Contexto longo**: Claude Code envia sua conversa completa com cada solicitação, e cada vez que Claude usa ferramentas, envia outra solicitação contendo esse lote de resultados de ferramentas. Com [prompt caching](/docs/pt/prompt-caching), Claude Code relê esse histórico na [taxa de token em cache](https://platform.claude.com/docs/en/about-claude/pricing), então uma pergunta de uma linha em uma sessão que está aberta o dia todo ainda consome uso para toda a conversa. Veja [Gerenciar contexto proativamente](#manage-context-proactively) para formas de manter seu contexto pequeno

432* **Cache misses**: sua primeira mensagem após uma pausa mais longa que o [tempo de vida do cache](/docs/pt/prompt-caching#cache-lifetime) perde o cache e reprocessa seu contexto completo. O tempo de vida é uma hora em uma assinatura e cai para cinco minutos quando você está usando [créditos de uso](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans); em uma chave de API ou provedor de nuvem, é cinco minutos por padrão. Para manter o tempo de vida de uma hora enquanto usa créditos de uso, [escolha o TTL você mesmo](/docs/pt/prompt-caching#choose-the-ttl-yourself). Nos planos Pro e Max, quando você retoma uma sessão grande após uma pausa longa, Claude Code [oferece retomar de um resumo](/docs/pt/sessions#resume-from-a-summary) para que solicitações posteriores não carreguem o histórico completo432* **Cache misses**: sua primeira mensagem após uma pausa mais longa que o [tempo de vida do cache](/docs/pt/prompt-caching#cache-lifetime) perde o cache e reprocessa seu contexto completo. O tempo de vida é uma hora em uma assinatura e cai para cinco minutos quando você está usando [créditos de uso](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans); em uma chave de API ou provedor de nuvem, é cinco minutos por padrão. Para manter o tempo de vida de uma hora enquanto usa créditos de uso, [escolha o TTL você mesmo](/docs/pt/prompt-caching#choose-the-ttl-yourself)

433* **Tarefas agendadas**: uma [tarefa agendada](/docs/pt/scheduled-tasks) é executada em seu intervalo mesmo enquanto a sessão está inativa, enviando seu contexto completo cada vez433* **Tarefas agendadas**: uma [tarefa agendada](/docs/pt/scheduled-tasks) é executada em seu intervalo mesmo enquanto a sessão está inativa, enviando seu contexto completo cada vez

434* **Mensagens entre sessões**: Claude Code entrega uma [mensagem de outra de suas sessões](/docs/pt/cross-session-messaging) como um novo turno quando esta sessão fica inativa, enviando seu contexto completo cada vez. Para manter mensagens de entrada em vez de entregá-las, defina [`crossSessionInbound`](/docs/pt/settings-reference#crosssessioninbound) como `hold`434* **Mensagens entre sessões**: Claude Code entrega uma [mensagem de outra de suas sessões](/docs/pt/cross-session-messaging) como um novo turno quando esta sessão fica inativa, enviando seu contexto completo cada vez. Para manter mensagens de entrada em vez de entregá-las, defina [`crossSessionInbound`](/docs/pt/settings-reference#crosssessioninbound) como `hold`

435* **Verificações de objetivo**: enquanto o trabalho em segundo plano mantém um [objetivo](/docs/pt/goal) ativo aguardando, Claude Code [pede ao Claude para verificar esse trabalho](/docs/pt/goal#background-work-defers-evaluation) mesmo quando a sessão fica inativa, iniciando um novo turno que envia seu contexto completo. Claude Code inicia no máximo três verificações inativas por objetivo entre seus prompts. Antes da v2.1.246, as verificações inativas eram ilimitadas. Para desativar as verificações, defina [`CLAUDE_CODE_GOAL_CHECKIN_MINUTES`](/docs/pt/env-vars) como `0`. As verificações inativas exigem Claude Code v2.1.236 ou posterior435* **Verificações de objetivo**: enquanto o trabalho em segundo plano mantém um [objetivo](/docs/pt/goal) ativo aguardando, Claude Code [pede ao Claude para verificar esse trabalho](/docs/pt/goal#background-work-defers-evaluation) mesmo quando a sessão fica inativa, iniciando um novo turno que envia seu contexto completo. Claude Code inicia no máximo três verificações inativas por objetivo entre seus prompts. Antes da v2.1.246, as verificações inativas eram ilimitadas. Para desativar as verificações, defina [`CLAUDE_CODE_GOAL_CHECKIN_MINUTES`](/docs/pt/env-vars) como `0`. As verificações inativas exigem Claude Code v2.1.236 ou posterior

env-vars.md +1 −1

Details

196| `ANTHROPIC_VERTEX_PROJECT_ID` | ID do projeto GCP ao qual as requisições do Google Cloud's Agent Platform são endereçadas. Consulte [Configurar credenciais do GCP](/docs/pt/google-vertex-ai#3-configure-gcp-credentials) |196| `ANTHROPIC_VERTEX_PROJECT_ID` | ID do projeto GCP ao qual as requisições do Google Cloud's Agent Platform são endereçadas. Consulte [Configurar credenciais do GCP](/docs/pt/google-vertex-ai#3-configure-gcp-credentials) |

197| `ANTHROPIC_WORKSPACE_ID` | ID do workspace para a [workload identity federation](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation). Defina-a quando sua regra de federação abranger mais de um workspace, para que a troca de tokens saiba qual workspace usar |197| `ANTHROPIC_WORKSPACE_ID` | ID do workspace para a [workload identity federation](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation). Defina-a quando sua regra de federação abranger mais de um workspace, para que a troca de tokens saiba qual workspace usar |

198| `API_FORCE_IDLE_TIMEOUT` | Sobrescreve o timeout de inatividade do corpo de 5 minutos que aborta uma resposta de modelo por streaming quando nenhum byte chega. Defina como `0` para desativar o timeout, por exemplo quando um [gateway](/docs/pt/llm-gateway) lento ou um modelo local pausa por mais de 5 minutos entre blocos, ou como `1` para mantê-lo ativo em todos os provedores. Quando não definida, o timeout fica ativo em provedores diferentes da API direta da Anthropic, do [Claude Platform on AWS](/docs/pt/claude-platform-on-aws) e do Amazon Bedrock com `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` definida. Os [watchdogs de streaming](/docs/pt/network-config#streaming-idle-watchdogs) funcionam independentemente dele e abortam uma longa pausa silenciosa mesmo quando você define `0` aqui |198| `API_FORCE_IDLE_TIMEOUT` | Sobrescreve o timeout de inatividade do corpo de 5 minutos que aborta uma resposta de modelo por streaming quando nenhum byte chega. Defina como `0` para desativar o timeout, por exemplo quando um [gateway](/docs/pt/llm-gateway) lento ou um modelo local pausa por mais de 5 minutos entre blocos, ou como `1` para mantê-lo ativo em todos os provedores. Quando não definida, o timeout fica ativo em provedores diferentes da API direta da Anthropic, do [Claude Platform on AWS](/docs/pt/claude-platform-on-aws) e do Amazon Bedrock com `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` definida. Os [watchdogs de streaming](/docs/pt/network-config#streaming-idle-watchdogs) funcionam independentemente dele e abortam uma longa pausa silenciosa mesmo quando você define `0` aqui |

199| `API_TIMEOUT_MS` | Timeout para requisições de API em milissegundos (padrão: 600000, ou 10 minutos; máximo: 2147483647). Aumente-o quando as requisições atingirem o timeout em redes lentas ou ao rotear por meio de um proxy. Valores acima do máximo causam overflow no temporizador subjacente e fazem as requisições falharem imediatamente |199| `API_TIMEOUT_MS` | Timeout para requisições à API em milissegundos (padrão: 600000, ou 10 minutos; máximo: 2147483647). Uma requisição de streaming precisa receber seus cabeçalhos de resposta dentro desse prazo. Aumente-o quando as requisições atingirem o timeout em redes lentas ou ao rotear por um proxy |

200| `AWS_BEARER_TOKEN_BEDROCK` | Chave de API do Amazon Bedrock para autenticação (consulte [Chaves de API do Amazon Bedrock](https://aws.amazon.com/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/)) |200| `AWS_BEARER_TOKEN_BEDROCK` | Chave de API do Amazon Bedrock para autenticação (consulte [Chaves de API do Amazon Bedrock](https://aws.amazon.com/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/)) |

201| `BASH_DEFAULT_TIMEOUT_MS` | Timeout padrão para um comando da ferramenta Bash ou PowerShell em primeiro plano, em milissegundos (padrão: 120000, ou 2 minutos). Um valor acima do [limite de tempo padrão para comandos em segundo plano](/docs/pt/tools-reference#time-limit-for-background-commands) substitui esse padrão em sessões não supervisionadas. O limite de tempo em segundo plano requer o Claude Code v2.1.285 ou posterior |201| `BASH_DEFAULT_TIMEOUT_MS` | Timeout padrão para um comando da ferramenta Bash ou PowerShell em primeiro plano, em milissegundos (padrão: 120000, ou 2 minutos). Um valor acima do [limite de tempo padrão para comandos em segundo plano](/docs/pt/tools-reference#time-limit-for-background-commands) substitui esse padrão em sessões não supervisionadas. O limite de tempo em segundo plano requer o Claude Code v2.1.285 ou posterior |

202| `BASH_MAX_OUTPUT_LENGTH` | Número máximo de caracteres da saída do bash que o Claude Code lê de volta no resultado de um comando (padrão: 30000; máximo: 150000). Se você definir a configuração [`bashOutputMaxChars`](/docs/pt/settings-reference#bashoutputmaxchars), o Claude Code ignora esta variável. Consulte [Limites de saída](/docs/pt/tools-reference#output-limits) |202| `BASH_MAX_OUTPUT_LENGTH` | Número máximo de caracteres da saída do bash que o Claude Code lê de volta no resultado de um comando (padrão: 30000; máximo: 150000). Se você definir a configuração [`bashOutputMaxChars`](/docs/pt/settings-reference#bashoutputmaxchars), o Claude Code ignora esta variável. Consulte [Limites de saída](/docs/pt/tools-reference#output-limits) |

errors.md +3 −1

Details

346| `Can't open — this session is running in another terminal` | [Background session errors](#this-session-is-running-in-another-terminal) |346| `Can't open — this session is running in another terminal` | [Background session errors](#this-session-is-running-in-another-terminal) |

347| `This conversation is already open in another running Claude session` | [Background session errors](#this-session-is-running-in-another-terminal) |347| `This conversation is already open in another running Claude session` | [Background session errors](#this-session-is-running-in-another-terminal) |

348| `This session's saved conversation is no longer on disk` | [Background session errors](#this-sessions-saved-conversation-is-no-longer-on-disk) |348| `This session's saved conversation is no longer on disk` | [Background session errors](#this-sessions-saved-conversation-is-no-longer-on-disk) |

349| `Bypass permissions was requested at launch and ignored` | [Ignorar todas as verificações com o modo bypassPermissions](/docs/pt/permission-modes#bypass-permissions-acceptance) |

349| `kept <id> — its worktree is still at <path>` | [Background session errors](#worktree-has-commits-that-are-not-pushed-anywhere) |350| `kept <id> — its worktree is still at <path>` | [Background session errors](#worktree-has-commits-that-are-not-pushed-anywhere) |

350| `kept <id> — <n> unpushed commits on <branch>` | [Background session errors](#worktree-has-commits-that-are-not-pushed-anywhere) |351| `kept <id> — <n> unpushed commits on <branch>` | [Background session errors](#worktree-has-commits-that-are-not-pushed-anywhere) |

351| `kept <id> — worktree has commits that are not pushed anywhere` | [Background session errors](#worktree-has-commits-that-are-not-pushed-anywhere) |352| `kept <id> — worktree has commits that are not pushed anywhere` | [Background session errors](#worktree-has-commits-that-are-not-pushed-anywhere) |


418* Conexões perdidas. Quando uma conexão cai no meio de uma requisição antes de Claude ter completado qualquer parte de sua resposta, incluindo seu pensamento, Claude Code reemite a requisição com o mesmo backoff e o turno continua, mesmo que algum texto já tivesse começado a ser transmitido. Quando cai depois que Claude terminou de pensar mas antes de ter iniciado qualquer texto ou chamada de ferramenta, Claude Code em vez disso reemite a requisição até duas vezes em rápida sucessão, e encerra o turno com `Connection lost before a response was produced` se a conexão continuar caindo nesse ponto.419* Conexões perdidas. Quando uma conexão cai no meio de uma requisição antes de Claude ter completado qualquer parte de sua resposta, incluindo seu pensamento, Claude Code reemite a requisição com o mesmo backoff e o turno continua, mesmo que algum texto já tivesse começado a ser transmitido. Quando cai depois que Claude terminou de pensar mas antes de ter iniciado qualquer texto ou chamada de ferramenta, Claude Code em vez disso reemite a requisição até duas vezes em rápida sucessão, e encerra o turno com `Connection lost before a response was produced` se a conexão continuar caindo nesse ponto.

419* Uma conexão que Claude Code detecta que foi quebrada pelo seu computador entrando em modo de suspensão no meio de uma requisição. Claude Code a conta como uma conexão perdida sob as regras acima; uma vez que o rótulo de nova tentativa nomeia a razão específica, ele exibe `Connection lost while your computer was asleep`, e se o turno terminar depois que Claude terminou de pensar mas antes de qualquer texto ou chamada de ferramenta, a mensagem exibe `Your computer went to sleep before a response was produced`.420* Uma conexão que Claude Code detecta que foi quebrada pelo seu computador entrando em modo de suspensão no meio de uma requisição. Claude Code a conta como uma conexão perdida sob as regras acima; uma vez que o rótulo de nova tentativa nomeia a razão específica, ele exibe `Connection lost while your computer was asleep`, e se o turno terminar depois que Claude terminou de pensar mas antes de qualquer texto ou chamada de ferramenta, a mensagem exibe `Your computer went to sleep before a response was produced`.

420* Um fluxo de resposta travado, quando os cabeçalhos de resposta chegaram mas nenhuma parte da resposta do Claude chegou, ou quando Claude terminou de pensar mas não iniciou qualquer texto ou chamada de ferramenta: Claude Code aborta a conexão travada e transmite a requisição novamente no máximo uma vez. Se a resposta travar uma segunda vez depois que Claude terminou de pensar mas antes de qualquer texto ou chamada de ferramenta, Claude Code encerra o turno com `The response stalled before a response was produced`.421* Um fluxo de resposta travado, quando os cabeçalhos de resposta chegaram mas nenhuma parte da resposta do Claude chegou, ou quando Claude terminou de pensar mas não iniciou qualquer texto ou chamada de ferramenta: Claude Code aborta a conexão travada e transmite a requisição novamente no máximo uma vez. Se a resposta travar uma segunda vez depois que Claude terminou de pensar mas antes de qualquer texto ou chamada de ferramenta, Claude Code encerra o turno com `The response stalled before a response was produced`.

421* Uma requisição de streaming que a API nunca responde com cabeçalhos de resposta, em uma conexão onde o [prazo de primeiro byte é executado](/docs/pt/network-config#streaming-idle-watchdogs): Claude Code a aborta no prazo e a reenvia no máximo uma vez por requisição de modelo, dentro do orçamento de tentativas, depois encerra o turno com [No response from API](#no-response-from-api) se essa tentativa também ficar sem resposta. Em outras conexões, a requisição aguarda `API_TIMEOUT_MS`. Quando você define `CLAUDE_CODE_RETRY_WATCHDOG`, o limite de uma nova tentativa não se aplica.422* Uma requisição de streaming que a API nunca responde com cabeçalhos de resposta, em uma conexão onde o [prazo de primeiro byte é executado](/docs/pt/network-config#streaming-idle-watchdogs): Claude Code a aborta no prazo e a reenvia no máximo uma vez por requisição de modelo, dentro do orçamento de tentativas, depois encerra o turno com [No response from API](#no-response-from-api) se essa tentativa também ficar sem resposta. Quando você define `CLAUDE_CODE_RETRY_WATCHDOG`, o limite de uma nova tentativa não se aplica.

422* Uma resposta de streaming que o filtro de conteúdo de saída da API interrompe antes de Claude ter terminado de pensar ou iniciado qualquer texto ou chamada de ferramenta. Claude Code reenvia a requisição uma vez, dentro do orçamento de tentativas, e mostra [Output blocked by content filtering policy](#output-blocked-by-content-filtering-policy) se o filtro também interromper a segunda resposta.423* Uma resposta de streaming que o filtro de conteúdo de saída da API interrompe antes de Claude ter terminado de pensar ou iniciado qualquer texto ou chamada de ferramenta. Claude Code reenvia a requisição uma vez, dentro do orçamento de tentativas, e mostra [Output blocked by content filtering policy](#output-blocked-by-content-filtering-policy) se o filtro também interromper a segunda resposta.

423* Throttles 429 temporários, mas não o `429` de limite de gastos de um gateway, que não é um throttle; veja [Spend limit reached](#spend-limit-reached).424* Throttles 429 temporários, mas não o `429` de limite de gastos de um gateway, que não é um throttle; veja [Spend limit reached](#spend-limit-reached).

424 * Quando você está conectado com uma assinatura claude.ai, isso inclui throttles 429 que não carregam os cabeçalhos de cota do seu plano. Antes da v2.1.199, Claude Code tentava novamente esses throttles apenas para logins com chave de API e Enterprise.425 * Quando você está conectado com uma assinatura claude.ai, isso inclui throttles 429 que não carregam os cabeçalhos de cota do seu plano. Antes da v2.1.199, Claude Code tentava novamente esses throttles apenas para logins com chave de API e Enterprise.


4552 4553 

4553* Corrija cada entrada que o erro nomeia com base nas [ferramentas disponíveis para subagentes](/docs/pt/sub-agents#available-tools)4554* Corrija cada entrada que o erro nomeia com base nas [ferramentas disponíveis para subagentes](/docs/pt/sub-agents#available-tools)

4554* Remova entradas para ferramentas que a sessão não tem, como ferramentas MCP de um servidor que não está conectado4555* Remova entradas para ferramentas que a sessão não tem, como ferramentas MCP de um servidor que não está conectado

4556* Se a entrada nomeia um servidor MCP conectado, compare a entrada com o nome desse servidor conforme os [nomes de ferramentas](/docs/pt/permissions#mcp) do servidor o escrevem, como `reports__v2` em `mcp__reports__v2__get_totals`. Para esse servidor, escreva `mcp__reports__v2__*`, que é `mcp__` seguido pelo nome completo e `__*`. Com o mais curto `mcp__reports`, que nomeia um servidor chamado `reports`, o subagente não recebe nenhuma das ferramentas `reports__v2`

4555* Para uma ferramenta que [subagentes em background descartam](/docs/pt/sub-agents#available-tools), como `CronCreate`, remova a entrada. Para manter a ferramenta, [desative o fork mode](/docs/pt/sub-agents#turn-fork-mode-on-or-off) e peça ao Claude para executar o subagente em foreground4557* Para uma ferramenta que [subagentes em background descartam](/docs/pt/sub-agents#available-tools), como `CronCreate`, remova a entrada. Para manter a ferramenta, [desative o fork mode](/docs/pt/sub-agents#turn-fork-mode-on-or-off) e peça ao Claude para executar o subagente em foreground

4556* Delete o campo `tools` em vez de listar ferramentas para dar ao subagente cada [ferramenta disponível para subagentes](/docs/pt/sub-agents#available-tools)4558* Delete o campo `tools` em vez de listar ferramentas para dar ao subagente cada [ferramenta disponível para subagentes](/docs/pt/sub-agents#available-tools)

4557* Para uma lista `tools` que contém apenas `Agent`, aumente o [limite de profundidade](/docs/pt/sub-agents#let-subagents-spawn-their-own-subagents) ou dê ao agente pelo menos uma outra ferramenta: Claude Code retém `Agent` nesse limite, então uma lista com nada mais nela se resolve para nenhuma ferramenta4559* Para uma lista `tools` que contém apenas `Agent`, aumente o [limite de profundidade](/docs/pt/sub-agents#let-subagents-spawn-their-own-subagents) ou dê ao agente pelo menos uma outra ferramenta: Claude Code retém `Agent` nesse limite, então uma lista com nada mais nela se resolve para nenhuma ferramenta

hooks.md +53 −16

Details

476| `async` | não | Se `true`, executa em background sem bloquear. Consulte [Executar hooks em background](#run-hooks-in-the-background) |476| `async` | não | Se `true`, executa em background sem bloquear. Consulte [Executar hooks em background](#run-hooks-in-the-background) |

477| `asyncRewake` | não | Se `true`, executa em background e acorda Claude na saída do código 2. O stderr do hook, ou stdout se stderr estiver vazio, é mostrado ao Claude como um [lembrete do sistema](/docs/pt/glossary#system-reminder) para que possa reagir a uma falha de background de longa duração |477| `asyncRewake` | não | Se `true`, executa em background e acorda Claude na saída do código 2. O stderr do hook, ou stdout se stderr estiver vazio, é mostrado ao Claude como um [lembrete do sistema](/docs/pt/glossary#system-reminder) para que possa reagir a uma falha de background de longa duração |

478| `shell` | não | Shell a usar para este hook. Aceita `"bash"` ou `"powershell"`. Padrão é `"bash"`, ou `"powershell"` no Windows quando Git Bash não está instalado. Definir `"powershell"` executa o comando via PowerShell no Windows. Não requer `CLAUDE_CODE_USE_POWERSHELL_TOOL` já que hooks geram PowerShell diretamente. Ignorado quando `args` é definido |478| `shell` | não | Shell a usar para este hook. Aceita `"bash"` ou `"powershell"`. Padrão é `"bash"`, ou `"powershell"` no Windows quando Git Bash não está instalado. Definir `"powershell"` executa o comando via PowerShell no Windows. Não requer `CLAUDE_CODE_USE_POWERSHELL_TOOL` já que hooks geram PowerShell diretamente. Ignorado quando `args` é definido |

479| `onFailure` | não | O que acontece com a ação quando o hook falha: `"continue"`, o padrão, ou `"block"`. Consulte [Bloquear a ação quando um hook falha](#block-the-action-when-a-hook-fails). Requer Claude Code v2.1.295 ou posterior |479| `onFailure` | não | Se a ação que acionou o hook prossegue quando o hook falha: `"continue"` ou `"block"`. Consulte [Bloquear a ação quando um hook falha](#block-the-action-when-a-hook-fails) para `"block"` e para deixar o campo sem definir. Requer Claude Code v2.1.295 ou posterior |

480 480 

481<a id="exec-form-and-shell-form" />481<a id="exec-form-and-shell-form" />

482 482 


829 829 

830* **Sucesso**: seu hook sai com 0. Claude Code aplica quaisquer campos de [saída JSON](#json-output) que seu hook imprimiu, e a ação prossegue, a menos que esses campos a bloqueiem ou neguem. [Hooks que iniciam um processo em segundo plano](#hooks-that-start-a-background-process) cobre a exceção.830* **Sucesso**: seu hook sai com 0. Claude Code aplica quaisquer campos de [saída JSON](#json-output) que seu hook imprimiu, e a ação prossegue, a menos que esses campos a bloqueiem ou neguem. [Hooks que iniciam um processo em segundo plano](#hooks-that-start-a-background-process) cobre a exceção.

831* **Erro bloqueador**: seu hook sai com 2. Em [eventos que podem bloquear](#exit-code-2-behavior-per-event), Claude Code interrompe a ação.831* **Erro bloqueador**: seu hook sai com 2. Em [eventos que podem bloquear](#exit-code-2-behavior-per-event), Claude Code interrompe a ação.

832* **Erro não-bloqueador**: seu hook sai com qualquer outro código, ou falha de alguma outra forma, como não iniciar ou imprimir JSON inválido. A ação prossegue, e em eventos como `PreToolUse` você vê um aviso `<hook name> hook error` na transcrição. Se você quiser que um hook com falha bloqueie a ação, defina [`onFailure: "block"`](#block-the-action-when-a-hook-fails).832* **Erro não-bloqueador**: seu hook sai com qualquer outro código, ou falha de alguma outra forma, como não iniciar ou imprimir JSON inválido. A ação prossegue, exceto para hooks [cuja falha bloqueia a ação](#block-the-action-when-a-hook-fails), por exemplo um hook com `onFailure` definido como `"block"`. Em eventos como `PreToolUse`, você vê um aviso `<hook name> hook error` na transcrição.

833 833 

834O que seu hook imprime em stdout pode mudar o resultado. Por exemplo, se um hook `PreToolUse` sai com 1 mas imprime JSON que passa na validação, a execução é um sucesso e os campos JSON decidem o que acontece. Para encontrar o resultado do seu hook em um evento como `PreToolUse`, combine o que ele imprimiu em stdout na primeira coluna com seu código de saída no topo:834O que seu hook imprime em stdout pode mudar o resultado. Por exemplo, quando um hook `PreToolUse` sai com 1 mas imprime JSON que passa na validação, esse JSON ainda pode decidir o que acontece. Para encontrar o resultado do seu hook em um evento como `PreToolUse`, combine o que ele imprimiu em stdout na primeira coluna com seu código de saída no topo:

835 835 

836| Stdout | Saída 0 | Saída 2 | Qualquer outro código de saída |836| Stdout | Saída 0 | Saída 2 | Qualquer outro código de saída |

837| :- | :- | :- | :- |837| :- | :- | :- | :- |

838| Objeto JSON que passa na [validação de esquema](#json-output) | Sucesso. Os campos se aplicam | Erro bloqueador. Claude Code ainda lê os campos, mas eles não podem sobrescrever o bloqueio | Sucesso. Claude Code ignora o código de saída, e apenas os campos decidem. Com [`onFailure: "block"`](#block-the-action-when-a-hook-fails), isso conta como uma falha |838| Objeto JSON que passa na [validação de esquema](#json-output) | Sucesso. Os campos se aplicam | Erro bloqueador. Claude Code ainda lê os campos, mas eles não podem sobrescrever o bloqueio | Sucesso. Claude Code ignora o código de saída, e apenas os campos decidem. Para hooks [cuja falha bloqueia a ação](#block-the-action-when-a-hook-fails), a execução conta como uma falha em vez disso |

839| JSON que [não pode ser analisado](#exit-code-0) ou falha na validação de esquema | Erro não-bloqueador. O aviso carrega a mensagem de análise ou validação | Erro bloqueador. Seu stderr é a razão | Erro não-bloqueador. O aviso carrega a mensagem de análise ou validação |839| JSON que [não pode ser analisado](#exit-code-0) ou falha na validação de esquema | Erro não-bloqueador. O aviso carrega a mensagem de análise ou validação | Erro bloqueador. Seu stderr é a razão | Erro não-bloqueador. O aviso carrega a mensagem de análise ou validação |

840| [Texto simples](#exit-code-0), ou nada | Sucesso | Erro bloqueador. Seu stderr é a razão | Erro não-bloqueador. O aviso carrega a primeira linha do seu stderr |840| [Texto simples](#exit-code-0), ou nada | Sucesso | Erro bloqueador. Seu stderr é a razão | Erro não-bloqueador. O aviso carrega a primeira linha do seu stderr |

841 841 


864* **Duas ou mais linhas que cada uma analisa como JSON por conta própria, a primeira começando com `{` e a última terminando com `}`**: texto simples quando nenhuma linha é um objeto de saída JSON que define um campo, e uma falha de análise quando alguma é.864* **Duas ou mais linhas que cada uma analisa como JSON por conta própria, a primeira começando com `{` e a última terminando com `}`**: texto simples quando nenhuma linha é um objeto de saída JSON que define um campo, e uma falha de análise quando alguma é.

865* **Qualquer outra coisa que começa com `{` e termina com `}` mas não é JSON válido**: uma falha de análise.865* **Qualquer outra coisa que começa com `{` e termina com `}` mas não é JSON válido**: uma falha de análise.

866 866 

867Quando Claude Code tenta analisar seu stdout como JSON e não consegue, ou o objeto analisado falha na [validação de esquema](#json-output), a execução é um [erro não-bloqueador](#exit-code-output). O aviso `<hook name> hook error` carrega a mensagem de análise ou validação. Nos eventos que adicionam stdout em texto simples como contexto, Claude Code não adiciona stdout que não conseguiu analisar.867A menos que o hook seja um [cuja falha bloqueia a ação](#block-the-action-when-a-hook-fails), uma falha de análise ou um objeto analisado que falha na [validação de esquema](#json-output) é um [erro não-bloqueador](#exit-code-output). O aviso `<hook name> hook error` carrega a mensagem de análise ou validação. Nos eventos que adicionam stdout em texto simples como contexto, Claude Code não adiciona stdout que não conseguiu analisar.

868 868 

869Claude nunca vê stderr de um hook que sai com 0. Para lê-lo você mesmo em eventos como `PreToolUse`, ative [debug logging](#debug-hooks). Para exibir um aviso para Claude de um hook `PostToolUse` ou `PostToolUseFailure`, saia com 2 em vez disso para que [Claude veja o stderr](#exit-code-2-behavior-per-event) mesmo que a ferramenta já tenha executado.869Claude nunca vê stderr de um hook que sai com 0. Para lê-lo você mesmo em eventos como `PreToolUse`, ative [debug logging](#debug-hooks). Para exibir um aviso para Claude de um hook `PostToolUse` ou `PostToolUseFailure`, saia com 2 em vez disso para que [Claude veja o stderr](#exit-code-2-behavior-per-event) mesmo que a ferramenta já tenha executado.

870 870 


907 Outros códigos de saída907 Outros códigos de saída

908</h4>908</h4>

909 909 

910Quando seu hook sai com um código diferente de 0 ou 2 e imprime texto simples ou nada em stdout, a execução é um [erro não-bloqueador](#exit-code-output). Você vê um aviso `<hook name> hook error` na transcrição com `Failed with non-blocking status code:` e a primeira linha do stderr do seu hook. Por exemplo, quando um hook `PreToolUse` em `Bash` imprime `something broke` em stderr e sai com 1, o aviso `PreToolUse:Bash hook error` carrega esta linha:910A menos que o hook seja um [cuja falha bloqueia a ação](#block-the-action-when-a-hook-fails), um código de saída diferente de 0 ou 2 com texto simples ou nada em stdout é um [erro não-bloqueador](#exit-code-output). Se a ação prosseguir, você vê um aviso `<hook name> hook error` na transcrição com `Failed with non-blocking status code:` e a primeira linha do stderr do seu hook.

911 

912Por exemplo, quando um hook `PreToolUse` em `Bash` imprime `something broke` em stderr e sai com 1, o aviso `PreToolUse:Bash hook error` carrega esta linha:

911 913 

912```text theme={null}914```text theme={null}

913Failed with non-blocking status code: something broke915Failed with non-blocking status code: something broke


915 917 

916Para capturar o stderr completo em vez de sua primeira linha, ative [debug logging](#debug-hooks).918Para capturar o stderr completo em vez de sua primeira linha, ative [debug logging](#debug-hooks).

917 919 

918Um hook que não consegue iniciar também é um erro não-bloqueador. Na forma shell, quando o caminho do script não existe ou não é executável, o shell sai com um código como 127 e o aviso carrega a mensagem do interpretador, por exemplo `Failed with non-blocking status code: /bin/sh: /path/to/hook.sh: No such file or directory`. Quando você configura um hook de política, observe este aviso em sua primeira execução, porque um caminho digitado incorretamente em `settings.json` significa que o hook nunca executa. Para bloquear a ação em vez disso, defina [`onFailure: "block"`](#block-the-action-when-a-hook-fails).920A menos que o hook seja um [cuja falha bloqueia a ação](#block-the-action-when-a-hook-fails), um hook que não consegue iniciar também é um erro não-bloqueador. Na forma shell, quando o caminho do script não existe ou não é executável, o shell sai com um código como 127 e o aviso carrega a mensagem do interpretador. Por exemplo, quando o caminho do script não existe, o aviso carrega uma linha como esta:

921 

922```text theme={null}

923Failed with non-blocking status code: /bin/sh: /path/to/hook.sh: No such file or directory

924```

925 

926Quando você configura um hook de política, observe este aviso em sua primeira execução, porque um caminho digitado incorretamente em `settings.json` significa que o hook nunca executa. Para bloquear a ação quando o hook não consegue iniciar, defina [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

919 927 

920<Warning>928<Warning>

921 Sem JSON válido em stdout, Claude Code trata código de saída 1 como um erro não-bloqueador, mesmo que 1 seja o código de falha Unix convencional. Se seu hook se destina a impor uma política, use `exit 2`.929 Código de saída 1 sem saída JSON válida é um erro não-bloqueador, a menos que o hook seja um [cuja falha bloqueia a ação](#block-the-action-when-a-hook-fails), mesmo que 1 seja o código de falha Unix convencional. Se seu hook se destina a impor uma política, use `exit 2`.

922</Warning>930</Warning>

923 931 

924<h4 id="timeouts">932<h4 id="timeouts">


929 937 

930Em [`PreModelSwitch`](#premodelswitch), um hook cancelado em seu timeout bloqueia a mudança de modelo. Em `PreToolUse`, as duas famílias de hook diferem:938Em [`PreModelSwitch`](#premodelswitch), um hook cancelado em seu timeout bloqueia a mudança de modelo. Em `PreToolUse`, as duas famílias de hook diferem:

931 939 

932* Um hook `command`, `http` ou `mcp_tool` expirado não bloqueia a chamada da ferramenta. A chamada continua através do [fluxo de permissão](/docs/pt/permissions) normal, portanto não conte com um hook travado para agir como um portão. Para bloquear a chamada quando um hook `command` ou `http` atinge o timeout, defina [`onFailure: "block"`](#block-the-action-when-a-hook-fails).940* Um hook `command`, `http` ou `mcp_tool` expirado não bloqueia a chamada da ferramenta, exceto para hooks [cuja falha bloqueia a ação](#block-the-action-when-a-hook-fails). A chamada continua através do [fluxo de permissão](/docs/pt/permissions) normal, portanto não conte com um hook travado para agir como um portão. Para bloquear a chamada quando um hook `command` ou `http` atinge o timeout, defina [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

933* Um hook de callback [Agent SDK](/docs/pt/agent-sdk/hooks) que excede seu timeout [bloqueia a chamada da ferramenta](#pretooluse).941* Um hook de callback [Agent SDK](/docs/pt/agent-sdk/hooks) que excede seu timeout [bloqueia a chamada da ferramenta](#pretooluse).

934 942 

935<h4 id="hooks-that-start-a-background-process">943<h4 id="hooks-that-start-a-background-process">


959 Bloquear a ação quando um hook falha967 Bloquear a ação quando um hook falha

960</h4>968</h4>

961 969 

962Na maioria dos eventos, quando um hook falha ou atinge o timeout, Claude Code ainda executa a ação, portanto um hook de política com um caminho errado ou um script que trava deixa tudo passar. Para bloquear a ação em vez disso, defina `"onFailure": "block"` em um hook `command` ou `http`. O valor padrão é `"continue"`. Requer Claude Code v2.1.295 ou posterior.970Na maioria dos eventos, quando um hook falha ou atinge o timeout, Claude Code ainda executa a ação. Um hook de política com um caminho errado ou um script que trava então deixa tudo passar. Para bloquear a ação em vez disso, defina `"onFailure": "block"` em um hook `command` ou `http`. Requer Claude Code v2.1.295 ou posterior.

971 

972<Note>

973 No Windows sem Git Bash, um hook de comando `PreToolUse` ou `PermissionRequest` em forma shell que falha com `onFailure` não definido pode, em vez disso, [bloquear a chamada de ferramenta](#failed-hooks-on-windows-without-git-bash).

974</Note>

963 975 

964Este hook `PreToolUse` em `.claude/settings.json` executa um script do projeto antes de cada comando Bash, e bloqueia o comando se o script falhar:976Este hook `PreToolUse` em `.claude/settings.json` executa um script do projeto antes de cada comando Bash, e bloqueia o comando se o script falhar:

965 977 


1007* **Hooks `Stop`, `SubagentStop`, `TaskCompleted` e `TeammateIdle`**: o código de saída 2 nesses eventos manda Claude de volta para continuar trabalhando, e Claude não consegue reparar um hook que não executa1019* **Hooks `Stop`, `SubagentStop`, `TaskCompleted` e `TeammateIdle`**: o código de saída 2 nesses eventos manda Claude de volta para continuar trabalhando, e Claude não consegue reparar um hook que não executa

1008* **Hooks de comando em segundo plano**: hooks de comando que definem [`async` ou `asyncRewake`](#run-hooks-in-the-background)1020* **Hooks de comando em segundo plano**: hooks de comando que definem [`async` ou `asyncRewake`](#run-hooks-in-the-background)

1009 1021 

1022<h4 id="failed-hooks-on-windows-without-git-bash">

1023 Hooks com falha no Windows sem Git Bash

1024</h4>

1025 

1026Se o erro de uma chamada de ferramenta bloqueada incluir este texto, um hook de comando `PreToolUse` ou `PermissionRequest` falhou ou atingiu o timeout e bloqueou a chamada:

1027 

1028```text theme={null}

1029blocking because Git Bash wasn't found and this hook doesn't set "shell" to "powershell", so only exit code 0 or 2 counts as its verdict.

1030```

1031 

1032Um hook em forma shell sem `shell` definido é executado no PowerShell quando o Git Bash não está instalado, e um script escrito para Bash pode não funcionar ali como foi escrito. Escolha a correção que corresponde ao seu hook:

1033 

1034* **O hook é escrito para Bash**: instale o [Git for Windows](https://git-scm.com/downloads/win), ou defina [`CLAUDE_CODE_GIT_BASH_PATH`](/docs/pt/env-vars) se o Git Bash estiver instalado em um local onde o Claude Code não o encontra, e então inicie uma nova sessão

1035* **O hook executa um único `.exe`, não um arquivo `.cmd` ou `.bat`**: coloque o programa em `command` e seus argumentos em `args` para usar a [forma exec](#exec-form-and-shell-form), e adicione [`"onFailure": "block"`](#block-the-action-when-a-hook-fails). Claude Code então inicia o programa sem shell. Sem `"onFailure": "block"`, a chamada pode prosseguir quando o programa falha, está ausente ou atinge o timeout

1036* **O hook é escrito para PowerShell**: adicione `"shell": "powershell"` e [`"onFailure": "block"`](#block-the-action-when-a-hook-fails) ao hook. Sem `"onFailure": "block"`, a chamada pode prosseguir quando o hook ainda falha ou atinge o timeout. Para descobrir por que o hook falhou, verifique o [log de debug](#debug-hooks)

1037* **A ação deve prosseguir quando o hook falha**: adicione `"onFailure": "continue"` ao hook

1038 

1039Para um hook que mostra este erro, qualquer código de saída diferente de 0 ou 2 conta como uma [falha](#block-the-action-when-a-hook-fails), mesmo quando o hook imprime JSON que não nega a chamada.

1040 

1010<h4 id="exit-code-2-behavior-per-event">1041<h4 id="exit-code-2-behavior-per-event">

1011 Comportamento de código de saída 2 por evento1042 Comportamento de código de saída 2 por evento

1012</h4>1043</h4>


1060* **2xx com corpo vazio**: sucesso, equivalente a código de saída 0 sem saída1091* **2xx com corpo vazio**: sucesso, equivalente a código de saída 0 sem saída

1061* **2xx com corpo de objeto JSON**: analisado usando o mesmo esquema [saída JSON](#json-output) que hooks de comando. Um corpo que falha na validação de esquema é um erro não-bloqueador1092* **2xx com corpo de objeto JSON**: analisado usando o mesmo esquema [saída JSON](#json-output) que hooks de comando. Um corpo que falha na validação de esquema é um erro não-bloqueador

1062* **2xx com qualquer outro corpo, como texto simples**: erro não-bloqueador, tratado da mesma forma que um status não-2xx. Claude Code não adiciona o texto ao contexto de Claude1093* **2xx com qualquer outro corpo, como texto simples**: erro não-bloqueador, tratado da mesma forma que um status não-2xx. Claude Code não adiciona o texto ao contexto de Claude

1063* **Status não-2xx**: erro não-bloqueador, execução continua1094* **Status não-2xx**: erro não-bloqueador

1064* **Falha de conexão**: erro não-bloqueador, execução continua1095* **Falha de conexão**: erro não-bloqueador

1065* **Timeout**: o hook é cancelado, conforme descrito em [Timeouts](#timeouts)1096* **Timeout**: o hook é cancelado, conforme descrito em [Timeouts](#timeouts)

1066 1097 

1067Hooks HTTP não podem sinalizar um erro bloqueador apenas através do código de status: um status não-2xx ou uma conexão com falha é um [erro não-bloqueador](#exit-code-output). Para bloquear uma chamada de ferramenta ou negar uma permissão, retorne uma resposta 2xx com um corpo JSON contendo os campos de decisão apropriados. Para bloquear a ação quando a requisição falha ou retorna um status não-2xx, defina [`onFailure: "block"`](#block-the-action-when-a-hook-fails).1098Após um [erro não-bloqueador](#exit-code-output), a ação prossegue, a menos que o hook seja um [cuja falha bloqueia a ação](#block-the-action-when-a-hook-fails). Para bloquear uma chamada de ferramenta ou negar uma permissão, retorne uma resposta 2xx com um corpo JSON contendo os [campos de decisão](#decision-control) apropriados. Para bloquear a ação quando a requisição falha ou retorna um status não-2xx, defina [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

1068 1099 

1069<h3 id="json-output">1100<h3 id="json-output">

1070 Saída JSON1101 Saída JSON


1573}1604}

1574```1605```

1575 1606 

1607Quando o prompt é uma [skill](/docs/pt/skills) ou um comando personalizado que você digitou, como `/deploy staging`, o hook recebe essa linha como você a digitou, em vez do conteúdo expandido da skill. Se o hook bloquear o prompt, o comando não é executado, portanto os comandos de shell que a skill [injeta com `` !`<command>` ``](/docs/pt/skills#inject-dynamic-context) também não são executados. Para fazer a correspondência pelo nome ou pelos argumentos do comando, use [UserPromptExpansion](#userpromptexpansion).

1608 

1576<h4 id="userpromptsubmit-decision-control">1609<h4 id="userpromptsubmit-decision-control">

1577 Controle de decisão do UserPromptSubmit1610 Controle de decisão do UserPromptSubmit

1578</h4>1611</h4>


2076 2109 

2077| Campo | Descrição |2110| Campo | Descrição |

2078| :- | :- |2111| :- | :- |

2079| `permissionDecision` | `"allow"` ignora o prompt de permissão, exceto para as [ações que nenhum modo aprova automaticamente](/docs/pt/permission-modes#actions-no-mode-auto-approves), para [leituras de caminhos de rede](/docs/pt/permissions#network-paths) e para `AskUserQuestion` e `ExitPlanMode`, que precisam de [`updatedInput` associado a ele](#allow-with-updatedinput). `"deny"` impede a chamada de ferramenta. `"ask"` pede ao usuário que confirme. `"defer"` sai de forma controlada para que a ferramenta possa ser retomada mais tarde. As [regras de negação e de pergunta](/docs/pt/permissions#manage-permissions) ainda são avaliadas independentemente do que o hook retorna |2112| `permissionDecision` | `"allow"` pula o prompt de permissão, exceto para [ações que nenhum modo aprova automaticamente](/docs/pt/permission-modes#actions-no-mode-auto-approves) e [leituras de caminhos de rede](/docs/pt/permissions#network-paths). `AskUserQuestion` e `ExitPlanMode` precisam de [`updatedInput` combinado com `"allow"`](#allow-with-updatedinput). Para o modo de planejamento, consulte [Aprovações de hooks no modo de planejamento](/docs/pt/permissions#hook-approvals-in-plan-mode). `"deny"` impede a chamada de ferramenta. `"ask"` solicita que o usuário confirme. `"defer"` encerra de forma controlada para que a ferramenta possa ser retomada mais tarde. [Regras de negação e de confirmação](/docs/pt/permissions#manage-permissions) ainda são avaliadas independentemente do que o hook retornar |

2080| `permissionDecisionReason` | Para `"ask"`, mostrado ao usuário no prompt de permissão. Quando o Claude Code [nega a chamada](/docs/pt/headless#turn-off-permission-prompts-in-unattended-runs) em uma execução `-p` em que ninguém pode responder a esse prompt, o Claude lê o motivo no resultado da ferramenta. Para `"deny"`, mostrado ao Claude. Para `"allow"` e `"defer"`, gravado apenas no [log de depuração](#debug-hooks) |2113| `permissionDecisionReason` | Para `"ask"`, mostrado ao usuário no prompt de permissão. Quando o Claude Code [nega a chamada](/docs/pt/headless#turn-off-permission-prompts-in-unattended-runs) em uma execução `-p` em que ninguém pode responder a esse prompt, o Claude lê o motivo no resultado da ferramenta. Para `"deny"`, mostrado ao Claude. Para `"allow"` e `"defer"`, gravado apenas no [log de depuração](#debug-hooks) |

2081| `updatedInput` | Modifica os parâmetros de entrada da ferramenta antes da execução. Substitui o objeto de entrada inteiro, portanto inclua os campos inalterados junto com os modificados. O Claude Code avalia as regras de permissão e a [elegibilidade para segundo plano automático](/docs/pt/tools-reference#foreground-commands-that-move-to-the-background) de um comando Bash com base na entrada que seu hook retorna, e não na entrada que o Claude enviou. Combine com `"allow"` para aprovar automaticamente, ou com `"ask"` para mostrar a entrada modificada ao usuário. Para `"defer"`, é ignorado |2114| `updatedInput` | Modifica os parâmetros de entrada da ferramenta antes da execução. Substitui o objeto de entrada inteiro, portanto inclua os campos inalterados junto com os modificados. O Claude Code avalia as regras de permissão e a [elegibilidade para segundo plano automático](/docs/pt/tools-reference#foreground-commands-that-move-to-the-background) de um comando Bash com base na entrada que seu hook retorna, e não na entrada que o Claude enviou. Combine com `"allow"` para aprovar automaticamente, ou com `"ask"` para mostrar a entrada modificada ao usuário. Para `"defer"`, é ignorado |

2082| `additionalContext` | String adicionada ao contexto do Claude junto com o resultado da ferramenta. Ignorado quando `permissionDecision` é `"defer"`. Consulte [Adicionar contexto para o Claude](#add-context-for-claude) |2115| `additionalContext` | String adicionada ao contexto do Claude junto com o resultado da ferramenta. Ignorado quando `permissionDecision` é `"defer"`. Consulte [Adicionar contexto para o Claude](#add-context-for-claude) |


3718 3751 

3719O Claude Code mostra ao usuário qualquer `systemMessage` que o seu hook retorne, independentemente da decisão, então um hook de relatório de custos pode retornar `{"systemMessage": "..."}` e terminar com 0.3752O Claude Code mostra ao usuário qualquer `systemMessage` que o seu hook retorne, independentemente da decisão, então um hook de relatório de custos pode retornar `{"systemMessage": "..."}` e terminar com 0.

3720 3753 

3721Um hook PreModelSwitch que não responde antes do seu timeout bloqueia a troca. Para saber o que um timeout faz em outros eventos, consulte [Timeouts](#timeouts). O timeout padrão para este evento é de 30 segundos. O `PreModelSwitch` executa apenas hooks `command`, `http` e `mcp_tool`, então os padrões de `prompt` e `agent` não se aplicam.3754<h4 id="premodelswitch-timeouts-and-other-exit-codes">

3755 Timeouts e outros códigos de saída do PreModelSwitch

3756</h4>

3757 

3758Um hook PreModelSwitch que não responde antes do seu timeout bloqueia a troca. O timeout padrão para este evento é de 30 segundos.

3722 3759 

3723Um hook que termina com um código diferente de 0 ou 2 e não imprime nenhuma decisão JSON é um erro não bloqueante, conforme descrito em [Outros códigos de saída](#other-exit-codes).3760Para saber o que um código de saída diferente de 0 ou 2 faz, consulte [Outros códigos de saída](#other-exit-codes).

3724 3761 

3725<h3 id="postmodelswitch">3762<h3 id="postmodelswitch">

3726 PostModelSwitch3763 PostModelSwitch

hooks-guide.md +17 −4

Details

633 * Para um hook `PreToolUse` isto não aprova a chamada de ferramenta: o [fluxo de permissão](/docs/pt/permissions) normal ainda se aplica.633 * Para um hook `PreToolUse` isto não aprova a chamada de ferramenta: o [fluxo de permissão](/docs/pt/permissions) normal ainda se aplica.

634 * Para hooks `UserPromptSubmit`, `UserPromptExpansion`, `SessionStart` e `PostModelSwitch`, Claude Code adiciona stdout que [trata como texto simples](/docs/pt/hooks#exit-code-0) ao contexto do Claude.634 * Para hooks `UserPromptSubmit`, `UserPromptExpansion`, `SessionStart` e `PostModelSwitch`, Claude Code adiciona stdout que [trata como texto simples](/docs/pt/hooks#exit-code-0) ao contexto do Claude.

635* **Exit 2**: Claude Code bloqueia a ação. Escreva um motivo para stderr. Onde ele vai depende do evento: alguns eventos o alimentam ao Claude como feedback para que possa se ajustar, outros o mostram ao usuário, e alguns, como `ConfigChange` e `Elicitation`, não exibem nenhuma mensagem. Alguns eventos não podem ser bloqueados: para `SessionStart` e outros, exit 2 mostra stderr ao usuário e a execução continua. Consulte [comportamento do código de saída 2 por evento](/docs/pt/hooks#exit-code-2-behavior-per-event) para a lista completa.635* **Exit 2**: Claude Code bloqueia a ação. Escreva um motivo para stderr. Onde ele vai depende do evento: alguns eventos o alimentam ao Claude como feedback para que possa se ajustar, outros o mostram ao usuário, e alguns, como `ConfigChange` e `Elicitation`, não exibem nenhuma mensagem. Alguns eventos não podem ser bloqueados: para `SessionStart` e outros, exit 2 mostra stderr ao usuário e a execução continua. Consulte [comportamento do código de saída 2 por evento](/docs/pt/hooks#exit-code-2-behavior-per-event) para a lista completa.

636* **Qualquer outro código de saída**: para a maioria dos eventos, o resultado depende do que seu hook imprimiu para stdout:636* **Qualquer outro código de saída**: para a maioria dos eventos, a ação prossegue como um [erro não bloqueador](/docs/pt/hooks#exit-code-output), a menos que o hook seja um [cuja falha bloqueia a ação](/docs/pt/hooks#block-the-action-when-a-hook-fails) ou que sua saída JSON passe na validação:

637 * Um objeto analisado que passa na validação de esquema: Claude Code ignora o código de saída, apenas o JSON decide o resultado, e o hook não é relatado como um erro. As exceções por evento, como `WorktreeCreate` falhando em qualquer saída diferente de zero, estão listadas na seção [Saída do código de saída](/docs/pt/hooks#exit-code-output) da referência.637 * Um objeto analisado que passa na validação de esquema: Claude Code ignora o código de saída, apenas o JSON decide o resultado, e o hook não é relatado como um erro. As exceções por evento, como `WorktreeCreate` falhando em qualquer saída diferente de zero, estão listadas na seção [Saída do código de saída](/docs/pt/hooks#exit-code-output) da referência.

638 * Um objeto analisado que falha na validação de esquema, ou stdout que Claude Code [tenta analisar como JSON](/docs/pt/hooks#exit-code-0) mas que não é JSON válido: um erro não bloqueador; o aviso carrega a mensagem de validação ou análise.638 * Um objeto analisado que falha na validação de esquema, ou stdout que Claude Code [tenta analisar como JSON](/docs/pt/hooks#exit-code-0) mas que não é JSON válido: um erro não bloqueador; o aviso carrega a mensagem de validação ou análise.

639 * Stdout que Claude Code [trata como texto simples](/docs/pt/hooks#exit-code-0), ou stdout vazio: a ação prossegue como um erro não bloqueador. A transcrição mostra um aviso `<hook name> hook error`, depois a primeira linha de stderr prefixada com `Failed with non-blocking status code:`. Para capturar o stderr completo, ative [debug logging](/docs/pt/hooks#debug-hooks) com `claude --debug` ou executando `/debug` no meio da sessão.639 * Stdout que Claude Code [trata como texto simples](/docs/pt/hooks#exit-code-0), ou stdout vazio: a ação prossegue como um erro não bloqueador. A transcrição mostra um aviso `<hook name> hook error`, depois a primeira linha de stderr prefixada com `Failed with non-blocking status code:`. Para capturar o stderr completo, ative [debug logging](/docs/pt/hooks#debug-hooks) com `claude --debug` ou executando `/debug` no meio da sessão.


664 664 

665Em `PreToolUse`, Claude Code trata cada valor `permissionDecision` da seguinte forma:665Em `PreToolUse`, Claude Code trata cada valor `permissionDecision` da seguinte forma:

666 666 

667* `"allow"`: pular o prompt de permissão interativo. Regras de negação e pedido, incluindo listas de negação gerenciadas por empresa, ainda se aplicam, assim como prompts para leituras de [caminhos de rede](/docs/pt/permissions#network-paths), para ferramentas MCP marcadas [`requiresUserInteraction`](/docs/pt/mcp#require-approval-for-a-specific-tool) e para ferramentas de conector [que sua organização definiu como `ask`](/docs/pt/mcp#organization-controls-on-connector-tools) em sessões onde essa configuração chega ao Claude Code667* `"allow"`: pular o prompt de permissão interativo. Regras de negação e pedido, incluindo listas de negação gerenciadas por empresa, ainda se aplicam, assim como prompts para:

668 

669 * Leituras de [caminhos de rede](/docs/pt/permissions#network-paths)

670 * Ferramentas MCP marcadas [`requiresUserInteraction`](/docs/pt/mcp#require-approval-for-a-specific-tool)

671 * Ferramentas de conector [que sua organização definiu como `ask`](/docs/pt/mcp#organization-controls-on-connector-tools) em sessões onde essa configuração chega ao Claude Code

672 

673 Para o que `"allow"` faz no modo de planejamento, consulte [Aprovações de hook no modo de planejamento](/docs/pt/permissions#hook-approvals-in-plan-mode).

668* `"deny"`: cancelar a chamada de ferramenta e enviar o motivo ao Claude674* `"deny"`: cancelar a chamada de ferramenta e enviar o motivo ao Claude

669* `"ask"`: mostrar o prompt de permissão ao usuário normalmente675* `"ask"`: mostrar o prompt de permissão ao usuário normalmente

670 676 


1015 1021 

1016Hooks `PreToolUse` disparam antes de qualquer verificação de modo de permissão, em cada [modo de permissão](/docs/pt/permission-modes), incluindo `dontAsk`. Um hook que retorna `permissionDecision: "deny"` bloqueia a ferramenta mesmo em modo `bypassPermissions` ou com `--dangerously-skip-permissions`. Isto permite que você aplique política que usuários não podem contornar mudando seu modo de permissão.1022Hooks `PreToolUse` disparam antes de qualquer verificação de modo de permissão, em cada [modo de permissão](/docs/pt/permission-modes), incluindo `dontAsk`. Um hook que retorna `permissionDecision: "deny"` bloqueia a ferramenta mesmo em modo `bypassPermissions` ou com `--dangerously-skip-permissions`. Isto permite que você aplique política que usuários não podem contornar mudando seu modo de permissão.

1017 1023 

1018O inverso não é verdadeiro: um hook retornando `"allow"` não contorna regras de negação de configurações, e não pode suprimir o prompt para leituras de [caminhos de rede](/docs/pt/permissions#network-paths), para ferramentas MCP marcadas [`requiresUserInteraction`](/docs/pt/mcp#require-approval-for-a-specific-tool) ou para ferramentas de conector [que sua organização definiu como `ask`](/docs/pt/mcp#organization-controls-on-connector-tools) em sessões onde essa configuração chega ao Claude Code. Hooks em arquivos de configuração e no `hooks/hooks.json` de um plugin podem apertar restrições mas não afrouxá-las além do que regras de permissão permitem.1024O inverso não é verdadeiro: hooks em arquivos de configuração e no `hooks/hooks.json` de um plugin podem apertar restrições mas não afrouxá-las além do que regras de permissão permitem. Um hook retornando `"allow"` não contorna regras de negação de configurações, e não pode suprimir o prompt para:

1025 

1026* Leituras de [caminhos de rede](/docs/pt/permissions#network-paths)

1027* Ferramentas MCP marcadas [`requiresUserInteraction`](/docs/pt/mcp#require-approval-for-a-specific-tool)

1028* Ferramentas de conector [que sua organização definiu como `ask`](/docs/pt/mcp#organization-controls-on-connector-tools) em sessões onde essa configuração chega ao Claude Code

1029 

1030Em [modo de planejamento](/docs/pt/permissions#hook-approvals-in-plan-mode), se seu hook `PreToolUse` retornar `"allow"` para uma edição de arquivo, você recebe o mesmo prompt, bloqueio ou aprovação que a edição receberia sem nenhum hook. Para remover este limite nas aprovações de hooks, [aprove o plano](/docs/pt/permission-modes#review-and-approve-a-plan) ou mude para outro modo de permissão.

1019 1031 

1020Um [mod](/docs/pt/plugins/mods/overview) que você instala e que trata `tool.check` pode aprovar uma chamada que seu hook `PreToolUse` bloqueou, a menos que o hook esteja em configurações gerenciadas. [Estender permissões com hooks](/docs/pt/permissions#extend-permissions-with-hooks) lista quais regras prevalecem sobre um mod.1032Um [mod](/docs/pt/plugins/mods/overview) que você instala e que trata `tool.check` pode aprovar uma chamada que seu hook `PreToolUse` bloqueou, a menos que o hook esteja em configurações gerenciadas. Em modo de planejamento, o mod pode aprovar tal chamada quando ela é somente leitura, mas não uma edição de arquivo ou outra chamada que não seja somente leitura. [Estender permissões com hooks](/docs/pt/permissions#extend-permissions-with-hooks) lista quais regras prevalecem sobre um mod.

1021 1033 

1022<h3 id="hook-not-firing">1034<h3 id="hook-not-firing">

1023 Hook não dispara1035 Hook não dispara


1042 ```1054 ```

1043* Se você vir "command not found", use caminhos absolutos ou `${CLAUDE_PROJECT_DIR}` para referenciar scripts. Para evitar quoting de shell completamente, adicione `"args": []` para mudar para [forma exec](/docs/pt/hooks#exec-form-and-shell-form), que gera o script diretamente sem um shell1055* Se você vir "command not found", use caminhos absolutos ou `${CLAUDE_PROJECT_DIR}` para referenciar scripts. Para evitar quoting de shell completamente, adicione `"args": []` para mudar para [forma exec](/docs/pt/hooks#exec-form-and-shell-form), que gera o script diretamente sem um shell

1044* Se você vir "jq: command not found", instale `jq` ou use Python/Node.js para análise JSON1056* Se você vir "jq: command not found", instale `jq` ou use Python/Node.js para análise JSON

1057* Se a mensagem incluir `blocking because Git Bash wasn't found`, você está no Windows, Claude Code não encontrou o Git Bash, e o hook que falhou ou atingiu o timeout bloqueou a chamada de ferramenta. Veja [Hooks com falha no Windows sem Git Bash](/docs/pt/hooks#failed-hooks-on-windows-without-git-bash) para as correções

1045* Se o aviso mostra uma mensagem de validação JSON, a stdout do seu hook foi analisada como JSON mas falhou na validação de esquema. Se mostra uma mensagem de análise JSON, a stdout parecia um objeto JSON mas não era JSON válido. Ambos acontecem mesmo em saída 0.1058* Se o aviso mostra uma mensagem de validação JSON, a stdout do seu hook foi analisada como JSON mas falhou na validação de esquema. Se mostra uma mensagem de análise JSON, a stdout parecia um objeto JSON mas não era JSON válido. Ambos acontecem mesmo em saída 0.

1046 1059 

1047 Para corrigir uma falha de análise, construa o payload com um codificador JSON como `jq` em vez de concatenação de string, para que aspas e barras invertidas dentro de valores sejam escapadas. A seção [Saída de código de saída](/docs/pt/hooks#exit-code-output) da referência cobre as combinações de código de saída e JSON1060 Para corrigir uma falha de análise, construa o payload com um codificador JSON como `jq` em vez de concatenação de string, para que aspas e barras invertidas dentro de valores sejam escapadas. A seção [Saída de código de saída](/docs/pt/hooks#exit-code-output) da referência cobre as combinações de código de saída e JSON

Details

1091* `event.sequence`: contador por processo para ordenar eventos, descrito em [Atributos de correlação de eventos](#event-correlation-attributes)1091* `event.sequence`: contador por processo para ordenar eventos, descrito em [Atributos de correlação de eventos](#event-correlation-attributes)

1092* `from_mode`: O modo de permissão anterior, por exemplo `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, ou `"bypassPermissions"`1092* `from_mode`: O modo de permissão anterior, por exemplo `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, ou `"bypassPermissions"`

1093* `to_mode`: O novo modo de permissão1093* `to_mode`: O novo modo de permissão

1094* `trigger`: O que causou a mudança. Um de `"shift_tab"`, `"exit_plan_mode"`, `"auto_gate_denied"`, ou `"auto_opt_in"`. Ausente quando a transição origina do SDK ou bridge1094* `trigger`: O que causou a alteração. Um de `"shift_tab"`, `"exit_plan_mode"`, `"auto_gate_denied"` ou `"auto_opt_in"`. Ausente em algumas alterações, como quando o SDK define o modo de permissão por meio de [`setPermissionMode()`](/docs/pt/agent-sdk/typescript#query-object)

1095 1095 

1096<h4 id="auth-event">1096<h4 id="auth-event">

1097 Evento de autenticação1097 Evento de autenticação

Details

203 Watchdogs de inatividade de streaming203 Watchdogs de inatividade de streaming

204</h2>204</h2>

205 205 

206Claude Code executa quatro temporizadores independentes que abortam uma resposta de modelo de streaming quando fica silenciosa, para que uma conexão morta falhe e tente novamente em vez de ficar pendurada. O prazo de primeiro byte cobre a espera pelos cabeçalhos de resposta, antes de qualquer parte da resposta ter chegado. Cada um dos outros três monitora uma resposta ativa para um sinal diferente.206Claude Code executa quatro temporizadores independentes que abortam uma resposta de modelo de streaming quando fica silenciosa, para que uma conexão morta falhe e tente novamente em vez de ficar pendurada. Uma requisição que não recebe nenhum cabeçalho de resposta termina de uma de duas maneiras:

207 

208* **Onde o prazo de primeiro byte é executado**: a primeira tentativa termina nesse prazo. Para alterá-lo, defina `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS`. Para a espera da nova tentativa, veja [Nenhuma resposta da API](/docs/pt/errors#no-response-from-api).

209* **Nas outras conexões**: a requisição termina após 5 a 6 minutos, quando o timeout de inatividade do corpo dispara, a menos que você tenha desativado esse timeout. Para encerrá-la mais cedo, reduza `API_TIMEOUT_MS`.

207 210 

208| Timer | Aborta quando | Executa em | Tempo limite padrão |211| Timer | Aborta quando | Executa em | Tempo limite padrão |

209| :- | :- | :- | :- |212| :- | :- | :- | :- |

210| Prazo de primeiro byte | Nenhum cabeçalho de resposta chega após Claude Code enviar a solicitação | API Anthropic direta e [Claude Platform on AWS](/docs/pt/claude-platform-on-aws), incluindo através de um proxy HTTPS, mas não quando `ANTHROPIC_BASE_URL` ou `ANTHROPIC_AWS_BASE_URL` as roteia através de um [gateway](/docs/pt/gateways). Opt-in no Amazon Bedrock com `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`; não executa no Agent Platform do Google Cloud ou no Microsoft Foundry | 180 segundos na API Anthropic direta, 300 segundos em outro lugar, mais um segundo por 32KB de corpo da solicitação |213| Prazo de primeiro byte | Nenhum cabeçalho de resposta chega após Claude Code enviar a requisição | API Anthropic direta e [Claude Platform on AWS](/docs/pt/claude-platform-on-aws), incluindo através de um proxy HTTPS, mas não quando `ANTHROPIC_BASE_URL` ou `ANTHROPIC_AWS_BASE_URL` as roteia através de um [gateway](/docs/pt/gateways). Opt-in no Amazon Bedrock com `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`; não executa no Agent Platform do Google Cloud ou no Microsoft Foundry, nem em uma sessão do [Claude apps gateway](/docs/pt/claude-apps-gateway) | 180 segundos na API Anthropic direta, 300 segundos em outro lugar, mais um segundo por 32KB de corpo da requisição |

211| Watchdog de nível de evento | Nenhum evento de resposta é analisado. Em conexões onde o watchdog de nível de byte executa, bytes chegando, incluindo pings de keep-alive, também redefinem este watchdog, por até cerca de cinco minutos sem um evento analisado | Cada provedor | 300 segundos |214| Watchdog de nível de evento | Nenhum evento de resposta é analisado. Em conexões onde o watchdog de nível de byte executa, bytes chegando, incluindo pings de keep-alive, também redefinem este watchdog, por até cerca de cinco minutos sem um evento analisado | Cada provedor | 300 segundos |

212| Watchdog de nível de byte | Nenhum byte chega no fio, incluindo pings de keep-alive SSE | API Anthropic direta, [Claude Platform on AWS](/docs/pt/claude-platform-on-aws) e conexões de [gateway](/docs/pt/gateways), incluindo um `ANTHROPIC_BASE_URL` customizado. Opt-in em respostas `vnd.amazon.eventstream` do Amazon Bedrock com `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`; não executa no Agent Platform do Google Cloud ou no Microsoft Foundry | 180 segundos na API Anthropic direta. 300 segundos no Claude Platform on AWS, no Amazon Bedrock, em uma sessão do [Claude apps gateway](/docs/pt/claude-apps-gateway) e através de um `ANTHROPIC_BASE_URL` customizado |215| Watchdog de nível de byte | Nenhum byte chega no fio, incluindo pings de keep-alive SSE | API Anthropic direta, [Claude Platform on AWS](/docs/pt/claude-platform-on-aws) e conexões de [gateway](/docs/pt/gateways), incluindo um `ANTHROPIC_BASE_URL` customizado. Opt-in em respostas `vnd.amazon.eventstream` do Amazon Bedrock com `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`; não executa no Agent Platform do Google Cloud ou no Microsoft Foundry | 180 segundos na API Anthropic direta. 300 segundos no Claude Platform on AWS, no Amazon Bedrock, em uma sessão do [Claude apps gateway](/docs/pt/claude-apps-gateway) e através de um `ANTHROPIC_BASE_URL` customizado |

213| Tempo limite de inatividade do corpo | Nenhum byte chega por 5 minutos | Provedores diferentes da API Anthropic direta, Claude Platform on AWS, e Amazon Bedrock com `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` definido, a menos que [`API_FORCE_IDLE_TIMEOUT`](/docs/pt/env-vars) mude isso | 5 minutos |216| Timeout de inatividade do corpo | Nenhum byte chega por 5 minutos, contando a espera pelos cabeçalhos de resposta | Provedores diferentes da API Anthropic direta, Claude Platform on AWS, e Amazon Bedrock com `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` definido, a menos que [`API_FORCE_IDLE_TIMEOUT`](/docs/pt/env-vars) mude isso | 5 minutos |

214 217 

215Se você definir `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`, o watchdog de nível de byte substitui o tempo limite de inatividade do corpo no Bedrock em vez de executar junto com ele. `CLAUDE_STREAM_IDLE_TIMEOUT_MS` então também governa quanto tempo um stream Bedrock pode permanecer silencioso antes de Claude Code tratar a conexão como morta, dentro dos limites listados abaixo. Bytes chegando ainda não redefinem o watchdog de nível de evento no Bedrock. Com logging de debug ativado, cada stream Bedrock então registra uma mensagem de debug que começa com `wire-heartbeat: _chunkTimes absent`.218Se você definir `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`, o watchdog de nível de byte substitui o tempo limite de inatividade do corpo no Bedrock em vez de executar junto com ele. `CLAUDE_STREAM_IDLE_TIMEOUT_MS` então também governa quanto tempo um stream Bedrock pode permanecer silencioso antes de Claude Code tratar a conexão como morta, dentro dos limites listados abaixo. Bytes chegando ainda não redefinem o watchdog de nível de evento no Bedrock. Com logging de debug ativado, cada stream Bedrock então registra uma mensagem de debug que começa com `wire-heartbeat: _chunkTimes absent`.

216 219 


220* `CLAUDE_STREAM_IDLE_TIMEOUT_MS` define o tempo limite de ambos os watchdogs. Claude Code aumenta valores abaixo de 5 minutos para 5 minutos, e limita o valor a 30 minutos para o watchdog de nível de byte.223* `CLAUDE_STREAM_IDLE_TIMEOUT_MS` define o tempo limite de ambos os watchdogs. Claude Code aumenta valores abaixo de 5 minutos para 5 minutos, e limita o valor a 30 minutos para o watchdog de nível de byte.

221* `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` define o tempo limite do watchdog de nível de byte sem alterar o do watchdog de nível de evento, limitado entre 10 segundos e 30 minutos, e tem precedência sobre `CLAUDE_STREAM_IDLE_TIMEOUT_MS` para esse watchdog.224* `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` define o tempo limite do watchdog de nível de byte sem alterar o do watchdog de nível de evento, limitado entre 10 segundos e 30 minutos, e tem precedência sobre `CLAUDE_STREAM_IDLE_TIMEOUT_MS` para esse watchdog.

222* `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS` define o prazo de primeiro byte diretamente. Deixe-o não definido e Claude Code usa o tempo limite do watchdog de nível de byte, então `CLAUDE_STREAM_IDLE_TIMEOUT_MS` e `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` também alteram o prazo. Para os limites, a permissão de upload, o limite `API_TIMEOUT_MS`, e quanto tempo a tentativa aguarda após um aborto sem resposta, veja [Nenhuma resposta da API](/docs/pt/errors#no-response-from-api).225* `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS` define o prazo de primeiro byte diretamente. Deixe-o não definido e Claude Code usa o tempo limite do watchdog de nível de byte, então `CLAUDE_STREAM_IDLE_TIMEOUT_MS` e `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` também alteram o prazo. Para os limites, a permissão de upload, o limite `API_TIMEOUT_MS`, e quanto tempo a tentativa aguarda após um aborto sem resposta, veja [Nenhuma resposta da API](/docs/pt/errors#no-response-from-api).

226* `API_TIMEOUT_MS` limita a espera pelos cabeçalhos de resposta. Onde o prazo de primeiro byte não é executado, como em uma sessão do Claude apps gateway, defina-o abaixo de `300000`, que equivale a 5 minutos, para tentar novamente mais cedo uma requisição sem resposta. Mantenha-o acima da espera mais longa por cabeçalhos, e da [requisição sem streaming](/docs/pt/errors#streaming-response-ended-before-any-complete-data-was-received) mais longa, que você espera: uma requisição que precisa de mais tempo atinge o timeout novamente a cada nova tentativa.

223* `API_FORCE_IDLE_TIMEOUT` definido como `0` desativa o tempo limite de inatividade do corpo, e definido como `1` o ativa para cada provedor. Os watchdogs executam independentemente dele, então para permitir que um stream pause mais tempo do que seus limites, também aumente ou desative-os.227* `API_FORCE_IDLE_TIMEOUT` definido como `0` desativa o tempo limite de inatividade do corpo, e definido como `1` o ativa para cada provedor. Os watchdogs executam independentemente dele, então para permitir que um stream pause mais tempo do que seus limites, também aumente ou desative-os.

224 228 

225Quando um watchdog aborta um stream travado, Claude Code trata o aborto como uma falha no meio do stream, e o que você vê depende de quão longe a resposta tinha chegado. Claude Code tenta novamente a solicitação ou encerra a rodada com um erro, mantém a saída concluída e mostra um [aviso de resposta incompleta](/docs/pt/errors#the-response-above-may-be-incomplete), ou encerra a rodada normalmente. [Tentativas automáticas](/docs/pt/errors#automatic-retries) diz onde cada resultado se aplica.229Quando um watchdog aborta um stream travado, Claude Code trata o aborto como uma falha no meio do stream, e o que você vê depende de quão longe a resposta tinha chegado. Claude Code tenta novamente a solicitação ou encerra a rodada com um erro, mantém a saída concluída e mostra um [aviso de resposta incompleta](/docs/pt/errors#the-response-above-may-be-incomplete), ou encerra a rodada normalmente. [Tentativas automáticas](/docs/pt/errors#automatic-retries) diz onde cada resultado se aplica.

Details

627 627 

628Claude Code recusa `bypassPermissions` em uma sessão que você inicia com [`--restricted`](/docs/pt/cli-reference#cli-flags). `--restricted` requer Claude Code v2.1.248 ou posterior.628Claude Code recusa `bypassPermissions` em uma sessão que você inicia com [`--restricted`](/docs/pt/cli-reference#cli-flags). `--restricted` requer Claude Code v2.1.248 ou posterior.

629 629 

630A primeira vez que você inicia uma sessão interativa com este modo habilitado, Claude Code mostra um diálogo de aviso pedindo que você aceite responsabilidade pelas ações tomadas sem verificações de permissão:630<span id="bypass-permissions-acceptance" />A primeira vez que você inicia uma sessão interativa com este modo habilitado, Claude Code mostra um diálogo de aviso pedindo que você aceite responsabilidade pelas ações tomadas sem verificações de permissão:

631 631 

632* **Se você aceitar**: Claude Code define `skipDangerousModePermissionPrompt` como `true` em `~/.claude/settings.json`, para que sessões posteriores ignorem o diálogo. Para ver o diálogo novamente, remova a chave desse arquivo ou defina-a como `false`. A [referência `skipDangerousModePermissionPrompt`](/docs/pt/settings-reference#skipdangerousmodepermissionprompt) lista os outros arquivos de configurações onde você ou sua organização podem defini-la.632* **Se você aceitar**: Claude Code define `skipDangerousModePermissionPrompt` como `true` em `~/.claude/settings.json`, para que sessões posteriores ignorem o diálogo. Para ver o diálogo novamente, remova a chave desse arquivo ou defina-a como `false`. A [referência `skipDangerousModePermissionPrompt`](/docs/pt/settings-reference#skipdangerousmodepermissionprompt) lista os outros arquivos de configurações onde você ou sua organização podem defini-la.

633* **Se você recusar**: Claude Code sai.633* **Se você recusar**: Claude Code sai.


635Em [modo não interativo](/docs/pt/headless) nenhum diálogo é mostrado. Uma [sessão em segundo plano](/docs/pt/agent-view) respeita sua aceitação quando ela está registrada nas configurações de usuário ou nas configurações gerenciadas:635Em [modo não interativo](/docs/pt/headless) nenhum diálogo é mostrado. Uma [sessão em segundo plano](/docs/pt/agent-view) respeita sua aceitação quando ela está registrada nas configurações de usuário ou nas configurações gerenciadas:

636 636 

637* Sem aceitação registrada, `claude --bg --permission-mode bypassPermissions` é recusado até que você aceite o diálogo em uma sessão interativa.637* Sem aceitação registrada, `claude --bg --permission-mode bypassPermissions` é recusado até que você aceite o diálogo em uma sessão interativa.

638* Com `skipDangerousModePermissionPrompt` definido apenas em `.claude/settings.local.json`, a sessão em segundo plano inicia com a requisição de bypass ignorada e fixa o aviso `Bypass permissions was requested at launch and ignored · if that was you, ~/.claude/settings.json needs "skipDangerousModePermissionPrompt": true`. Para que o bypass seja respeitado, adicione essa chave a `~/.claude/settings.json` e, em seguida, inicie uma nova sessão em segundo plano.638* Com `skipDangerousModePermissionPrompt` definido apenas em `.claude/settings.local.json`, a sessão em segundo plano inicia com a requisição de bypass ignorada e fixa o aviso `Bypass permissions was requested at launch and ignored · if that was you, ~/.claude/settings.json needs "skipDangerousModePermissionPrompt": true`. Adicione essa chave a `~/.claude/settings.json` e, em seguida, inicie uma nova sessão em segundo plano. A sessão que mostra o aviso continua sendo executada:

639 * Com `--allow-dangerously-skip-permissions` ignorada, `bypassPermissions` fica de fora do seu ciclo de `Shift+Tab`.

640 * Com `--permission-mode bypassPermissions` ou `--dangerously-skip-permissions` ignorada, a sessão inicia no modo Manual em vez disso.

639 641 

640Em Linux e macOS, Claude Code recusa iniciar neste modo quando executado como root ou sob `sudo`:642Em Linux e macOS, Claude Code recusa iniciar no modo `bypassPermissions` quando executado como root ou sob `sudo`:

641 643 

642```text theme={null}644```text theme={null}

643--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons645--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons


692 * Arquivos markdown no diretório de [memória automática](/docs/pt/memory#storage-location) do projeto, como `~/.claude/projects/<project>/memory/`, em uma sessão iniciada sem `--restricted`694 * Arquivos markdown no diretório de [memória automática](/docs/pt/memory#storage-location) do projeto, como `~/.claude/projects/<project>/memory/`, em uma sessão iniciada sem `--restricted`

693 * Arquivos markdown em um diretório de [memória de subagente](/docs/pt/sub-agents#enable-persistent-memory), como `.claude/agent-memory/`, em uma sessão iniciada sem `--restricted`695 * Arquivos markdown em um diretório de [memória de subagente](/docs/pt/sub-agents#enable-persistent-memory), como `.claude/agent-memory/`, em uma sessão iniciada sem `--restricted`

694* Um diretório que você carregou com [`--plugin-dir`](/docs/pt/plugins/mods/create#change-a-mod-with-claude), porque Claude Code recarrega e executa o código de um mod a partir dele quando um arquivo muda696* Um diretório que você carregou com [`--plugin-dir`](/docs/pt/plugins/mods/create#change-a-mod-with-claude), porque Claude Code recarrega e executa o código de um mod a partir dele quando um arquivo muda

697* `~/.claude/dev-mods/`, ou `dev-mods/` no diretório para o qual [`CLAUDE_CONFIG_DIR`](/docs/pt/env-vars) aponta, onde Claude salva os [mods que ele escreve para você](/docs/pt/plugins/mods/create#ask-claude-for-a-mod)

695 698 

696Arquivos protegidos:699Arquivos protegidos:

697 700 

permissions.md +20 −2

Details

595 MCP595 MCP

596</h3>596</h3>

597 597 

598As regras MCP usam o nome do servidor conforme configurado em Claude Code, opcionalmente seguido pelo nome de uma ferramenta desse servidor.598Para corresponder a todas as ferramentas de um servidor MCP, escreva `mcp__<server>__*`. Para corresponder a uma ferramenta, escreva seu nome completo, `mcp__<server>__<tool>`.

599 599 

600* `mcp__puppeteer` corresponde a qualquer ferramenta fornecida pelo servidor `puppeteer`600* `mcp__puppeteer` corresponde a qualquer ferramenta fornecida pelo servidor `puppeteer`

601* `mcp__puppeteer__*` usa sintaxe com caracteres curinga e também corresponde a todas as ferramentas do servidor `puppeteer`601* `mcp__puppeteer__*` usa sintaxe com caracteres curinga e também corresponde a todas as ferramentas do servidor `puppeteer`

602* `mcp__puppeteer__puppeteer_navigate` corresponde à ferramenta `puppeteer_navigate` fornecida pelo servidor `puppeteer`602* `mcp__puppeteer__puppeteer_navigate` corresponde à ferramenta `puppeteer_navigate` fornecida pelo servidor `puppeteer`

603 603 

604Para `<server>`, escreva o nome do servidor da forma como ele aparece nos nomes das ferramentas desse servidor. Estes exemplos mostram a regra a escrever para um nome com caracteres especiais, um servidor de um plugin e um nome que contém `__` ou termina em `_`:

605 

606* **Nomes com caracteres como `.` ou espaços**: esses caracteres se tornam `_`, portanto para um servidor que você configurou como `my.server`, escreva `mcp__my_server__*`

607* **Servidores que um plugin fornece**: `<server>` assume a [forma com escopo de plugin](/docs/pt/mcp#plugin-provided-mcp-servers), portanto para o servidor `database-tools` em um plugin chamado `my-plugin`, escreva `mcp__plugin_my-plugin_database-tools__*`

608* **Um `<server>` que contém `__` ou termina em `_`**: escreva a forma com caractere curinga, `mcp__<server>__*`, com o nome inteiro. Para um servidor chamado `reports__v2`, escreva `mcp__reports__v2__*`. O `mcp__reports__v2` simples e o mais curto `mcp__reports` não correspondem às suas ferramentas como regras allow, porque Claude Code lê ambos como regras para um servidor chamado `reports`

609 

604Se sua organização definiu uma ferramenta de [conector claude.ai](/docs/pt/mcp#organization-controls-on-connector-tools) como `ask` e essa configuração chega a Claude Code em sua sessão, as regras allow para essa ferramenta não entram em vigor: Claude Code solicita em cada chamada, mesmo em modos `auto` e `bypassPermissions`. No modo `dontAsk`, que nunca solicita, Claude Code nega a chamada em vez disso. As ferramentas de conectores que Claude Code busca por si próprio aparecem como `mcp__claude_ai_<server>__<tool>`.610Se sua organização definiu uma ferramenta de [conector claude.ai](/docs/pt/mcp#organization-controls-on-connector-tools) como `ask` e essa configuração chega a Claude Code em sua sessão, as regras allow para essa ferramenta não entram em vigor: Claude Code solicita em cada chamada, mesmo em modos `auto` e `bypassPermissions`. No modo `dontAsk`, que nunca solicita, Claude Code nega a chamada em vez disso. As ferramentas de conectores que Claude Code busca por si próprio aparecem como `mcp__claude_ai_<server>__<tool>`.

605 611 

606Em uma sessão de [Cowork](https://claude.com/docs/cowork/overview) no aplicativo Claude Desktop, Claude executa comandos de shell através da ferramenta `mcp__workspace__bash` do Cowork em vez da ferramenta `Bash` integrada, e Cowork igualmente fornece `mcp__workspace__web_fetch` para web fetches. Claude Code também aplica regras deny que nomeiam a ferramenta inteira `Bash` ou `WebFetch` a essas ferramentas Cowork, portanto uma regra deny `Bash` gerenciada impede Claude de executar comandos de shell em Cowork. Quando Claude Code bloqueia tal chamada, a mensagem nomeia a ferramenta Cowork: `Permission to use mcp__workspace__bash has been denied.` As regras allow não se transferem: Claude Code nunca aplica uma regra allow `Bash` a `mcp__workspace__bash`.612Em uma sessão de [Cowork](https://claude.com/docs/cowork/overview) no aplicativo Claude Desktop, Claude executa comandos de shell através da ferramenta `mcp__workspace__bash` do Cowork em vez da ferramenta `Bash` integrada, e Cowork igualmente fornece `mcp__workspace__web_fetch` para web fetches. Claude Code também aplica regras deny que nomeiam a ferramenta inteira `Bash` ou `WebFetch` a essas ferramentas Cowork, portanto uma regra deny `Bash` gerenciada impede Claude de executar comandos de shell em Cowork. Quando Claude Code bloqueia tal chamada, a mensagem nomeia a ferramenta Cowork: `Permission to use mcp__workspace__bash has been denied.` As regras allow não se transferem: Claude Code nunca aplica uma regra allow `Bash` a `mcp__workspace__bash`.


649 655 

650Os [hooks do Claude Code](/docs/pt/hooks-guide) permitem registrar comandos de shell personalizados que avaliam permissões em tempo de execução. Quando Claude Code faz uma chamada de ferramenta, os hooks PreToolUse são executados antes do prompt de permissão, para todas as ferramentas exceto [`EndConversation`](/docs/pt/tools-reference#endconversation-tool-behavior). A saída do hook pode negar a chamada de ferramenta, forçar um prompt ou pular o prompt para deixar a chamada prosseguir.656Os [hooks do Claude Code](/docs/pt/hooks-guide) permitem registrar comandos de shell personalizados que avaliam permissões em tempo de execução. Quando Claude Code faz uma chamada de ferramenta, os hooks PreToolUse são executados antes do prompt de permissão, para todas as ferramentas exceto [`EndConversation`](/docs/pt/tools-reference#endconversation-tool-behavior). A saída do hook pode negar a chamada de ferramenta, forçar um prompt ou pular o prompt para deixar a chamada prosseguir.

651 657 

658<h3 id="precedence-among-rules-hooks-and-mods">

659 Precedência entre regras, hooks e mods

660</h3>

661 

652As decisões do hook PreToolUse não contornam as regras de permissão. Claude Code avalia regras deny e ask independentemente do que um hook PreToolUse retorna: uma regra deny correspondente bloqueia a chamada, e uma regra ask correspondente ainda solicita mesmo quando o hook retornou `"allow"` ou `"ask"`. Isto preserva a precedência deny-first descrita em [Gerenciar permissões](#manage-permissions), incluindo regras deny definidas em configurações gerenciadas.662As decisões do hook PreToolUse não contornam as regras de permissão. Claude Code avalia regras deny e ask independentemente do que um hook PreToolUse retorna: uma regra deny correspondente bloqueia a chamada, e uma regra ask correspondente ainda solicita mesmo quando o hook retornou `"allow"` ou `"ask"`. Isto preserva a precedência deny-first descrita em [Gerenciar permissões](#manage-permissions), incluindo regras deny definidas em configurações gerenciadas.

653 663 

654Essa precedência cobre hooks em arquivos de configuração e no `hooks/hooks.json` de um plugin. Um [mod](/docs/pt/plugins/mods/overview) que você instala e que trata `tool.check` responde após as regras e os hooks `PreToolUse` terem decidido, e sua resposta pode substituir a deles:664Essa precedência cobre hooks em arquivos de configuração e no `hooks/hooks.json` de um plugin. Um [mod](/docs/pt/plugins/mods/overview) que você instala e que trata `tool.check` responde após as regras e os hooks `PreToolUse` terem decidido. Fora do [modo de planejamento](#hook-approvals-in-plan-mode), ou para uma chamada somente leitura, sua resposta pode substituir a deles:

655 665 

656* **Regras Ask**: o mod pode aprovar uma chamada que uma regra ask solicitaria666* **Regras Ask**: o mod pode aprovar uma chamada que uma regra ask solicitaria

657* **Um bloqueio de um hook `PreToolUse`**: o mod pode aprovar a chamada, a menos que o hook esteja em configurações gerenciadas667* **Um bloqueio de um hook `PreToolUse`**: o mod pode aprovar a chamada, a menos que o hook esteja em configurações gerenciadas


664 674 

665Um hook de bloqueio também tem precedência sobre regras allow. Um hook que sai com código 2 interrompe a chamada de ferramenta antes das regras de permissão serem avaliadas, portanto o bloqueio se aplica mesmo quando uma regra allow permitiria a chamada. Para executar todos os comandos Bash sem prompts exceto por alguns que você quer bloqueados, adicione `"Bash"` à sua lista allow e registre um hook PreToolUse que rejeita esses comandos específicos. Veja [Bloquear edições em arquivos protegidos](/docs/pt/hooks-guide#block-edits-to-protected-files) para um script de hook que você pode adaptar.675Um hook de bloqueio também tem precedência sobre regras allow. Um hook que sai com código 2 interrompe a chamada de ferramenta antes das regras de permissão serem avaliadas, portanto o bloqueio se aplica mesmo quando uma regra allow permitiria a chamada. Para executar todos os comandos Bash sem prompts exceto por alguns que você quer bloqueados, adicione `"Bash"` à sua lista allow e registre um hook PreToolUse que rejeita esses comandos específicos. Veja [Bloquear edições em arquivos protegidos](/docs/pt/hooks-guide#block-edits-to-protected-files) para um script de hook que você pode adaptar.

666 676 

677<h3 id="hook-approvals-in-plan-mode">

678 Aprovações de hooks no modo de planejamento

679</h3>

680 

681No [modo de planejamento](/docs/pt/permission-modes#analyze-before-you-edit-with-plan-mode), exceto para `ExitPlanMode`, o `"allow"` do seu hook `PreToolUse` não tem efeito sobre uma edição de arquivo ou outra chamada que não seja somente leitura. Você recebe o mesmo prompt, bloqueio ou aprovação que a chamada receberia sem nenhum hook, e Claude Code ainda aplica qualquer `updatedInput` que o hook retornar. Se o hook responder a [`ExitPlanMode`](/docs/pt/hooks#allow-with-updatedinput) com `"allow"` e `updatedInput`, essa ferramenta ainda é executada sem um prompt.

682 

683No modo de planejamento, um mod que trata `tool.check` também não pode aprovar uma edição de arquivo ou outra chamada que não seja somente leitura, embora ainda possa bloquear essa chamada. Para remover esse limite das aprovações de hooks e mods, [aprove o plano](/docs/pt/permission-modes#review-and-approve-a-plan) ou mude para outro modo de permissão.

684 

667<h2 id="working-directories">685<h2 id="working-directories">

668 Diretórios de trabalho686 Diretórios de trabalho

669</h2>687</h2>

Details

30 Peça pelo mod com suas próprias palavras, por exemplo `make a mod that shows the current git branch above the prompt`. Claude escreve o mod em um diretório próprio na pasta de mods da sessão, que é `~/.claude/dev-mods/` seguido pelo ID da sessão. O caminho completo de um mod se parece com `~/.claude/dev-mods/3f2a9c1e-5b7d-4e8a-9c21-6d0f4b8a7e13/git-branch/`.30 Peça pelo mod com suas próprias palavras, por exemplo `make a mod that shows the current git branch above the prompt`. Claude escreve o mod em um diretório próprio na pasta de mods da sessão, que é `~/.claude/dev-mods/` seguido pelo ID da sessão. O caminho completo de um mod se parece com `~/.claude/dev-mods/3f2a9c1e-5b7d-4e8a-9c21-6d0f4b8a7e13/git-branch/`.

31 31 

32 <Note>32 <Note>

33 Nos [modos de permissão](/docs/pt/permission-modes#protected-paths) `default` e `acceptEdits`, o Claude Code pergunta antes que Claude crie cada um dos arquivos do mod, porque `~/.claude` é um caminho protegido. Aprove cada arquivo conforme ele aparecer.33 Nos [modos de permissão](/docs/pt/permission-modes) `default` e `acceptEdits`, o Claude Code pergunta antes que Claude crie cada um dos arquivos do mod, porque a pasta de mods é um [caminho protegido](/docs/pt/permission-modes#protected-paths). Aprove cada arquivo conforme ele aparecer.

34 </Note>34 </Note>

35 </Step>35 </Step>

36 36 

Details

216})216})

217```217```

218 218 

219Em `main`, o hook retorna `deny`, mesmo quando uma regra permite `git push`. Em outro branch, e para outros comandos, a chamada recebe a decisão que receberia sem o mod.219O hook nega `git push` em `main` e deixa passar todas as outras chamadas:

220 

221* **Em `main`**: o hook retorna `deny`, mesmo quando uma regra permite `git push`

222* **Em outro branch, e para outros comandos**: a chamada recebe a decisão que receberia sem o mod

220 223 

221O hook compara o texto do comando, então trate-o como um lembrete para o Claude. Para bloquear pushes para `main` para todos, proteja o branch no seu host Git.224O hook compara o texto do comando, então trate-o como um lembrete para o Claude. Para bloquear pushes para `main` para todos, proteja o branch no seu host Git.

222 225 

223Um hook pode retornar `allow`, `ask` ou `deny`, então também pode aprovar uma chamada que um hook `PreToolUse` fora das configurações gerenciadas bloqueou. [Estender permissões com hooks](/docs/pt/permissions#extend-permissions-with-hooks) lista quais decisões prevalecem sobre um mod.226Um hook pode retornar `allow`, `ask` ou `deny`, então também pode aprovar uma chamada que um hook `PreToolUse` fora das configurações gerenciadas bloqueou. No [modo de planejamento](/docs/pt/permissions#hook-approvals-in-plan-mode), para uma chamada que não é somente leitura, como a edição de um arquivo, seu hook pode tornar mais restritiva a decisão que `next(e)` retorna, mas não pode torná-la mais permissiva. [Estender permissões com hooks](/docs/pt/permissions#extend-permissions-with-hooks) lista quais decisões prevalecem sobre um mod.

224 227 

225<h3 id="rewrite-or-add-to-a-prompt">228<h3 id="rewrite-or-add-to-a-prompt">

226 Reescrever ou complementar um prompt229 Reescrever ou complementar um prompt


337* **Hooks `PreToolUse` de configurações gerenciadas**: são executados antes do hook `tool.call` do primeiro mod, e um bloqueio de um deles é final, portanto nenhum mod vê a chamada.340* **Hooks `PreToolUse` de configurações gerenciadas**: são executados antes do hook `tool.call` do primeiro mod, e um bloqueio de um deles é final, portanto nenhum mod vê a chamada.

338* **Hooks `PreToolUse` de cada outro arquivo de configurações e de `hooks/hooks.json` de plugins**: são executados após o último mod chamar `next`, como parte do comportamento próprio de Claude Code. Um mod que responde `tool.call` sem chamar `next` os impede de serem executados, e um mod que chama `next` vê sua decisão no resultado que retorna.341* **Hooks `PreToolUse` de cada outro arquivo de configurações e de `hooks/hooks.json` de plugins**: são executados após o último mod chamar `next`, como parte do comportamento próprio de Claude Code. Um mod que responde `tool.call` sem chamar `next` os impede de serem executados, e um mod que chama `next` vê sua decisão no resultado que retorna.

339 342 

340[`tool.check`](#approve-or-refuse-a-tool-call-before-the-user-is-asked) dispara após esses hooks e as regras de permissão terem decidido, portanto um hook nele pode aprovar uma chamada que um hook no segundo grupo bloqueou.343Um hook [`tool.check`](#approve-or-refuse-a-tool-call-before-the-user-is-asked) pode aprovar uma chamada que um hook `PreToolUse` fora das configurações gerenciadas bloqueou, porque `tool.check` dispara após esses hooks e as regras de permissão terem decidido. No modo de planejamento, um hook `tool.check` pode aprovar tal chamada quando ela é somente leitura, mas não uma edição de arquivo ou outra chamada que não seja somente leitura.

341 344 

342<h3 id="handle-a-hook-that-fails">345<h3 id="handle-a-hook-that-fails">

343 Manipule um hook que falha346 Manipule um hook que falha

Details

205 205 

206Para produzir o resumo, Claude Code envia uma solicitação separada com o mesmo prompt do sistema, ferramentas e histórico que sua conversa, mais uma instrução de sumarização anexada como uma mensagem de usuário final. Enquanto o cache está quente, essa solicitação lê seu prefixo do cache, então um `/compact` no meio da sessão custa uma fração do que o tamanho do contexto sugere e gasta a maior parte do tempo gerando o resumo.206Para produzir o resumo, Claude Code envia uma solicitação separada com o mesmo prompt do sistema, ferramentas e histórico que sua conversa, mais uma instrução de sumarização anexada como uma mensagem de usuário final. Enquanto o cache está quente, essa solicitação lê seu prefixo do cache, então um `/compact` no meio da sessão custa uma fração do que o tamanho do contexto sugere e gasta a maior parte do tempo gerando o resumo.

207 207 

208Após uma pausa mais longa que o [cache lifetime](#cache-lifetime), não há cache deixado para ler, então a solicitação de sumarização reprocessa o histórico completo como entrada não armazenada em cache. É por isso que `/compact` custa mais quando você [retoma uma sessão antiga](/docs/pt/sessions#resume-from-a-summary). Em ambos os casos quente e frio, o turno após compactação reconstrói o cache de conversa apenas para o resumo muito mais curto, então esse turno não é a parte lenta.208Após uma pausa mais longa que o [cache lifetime](#cache-lifetime), não há cache deixado para ler, então a solicitação de sumarização reprocessa o histórico completo como entrada não armazenada em cache. É por isso que `/compact` custa mais quando você [retoma uma sessão antiga](/docs/pt/sessions#resume-a-session). Em ambos os casos quente e frio, o turno após compactação reconstrói o cache de conversa apenas para o resumo muito mais curto, então esse turno não é a parte lenta.

209 209 

210<Tip>210<Tip>

211 Compaction funciona a seu favor quando o contexto que você descarta é conteúdo que você não precisa mais. Para escolher quando sua sobrecarga acontece, execute `/compact` em uma pausa natural em seu trabalho, como entre tarefas, em vez de esperar que a auto-compactação seja acionada no meio da tarefa. Se você seguiu um caminho que deseja abandonar inteiramente, [`/rewind`](#rewinding-the-conversation) para um turno anterior em vez disso. Rewind trunca de volta para um prefixo que já está armazenado em cache, em vez de construir um novo como compaction faz.211 Compaction funciona a seu favor quando o contexto que você descarta é conteúdo que você não precisa mais. Para escolher quando sua sobrecarga acontece, execute `/compact` em uma pausa natural em seu trabalho, como entre tarefas, em vez de esperar que a auto-compactação seja acionada no meio da tarefa. Se você seguiu um caminho que deseja abandonar inteiramente, [`/rewind`](#rewinding-the-conversation) para um turno anterior em vez disso. Rewind trunca de volta para um prefixo que já está armazenado em cache, em vez de construir um novo como compaction faz.


310 310 

311Prefixos em cache expiram após um período de inatividade. Cada solicitação que acerta o cache redefine o temporizador, então o cache permanece aquecido enquanto você continua trabalhando. Após um intervalo longo o suficiente, a próxima solicitação recomputa a entrada completa e reestabelece o cache, o que é por que o primeiro turno de volta após se afastar pode ser notavelmente mais lento.311Prefixos em cache expiram após um período de inatividade. Cada solicitação que acerta o cache redefine o temporizador, então o cache permanece aquecido enquanto você continua trabalhando. Após um intervalo longo o suficiente, a próxima solicitação recomputa a entrada completa e reestabelece o cache, o que é por que o primeiro turno de volta após se afastar pode ser notavelmente mais lento.

312 312 

313Em um plano Pro ou Max, quando você retoma uma sessão grande após um longo intervalo, Claude Code [oferece retomar de um resumo](/docs/pt/sessions#resume-from-a-summary) para que solicitações posteriores não carreguem o histórico completo.

314 

315O tempo de vida (TTL) controla quanto tempo um intervalo o cache sobrevive. A API oferece dois: um TTL de cinco minutos e um [TTL de uma hora](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#1-hour-cache-duration) que mantém o cache aquecido através de pausas mais longas, mas [cobra gravações de cache a uma taxa mais alta](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing). O TTL mais longo ajuda quando você deixa uma sessão ociosa e volta a ela, porque você pula o reprocessamento que um prefixo expirado custa. Custa mais em rajadas curtas de trabalho que nunca ficam ociosas por mais de cinco minutos, onde a taxa de gravação mais alta se aplica e o tempo de vida do cache mais longo não é utilizado.313O tempo de vida (TTL) controla quanto tempo um intervalo o cache sobrevive. A API oferece dois: um TTL de cinco minutos e um [TTL de uma hora](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#1-hour-cache-duration) que mantém o cache aquecido através de pausas mais longas, mas [cobra gravações de cache a uma taxa mais alta](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing). O TTL mais longo ajuda quando você deixa uma sessão ociosa e volta a ela, porque você pula o reprocessamento que um prefixo expirado custa. Custa mais em rajadas curtas de trabalho que nunca ficam ociosas por mais de cinco minutos, onde a taxa de gravação mais alta se aplica e o tempo de vida do cache mais longo não é utilizado.

316 314 

317<h3 id="which-ttl-each-request-gets">315<h3 id="which-ttl-each-request-gets">

sandboxing.md +14 −0

Details

1080* **`Command line arguments`**: se você iniciou o Claude Code com [`--settings`](/docs/pt/settings#change-a-setting-for-one-session), verifique se o arquivo ou JSON que você passou define uma dessas chaves. Se definir, altere o valor ali ou inicie o Claude Code novamente sem essas chaves.1080* **`Command line arguments`**: se você iniciou o Claude Code com [`--settings`](/docs/pt/settings#change-a-setting-for-one-session), verifique se o arquivo ou JSON que você passou define uma dessas chaves. Se definir, altere o valor ali ou inicie o Claude Code novamente sem essas chaves.

1081* **`Enterprise managed settings`**: as configurações gerenciadas da sua organização estão carregadas. Se elas definirem uma dessas chaves, você não pode alterar essa chave pelo `/sandbox` nem por nenhum arquivo de configurações que você controla, então consulte seu administrador.1081* **`Enterprise managed settings`**: as configurações gerenciadas da sua organização estão carregadas. Se elas definirem uma dessas chaves, você não pode alterar essa chave pelo `/sandbox` nem por nenhum arquivo de configurações que você controla, então consulte seu administrador.

1082 1082 

1083<h3 id="/sandbox-prints-sandbox-settings-not-changed">

1084 `/sandbox` imprime `Sandbox settings not changed`

1085</h3>

1086 

1087Esta linha significa que o `/sandbox` não conseguiu salvar a escolha que você fez em seu painel no `.claude/settings.local.json` do seu projeto:

1088 

1089```text theme={null}

1090✗ Sandbox settings not changed: /home/you/project/.claude/settings.local.json couldn't be updated (EACCES). Start Claude Code in a project folder you can write to.

1091```

1092 

1093Se o motivo entre parênteses for `EACCES`, `EPERM` ou `EROFS`, inicie o Claude Code em uma pasta de projeto na qual você possa gravar e execute `/sandbox` novamente nessa sessão.

1094 

1095Se o motivo começar com `Invalid JSON syntax in settings file`, corrija o JSON no `.claude/settings.local.json` do seu projeto e execute `/sandbox` novamente.

1096 

1083<h2 id="limitations">1097<h2 id="limitations">

1084 Limitações1098 Limitações

1085</h2>1099</h2>

sessions.md +0 −14

Details

102* A execução não é iniciada através de [canais](/docs/pt/channels)102* A execução não é iniciada através de [canais](/docs/pt/channels)

103* Nenhuma [regra de negação](/docs/pt/permissions#manage-permissions) remove a ferramenta `ExitPlanMode`103* Nenhuma [regra de negação](/docs/pt/permissions#manage-permissions) remove a ferramenta `ExitPlanMode`

104 104 

105<h3 id="resume-from-a-summary">

106 Retomar de um resumo

107</h3>

108 

109Em um plano Pro ou Max, quando você retoma uma sessão que ficou inativa por mais de cerca de uma hora e tem mais de 100.000 tokens, Claude Code restaura a conversa e depois abre um diálogo antes de você enviar sua primeira mensagem. O [cache de prompt](/docs/pt/prompt-caching#cache-lifetime) da sessão terá expirado até então, portanto a próxima requisição processa o histórico completo uma vez, não importa qual das opções do diálogo você escolha.

110 

111O diálogo oferece três maneiras de continuar a sessão:

112 

113* **Retomar do resumo**: executa [`/compact`](/docs/pt/context-window#what-survives-compaction) imediatamente. Requisições posteriores carregam o resumo em vez do histórico completo.

114* **Retomar sessão completa como está**: carrega a conversa inalterada.

115* **Não me pergunte novamente**: retoma a sessão completa e para de mostrar o diálogo em todas as futuras retomadas.

116 

117Retomar como está mantém cada detalhe da conversa disponível, a um custo por requisição que escala com o tamanho da conversa. Retomar do resumo custa menos em cada requisição posterior porque carrega o resumo em vez do histórico completo, mas o que quer que o resumo deixe de fora não está mais no contexto de Claude. Veja [por que o uso sobe em uma sessão longa](/docs/pt/costs#why-usage-climbs-in-a-long-session) para saber de onde vem esse custo por requisição.

118 

119<h3 id="where-the-session-picker-looks">105<h3 id="where-the-session-picker-looks">

120 Onde o seletor de sessão procura106 Onde o seletor de sessão procura

121</h3>107</h3>

sub-agents.md +17 −5

Details

316| `name` | Sim | Identificador único de no máximo 256 caracteres, como `code-reviewer` ou `reviewer-v2`. Os [hooks](/docs/pt/hooks#subagentstart) recebem esse valor como `agent_type`. O nome do arquivo não precisa corresponder. Os nomes não podem conter `:`, que é reservado para [identificadores com escopo de plugin](/docs/pt/plugins/overview) como `my-plugin:reviewer` |316| `name` | Sim | Identificador único de no máximo 256 caracteres, como `code-reviewer` ou `reviewer-v2`. Os [hooks](/docs/pt/hooks#subagentstart) recebem esse valor como `agent_type`. O nome do arquivo não precisa corresponder. Os nomes não podem conter `:`, que é reservado para [identificadores com escopo de plugin](/docs/pt/plugins/overview) como `my-plugin:reviewer` |

317| `description` | Sim | Quando o Claude deve delegar a este subagente |317| `description` | Sim | Quando o Claude deve delegar a este subagente |

318| `tools` | Não | [Ferramentas](#available-tools) que o subagente pode usar, como uma string separada por vírgulas, como `Read, Grep, Bash`, ou uma lista YAML. Herda todas as ferramentas disponíveis para subagentes se omitido. Se nenhuma entrada da lista resolver para uma ferramenta, o subagente geralmente [falha ao iniciar](/docs/pt/errors#agent-would-be-spawned-with-zero-tools) com um erro que nomeia as entradas. Para pré-carregar Skills no contexto, use o campo `skills` em vez de listar `Skill` aqui |318| `tools` | Não | [Ferramentas](#available-tools) que o subagente pode usar, como uma string separada por vírgulas, como `Read, Grep, Bash`, ou uma lista YAML. Herda todas as ferramentas disponíveis para subagentes se omitido. Se nenhuma entrada da lista resolver para uma ferramenta, o subagente geralmente [falha ao iniciar](/docs/pt/errors#agent-would-be-spawned-with-zero-tools) com um erro que nomeia as entradas. Para pré-carregar Skills no contexto, use o campo `skills` em vez de listar `Skill` aqui |

319| `disallowedTools` | Não | Ferramentas a negar, removidas da lista herdada ou especificada. Mesmo formato de `tools`. Uma entrada com especificador, como `Bash(git push *)`, ainda [remove a ferramenta inteira](#available-tools) |319| `disallowedTools` | Não | Ferramentas a negar, removidas da lista herdada ou especificada. Mesmo formato de `tools`. Uma entrada com especificador, como `Bash(git push *)`, ainda [remove a ferramenta inteira](#restrict-which-tools-a-subagent-can-use) |

320| `model` | Não | [Modelo](#choose-a-model) a usar: `sonnet`, `opus`, `haiku`, `fable`, um ID de modelo completo como `claude-opus-5-5`, ou `inherit`. Quando você o omite, o Claude Code escolhe o modelo na [ordem de modelos de subagentes](#choose-a-model) |320| `model` | Não | [Modelo](#choose-a-model) a usar: `sonnet`, `opus`, `haiku`, `fable`, um ID de modelo completo como `claude-opus-5-5`, ou `inherit`. Quando você o omite, o Claude Code escolhe o modelo na [ordem de modelos de subagentes](#choose-a-model) |

321| `permissionMode` | Não | [Modo de permissão](#permission-modes): `default`, `acceptEdits`, `auto`, `dontAsk`, `bypassPermissions`, `plan`, ou `manual` como alias para `default`. Ignorado para [subagentes de plugin](#choose-the-subagent-scope) |321| `permissionMode` | Não | [Modo de permissão](#permission-modes): `default`, `acceptEdits`, `auto`, `dontAsk`, `bypassPermissions`, `plan`, ou `manual` como alias para `default`. Ignorado para [subagentes de plugin](#choose-the-subagent-scope) |

322| `maxTurns` | Não | Número máximo de turnos agênticos antes de o subagente parar. Quando o subagente atinge o limite, o Claude Code retorna sua saída marcada como parcial, e o Claude pode [retomá-lo](#resume-subagents) para continuar. A marcação parcial requer o Claude Code v2.1.246 ou posterior |322| `maxTurns` | Não | Número máximo de turnos agênticos antes de o subagente parar. Quando o subagente atinge o limite, o Claude Code retorna sua saída marcada como parcial, e o Claude pode [retomá-lo](#resume-subagents) para continuar. A marcação parcial requer o Claude Code v2.1.246 ou posterior |


475 475 

476Em uma [sessão sem as ferramentas Task](/docs/pt/tools-reference#task-tool-availability), o Claude Code também não fornece as ferramentas de tarefas aos subagentes, mesmo quando o subagente executa um modelo diferente. Um colega em processo segue a sua sessão da mesma forma, enquanto um colega em seu próprio [painel dividido](/docs/pt/agent-teams#choose-a-display-mode) é executado como um processo separado do Claude Code, então é o seu próprio modelo que decide.476Em uma [sessão sem as ferramentas Task](/docs/pt/tools-reference#task-tool-availability), o Claude Code também não fornece as ferramentas de tarefas aos subagentes, mesmo quando o subagente executa um modelo diferente. Um colega em processo segue a sua sessão da mesma forma, enquanto um colega em seu próprio [painel dividido](/docs/pt/agent-teams#choose-a-display-mode) é executado como um processo separado do Claude Code, então é o seu próprio modelo que decide.

477 477 

478Para restringir ferramentas, use o campo `tools` como allowlist ou o campo `disallowedTools` como denylist. Este exemplo usa `tools` para permitir apenas Read, Grep, Glob e Bash. O subagente não pode editar arquivos, escrever arquivos nem usar ferramentas MCP:478<h4 id="restrict-which-tools-a-subagent-can-use">

479 Restringir quais ferramentas um subagente pode usar

480</h4>

481 

482Para restringir ferramentas, use o campo `tools` como allowlist ou o campo `disallowedTools` como denylist. Se ambos estiverem definidos, `disallowedTools` é aplicado primeiro e, em seguida, `tools` é resolvido em relação ao conjunto restante. Uma ferramenta listada em ambos é removida.

483 

484Este exemplo usa `tools` para permitir apenas Read, Grep, Glob e Bash. O subagente não pode editar arquivos, escrever arquivos nem usar ferramentas MCP:

479 485 

480```yaml theme={null}486```yaml theme={null}

481---487---


495---501---

496```502```

497 503 

498Se ambos estiverem definidos, `disallowedTools` é aplicado primeiro e, em seguida, `tools` é resolvido em relação ao conjunto restante. Uma ferramenta listada em ambos é removida.

499 

500Quando nada na lista `tools` resolve para uma ferramenta, por exemplo porque todas as entradas estão com erro de digitação ou nomeiam uma ferramenta que não está disponível para subagentes, o Claude Code geralmente se recusa a iniciar o subagente e a ferramenta Agent retorna um erro nomeando as entradas não resolvidas; consulte [Agent would be spawned with zero tools](/docs/pt/errors#agent-would-be-spawned-with-zero-tools) para ver a mensagem e como corrigir cada entrada. Antes da v2.1.208, esse subagente era iniciado sem ferramentas e podia retornar um resultado vazio ou confuso.504Quando nada na lista `tools` resolve para uma ferramenta, por exemplo porque todas as entradas estão com erro de digitação ou nomeiam uma ferramenta que não está disponível para subagentes, o Claude Code geralmente se recusa a iniciar o subagente e a ferramenta Agent retorna um erro nomeando as entradas não resolvidas; consulte [Agent would be spawned with zero tools](/docs/pt/errors#agent-would-be-spawned-with-zero-tools) para ver a mensagem e como corrigir cada entrada. Antes da v2.1.208, esse subagente era iniciado sem ferramentas e podia retornar um resultado vazio ou confuso.

501 505 

502Ambos os campos aceitam padrões no nível do servidor MCP, além de nomes exatos de ferramentas: `mcp__<server>` ou `mcp__<server>__*` concede ou remove todas as ferramentas do servidor nomeado. Em `disallowedTools`, `mcp__*` também remove todas as ferramentas MCP de qualquer servidor. Este exemplo remove todas as ferramentas do servidor MCP `github`, mantendo as ferramentas de outros servidores e as ferramentas integradas no seu conjunto:506Os campos `tools` e `disallowedTools` também aceitam entradas para um servidor MCP inteiro:

507 

508| Objetivo | Campo | Exemplo de entrada |

509| :- | :- | :- |

510| Dar ao subagente todas as ferramentas de um servidor | `tools` | `mcp__github__*` |

511| Reter as ferramentas de um servidor | `disallowedTools` | `mcp__github` ou `mcp__github__*` |

512| Reter todas as ferramentas MCP de qualquer servidor | `disallowedTools` | `mcp__*` |

513 

514Este exemplo remove todas as ferramentas do servidor MCP `github`, mantendo as ferramentas de outros servidores e as ferramentas integradas no conjunto do subagente:

503 515 

504```yaml theme={null}516```yaml theme={null}

505---517---