SpyBara
Go Premium

Documentation 2026-10-23 22:59 UTC to 2026-10-24 22:59 UTC

31 files changed +690 −113. 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

artifacts.md +1 −3

Details

340 340 

341Claude Docs chega ao Claude Code como um [conector](https://code.claude.com/docs/pt/mcp.md#use-mcp-servers-from-claude-ai) claude.ai em vez de um comando. Quando está conectado, `/mcp` o lista como `claude.ai Claude Docs`. Uma solicitação para um documento destinado a outras pessoas vai para Claude Docs em vez de uma página de artefato: uma especificação, uma proposta ou um resumo do plano que você trabalhou na sessão. Claude fornece o link do documento quando ele é rascunhado.341Claude Docs chega ao Claude Code como um [conector](https://code.claude.com/docs/pt/mcp.md#use-mcp-servers-from-claude-ai) claude.ai em vez de um comando. Quando está conectado, `/mcp` o lista como `claude.ai Claude Docs`. Uma solicitação para um documento destinado a outras pessoas vai para Claude Docs em vez de uma página de artefato: uma especificação, uma proposta ou um resumo do plano que você trabalhou na sessão. Claude fornece o link do documento quando ele é rascunhado.

342 342 

343Um documento que pertence ao repositório de código, como um README, permanece um arquivo. Para obter um arquivo para algo que Claude colocaria em Claude Docs, nomeie o formato, como `.docx` ou um arquivo Markdown no repositório.343Um documento que pertence à base de código, como um README, permanece um arquivo. Para obter um arquivo para algo que Claude colocaria em Claude Docs, nomeie o formato, como `.docx` ou um arquivo Markdown no repositório. Para desativar apenas o conector `claude.ai Claude Docs`, consulte [Desativar conectores claude.ai](https://code.claude.com/docs/pt/mcp.md#disable-claude-ai-connectors).

344 

345Para desativar o conector, adicione `claude.ai Claude Docs` a `deniedMcpServers` ou use o alternador `/mcp`, ambos descritos em [Desativar conectores claude.ai](https://code.claude.com/docs/pt/mcp.md#disable-claude-ai-connectors).

346 344 

347## Restrições de página345## Restrições de página

348 346 

Details

458 458 

459#### Como as chaves de hook e skill nas configurações pai entram em vigor459#### Como as chaves de hook e skill nas configurações pai entram em vigor

460 460 

461Se você passar `disableAllHooks: true` como uma configuração pai por meio da opção `managedSettings` do Agent SDK, nem todo hook para. Seus [callbacks de hook do SDK](https://code.claude.com/docs/pt/agent-sdk/hooks.md) ainda são executados, assim como os hooks do administrador, que seu aplicativo não pode desativar.461As chaves que seu aplicativo passa na opção [`managedSettings`](https://code.claude.com/docs/pt/agent-sdk/typescript#options) do Agent SDK são configurações pai. Em uma máquina onde um administrador implanta configurações gerenciadas, Claude Code ignora configurações pai, a menos que o administrador [permita que um host de incorporação adicione política](https://code.claude.com/docs/pt/managed-settings.md#let-an-embedding-host-add-policy).

462 462 

463Em uma máquina onde um administrador implanta configurações gerenciadas, Claude Code ignora configurações pai, a menos que o administrador [permita que um host de incorporação adicione política](https://code.claude.com/docs/pt/managed-settings.md#let-an-embedding-host-add-policy).463Se você passar [`disableAllHooks: true`](https://code.claude.com/docs/pt/settings-reference#disableallhooks) em `managedSettings`:

464 

465* **Param**: hooks de usuário, projeto e locais, além de hooks declarados no frontmatter de agentes ou na [opção `settings`](https://code.claude.com/docs/pt/agent-sdk/typescript#options) do SDK.

466* **Continuam sendo executados**: os [callbacks de hook do SDK](https://code.claude.com/docs/pt/agent-sdk/hooks.md) do seu aplicativo e os hooks de um administrador provenientes de configurações gerenciadas. Seu aplicativo não pode desativar os hooks do administrador.

464 467 

465| O que você passa | O que acontece |468| O que você passa | O que acontece |

466| :- | :- |469| :- | :- |

467| `disableAllHooks: true` | Tratado como `allowManagedHooksOnly: true`, então os hooks listados como [bloqueados sob `allowManagedHooksOnly`](https://code.claude.com/docs/pt/settings-reference#what-runs-under-allowmanagedhooksonly) param, assim como os hooks na [opção `settings`](https://code.claude.com/docs/pt/agent-sdk/typescript#options) do SDK. |470| `hooks`, ou `allowedHttpHookUrls` ou `httpHookAllowedEnvVars` com entradas | Claude Code ignora a chave. Use a opção `settings` do SDK em vez disso. |

468| [`disableSkillShellExecution: true`](https://code.claude.com/docs/pt/settings-reference#disableskillshellexecution) | Entra em vigor. |

469| `allowedHttpHookUrls: []` | Entra em vigor, a menos que o administrador defina `hooks` ou habilite um plugin. Nenhum hook HTTP é executado, exceto para URLs que outra fonte de configurações lista. |471| `allowedHttpHookUrls: []` | Entra em vigor, a menos que o administrador defina `hooks` ou habilite um plugin. Nenhum hook HTTP é executado, exceto para URLs que outra fonte de configurações lista. |

470| `httpHookAllowedEnvVars: []` | Entra em vigor, a menos que o administrador defina `hooks` ou habilite um plugin. Os cabeçalhos de hooks HTTP podem incluir apenas variáveis de ambiente que outra fonte de configurações lista. |472| `httpHookAllowedEnvVars: []` | Entra em vigor, a menos que o administrador defina `hooks` ou habilite um plugin. Os cabeçalhos de hooks HTTP podem incluir apenas variáveis de ambiente que outra fonte de configurações lista. |

471| `allowedHttpHookUrls` ou `httpHookAllowedEnvVars` com entradas | Claude Code o ignora, já que mesclar ampliaria a lista de um administrador. Use a opção `settings` do SDK em vez disso. |473| [`disableSkillShellExecution: true`](https://code.claude.com/docs/pt/settings-reference#disableskillshellexecution) | Entra em vigor. |

472 474 

473Passar essas chaves em `managedSettings` requer Claude Code v2.1.309 ou posterior, ou TypeScript Agent SDK v0.3.309 ou posterior.475Passar essas chaves em `managedSettings` requer Claude Code v2.1.309 ou posterior, ou TypeScript Agent SDK v0.3.309 ou posterior.

474 476 

Details

8 8 

9> [!NOTE]9> [!NOTE]

10>10>

11> As sessões na nuvem estão disponíveis nos planos Pro, Max e Team, e para usuários Enterprise com assentos premium ou assentos Chat + Claude Code. Se a sua organização Enterprise gerencia seu acesso com [funções personalizadas](https://support.claude.com/en/articles/13930452), você também precisa de uma função que inclua a permissão de sessões na nuvem. Peça a um Owner para verificar suas funções e adicioná-la em [**Organization settings > Roles**](https://claude.ai/admin-settings/roles) caso ela esteja faltando.11> As sessões na nuvem estão disponíveis nos planos Pro, Max e Team, e para usuários Enterprise com assentos premium ou assentos Chat + Claude Code. Se [funções personalizadas](https://support.claude.com/en/articles/13930452) regem seu acesso, você também precisa de uma função com a permissão de sessões na nuvem para iniciar sessões na infraestrutura da Anthropic a partir do navegador, dos aplicativos ou do terminal. Peça a um Owner para adicioná-la a uma de suas funções em [**Organization settings > Roles**](https://claude.ai/admin-settings/roles).

12 12 

13Uma sessão na nuvem é uma sessão Claude Code que é executada em infraestrutura em nuvem em vez de em sua máquina. Por padrão, ela é executada em infraestrutura que a Anthropic gerencia, ou no [ambiente auto-hospedado](https://code.claude.com/docs/pt/self-hosted-environments) da sua organização quando roteada para lá. A sessão continua em execução depois que você fecha seu laptop, e você pode verificá-la ou direcioná-la a partir de qualquer dispositivo. Ela conta para os limites de uso do seu plano junto com o restante do seu uso do Claude e do Claude Code, e não há cobrança separada pela VM na nuvem.13Uma sessão na nuvem é uma sessão Claude Code que é executada em infraestrutura em nuvem em vez de em sua máquina. Por padrão, ela é executada em infraestrutura que a Anthropic gerencia, ou no [ambiente auto-hospedado](https://code.claude.com/docs/pt/self-hosted-environments) da sua organização quando roteada para lá. A sessão continua em execução depois que você fecha seu laptop, e você pode verificá-la ou direcioná-la a partir de qualquer dispositivo. Ela conta para os limites de uso do seu plano junto com o restante do seu uso do Claude e do Claude Code, e não há cobrança separada pela VM na nuvem.

14 14 

Details

109 109 

110#### Adicione um segredo110#### Adicione um segredo

111 111 

112Você adiciona segredos um de cada vez e não pode editar um segredo depois de adicioná-lo. Para alterar os hosts ou o valor de um segredo, exclua-o e adicione-o novamente.112Você adiciona segredos um de cada vez. Para alterar os hosts ou o valor de um segredo, exclua-o e adicione-o novamente.

113 113 

114Para adicionar um segredo a um [ambiente compartilhado](#organization-shared-environments), abra-o para edição a partir da página **Cloud environments** nas [configurações de administrador](https://claude.ai/admin-settings) e continue a partir da etapa 2 na seção **Network secrets** dele. Se você está em um plano Team e não tem uma [função de administrador da organização](#requirements), siga a etapa 1 em seu próprio ambiente e depois [preencha o formulário mais curto](#add-a-secret-without-the-role).114Para adicionar um segredo a um [ambiente compartilhado](#organization-shared-environments), abra-o para edição a partir da página **Cloud environments** nas [configurações de administrador](https://claude.ai/admin-settings) e continue a partir da etapa 2 na seção **Network secrets** dele. Se você está em um plano Team e não tem uma [função de administrador da organização](#requirements), siga a etapa 1 em seu próprio ambiente e depois [preencha o formulário mais curto](#add-a-secret-without-the-role).

115 115 


119 119 

120**2. Adicione o segredo**120**2. Adicione o segredo**

121 121 

122Selecione **Add secret** e preencha o formulário. Mantenha o **Secret type** padrão, **Bearer**, para uma chave de API que viaja em um cabeçalho de requisição, e preencha estes campos:122Selecione **Add secret**, rotulado **Add** nas configurações de administrador, e preencha o formulário. Mantenha o **Secret type** padrão, **Bearer**, para uma chave de API que viaja em um cabeçalho de requisição, e preencha estes campos:

123 123 

124* **Name**: um rótulo para o segredo, como `Internal billing API`124* **Name**: um rótulo para o segredo, como `Internal billing API`

125* **Allowed websites**: os hosts da API, como `api.example.com`. Um `*.` inicial corresponde a cada subdomínio125* **Allowed websites**: os hosts da API, como `api.example.com`. Um `*.` inicial corresponde a cada subdomínio


443 443 

444### Requisitos do script444### Requisitos do script

445 445 

446Um script de configuração tem três restrições para trabalhar:446Um script de configuração tem quatro restrições para trabalhar:

447 447 

448* **Saia com zero**: se o script sair com não-zero, a sessão falha ao iniciar. Anexe `|| true` a comandos não críticos para que uma falha de instalação intermitente não bloqueie a sessão.448* **Saia com zero**: se o script sair com não-zero, a sessão falha ao iniciar. Anexe `|| true` a comandos não críticos para que uma falha de instalação intermitente não bloqueie a sessão.

449* **Termine em cinco minutos**: mantenha o tempo de execução total do script em aproximadamente cinco minutos para que o [cache do ambiente](#environment-caching) possa ser construído. Quando a configuração leva mais tempo do que isso, o ambiente não é armazenado em cache. Execute instalações independentes em paralelo com `&` e `wait`, e mova qualquer download único que não se encaixe em um [hook SessionStart](#setup-scripts-vs-sessionstart-hooks) que o inicie em segundo plano. Se novas sessões travam ou expiram durante a configuração, veja [Novas sessões travam ou expiram durante a configuração](https://code.claude.com/docs/pt/web-quickstart.md#new-sessions-hang-or-time-out-during-setup).449* **Termine em cinco minutos**: mantenha o tempo de execução total do script em aproximadamente cinco minutos para que o [cache do ambiente](#environment-caching) possa ser construído. Quando a configuração leva mais tempo do que isso, o ambiente não é armazenado em cache. Execute instalações independentes em paralelo com `&` e `wait`, e mova qualquer download único que não se encaixe em um [hook SessionStart](#setup-scripts-vs-sessionstart-hooks) que o inicie em segundo plano. Se novas sessões travam ou expiram durante a configuração, veja [Novas sessões travam ou expiram durante a configuração](https://code.claude.com/docs/pt/web-quickstart.md#new-sessions-hang-or-time-out-during-setup).

450* **Acesso à rede para instalações**: as instalações de pacotes precisam alcançar registros. O nível **Trusted** padrão cobre [registros de pacotes comuns](#default-allowed-domains) incluindo npm, PyPI, RubyGems e crates.io; com acesso à rede **None**, as instalações falham.450* **Acesso à rede para instalações**: as instalações de pacotes precisam alcançar registros. O nível **Trusted** padrão cobre [registros de pacotes comuns](#default-allowed-domains) incluindo npm, PyPI, RubyGems e crates.io; com acesso à rede **None**, as instalações falham.

451* **As variáveis do ambiente ainda não estão definidas**: o script é executado antes de a sessão definir as [variáveis de ambiente](#set-environment-variables) do ambiente. Defina no próprio script qualquer valor de que o script precise.

451 452 

452### Cache do ambiente453### Cache do ambiente

453 454 

Details

123 123 

124Quando uma revisão não aplicar um arquivo incluído, verifique cada um destes itens:124Quando uma revisão não aplicar um arquivo incluído, verifique cada um destes itens:

125 125 

126* **Local**: mova o arquivo para a raiz do repositório. Um caminho para um subdiretório, como `@docs/review-rules.md`, não é incluído.126* **Local**: mova o arquivo para a raiz do repositório. Exceto no caso de um [arquivo de skill](#include-a-skill-file), um caminho para um subdiretório, como `@docs/review-rules.md`, não é incluído.

127* **Nome**: corresponda exatamente ao nome do arquivo, incluindo maiúsculas e minúsculas, e use um nome sem espaços. Uma linha cujo nome não corresponde a nenhum arquivo ao lado do `REVIEW.md` permanece no `REVIEW.md` como texto simples, e a check run não a relata como uma inclusão ignorada.127* **Nome**: corresponda exatamente ao nome do arquivo, incluindo maiúsculas e minúsculas, e use um nome sem espaços. Uma linha cujo nome não corresponde a nenhum arquivo ao lado do `REVIEW.md` permanece no `REVIEW.md` como texto simples, e a check run não a relata como uma inclusão ignorada.

128* **Um nível**: liste todos os arquivos no `REVIEW.md` raiz. Uma linha `@` em um arquivo incluído ou em um `REVIEW.md` de subdiretório permanece como texto simples, e um link Markdown para outro arquivo não é uma inclusão.128* **Um nível**: liste todos os arquivos no `REVIEW.md` raiz. Uma linha `@` em um arquivo incluído ou em um `REVIEW.md` de subdiretório permanece como texto simples ([arquivos de skill são diferentes](#include-a-skill-file)), e um link Markdown para outro arquivo não é uma inclusão.

129* **Limites**: inclua no máximo oito arquivos diferentes e mantenha o `REVIEW.md` e os arquivos que ele inclui abaixo de 150.000 bytes no total. Um arquivo que atingiria o limite de bytes é ignorado por inteiro, não cortado. A check run relata quantas linhas de inclusão ignorou por qualquer um dos limites.129* **Limites**: inclua no máximo oito arquivos diferentes e mantenha o `REVIEW.md` e os arquivos que ele inclui abaixo de 150.000 bytes no total. Um arquivo que atingiria o limite de bytes é ignorado por inteiro, não cortado. A check run relata quantas linhas de inclusão ignorou por qualquer um dos limites.

130* **Links**: mantenha 64 ou menos links Markdown no total entre o `REVIEW.md` e os arquivos que ele inclui. Links para endereços `http`, `https` ou `mailto` e para âncoras `#` não contam. Acima desse limite, a revisão ignora todo o seu `REVIEW.md` raiz, não apenas os arquivos incluídos. A check run então [informa que as instruções não foram aplicadas](https://code.claude.com/docs/pt/code-review-troubleshooting.md#the-check-run-mentions-review-md).130* **Links**: mantenha 64 ou menos links Markdown no total entre o `REVIEW.md` e os arquivos que ele inclui. Links para endereços `http`, `https` ou `mailto` e para âncoras `#` não contam, nem links em um [arquivo de skill](#include-a-skill-file). Acima desse limite, a revisão ignora todo o seu `REVIEW.md` raiz, não apenas os arquivos incluídos. A check run então [informa que as instruções não foram aplicadas](https://code.claude.com/docs/pt/code-review-troubleshooting.md#the-check-run-mentions-review-md).

131* **Cópia mesclada**: mescle o arquivo incluído no [branch do qual o `REVIEW.md` é lido](#which-branch-review-md-is-read-from). A revisão lê ambos do mesmo commit, nunca das próprias alterações do pull request.131* **Cópia mesclada**: mescle o arquivo incluído no [branch do qual o `REVIEW.md` é lido](#which-branch-review-md-is-read-from). A revisão lê ambos do mesmo commit, nunca das próprias alterações do pull request.

132 132 

133### Inclua um arquivo de skill

134 

135Para que as revisões sigam orientações que você mantém em uma [skill](https://code.claude.com/docs/pt/skills.md), inclua o `SKILL.md` da skill no seu `REVIEW.md` raiz. O Code Review não executa skills.

136 

137Adicione `@` e o caminho para o `SKILL.md`, no formato `.claude/skills/<folder>/SKILL.md`, em uma linha própria:

138 

139```markdown theme={null}

140# Review instructions

141 

142Report at most five Nits per review.

143 

144@.claude/skills/api-review/SKILL.md

145 

146Treat any change under `migrations/` as Important.

147```

148 

149Proteja o [branch do qual o `REVIEW.md` é lido](#which-branch-review-md-is-read-from), porque o Code Review inclui um arquivo de skill apenas quando lê o `REVIEW.md` de um branch protegido. O arquivo de skill conta para os limites de oito arquivos e 150.000 bytes, e tem seu próprio limite de 30.000 bytes.

150 

151#### Escreva uma linha de skill que o Code Review inclua

152 

153Use um nome de pasta sem espaços. Uma linha com um espaço no caminho permanece no `REVIEW.md` como texto simples, e a check run não a relata como uma inclusão ignorada.

154 

155Se a linha `@` de uma skill violar uma das regras abaixo, o Code Review não inclui a skill a partir dessa linha:

156 

157* **Caminho**: escreva o caminho como `.claude/skills/<folder>/SKILL.md` a partir da raiz do repositório, com a pasta da skill diretamente sob `skills/`. Diferentemente de um nome de arquivo na raiz, um caminho nesse formato que não corresponde a nenhum arquivo é ignorado e contabilizado.

158* **Origem**: copie as orientações de qualquer outro arquivo sob `.claude/`, ou de uma [skill incluída no pacote, pessoal ou de plugin](https://code.claude.com/docs/pt/skills.md#where-skills-live), para um arquivo ao lado do `REVIEW.md`. Você não pode incluí-los diretamente.

159* **Arquivo**: faça commit do `SKILL.md` como um arquivo de texto comum. O Code Review não segue um link simbólico, seja o link o próprio arquivo ou uma pasta em seu caminho.

160* **Tamanho**: mantenha o `SKILL.md` com 30.000 bytes ou menos, incluindo o frontmatter

161* **Quantidade**: escreva no máximo oito linhas de skill. Uma linha repetida conta novamente para as oito.

162* **Blocos no `REVIEW.md`**: mantenha a linha `@` fora de blocos de código. Feche todo comentário HTML e todo bloco `<pre>`, `<script>`, `<style>` ou `<textarea>` acima dela.

163 

164Quando o Code Review ignora uma linha de skill por violar a regra de Arquivo, Tamanho, Quantidade ou Blocos, a [mensagem sobre linhas de inclusão ignoradas](https://code.claude.com/docs/pt/code-review-troubleshooting.md#the-check-run-mentions-review-md) da check run a contabiliza. A mensagem aparece apenas quando a revisão aplica o `REVIEW.md` de um branch protegido.

165 

166#### Verifique o que uma revisão obtém de uma skill

167 

168Quando a skill é incluída, uma revisão obtém o corpo do `SKILL.md` e nada mais da skill, então verifique a skill com base na lista abaixo.

169 

170* **Frontmatter**: repita no corpo qualquer coisa de que uma revisão precise do [frontmatter](https://code.claude.com/docs/pt/skills.md#frontmatter-reference), por exemplo, as condições que o `description` dá para usar a skill

171* **Comandos injetados**: escreva explicitamente o que um [comando `!`](https://code.claude.com/docs/pt/skills#inject-dynamic-context) forneceria. O Code Review não executa o comando e substitui toda a linha ou bloco que o contém por um placeholder.

172* **Substituições**: substitua `$ARGUMENTS` e outras [substituições](https://code.claude.com/docs/pt/skills.md#available-string-substitutions) por texto fixo, porque uma revisão não passa argumentos e as deixa como estão escritas

173* **Arquivos de suporte**: copie o que uma revisão precisa para o `SKILL.md`, porque o Code Review não carrega scripts, arquivos vinculados ou referências `@file`

174* **Exclusões e limites de Nit**: escreva instruções que excluem descobertas ou limitam Nits no `REVIEW.md` ou em um arquivo ao lado dele, não na skill. O Code Review não aceita o texto de uma skill como motivo para nenhum dos dois.

175* **Links para arquivos do repositório**: declare em palavras para o que um link ou referência `@file` aponta. A revisão vê o caminho como texto simples ou como um placeholder.

176 

177Se você editar os comandos `!`, o `$ARGUMENTS` ou os links da skill, também altera como ela funciona no Claude Code. Se sua equipe depende desses recursos, copie as orientações para um arquivo ao lado do `REVIEW.md` e inclua esse arquivo no lugar da skill.

178 

179#### Caracteres que o Code Review altera no texto da skill

180 

181O Code Review altera alguns caracteres no texto da skill, então seus exemplos de código chegam a uma revisão no formato abaixo.

182 

183```text theme={null}

184In SKILL.md: Use `items[0]`, never `List<String>`.

185The review reads: Use ˋitems(0)ˋ, never ˋList< String>ˋ.

186 

187In SKILL.md: Run `ps | grep api` and ask @alice.

188The review reads: Run ˋps ¦ grep apiˋ and ask @ alice.

189```

190 

191Quando uma regra depender de um desses caracteres, declare-a também em palavras.

192 

133### De qual branch o REVIEW\.md é lido193### De qual branch o REVIEW\.md é lido

134 194 

135O Code Review lê o `REVIEW.md` do branch base do pull request ou do branch padrão, nunca das próprias alterações do pull request. Para alterar o comportamento da revisão, faça primeiro o merge da alteração no `REVIEW.md`.195O Code Review lê o `REVIEW.md` do branch base do pull request ou do branch padrão, nunca das próprias alterações do pull request. Para alterar o comportamento da revisão, faça primeiro o merge da alteração no `REVIEW.md`.


140* Excluir caminhos, arquivos ou classes de problema200* Excluir caminhos, arquivos ou classes de problema

141* Limitar comentários de nit201* Limitar comentários de nit

142 202 

203Escreva exclusões e limites de Nit no `REVIEW.md` ou em um arquivo ao lado dele, não em uma [skill incluída](#include-a-skill-file).

204 

143#### O que conta como proteção de branch205#### O que conta como proteção de branch

144 206 

145O Code Review considera estas configurações como proteção:207O Code Review considera estas configurações como proteção:

Details

67 67 

68## A check run menciona REVIEW\.md68## A check run menciona REVIEW\.md

69 69 

70Estas são três das mensagens que uma check run pode conter sobre `REVIEW.md`:70Estas são quatro das mensagens que uma check run pode conter sobre `REVIEW.md`:

71 71 

72* **"This review applied the repository's review instructions (REVIEW\.md) from its default branch, which is not protected against direct pushes."**: a revisão leu apenas o arquivo raiz. Consulte [De qual branch o REVIEW.md é lido](https://code.claude.com/docs/pt/code-review-customize.md#which-branch-review-md-is-read-from) para saber o que muda ao proteger o branch.72* **"This review applied the repository's review instructions (REVIEW\.md) from its default branch, which is not protected against direct pushes."**: a revisão leu apenas o arquivo raiz. Consulte [De qual branch o REVIEW.md é lido](https://code.claude.com/docs/pt/code-review-customize.md#which-branch-review-md-is-read-from) para saber o que muda ao proteger o branch.

73* **"were not applied to this review: branch protection could not be confirmed"**: a revisão não leu nenhum `REVIEW.md`.73* **"were not applied to this review: branch protection could not be confirmed"**: a revisão não leu nenhum `REVIEW.md`.


75 * **Links demais**: ele contém mais de 64 links Markdown. Reduza os links para [64 ou menos](https://code.claude.com/docs/pt/code-review-customize.md#include-other-files-in-review-md).75 * **Links demais**: ele contém mais de 64 links Markdown. Reduza os links para [64 ou menos](https://code.claude.com/docs/pt/code-review-customize.md#include-other-files-in-review-md).

76 * **Um link que a revisão não consegue analisar**: ele tem um link Markdown malformado. Corrija ou remova o link.76 * **Um link que a revisão não consegue analisar**: ele tem um link Markdown malformado. Corrija ou remova o link.

77 * **Um link para um arquivo alterado**: ele aponta para um arquivo ou pasta que este pull request altera, e a revisão não conseguiu deixar de fora apenas as linhas com esse link. Escreva a regra no próprio `REVIEW.md`.77 * **Um link para um arquivo alterado**: ele aponta para um arquivo ou pasta que este pull request altera, e a revisão não conseguiu deixar de fora apenas as linhas com esse link. Escreva a regra no próprio `REVIEW.md`.

78* **"include line(s) in the root REVIEW\.md were skipped on this review"**: o seu `REVIEW.md` raiz foi aplicado, mas os arquivos indicados por essas linhas não foram. Verifique as listas em [Incluir outros arquivos no REVIEW.md](https://code.claude.com/docs/pt/code-review-customize.md#include-other-files-in-review-md) e, no caso de uma skill, em [Incluir um arquivo de skill](https://code.claude.com/docs/pt/code-review-customize.md#include-a-skill-file).

78 79 

79## Problemas de configuração80## Problemas de configuração

80 81 

desktop.md +7 −7

Details

844| [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/pt/env-vars#variables) ou [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/pt/env-vars#variables) | Defina-a em [um dos lugares em que você definiria uma variável para servidores de desenvolvimento](#set-environment-variables-for-dev-servers) e, em seguida, feche e reabra o Desktop |844| [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/pt/env-vars#variables) ou [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/pt/env-vars#variables) | Defina-a em [um dos lugares em que você definiria uma variável para servidores de desenvolvimento](#set-environment-variables-for-dev-servers) e, em seguida, feche e reabra o Desktop |

845| `API_TIMEOUT_MS`, `ANTHROPIC_BASE_URL` ou outra variável que o próprio Desktop define | Consulte [Variáveis de ambiente que o próprio Desktop define](#environment-variables-desktop-sets-itself) |845| `API_TIMEOUT_MS`, `ANTHROPIC_BASE_URL` ou outra variável que o próprio Desktop define | Consulte [Variáveis de ambiente que o próprio Desktop define](#environment-variables-desktop-sets-itself) |

846 846 

847No macOS ou Linux, se você já definiu sua variável com `export` em `~/.zshrc` ou `~/.bashrc`, consulte [Variável exportada ausente ou incorreta em comandos que o Claude executa](#exported-variable-missing-or-wrong-in-commands-claude-runs).847No macOS ou Linux, se uma variável que você definiu com `export` estiver ausente ou errada em um comando que o Claude executa, consulte [Variável exportada ausente ou errada em comandos que o Claude executa](#exported-variable-missing-or-wrong-in-commands-claude-runs).

848 848 

849#### Definir variáveis de ambiente para sessões locais849#### Definir variáveis de ambiente para sessões locais

850 850 


894 894 

895Se um comando que o Claude executa no macOS ou Linux não receber uma variável que você definiu com `export` em `~/.zshrc` ou `~/.bashrc`, ou receber o valor errado, tente o seguinte, nesta ordem:895Se um comando que o Claude executa no macOS ou Linux não receber uma variável que você definiu com `export` em `~/.zshrc` ou `~/.bashrc`, ou receber o valor errado, tente o seguinte, nesta ordem:

896 896 

897**1. Iniciar uma nova sessão**897**1. Inicie uma nova sessão**

898 898 

899Peça ao Claude para executar o comando novamente.899Peça ao Claude para executar o comando novamente.

900 900 

901**2. Fechar e reabrir o Desktop**901**2. Feche e reabra o Desktop**

902 902 

903Em seguida, inicie uma nova sessão.903Depois, inicie uma nova sessão.

904 904 

905**3. Verificar suas variáveis salvas**905**3. Verifique suas variáveis salvas**

906 906 

907Se um comando receber o valor errado, verifique se você também definiu a variável em um [ambiente salvo](#use-edit-or-remove-a-saved-environment) ou no [editor de ambiente local](#use-the-local-environment-editor). Se sim, altere o valor ali e inicie uma nova sessão.907Se um comando receber o valor errado, verifique se você também definiu a variável em um [ambiente salvo](#use-edit-or-remove-a-saved-environment) ou no [editor de ambiente local](#use-the-local-environment-editor). Se sim, altere o valor ali e inicie uma nova sessão.

908 908 

909**4. Usar um ambiente salvo**909**4. Use um ambiente salvo**

910 910 

911Adicione a variável a um [ambiente local salvo](#set-environment-variables-for-local-sessions) e, em seguida, inicie uma nova sessão a partir desse ambiente. Para uma variável como `PATH` ou `CLAUDE_CONFIG_DIR`, siga [as instruções próprias dela](#environment-variables-in-local-sessions) em vez disso.911Adicione a variável a um [ambiente local salvo](#set-environment-variables-for-local-sessions) e depois inicie uma nova sessão a partir desse ambiente. Para uma variável como `PATH`, `CLAUDE_CONFIG_DIR` ou `API_TIMEOUT_MS`, siga [as instruções próprias dela](#environment-variables-in-local-sessions) em vez disso.

912 912 

913Antes da v2.1.304, o Claude Code não repassa variáveis exportadas aos comandos, então [verifique qual versão a sessão executa](#claude-code-version-in-the-code-tab).913Antes da v2.1.304, o Claude Code não repassa variáveis exportadas aos comandos, então [verifique qual versão a sessão executa](#claude-code-version-in-the-code-tab).

914 914 

Details

15 15 

16Esta página aborda tarefas agendadas locais; para tarefas agendadas na nuvem e suas opções de acionamento, consulte [Automatize o trabalho com tarefas agendadas](https://code.claude.com/docs/pt/routines.md).16Esta página aborda tarefas agendadas locais; para tarefas agendadas na nuvem e suas opções de acionamento, consulte [Automatize o trabalho com tarefas agendadas](https://code.claude.com/docs/pt/routines.md).

17 17 

18> [!NOTE]

19>

20> Se o seu aplicativo mostrar o recurso com seu [nome anterior](https://code.claude.com/docs/pt/routines.md#where-the-name-routines-still-appears), clique em **Routines** sempre que esta página disser **Scheduled** e em **New routine** onde ela disser **New task**.

21 

18## Comparar opções de agendamento22## Comparar opções de agendamento

19 23 

20Claude Code oferece três maneiras de agendar trabalho recorrente ou único:24Claude Code oferece três maneiras de agendar trabalho recorrente ou único:


45 49 

46**1. Abra a página Scheduled tasks**50**1. Abra a página Scheduled tasks**

47 51 

48Na [aba **Code**](https://code.claude.com/docs/pt/desktop.md), clique em **Scheduled** na barra lateral ou no menu **More** da barra lateral.52Na [aba **Code**](https://code.claude.com/docs/pt/desktop.md), clique em **Scheduled** na barra lateral ou no menu **More** da barra lateral. Se a barra lateral mostrar **Routines** em vez de **Scheduled**, clique em **Routines**, depois clique em **New routine** e continue com [Formulário de página inteira](#full-page-form).

49 53 

50**2. Inicie uma nova tarefa**54**2. Inicie uma nova tarefa**

51 55 

52Clique em **New task**. Se um menu abrir com **Create with Claude** e **Set up manually**, selecione **Set up manually**. A caixa de diálogo **New scheduled task** é aberta. Se **Only on this computer** estiver no topo da caixa de diálogo, vá para [Caixa de diálogo com Only on this computer no topo](#dialog-with-only-on-this-computer-at-the-top) antes de inserir qualquer coisa.56Clique em **New task** para abrir a caixa de diálogo **New scheduled task**. Verifique estas telas antes de continuar:

57 

58* Se um menu abrir com **Create with Claude** e **Set up manually**, selecione **Set up manually** para abrir a caixa de diálogo.

59* Se **Only on this computer** estiver no topo da caixa de diálogo, vá para [Caixa de diálogo com Only on this computer no topo](#dialog-with-only-on-this-computer-at-the-top) antes de inserir qualquer coisa.

60* Se um menu com **Local** e **Cloud** abrir, ou uma página inteira abrir no lugar da caixa de diálogo, vá para [Formulário de página inteira](#full-page-form).

53 61 

54**3. Nomeie a tarefa**62**3. Nomeie a tarefa**

55 63 


99 107 

100Clique em **Create**. A página de detalhes da tarefa é aberta.108Clique em **Create**. A página de detalhes da tarefa é aberta.

101 109 

110### Formulário de página inteira

111 

112Se um menu com **Local** e **Cloud** abrir, selecione **Local**. Uma página intitulada **New local routine** ou **New local scheduled task** é aberta. Preencha os campos:

113 

114* **Name**: insira um nome que seja único entre suas tarefas.

115* **Description**: insira uma.

116* **Instructions**: insira o que Claude deve fazer quando a tarefa for executada. Na mesma caixa, selecione o modo de permissão, o modelo e a pasta em que a tarefa é executada.

117* **Schedule**: selecione uma das [opções de agendamento](#schedule-options).

118 

119Se **Create** estiver indisponível, passe o cursor sobre ele para ver o que o formulário ainda precisa. Clique em **Create** e a página de detalhes da tarefa é aberta.

120 

102## Opções de agendamento121## Opções de agendamento

103 122 

104Quando você ativa **Only on this computer** em **Advanced settings**, o cartão **Trigger** oferece Hourly, Daily, Weekdays e Weekly. Para obter **Manual** ou **Custom** para essa tarefa, abra o [formulário **Edit**](#manage-scheduled-tasks) dela depois de criá-la. Esse formulário e a [caixa de diálogo com **Only on this computer** no topo](#dialog-with-only-on-this-computer-at-the-top) oferecem estas seis opções:123Quando você ativa **Only on this computer** em **Advanced settings**, o cartão **Trigger** oferece Hourly, Daily, Weekdays e Weekly. Para obter **Manual** ou **Custom** para essa tarefa, abra o [formulário **Edit**](#manage-scheduled-tasks) dela depois de criá-la. Esse formulário, a [caixa de diálogo com **Only on this computer** no topo](#dialog-with-only-on-this-computer-at-the-top) e o [formulário de página inteira](#full-page-form) oferecem estas seis opções:

105 124 

106* **Hourly**: é executado a cada hora125* **Hourly**: é executado a cada hora

107* **Daily**: é executado todos os dias no horário local que você escolher126* **Daily**: é executado todos os dias no horário local que você escolher

env-vars.md +1 −1

Details

298| `CLAUDE_CODE_FORCE_SESSION_PERSISTENCE` | Defina como `1` para forçar a persistência da transcrição, o histórico de prompts e o registro em `claude agents` mesmo quando este `claude` foi iniciado de dentro de outra sessão do Claude Code. Use quando um valor herdado de `CLAUDE_CODE_CHILD_SESSION`, por exemplo de uma sessão do `screen` ou de um inicializador em segundo plano iniciado primeiro pela ferramenta Bash do Claude Code, fizer com que uma sessão genuinamente de nível superior seja classificada erroneamente como aninhada. A partir da v2.1.178, o Claude Code detecta o caso do tmux automaticamente e ignora o marcador herdado, então o tmux não precisa mais desta variável. Também respeitada na v2.1.169 e anteriores; não tem efeito na v2.1.170 e na v2.1.171, nas quais a detecção de sessão aninhada que ela sobrescreve foi removida |298| `CLAUDE_CODE_FORCE_SESSION_PERSISTENCE` | Defina como `1` para forçar a persistência da transcrição, o histórico de prompts e o registro em `claude agents` mesmo quando este `claude` foi iniciado de dentro de outra sessão do Claude Code. Use quando um valor herdado de `CLAUDE_CODE_CHILD_SESSION`, por exemplo de uma sessão do `screen` ou de um inicializador em segundo plano iniciado primeiro pela ferramenta Bash do Claude Code, fizer com que uma sessão genuinamente de nível superior seja classificada erroneamente como aninhada. A partir da v2.1.178, o Claude Code detecta o caso do tmux automaticamente e ignora o marcador herdado, então o tmux não precisa mais desta variável. Também respeitada na v2.1.169 e anteriores; não tem efeito na v2.1.170 e na v2.1.171, nas quais a detecção de sessão aninhada que ela sobrescreve foi removida |

299| `CLAUDE_CODE_FORCE_STRIKETHROUGH` | Defina como `1` para forçar a renderização tachada de `~~text~~` nas respostas do Claude quando o seu terminal oferece suporte, mas não é detectado automaticamente, como via SSH sem `TERM_PROGRAM` encaminhada. Sem isso, terminais não detectados mostram os marcadores `~~` literais em vez de renderizar o texto como tachado. Requer o Claude Code v2.1.186 ou posterior |299| `CLAUDE_CODE_FORCE_STRIKETHROUGH` | Defina como `1` para forçar a renderização tachada de `~~text~~` nas respostas do Claude quando o seu terminal oferece suporte, mas não é detectado automaticamente, como via SSH sem `TERM_PROGRAM` encaminhada. Sem isso, terminais não detectados mostram os marcadores `~~` literais em vez de renderizar o texto como tachado. Requer o Claude Code v2.1.186 ou posterior |

300| `CLAUDE_CODE_FORCE_SYNC_OUTPUT` | Defina como `1` para forçar a ativação da [saída sincronizada](https://gist.github.com/christianparpart/d8a62cc1ab659194337d73e399004036) do modo privado DEC 2026 quando o seu terminal oferece suporte, mas não é detectado automaticamente. Útil para emuladores como o `eat` do Emacs, que implementam BSU/ESU mas não respondem à sondagem de capacidade. Não tem efeito no tmux. Ao contrário de `CLAUDE_CODE_NO_FLICKER`, que muda para a [renderização em tela cheia](https://code.claude.com/docs/pt/fullscreen.md), esta não altera o renderizador |300| `CLAUDE_CODE_FORCE_SYNC_OUTPUT` | Defina como `1` para forçar a ativação da [saída sincronizada](https://gist.github.com/christianparpart/d8a62cc1ab659194337d73e399004036) do modo privado DEC 2026 quando o seu terminal oferece suporte, mas não é detectado automaticamente. Útil para emuladores como o `eat` do Emacs, que implementam BSU/ESU mas não respondem à sondagem de capacidade. Não tem efeito no tmux. Ao contrário de `CLAUDE_CODE_NO_FLICKER`, que muda para a [renderização em tela cheia](https://code.claude.com/docs/pt/fullscreen.md), esta não altera o renderizador |

301| `CLAUDE_CODE_FORCE_TERMINAL_IMAGES` | Defina como `1` para desenhar [elementos `Image` de mods](https://code.claude.com/docs/pt/plugins/mods/reference#elements) como imagens quando seu terminal desenha imagens do protocolo gráfico kitty com placeholders Unicode e você ainda vê o texto `alt` esmaecido de uma `Image`. Consulte [quais terminais desenham uma `Image`](https://code.claude.com/docs/pt/plugins/mods/gallery#image-and-client) e por que esta variável não ajuda dentro do tmux ou do screen |301| `CLAUDE_CODE_FORCE_TERMINAL_IMAGES` | Defina como `1` para desenhar [elementos `Image` de mods](https://code.claude.com/docs/pt/plugins/mods/reference#elements) como imagens quando o seu terminal desenha imagens do protocolo gráfico do kitty com placeholders Unicode e você ainda vê o texto `alt` esmaecido de um `Image`. Consulte [quais terminais desenham um `Image` e onde não definir esta variável](https://code.claude.com/docs/pt/plugins/mods/gallery#image-and-client) |

302| `CLAUDE_CODE_FORK_SUBAGENT` | Controla o modo fork, que está ativado por padrão e permite que o Claude inicie [forks](https://code.claude.com/docs/pt/sub-agents.md#fork-the-current-conversation) por conta própria. Enquanto o modo fork está ativado, o Claude também não pode [aguardar um subagente](https://code.claude.com/docs/pt/sub-agents.md#run-subagents-in-foreground-or-background) em sessões interativas de terminal, VS Code ou desktop na sua máquina. Defina como `0` para desativar o modo fork. Para versões, consulte [Desativar o modo fork](https://code.claude.com/docs/pt/sub-agents.md#turn-fork-mode-on-or-off) |302| `CLAUDE_CODE_FORK_SUBAGENT` | Controla o modo fork, que está ativado por padrão e permite que o Claude inicie [forks](https://code.claude.com/docs/pt/sub-agents.md#fork-the-current-conversation) por conta própria. Enquanto o modo fork está ativado, o Claude também não pode [aguardar um subagente](https://code.claude.com/docs/pt/sub-agents.md#run-subagents-in-foreground-or-background) em sessões interativas de terminal, VS Code ou desktop na sua máquina. Defina como `0` para desativar o modo fork. Para versões, consulte [Desativar o modo fork](https://code.claude.com/docs/pt/sub-agents.md#turn-fork-mode-on-or-off) |

303| `CLAUDE_CODE_FORWARD_SUBAGENT_TEXT` | Defina como `1` para emitir blocos de texto e de pensamento de [subagentes](https://code.claude.com/docs/pt/sub-agents.md) na saída de `claude -p --output-format stream-json`, o mesmo comportamento da flag [`--forward-subagent-text`](https://code.claude.com/docs/pt/cli-reference#cli-flags). Use a variável quando um harness invoca `claude` e não consegue passar a flag por conta própria. Ao contrário da flag, que encerra com erro fora do modo não interativo com saída stream-json, a variável é ignorada nesses casos para que invocações aninhadas continuem funcionando quando ela estiver definida para todo o processo. Requer o Claude Code v2.1.211 ou posterior |303| `CLAUDE_CODE_FORWARD_SUBAGENT_TEXT` | Defina como `1` para emitir blocos de texto e de pensamento de [subagentes](https://code.claude.com/docs/pt/sub-agents.md) na saída de `claude -p --output-format stream-json`, o mesmo comportamento da flag [`--forward-subagent-text`](https://code.claude.com/docs/pt/cli-reference#cli-flags). Use a variável quando um harness invoca `claude` e não consegue passar a flag por conta própria. Ao contrário da flag, que encerra com erro fora do modo não interativo com saída stream-json, a variável é ignorada nesses casos para que invocações aninhadas continuem funcionando quando ela estiver definida para todo o processo. Requer o Claude Code v2.1.211 ou posterior |

304| `CLAUDE_CODE_GATEWAY_HINT_HEADERS` | Defina como `1` para enviar os [cabeçalhos de dica de gateway](https://code.claude.com/docs/pt/llm-gateway-protocol.md#gateway-hint-headers), como `x-claude-code-request-class` e `x-claude-code-compaction`, em um proxy personalizado ou em um provedor de terceiros, como Amazon Bedrock ou Claude Platform on AWS. Defina como `0` para parar de enviá-los em todas as conexões, incluindo uma conexão direta com a API da Anthropic, onde o Claude Code os envia por padrão. Requer o Claude Code v2.1.273 ou posterior |304| `CLAUDE_CODE_GATEWAY_HINT_HEADERS` | Defina como `1` para enviar os [cabeçalhos de dica de gateway](https://code.claude.com/docs/pt/llm-gateway-protocol.md#gateway-hint-headers), como `x-claude-code-request-class` e `x-claude-code-compaction`, em um proxy personalizado ou em um provedor de terceiros, como Amazon Bedrock ou Claude Platform on AWS. Defina como `0` para parar de enviá-los em todas as conexões, incluindo uma conexão direta com a API da Anthropic, onde o Claude Code os envia por padrão. Requer o Claude Code v2.1.273 ou posterior |

errors.md +63 −6

Details

317| `Skipping connection (recent failure cached; retries automatically in 15 min, or edit the plugin config to retry now)` | [Plugin errors](#skipping-connection-recent-failure-cached) |317| `Skipping connection (recent failure cached; retries automatically in 15 min, or edit the plugin config to retry now)` | [Plugin errors](#skipping-connection-recent-failure-cached) |

318| `Error: No such tool available: <tool name>` | [Tool errors](#no-such-tool-available) |318| `Error: No such tool available: <tool name>` | [Tool errors](#no-such-tool-available) |

319| `MCP server "<name>" connection closed before the tool call was answered` | [Tool errors](#connection-closed-before-the-tool-call-was-answered) |319| `MCP server "<name>" connection closed before the tool call was answered` | [Tool errors](#connection-closed-before-the-tool-call-was-answered) |

320| `MCP server "<name>" is disabled — re-enable it via /mcp to use its tools` | [Erros de ferramenta](#mcp-server-is-disabled) |

321| `MCP server "<name>" tool "<tool>" timed out after <N>s. The server asked the user a question, and no answer came before the time limit.` | [Tool errors](#mcp-tool-call-timed-out-with-the-servers-question-unanswered) |

320| `would be spawned with zero tools — refusing` | [Tool errors](#agent-would-be-spawned-with-zero-tools) |322| `would be spawned with zero tools — refusing` | [Tool errors](#agent-would-be-spawned-with-zero-tools) |

321| `File is covered by a Read deny rule in your permission settings` | [Tool errors](#file-is-covered-by-a-read-deny-rule) |323| `File is covered by a Read deny rule in your permission settings` | [Tool errors](#file-is-covered-by-a-read-deny-rule) |

322| `cannot contain null bytes (\0)` | [Tool errors](#path-cannot-contain-null-bytes) |324| `cannot contain null bytes (\0)` | [Tool errors](#path-cannot-contain-null-bytes) |


348| `Your disk quota is full on the filesystem with Claude Code's temp directory <dir> (EDQUOT)` / `The filesystem with Claude Code's temp directory <dir>, or your disk quota on it, is full (ENOSPC)` | [Tool errors](#disk-quota-or-temp-filesystem-is-full) |350| `Your disk quota is full on the filesystem with Claude Code's temp directory <dir> (EDQUOT)` / `The filesystem with Claude Code's temp directory <dir>, or your disk quota on it, is full (ENOSPC)` | [Tool errors](#disk-quota-or-temp-filesystem-is-full) |

349| `Command output was lost: the temp filesystem at <dir> is full` / `is out of inodes` | [Tool errors](#disk-quota-or-temp-filesystem-is-full) |351| `Command output was lost: the temp filesystem at <dir> is full` / `is out of inodes` | [Tool errors](#disk-quota-or-temp-filesystem-is-full) |

350| `File is not valid UTF-8. It may use a legacy encoding such as Windows-1252, Shift-JIS or GBK, or be binary` | [Tool errors](#file-is-not-valid-utf-8) |352| `File is not valid UTF-8. It may use a legacy encoding such as Windows-1252, Shift-JIS or GBK, or be binary` | [Tool errors](#file-is-not-valid-utf-8) |

353| `git is not installed on this Mac. To install it, run xcode-select --install, then try again.` | [Erros de ferramenta](#git-is-not-installed-on-this-mac) |

351| `the source file is not valid UTF-8 text` / `the source file is not valid UTF-16 text` | [Tool errors](#the-source-file-is-not-valid-utf-8-text) |354| `the source file is not valid UTF-8 text` / `the source file is not valid UTF-16 text` | [Tool errors](#the-source-file-is-not-valid-utf-8-text) |

352| `the source file has the replacement character U+FFFD` | [Tool errors](#the-source-file-is-not-valid-utf-8-text) |355| `the source file has the replacement character U+FFFD` | [Tool errors](#the-source-file-is-not-valid-utf-8-text) |

353| `Not published: that file is on a network share` | [Tool errors](#not-published-that-file-is-on-a-network-share) |356| `Not published: that file is on a network share` | [Tool errors](#not-published-that-file-is-on-a-network-share) |


487 490 

488Enquanto Claude está consultando o [advisor](https://code.claude.com/docs/pt/advisor.md), o banner aparece após 90 segundos sem dados em vez de 20, porque uma revisão longa do advisor pode não enviar nada por bem mais de 20 segundos. Antes da v2.1.214, o limite de 20 segundos se aplicava também durante chamadas ao advisor, então o banner aparecia durante revisões do advisor mesmo quando nada estava errado.491Enquanto Claude está consultando o [advisor](https://code.claude.com/docs/pt/advisor.md), o banner aparece após 90 segundos sem dados em vez de 20, porque uma revisão longa do advisor pode não enviar nada por bem mais de 20 segundos. Antes da v2.1.214, o limite de 20 segundos se aplicava também durante chamadas ao advisor, então o banner aparecia durante revisões do advisor mesmo quando nada estava errado.

489 492 

493#### O banner de espera aparece e desaparece atrás de um gateway

494 

495Se o banner `Waiting for API response` aparecer e desaparecer enquanto Claude pensa e você se conecta através de um gateway, [atualize o Claude Code](https://code.claude.com/docs/pt/setup.md#update-claude-code) para a v2.1.309 ou posterior. O banner aparece após 45 segundos sem dados nestas conexões:

496 

497* [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/pt/env-vars) definido como um host diferente da API Anthropic, como um [gateway de LLM](https://code.claude.com/docs/pt/llm-gateway)

498* Uma sessão do [Claude apps gateway](https://code.claude.com/docs/pt/claude-apps-gateway)

499* [Claude Platform on AWS](https://code.claude.com/docs/pt/claude-platform-on-aws.md) com `ANTHROPIC_AWS_BASE_URL` definido

500 

501Antes da v2.1.309, o banner aparecia após 20 segundos nessas conexões.

502 

490### Ajustar o comportamento de novas tentativas503### Ajustar o comportamento de novas tentativas

491 504 

492Você pode ajustar o comportamento de novas tentativas com estas variáveis de ambiente:505Você pode ajustar o comportamento de novas tentativas com estas variáveis de ambiente:


3256 3269 

3257**O que fazer:**3270**O que fazer:**

3258 3271 

3259* Em um script ou job de CI, acrescente `--trust-workspace` para confiar no checkout apenas nessa execução: `claude ultrareview --trust-workspace`. Acrescente-o somente para código em que você confia, porque a configuração git do checkout e as configurações de projeto do Claude Code podem então executar programas. Para revisar um pull request cujo código você não confia, consulte [como revisá-lo a partir de um checkout em que você confia](https://code.claude.com/docs/pt/ultrareview.md#trust-the-folder-before-the-review-runs).3272* Em um script ou job de CI, acrescente `--trust-workspace` para confiar na pasta nessa execução: `claude ultrareview --trust-workspace`. Acrescente-a apenas para código em que você confia, porque o git e o Claude Code podem então executar programas indicados na configuração do git e nas configurações do projeto da pasta. Para um pull request cujo código você não confia, [execute a revisão a partir de um branch em que você confia](https://code.claude.com/docs/pt/ultrareview.md#trust-the-folder-before-the-review-runs).

3260* Na sua própria máquina, execute `claude` nessa pasta e aceite a [caixa de diálogo de confiança do workspace](https://code.claude.com/docs/pt/permissions.md#project-allow-rules-and-workspace-trust), e então execute seu comando original novamente3273* Na sua própria máquina, execute `claude` nessa pasta e aceite a [caixa de diálogo de confiança do workspace](https://code.claude.com/docs/pt/permissions.md#project-allow-rules-and-workspace-trust), e então execute seu comando original novamente

3261 3274 

3262Cada uma destas mensagens de `claude ultrareview` significa que nenhuma revisão foi iniciada e o código de saída é 1:3275Cada uma destas mensagens de `claude ultrareview` significa que nenhuma revisão foi iniciada e o código de saída é 1:


3526 3539 

3527Mensagens semelhantes são disparadas antes mesmo de o comando ser executado:3540Mensagens semelhantes são disparadas antes mesmo de o comando ser executado:

3528 3541 

3529* `Shell command permission check failed for pattern "..."`: a verificação de permissão do comando não o permitiu. [Permission checks on injected commands](https://code.claude.com/docs/pt/skills.md#permission-checks-on-injected-commands) explica quais resultados abortam em cada modo de permissão e como pré-aprovar um comando com `allowed-tools`3542* `Shell command permission check failed for pattern "..."`: a verificação de permissão do comando não o permitiu. [Verificações de permissão em comandos injetados](https://code.claude.com/docs/pt/skills.md#permission-checks-on-injected-commands) explica quais resultados abortam em cada modo de permissão e como pré-aprovar um comando com `allowed-tools`

3530* ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found``: o frontmatter da skill exige bash em uma máquina que não o tem. Instale o Git for Windows ou altere o frontmatter para `shell: powershell`. Consulte [Como os comandos injetados são executados](https://code.claude.com/docs/pt/skills.md#how-injected-commands-run)3543* ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found``: o frontmatter da skill exige bash em uma máquina que não o tem. Instale o Git for Windows ou altere o frontmatter para `shell: powershell`. Consulte [Como os comandos injetados são executados](https://code.claude.com/docs/pt/skills.md#how-injected-commands-run)

3531* `No shell command in <name> was run`: um dos comandos `!` do arquivo contém um caractere de controle bruto diferente de tab ou nova linha, então nenhum deles é executado. Consulte [como encontrar e remover o caractere](#no-shell-command-was-run)3544* `No shell command in <name> was run`: um dos comandos `!` do arquivo contém um caractere de controle bruto diferente de tab ou nova linha, então nenhum deles é executado. Consulte [como encontrar e remover o caractere](#no-shell-command-was-run)

3532 3545 


3678 3691 

3679* **Você não passou um branch base**: o Claude Code comparou com o branch padrão do repositório e sugere passar seu branch base explicitamente, como no exemplo acima3692* **Você não passou um branch base**: o Claude Code comparou com o branch padrão do repositório e sugere passar seu branch base explicitamente, como no exemplo acima

3680* **Você passou um branch base que já estava no seu clone**: a dica diz ``Make sure <branch> exists locally or on origin (try `git fetch origin <branch>`)``3693* **Você passou um branch base que já estava no seu clone**: a dica diz ``Make sure <branch> exists locally or on origin (try `git fetch origin <branch>`)``

3681* **Você passou um branch base que não estava no seu clone**: o Claude Code o buscou do origin antes de comparar. A dica diz ``<branch> was fetched from origin but shares no history with HEAD. If another branch is your real base, pass it explicitly (`/code-review ultra <branch>`)``; quando o Claude Code não consegue determinar se o seu clone é raso (shallow), ele sugere `git fetch --unshallow origin` em vez disso. Antes da v2.1.221, a dica sugeria `git fetch --unshallow origin` para todo branch base buscado e, em um clone completo, esse comando falha com `fatal: --unshallow on a complete repository does not make sense`.3694* **Você passou um branch base que não estava no seu clone**: o Claude Code o buscou do origin antes de comparar. A dica diz ``<branch> was fetched from origin but shares no history with HEAD. If another branch is your real base, pass it explicitly (`/code-review ultra <branch>`)``; quando o Claude Code não consegue determinar se o seu clone é shallow, ele sugere `git fetch --unshallow origin` em vez disso. Antes da v2.1.221, a dica sugeria `git fetch --unshallow origin` para todo branch base buscado, e em um clone completo esse comando falha com `fatal: --unshallow on a complete repository does not make sense`.

3682 3695 

3683**O que fazer:**3696**O que fazer:**

3684 3697 


4419* Se a ação não aconteceu, peça ao Claude para executar a ferramenta novamente. Você não precisa reconectar o servidor antes, porque Claude Code se conecta a ele novamente na próxima chamada a uma de suas ferramentas. Se essa conexão também falhar, veja [Mid-session drops of a remote server](https://code.claude.com/docs/pt/mcp.md#mid-session-drops-of-a-remote-server).4432* Se a ação não aconteceu, peça ao Claude para executar a ferramenta novamente. Você não precisa reconectar o servidor antes, porque Claude Code se conecta a ele novamente na próxima chamada a uma de suas ferramentas. Se essa conexão também falhar, veja [Mid-session drops of a remote server](https://code.claude.com/docs/pt/mcp.md#mid-session-drops-of-a-remote-server).

4420* Se você desenvolve o servidor e a ferramenta é segura para ser chamada duas vezes, [marque-a como segura para repetir](https://code.claude.com/docs/pt/mcp.md#tool-calls-pending-when-a-connection-closes) para que Claude Code possa repetir uma chamada perdida4433* Se você desenvolve o servidor e a ferramenta é segura para ser chamada duas vezes, [marque-a como segura para repetir](https://code.claude.com/docs/pt/mcp.md#tool-calls-pending-when-a-connection-closes) para que Claude Code possa repetir uma chamada perdida

4421 4434 

4435### MCP server is disabled

4436 

4437Esta mensagem em um resultado de ferramenta significa que Claude chamou uma ferramenta em um [servidor MCP](https://code.claude.com/docs/pt/mcp.md) que está [desativado](https://code.claude.com/docs/pt/mcp.md#disable-a-server-without-removing-it). Claude Code não se conectou ao servidor, então a ferramenta não foi executada, e Claude recebeu este texto no lugar de um resultado:

4438 

4439```text wrap theme={null}

4440MCP server "<name>" is disabled — re-enable it via /mcp to use its tools

4441```

4442 

4443**O que fazer:**

4444 

4445* Se você pretendia desativar o servidor, não precisa fazer nada

4446* Se Claude precisa das ferramentas do servidor, ative-o novamente a partir de `/mcp` no prompt do Claude Code

4447* Em uma aplicação do [Agent SDK](https://code.claude.com/docs/pt/agent-sdk/overview.md), ative o servidor novamente chamando [`toggleMcpServer()`](https://code.claude.com/docs/pt/agent-sdk/typescript#togglemcpserver) em TypeScript com `enabled` definido como `true`, ou [`toggle_mcp_server()`](https://code.claude.com/docs/pt/agent-sdk/python#claudesdkclient) em Python com `enabled` definido como `True`

4448 

4449### Chamada de ferramenta MCP atingiu o timeout com a pergunta do servidor sem resposta

4450 

4451No [modo não interativo](https://code.claude.com/docs/pt/headless.md), um [servidor MCP](https://code.claude.com/docs/pt/mcp.md) pediu uma entrada por meio de [elicitation](https://code.claude.com/docs/pt/mcp.md#respond-to-mcp-elicitation-requests) durante uma chamada de ferramenta, e o limite de tempo da chamada se esgotou antes de chegar uma resposta:

4452 

4453```text theme={null}

4454MCP server "<name>" tool "<tool>" timed out after <N>s. The server asked the user a question, and no answer came before the time limit. Do not call this tool again in this turn. Tell the user that the server's question got no answer, and wait for their reply.

4455```

4456 

4457Antes da v2.1.310, o resultado terminava em `timed out after <N>s` e não dizia nada sobre a pergunta.

4458 

4459**O que fazer:**

4460 

4461* Configure um [hook `Elicitation`](https://code.claude.com/docs/pt/hooks#elicitation) que responda às requisições do servidor

4462* Em uma aplicação TypeScript do Agent SDK, faça seu callback [`onElicitation`](https://code.claude.com/docs/pt/agent-sdk/typescript#options) retornar sua resposta antes que o limite se esgote

4463* Para dar mais tempo a uma resposta, defina um [`timeout`](https://code.claude.com/docs/pt/mcp#time-limits-on-mcp-tool-calls) maior em milissegundos na entrada de configuração do servidor, como `"timeout": 600000` para 10 minutos

4464* Execute a tarefa em uma sessão interativa em vez disso e responda você mesmo ao [diálogo](https://code.claude.com/docs/pt/mcp.md#respond-to-mcp-elicitation-requests) do servidor

4465 

4422### Agent seria iniciado com zero ferramentas4466### Agent seria iniciado com zero ferramentas

4423 4467 

4424Cada entrada na lista [`tools` do subagente](https://code.claude.com/docs/pt/sub-agents#supported-frontmatter-fields) falhou em corresponder a uma ferramenta utilizável, então Claude Code recusou iniciar o subagente: sem ferramentas, ele não poderia agir. A mensagem agrupa suas entradas pelo que deu errado:4468Cada entrada na lista [`tools` do subagente](https://code.claude.com/docs/pt/sub-agents#supported-frontmatter-fields) falhou em corresponder a uma ferramenta utilizável, então Claude Code recusou iniciar o subagente: sem ferramentas, ele não poderia agir. A mensagem agrupa suas entradas pelo que deu errado:


4741The command was not started: this computer's disk is full (ENOSPC) on the volume holding /tmp/claude-501 (Claude Code's temporary directory), so the file that captures command output could not be created there and nothing ran. Free space on that volume, or restart Claude Code with CLAUDE_CODE_TMPDIR set to a directory on another one, then retry. If this is the user's own computer, tell them before deleting anything to make room.4785The command was not started: this computer's disk is full (ENOSPC) on the volume holding /tmp/claude-501 (Claude Code's temporary directory), so the file that captures command output could not be created there and nothing ran. Free space on that volume, or restart Claude Code with CLAUDE_CODE_TMPDIR set to a directory on another one, then retry. If this is the user's own computer, tell them before deleting anything to make room.

4742```4786```

4743 4787 

4744As outras três mensagens seguem um comando que foi executado e saiu com um código diferente de zero. Este exemplo é a forma `Disk full:`:4788As mensagens `Disk full:`, `Disk quota used up:` e `Nearly out of inodes:` seguem um comando que foi executado e saiu com um código diferente de zero. Por exemplo:

4745 4789 

4746```text wrap theme={null}4790```text wrap theme={null}

4747Disk full: this computer's volume holding /tmp/claude-501 (Claude Code's temporary directory) has 3 MB free, so whatever this command printed was lost and its own writes may have failed with "No space left on device". Free space on that volume, or restart Claude Code with CLAUDE_CODE_TMPDIR set to a directory on another one, then retry. If this is the user's own computer, tell them before deleting anything to make room.4791Disk full: this computer's volume holding /tmp/claude-501 (Claude Code's temporary directory) has 3 MB free, so whatever this command printed was lost and its own writes may have failed with "No space left on device". Free space on that volume, or restart Claude Code with CLAUDE_CODE_TMPDIR set to a directory on another one, then retry. If this is the user's own computer, tell them before deleting anything to make room.


4751 4795 

4752* No macOS e no Linux, execute `df -h <dir>` no seu shell para ver qual volume contém o diretório e quão cheio ele está. `df -i <dir>` mostra quantos inodes estão livres. `<dir>` é o diretório que sua mensagem nomeia, como em `df -i /tmp/claude-501`4796* No macOS e no Linux, execute `df -h <dir>` no seu shell para ver qual volume contém o diretório e quão cheio ele está. `df -i <dir>` mostra quantos inodes estão livres. `<dir>` é o diretório que sua mensagem nomeia, como em `df -i /tmp/claude-501`

4753* **`Disk full: this computer's volume` ou `disk is full (ENOSPC)`**: em qualquer lugar desse volume, delete arquivos de que você não precisa4797* **`Disk full: this computer's volume` ou `disk is full (ENOSPC)`**: em qualquer lugar desse volume, delete arquivos de que você não precisa

4754* **`Disk quota used up:` ou `Disk full: a test write`**: delete seus próprios arquivos nesse volume, mesmo que ele ainda mostre espaço livre4798* **`Disk quota used up:`, `disk quota is used up (EDQUOT)` ou `Disk full: a test write`**: delete seus próprios arquivos nesse volume, mesmo que ele ainda mostre espaço livre

4755* **`disk quota is used up (EDQUOT)`**: delete seus próprios arquivos nesse volume

4756* **`Nearly out of inodes:`**: delete muitos arquivos nesse volume. Cada um ocupa um inode qualquer que seja seu tamanho, então o que importa é a quantidade deles, não o tamanho4799* **`Nearly out of inodes:`**: delete muitos arquivos nesse volume. Cada um ocupa um inode qualquer que seja seu tamanho, então o que importa é a quantidade deles, não o tamanho

4757* Ou reinicie Claude Code com [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/pt/env-vars) definido para um diretório em um volume com espaço4800* Ou reinicie Claude Code com [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/pt/env-vars) definido para um diretório em um volume com espaço

4758* Então peça ao Claude para executar o comando novamente4801* Então peça ao Claude para executar o comando novamente


4766 4809 

4767Antes da v2.1.305, um comando que Claude Code não conseguia iniciar porque o disco estava cheio retornava apenas o texto de erro do sistema operacional. Esse texto dizia, por exemplo, `ENOSPC: no space left on device, open <path>.output`.4810Antes da v2.1.305, um comando que Claude Code não conseguia iniciar porque o disco estava cheio retornava apenas o texto de erro do sistema operacional. Esse texto dizia, por exemplo, `ENOSPC: no space left on device, open <path>.output`.

4768 4811 

4812### git is not installed on this Mac

4813 

4814Esta mensagem significa que uma etapa no Claude Code precisava do git, e o git que ele encontrou é o substituto da Apple em `/usr/bin/git`. As ferramentas de desenvolvedor que fornecem o git não estão instaladas.

4815 

4816Claude Code não inicia o substituto e mostra este texto em vez disso, por exemplo dentro de uma mensagem mais longa:

4817 

4818```text wrap theme={null}

4819git is not installed on this Mac. To install it, run xcode-select --install, then try again.

4820```

4821 

4822**O que fazer:**

4823 

4824* No Terminal, execute `xcode-select --install`, conclua a instalação que ele inicia e, em seguida, tente novamente o que você estava fazendo no Claude Code

4825 

4769### File is not valid UTF-84826### File is not valid UTF-8

4770 4827 

4771Claude usou a ferramenta Edit ou NotebookEdit em um arquivo cujos bytes não decodificam como UTF-8, e Claude Code recusou a alteração. Nada foi escrito, então o arquivo está como estava. Essas ferramentas salvam o arquivo inteiro de volta como UTF-8, o que teria transformado cada byte que não conseguissem decodificar no caractere de substituição `U+FFFD`. A mensagem aparece no resultado da ferramenta:4828Claude usou a ferramenta Edit ou NotebookEdit em um arquivo cujos bytes não decodificam como UTF-8, e Claude Code recusou a alteração. Nada foi escrito, então o arquivo está como estava. Essas ferramentas salvam o arquivo inteiro de volta como UTF-8, o que teria transformado cada byte que não conseguissem decodificar no caractere de substituição `U+FFFD`. A mensagem aparece no resultado da ferramenta:

fast-mode.md +21 −11

Details

155 155 

156Antes de oferecer modo rápido, Claude Code verifica a disponibilidade de modo rápido da sua organização com uma solicitação diretamente para `api.anthropic.com`. A verificação não segue [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/pt/llm-gateway-connect#set-the-base-url-and-credential), portanto em uma rede que roteia o tráfego Claude através de um [gateway LLM](https://code.claude.com/docs/pt/llm-gateway) e bloqueia a saída direta para `api.anthropic.com`, a verificação falha mesmo que as solicitações de inferência funcionem. A verificação usa um [proxy HTTP](https://code.claude.com/docs/pt/network-config.md#proxy-configuration) configurado, portanto um bloqueio de rede falha na verificação apenas onde `api.anthropic.com` é inacessível mesmo através do proxy.156Antes de oferecer modo rápido, Claude Code verifica a disponibilidade de modo rápido da sua organização com uma solicitação diretamente para `api.anthropic.com`. A verificação não segue [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/pt/llm-gateway-connect#set-the-base-url-and-credential), portanto em uma rede que roteia o tráfego Claude através de um [gateway LLM](https://code.claude.com/docs/pt/llm-gateway) e bloqueia a saída direta para `api.anthropic.com`, a verificação falha mesmo que as solicitações de inferência funcionem. A verificação usa um [proxy HTTP](https://code.claude.com/docs/pt/network-config.md#proxy-configuration) configurado, portanto um bloqueio de rede falha na verificação apenas onde `api.anthropic.com` é inacessível mesmo através do proxy.

157 157 

158Quando a verificação falha, `/fast` relata "Fast mode unavailable due to network connectivity issues", e as solicitações são executadas em velocidade padrão, mesmo quando sua organização tem modo rápido ativado. Uma verificação que foi bem-sucedida no passado continua funcionando a partir de seu resultado em cache, portanto uma verificação bloqueada afeta principalmente novas instalações.158Se sua organização tem o modo rápido ativado e `/fast` diz o contrário, encontre a mensagem que ele mostra entre estes casos.

159 159 

160A mesma mensagem de conectividade aparece em uma rede aberta quando a verificação atinge `api.anthropic.com` mas apresenta uma credencial que Anthropic rejeita. Uma sessão cuja chave resolvida é uma credencial emitida por gateway, mantida em [`ANTHROPIC_API_KEY`](https://code.claude.com/docs/pt/llm-gateway-connect#set-the-base-url-and-credential) ou produzida por um [`apiKeyHelper`](https://code.claude.com/docs/pt/settings-reference#apikeyhelper), envia a verificação com essa chave, e a solicitação rejeitada é relatada como uma falha de conectividade.160#### Fast mode unavailable due to network connectivity issues

161 161 

162Para restaurar o modo rápido, coloque na lista de permissões a saída direta para `api.anthropic.com` onde um bloqueio de rede é a causa, ou defina qualquer variável que corresponda a como a verificação falha:162A verificação de disponibilidade falhou, por exemplo porque sua rede bloqueia `api.anthropic.com`, e as requisições são executadas em velocidade padrão. Uma verificação que foi bem-sucedida no passado continua funcionando a partir de seu resultado em cache, portanto uma verificação bloqueada afeta principalmente novas instalações.

163 163 

164* `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1` trata uma verificação falhada como disponível e ainda honra uma resposta "disabled by your organization". Use-a quando sua rede recusa a conexão, ou quando Anthropic rejeita uma credencial de gateway; colocar na lista de permissões não ajuda no caso de credencial, já que nada é bloqueado.164Para restaurar o modo rápido, adicione à allowlist a saída direta para `api.anthropic.com`, ou defina `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1`, que trata uma verificação com falha como disponível e ainda honra uma resposta "disabled by your organization".

165* `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1` pula a verificação inteiramente. Use-a quando sua rede intercepta a solicitação em vez de recusá-la.

166 165 

167Duas configurações de gateway relatam "Fast mode has been disabled by your organization" em vez da mensagem de conectividade, mesmo quando sua organização tem modo rápido ativado:166#### Fast mode is currently unavailable

168 167 

169* Uma sessão que se autentica com [`ANTHROPIC_AUTH_TOKEN`](https://code.claude.com/docs/pt/llm-gateway-connect#set-the-base-url-and-credential) apenas pula a verificação: sem um login claude.ai ou uma chave de API Anthropic, e sem uma verificação bem-sucedida em cache, Claude Code trata o modo rápido como desativado pela sua organização sem enviar a solicitação.168Atrás de um gateway, verifique estas configurações, nas quais Claude Code não envia a verificação de disponibilidade e não tem nenhuma verificação bem-sucedida anterior em cache:

170* Um proxy que intercepta a verificação e responde com sua própria página, por exemplo um proxy de inspeção TLS retornando uma página de bloqueio HTTP 200, é lido como uma resposta dizendo que sua organização tem modo rápido desativado.

171 169 

172Em ambos os casos, defina `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1` para restaurar o modo rápido. `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS` não se aplica a nenhum dos dois casos, já que apenas ignora verificações falhadas e ambos produzem uma resposta desativada. Colocar na lista de permissões a saída direta não ajuda no caso de token de portador, que nunca envia a solicitação.170* Você aponta `ANTHROPIC_BASE_URL` para seu gateway e define [`ANTHROPIC_API_KEY`](https://code.claude.com/docs/pt/llm-gateway-connect#set-the-base-url-and-credential) como uma chave emitida pelo gateway que não está no formato de uma chave de API Anthropic. Claude Code não envia essa chave para `api.anthropic.com`.

171* Você define [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](https://code.claude.com/docs/pt/env-vars), então Claude Code pula a verificação.

173 172 

174As variáveis afetam apenas a verificação do lado do cliente. Quando sua organização tem modo rápido desativado, a API rejeita solicitações de modo rápido independentemente de estarem definidas ou não. Uma rejeição da API permanece mesmo com uma variável de pulo definida. Claude Code tenta novamente a solicitação rejeitada em velocidade padrão, desativa o modo rápido e `/fast` relata que sua organização desativou o modo rápido.173Para restaurar o modo rápido em qualquer uma dessas configurações, defina `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1`.

175 174 

176Definir `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` também suprime a verificação de disponibilidade. Sem uma verificação bem-sucedida em cache anterior, `/fast` relata "Fast mode is currently unavailable"; ambas as variáveis de pulo restauram o modo rápido nessa configuração também.175#### Fast mode has been disabled by your organization

176 

177Atrás de um gateway, você pode ver esta mensagem mesmo quando sua organização tem o modo rápido ativado, em qualquer uma destas configurações:

178 

179* Você se autentica apenas com [`ANTHROPIC_AUTH_TOKEN`](https://code.claude.com/docs/pt/llm-gateway-connect#set-the-base-url-and-credential), sem login claude.ai, sem chave de API e sem verificação bem-sucedida em cache. Claude Code então trata o modo rápido como desativado pela sua organização sem enviar a requisição.

180* Um proxy intercepta a verificação e responde com sua própria página, por exemplo um proxy de inspeção TLS retornando uma página de bloqueio HTTP 200. Claude Code lê essa página como uma resposta dizendo que sua organização tem o modo rápido desativado.

181 

182Em ambos os casos, defina `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1`, que pula a verificação inteiramente, em vez de `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS`, que não se aplica a nenhum dos dois.

183 

184> [!NOTE]

185>

186> As variáveis de pulo alteram apenas a verificação do lado do cliente. Quando sua organização tem o modo rápido desativado, a API rejeita requisições de modo rápido independentemente de estarem definidas ou não. Claude Code então tenta novamente a requisição em velocidade padrão, desativa o modo rápido e `/fast` relata que sua organização desativou o modo rápido.

177 187 

178### Exigir opt-in por sessão188### Exigir opt-in por sessão

179 189 

hooks.md +17 −6

Details

961blocking because Git Bash wasn't found, so only exit code 0 or 2 counts as this hook's verdict.961blocking because Git Bash wasn't found, so only exit code 0 or 2 counts as this hook's verdict.

962```962```

963 963 

964Para descobrir por que o hook falhou, verifique o [log de debug](#debug-hooks). Escolha a correção que corresponde ao seu hook:964Se o erro também disser `PowerShell started no program`, comece pelas [correções para um `command` composto apenas de strings entre aspas](#powershell-started-no-program), que o PowerShell imprime em vez de executar.

965 965 

966* **A ação deve prosseguir quando o hook falha**: adicione [`"onFailure": "continue"`](#block-the-action-when-a-hook-fails) ao hook966Sem Git Bash, qualquer código de saída diferente de 0 ou 2 desse hook conta como uma [falha](#block-the-action-when-a-hook-fails), mesmo quando ele imprime JSON que não nega a chamada. Para descobrir por que o hook falhou, verifique o [log de debug](#debug-hooks). Então escolha a correção que corresponde ao seu hook:

967* **O hook é escrito para Bash**: um hook em [forma shell](#exec-form-and-shell-form) sem `shell` definido é executado no PowerShell quando o Git Bash não está instalado, onde um script escrito para Bash pode não funcionar como foi escrito. Instale o [Git for Windows](https://git-scm.com/downloads/win), ou defina [`CLAUDE_CODE_GIT_BASH_PATH`](https://code.claude.com/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ão967 

968* **A chamada deve prosseguir quando o hook falha**: adicione [`"onFailure": "continue"`](#block-the-action-when-a-hook-fails) ao hook

969* **O hook sai com 1 para avisar, mas deve bloquear quando trava**: com `"onFailure": "continue"`, a chamada prossegue com o código de saída 1, seja um aviso ou uma falha. Adicione `"onFailure": "block"` em vez disso, e faça o script sair com 0 onde ele avisa, para que essas chamadas prossigam. Para ainda mostrar o aviso em `PreToolUse`, imprima-o em stdout no campo [`systemMessage`](#json-output) de um único objeto JSON.

970* **O hook é escrito para Bash**: sem Git Bash, um hook em [forma shell](#exec-form-and-shell-form) sem `shell` definido é executado no PowerShell, onde pode falhar. Instale o [Git for Windows](https://git-scm.com/downloads/win), ou defina [`CLAUDE_CODE_GIT_BASH_PATH`](https://code.claude.com/docs/pt/env-vars) se o Git Bash estiver instalado em um local onde o Claude Code não o encontra. Então inicie uma nova sessão.

968* **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, e adicione `"onFailure": "block"`. 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 timeout971* **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, e adicione `"onFailure": "block"`. 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

969* **O hook sai com 1 para avisar, mas deve bloquear quando trava**: com `"onFailure": "continue"`, a chamada prossegue com o código de saída 1, seja um aviso ou uma falha. Adicione `"onFailure": "block"` em vez disso, e termine o script com código de saída 0 onde ele avisa, para que essas chamadas prossigam. Para mostrar o aviso em `PreToolUse` após o código de saída 0, imprima-o em stdout no campo [`systemMessage`](#json-output) de um único objeto JSON

970* **Um hook de proteção em PowerShell que deve bloquear em caso de falha**: com `onFailure` não definido, ele deixa de fazer isso assim que o Git for Windows é instalado e o Claude Code encontra o Git Bash. Adicione `"onFailure": "block"` para que uma falha ou um timeout bloqueie a chamada com ou sem Git Bash. Defina também `"shell": "powershell"` para que o hook continue sendo executado no PowerShell a partir de então, em vez de no Git Bash972* **Um hook de proteção em PowerShell que deve bloquear em caso de falha**: com `onFailure` não definido, ele deixa de fazer isso assim que o Git for Windows é instalado e o Claude Code encontra o Git Bash. Adicione `"onFailure": "block"` para que uma falha ou um timeout bloqueie a chamada com ou sem Git Bash. Defina também `"shell": "powershell"` para que o hook continue sendo executado no PowerShell a partir de então, em vez de no Git Bash

971 973 

972Para 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.

973 

974Antes da v2.1.309, a mensagem dizia `blocking 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.`974Antes da v2.1.309, a mensagem dizia `blocking 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.`

975 975 

976#### PowerShell started no program

977 

978Um hook com este erro foi executado no PowerShell, que imprime um `command` composto apenas de strings entre aspas, como `"command": "\"C:\\Tools\\guard.exe\""`, em vez de executá-lo.

979 

980* **Para imprimir texto, como JSON**: defina `"shell": "powershell"`, e o hook sai com 0

981* **Para executar um arquivo `.ps1`, `.cmd` ou `.bat`, ou um `.exe` cujo caminho contém uma variável**: defina `"shell": "powershell"` e coloque `&` antes do caminho entre aspas. Deixe `$HOME` como está escrito, e escreva variáveis de ambiente da mesma forma que o [exemplo `check.ps1`](#reference-scripts-by-path-in-powershell-hooks) escreve `$env:CLAUDE_PROJECT_DIR`

982* **Para executar um único `.exe` em um caminho sem `$`**: remova as aspas internas de `command` e então aplique a [correção para um hook que executa um único `.exe`](#failed-hooks-on-windows-without-git-bash), escrevendo `"args": []` se o programa não receber argumentos

983* **Para executar um script escrito para Bash**: aplique a [correção para um hook escrito para Bash](#failed-hooks-on-windows-without-git-bash)

984 

976#### Comportamento de código de saída 2 por evento985#### Comportamento de código de saída 2 por evento

977 986 

978Código de saída 2 é a forma de um hook sinalizar "pare, não faça isso". O efeito depende do evento, porque alguns eventos representam ações que podem ser bloqueadas (como uma chamada de ferramenta que ainda não aconteceu) e outros representam coisas que já aconteceram ou não podem ser prevenidas.987Código de saída 2 é a forma de um hook sinalizar "pare, não faça isso". O efeito depende do evento, porque alguns eventos representam ações que podem ser bloqueadas (como uma chamada de ferramenta que ainda não aconteceu) e outros representam coisas que já aconteceram ou não podem ser prevenidas.


4187}4196}

4188```4197```

4189 4198 

4199### Referenciar scripts por caminho em hooks do PowerShell

4200 

4190Para referenciar o diretório raiz do projeto a partir de um comando em forma de shell do PowerShell, escreva `${CLAUDE_PROJECT_DIR}` ou `$env:CLAUDE_PROJECT_DIR`. Claude Code reescreve os espaços reservados `${CLAUDE_PROJECT_DIR}`, `${CLAUDE_PLUGIN_ROOT}` e `${CLAUDE_PLUGIN_DATA}` em um comando em forma de shell do PowerShell para a forma `${env:NAME}` do PowerShell, independentemente de o hook estar definido em `settings.json`, um plugin ou uma skill. PowerShell então resolve o valor do ambiente exportado após análise, então o espaço reservado funciona dentro de strings entre aspas duplas, mas não dentro de strings entre aspas simples, onde PowerShell nunca expande variáveis.4201Para referenciar o diretório raiz do projeto a partir de um comando em forma de shell do PowerShell, escreva `${CLAUDE_PROJECT_DIR}` ou `$env:CLAUDE_PROJECT_DIR`. Claude Code reescreve os espaços reservados `${CLAUDE_PROJECT_DIR}`, `${CLAUDE_PLUGIN_ROOT}` e `${CLAUDE_PLUGIN_DATA}` em um comando em forma de shell do PowerShell para a forma `${env:NAME}` do PowerShell, independentemente de o hook estar definido em `settings.json`, um plugin ou uma skill. PowerShell então resolve o valor do ambiente exportado após análise, então o espaço reservado funciona dentro de strings entre aspas duplas, mas não dentro de strings entre aspas simples, onde PowerShell nunca expande variáveis.

4191 4202 

4192Não escreva a forma nua `$CLAUDE_PROJECT_DIR` em um hook do PowerShell. PowerShell a analisa como uma variável local indefinida e a resolve para `$null`, o que deixa o caminho do script sem seu prefixo de diretório raiz do projeto. Claude Code não reescreve essa forma; em vez disso, registra um aviso no [log de depuração](#debug-hooks).4203Não escreva a forma nua `$CLAUDE_PROJECT_DIR` em um hook do PowerShell. PowerShell a analisa como uma variável local indefinida e a resolve para `$null`, o que deixa o caminho do script sem seu prefixo de diretório raiz do projeto. Claude Code não reescreve essa forma; em vez disso, registra um aviso no [log de depuração](#debug-hooks).

jetbrains.md +1 −1

Details

61/ide61/ide

62```62```

63 63 

64Quando a conexão for bem-sucedida, Claude Code confirma com uma mensagem como `Connected to IntelliJ IDEA.` Se Claude Code detectar um IDE em execução que não tenha o plugin, `/ide` instala o plugin para você e pede que você reinicie o IDE.64Quando a conexão for bem-sucedida, Claude Code confirma com uma mensagem como `Connected to IntelliJ IDEA.`

65 65 

66Se você deseja que Claude tenha acesso aos mesmos arquivos do seu IDE, inicie Claude Code no mesmo diretório que a raiz do projeto do seu IDE.66Se você deseja que Claude tenha acesso aos mesmos arquivos do seu IDE, inicie Claude Code no mesmo diretório que a raiz do projeto do seu IDE.

67 67 

Details

519| Erros `400` em cada solicitação, nas próprias palavras do gateway rejeitando um esquema de entrada de ferramenta ou seu `pattern`, em Claude Code v2.1.265 até v2.1.267 | Em um lançamento gradual nessas versões, o esquema da [ferramenta Artifact](https://code.claude.com/docs/pt/artifacts.md#availability) carrega uma expressão regular com classes de caracteres Unicode `\p{...}`. A API Anthropic aceita, mas um gateway ou upstream que verifica o `pattern` de cada esquema de ferramenta com seu próprio mecanismo de regex rejeita toda a solicitação | Atualize para v2.1.268 ou posterior, que não envia a expressão regular. Em uma versão afetada, [desative artefatos](https://code.claude.com/docs/pt/artifacts.md#disable-artifacts), que remove a ferramenta e seu esquema das solicitações |519| Erros `400` em cada solicitação, nas próprias palavras do gateway rejeitando um esquema de entrada de ferramenta ou seu `pattern`, em Claude Code v2.1.265 até v2.1.267 | Em um lançamento gradual nessas versões, o esquema da [ferramenta Artifact](https://code.claude.com/docs/pt/artifacts.md#availability) carrega uma expressão regular com classes de caracteres Unicode `\p{...}`. A API Anthropic aceita, mas um gateway ou upstream que verifica o `pattern` de cada esquema de ferramenta com seu próprio mecanismo de regex rejeita toda a solicitação | Atualize para v2.1.268 ou posterior, que não envia a expressão regular. Em uma versão afetada, [desative artefatos](https://code.claude.com/docs/pt/artifacts.md#disable-artifacts), que remove a ferramenta e seu esquema das solicitações |

520| Erros `400` em cada solicitação, nas próprias palavras do gateway rejeitando um tipo de ferramenta não reconhecido, como `Input tag 'advisor_20260301'`, em Claude Code v2.1.275 | Em um lançamento gradual nessa versão, as solicitações carregam uma entrada de [ferramenta advisor](https://code.claude.com/docs/pt/advisor.md) mesmo com o advisor desativado. A API Anthropic aceita, mas um gateway ou upstream que valida tipos de ferramenta rejeita toda a solicitação; um que [encaminha campos de corpo de solicitação inalterados](https://code.claude.com/docs/pt/llm-gateway-protocol.md#forward-as-open-lists) passa sem ser afetado. A entrada é uma declaração que não carrega conteúdo de conversa | Atualize para v2.1.276 ou posterior, que não envia a entrada atrás de um gateway `ANTHROPIC_BASE_URL` a menos que você ative o advisor. Em v2.1.275, defina [`CLAUDE_CODE_DISABLE_ADVISOR_TOOL=1`](https://code.claude.com/docs/pt/env-vars), que remove a entrada das solicitações |520| Erros `400` em cada solicitação, nas próprias palavras do gateway rejeitando um tipo de ferramenta não reconhecido, como `Input tag 'advisor_20260301'`, em Claude Code v2.1.275 | Em um lançamento gradual nessa versão, as solicitações carregam uma entrada de [ferramenta advisor](https://code.claude.com/docs/pt/advisor.md) mesmo com o advisor desativado. A API Anthropic aceita, mas um gateway ou upstream que valida tipos de ferramenta rejeita toda a solicitação; um que [encaminha campos de corpo de solicitação inalterados](https://code.claude.com/docs/pt/llm-gateway-protocol.md#forward-as-open-lists) passa sem ser afetado. A entrada é uma declaração que não carrega conteúdo de conversa | Atualize para v2.1.276 ou posterior, que não envia a entrada atrás de um gateway `ANTHROPIC_BASE_URL` a menos que você ative o advisor. Em v2.1.275, defina [`CLAUDE_CODE_DISABLE_ADVISOR_TOOL=1`](https://code.claude.com/docs/pt/env-vars), que remove a entrada das solicitações |

521| Modelos faltando do seletor `/model` | Nomes de modelo de gateway não estão na lista integrada de Claude Code, ou Claude Code está mostrando um lineup [`modelPicker`](https://code.claude.com/docs/pt/settings-reference#modelpicker) que substitui as opções integradas | Ative [descoberta de modelo de gateway](#add-gateway-models-to-the-model-picker) ou adicione nomes com as variáveis de [configuração de modelo](https://code.claude.com/docs/pt/model-config.md). Se Claude Code mostrar um lineup `modelPicker` substituto, adicione os modelos de gateway a ele, ou peça ao seu administrador para adicioná-los quando as configurações gerenciadas o fornecerem |521| Modelos faltando do seletor `/model` | Nomes de modelo de gateway não estão na lista integrada de Claude Code, ou Claude Code está mostrando um lineup [`modelPicker`](https://code.claude.com/docs/pt/settings-reference#modelpicker) que substitui as opções integradas | Ative [descoberta de modelo de gateway](#add-gateway-models-to-the-model-picker) ou adicione nomes com as variáveis de [configuração de modelo](https://code.claude.com/docs/pt/model-config.md). Se Claude Code mostrar um lineup `modelPicker` substituto, adicione os modelos de gateway a ele, ou peça ao seu administrador para adicioná-los quando as configurações gerenciadas o fornecerem |

522| `/fast` relata `Fast mode unavailable due to network connectivity issues` enquanto as solicitações de inferência funcionam | A verificação de disponibilidade do [modo rápido](https://code.claude.com/docs/pt/fast-mode.md) vai diretamente para `api.anthropic.com` e não segue `ANTHROPIC_BASE_URL`, portanto a saída direta bloqueada falha na verificação. A mesma mensagem aparece em uma rede aberta quando a verificação apresenta uma chave emitida por gateway de `ANTHROPIC_API_KEY` ou um `apiKeyHelper` e Anthropic a rejeita | Coloque na lista de permissões `api.anthropic.com` se a saída estiver bloqueada, ou defina uma variável de skip; para uma chave de gateway rejeitada apenas as variáveis de skip ajudam. Consulte [usar modo rápido atrás de proxies e gateways LLM](https://code.claude.com/docs/pt/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |522| `/fast` relata `Fast mode unavailable due to network connectivity issues` enquanto as requisições de inferência funcionam | A verificação de disponibilidade do [modo rápido](https://code.claude.com/docs/pt/fast-mode.md) vai diretamente para `api.anthropic.com` e não segue `ANTHROPIC_BASE_URL`, portanto a saída direta bloqueada falha na verificação | Adicione `api.anthropic.com` à allowlist se a saída estiver bloqueada, ou defina uma variável de skip. Consulte [usar modo rápido atrás de proxies e gateways LLM](https://code.claude.com/docs/pt/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |

523| `/fast` relata `Fast mode has been disabled by your organization` em uma sessão autenticada com `ANTHROPIC_AUTH_TOKEN`, mesmo que a organização tenha modo rápido ativado | A verificação de disponibilidade requer um login claude.ai ou uma chave de API Anthropic; com apenas um token de portador, Claude Code trata o modo rápido como desativado sem enviar a verificação | Defina `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1`; consulte [usar modo rápido atrás de proxies e gateways LLM](https://code.claude.com/docs/pt/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |523| `/fast` relata `Fast mode is currently unavailable` em uma sessão que se autentica com uma chave emitida pelo gateway em `ANTHROPIC_API_KEY` | Enquanto `ANTHROPIC_BASE_URL` aponta para seu gateway, Claude Code não envia para `api.anthropic.com` uma chave que não esteja no formato de uma chave de API Anthropic. A verificação de disponibilidade do [modo rápido](https://code.claude.com/docs/pt/fast-mode.md) então não é enviada e, sem uma verificação anterior bem-sucedida em cache, Claude Code trata o modo rápido como indisponível | Defina `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1`; consulte [usar modo rápido atrás de proxies e gateways LLM](https://code.claude.com/docs/pt/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |

524| `/fast` relata `Fast mode has been disabled by your organization` em uma sessão autenticada com `ANTHROPIC_AUTH_TOKEN`, mesmo que a organização tenha modo rápido ativado | A verificação de disponibilidade requer um login claude.ai ou uma chave de API; com apenas um token de portador, Claude Code trata o modo rápido como desativado sem enviar a verificação | Defina `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1`; consulte [usar modo rápido atrás de proxies e gateways LLM](https://code.claude.com/docs/pt/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |

524| Claude Code pede para você fazer login mesmo que o [teste curl](#verify-the-connection) tenha sucesso | O CLI não tem credencial própria: uma URL base alcançável não é uma, e em uma sessão interativa um bloco `env` no `.claude/settings.json` ou `.claude/settings.local.json` de um projeto se aplica apenas após o assistente de primeira execução e [prompt de confiança](https://code.claude.com/docs/pt/permissions.md#what-runs-before-you-trust-a-folder) | Defina `ANTHROPIC_AUTH_TOKEN` em algum lugar que Claude Code leia antes da configuração de primeira execução: uma exportação de shell, o bloco `env` em `~/.claude/settings.json` ou configurações gerenciadas |525| Claude Code pede para você fazer login mesmo que o [teste curl](#verify-the-connection) tenha sucesso | O CLI não tem credencial própria: uma URL base alcançável não é uma, e em uma sessão interativa um bloco `env` no `.claude/settings.json` ou `.claude/settings.local.json` de um projeto se aplica apenas após o assistente de primeira execução e [prompt de confiança](https://code.claude.com/docs/pt/permissions.md#what-runs-before-you-trust-a-folder) | Defina `ANTHROPIC_AUTH_TOKEN` em algum lugar que Claude Code leia antes da configuração de primeira execução: uma exportação de shell, o bloco `env` em `~/.claude/settings.json` ou configurações gerenciadas |

525| `ANTHROPIC_API_KEY` está definido mas ignorado, sem prompt | A chave precisa de uma aprovação única em sessões interativas, e uma chave previamente recusada é ignorada sem perguntar novamente | Ative-a em `/config` com a opção `Use custom API key` |526| `ANTHROPIC_API_KEY` está definido mas ignorado, sem prompt | A chave precisa de uma aprovação única em sessões interativas, e uma chave previamente recusada é ignorada sem perguntar novamente | Ative-a em `/config` com a opção `Use custom API key` |

526| `This machine's managed settings require a first-party login`, ou [`Administrator policy requires a Cloud gateway sign-in`](https://code.claude.com/docs/pt/errors#administrator-policy-requires-a-cloud-gateway-sign-in) quando configurações gerenciadas definem `forceLoginMethod` como `"gateway"` ou também definem `forceLoginGatewayUrl` | Configurações gerenciadas incluem `forceLoginMethod` ou `forceLoginOrgUUID`, que não podem coexistir com `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN` ou `apiKeyHelper` | Seu administrador deve remover `forceLoginMethod`, `forceLoginOrgUUID` e `forceLoginGatewayUrl` das configurações gerenciadas para usar credenciais de gateway, ou remover a credencial de gateway e usar o login que as configurações gerenciadas exigem. Os dois não podem ser combinados |527| `This machine's managed settings require a first-party login`, ou [`Administrator policy requires a Cloud gateway sign-in`](https://code.claude.com/docs/pt/errors#administrator-policy-requires-a-cloud-gateway-sign-in) quando configurações gerenciadas definem `forceLoginMethod` como `"gateway"` ou também definem `forceLoginGatewayUrl` | Configurações gerenciadas incluem `forceLoginMethod` ou `forceLoginOrgUUID`, que não podem coexistir com `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN` ou `apiKeyHelper` | Seu administrador deve remover `forceLoginMethod`, `forceLoginOrgUUID` e `forceLoginGatewayUrl` das configurações gerenciadas para usar credenciais de gateway, ou remover a credencial de gateway e usar o login que as configurações gerenciadas exigem. Os dois não podem ser combinados |

mcp.md +3 −3

Details

384Essas novas tentativas não se aplicam nestes casos:384Essas novas tentativas não se aplicam nestes casos:

385 385 

386* A primeira conexão de um servidor stdio. Para tentá-la novamente, veja [Servidores stdio que saem ou falham ao iniciar](#stdio-servers-that-exit-or-fail-to-start)386* A primeira conexão de um servidor stdio. Para tentá-la novamente, veja [Servidores stdio que saem ou falham ao iniciar](#stdio-servers-that-exit-or-fail-to-start)

387* Primeira conexão de um servidor WebSocket387* A primeira conexão de um servidor WebSocket. Para tentar novamente em uma sessão interativa no terminal, selecione **Reconnect** no menu do servidor em `/mcp`

388* Um erro de autenticação ou não encontrado, porque requer uma mudança de configuração para resolver. Quando um [`headersHelper`](#use-dynamic-headers-for-custom-authentication) é a única fonte do servidor do cabeçalho `Authorization`, Claude Code tenta novamente um erro de autenticação mesmo assim, porque re-executa o helper em cada tentativa e pode pegar uma credencial fresca388* Um erro de autenticação ou não encontrado, porque requer uma mudança de configuração para resolver. Quando um [`headersHelper`](#use-dynamic-headers-for-custom-authentication) é a única fonte do servidor do cabeçalho `Authorization`, Claude Code tenta novamente um erro de autenticação mesmo assim, porque re-executa o helper em cada tentativa e pode pegar uma credencial fresca

389 389 

390#### Servidores stdio que saem ou falham ao iniciar390#### Servidores stdio que saem ou falham ao iniciar


403 403 

404#### Tentar novamente servidores com falha você mesmo404#### Tentar novamente servidores com falha você mesmo

405 405 

406Para tentar novamente todos os servidores que falharam ou precisam de autenticação, execute `/mcp reconnect all`. No terminal interativo, isso requer Claude Code v2.1.284 ou posterior, e versões anteriores imprimem `MCP server "all" not found` lá.406Para tentar novamente todos os servidores que falharam ou precisam de autenticação, execute `/mcp reconnect all` no prompt do Claude Code em uma sessão interativa no terminal. Isso requer o Claude Code v2.1.284 ou posterior. Versões anteriores imprimem `MCP server "all" not found`.

407 407 

408#### Como Claude descobre que um servidor falhou408#### Como Claude descobre que um servidor falhou

409 409 


1332 1332 

1333Os servidores do claude.ai aparecem na lista com indicadores mostrando que vêm do claude.ai.1333Os servidores do claude.ai aparecem na lista com indicadores mostrando que vêm do claude.ai.

1334 1334 

1335A Anthropic também fornece alguns conectores por conta própria, sem que você ou um administrador precise adicioná-los. Em contas nas quais o [Claude Docs](https://code.claude.com/docs/pt/artifacts.md#write-a-document-with-claude-docs) está disponível, `/mcp` lista `claude.ai Claude Docs` sem nenhuma configuração, e o Claude o usa quando você pede um documento destinado a outras pessoas. Para desativá-lo, adicione uma entrada `serverName` de `"claude.ai Claude Docs"` a `deniedMcpServers` ou use o botão de alternância do `/mcp`, ambos descritos em [Desativar conectores do claude.ai](#disable-claude-ai-connectors).1335A Anthropic também fornece alguns conectores por conta própria, sem que você ou um administrador precise adicioná-los. Em contas nas quais o [Claude Docs](https://code.claude.com/docs/pt/artifacts.md#write-a-document-with-claude-docs) está disponível, `/mcp` lista `claude.ai Claude Docs` sem nenhuma configuração, e o Claude o usa quando você pede um documento destinado a outras pessoas. Para desativar apenas este conector, consulte [Desativar conectores do claude.ai](#disable-claude-ai-connectors).

1336 1336 

1337O Claude Code marca um conector como `managed` no `/mcp` e no gerenciador do [`/plugin`](https://code.claude.com/docs/pt/plugins/install) quando sua organização gerencia a autenticação dele no claude.ai. O status de gerenciado não altera a forma como o Claude Code se conecta ao conector nem como aplica os [controles de ferramentas](#organization-controls-on-connector-tools) da sua organização.1337O Claude Code marca um conector como `managed` no `/mcp` e no gerenciador do [`/plugin`](https://code.claude.com/docs/pt/plugins/install) quando sua organização gerencia a autenticação dele no claude.ai. O status de gerenciado não altera a forma como o Claude Code se conecta ao conector nem como aplica os [controles de ferramentas](#organization-controls-on-connector-tools) da sua organização.

1338 1338 

model-config.md +7 −2

Details

349 349 

350Quando as configurações gerenciadas que Claude Code aplica definem `availableModels`, essa lista sozinha se aplica, além de uma [plataforma host que fornece a sua própria](https://code.claude.com/docs/pt/settings.md#exceptions-to-managed-settings-precedence): entradas em configurações de usuário, projeto ou local não podem estendê-la, e Claude Code nunca mescla `availableModels` entre fontes gerenciadas; [como Claude Code combina fontes gerenciadas](https://code.claude.com/docs/pt/managed-settings.md#how-claude-code-combines-managed-sources) diz qual lista de fonte se aplica. Caso contrário, listas de configurações de usuário, projeto e local são [concatenadas e desduplicadas](https://code.claude.com/docs/pt/settings.md#settings-precedence) como outras configurações de matriz. Antes de Claude Code v2.1.175, entradas de escopos de precedência mais baixa se mesclavam na lista gerenciada em vez de serem substituídas por ela.350Quando as configurações gerenciadas que Claude Code aplica definem `availableModels`, essa lista sozinha se aplica, além de uma [plataforma host que fornece a sua própria](https://code.claude.com/docs/pt/settings.md#exceptions-to-managed-settings-precedence): entradas em configurações de usuário, projeto ou local não podem estendê-la, e Claude Code nunca mescla `availableModels` entre fontes gerenciadas; [como Claude Code combina fontes gerenciadas](https://code.claude.com/docs/pt/managed-settings.md#how-claude-code-combines-managed-sources) diz qual lista de fonte se aplica. Caso contrário, listas de configurações de usuário, projeto e local são [concatenadas e desduplicadas](https://code.claude.com/docs/pt/settings.md#settings-precedence) como outras configurações de matriz. Antes de Claude Code v2.1.175, entradas de escopos de precedência mais baixa se mesclavam na lista gerenciada em vez de serem substituídas por ela.

351 351 

352Dentro da lista efetiva, uma entrada nomeando um modelo específico em uma família, seja um prefixo de versão ou um ID de modelo completo, desabilita a entrada de curinga da família: `["sonnet", "claude-sonnet-4-5"]` permite apenas versões Sonnet 4.5, não cada modelo Sonnet.352Dentro da lista efetiva, uma entrada nomeando um modelo específico em uma família, seja um prefixo de versão ou um ID de modelo completo, desabilita a entrada de curinga dessa família. Por exemplo, com `["sonnet", "claude-sonnet-4-5"]`, os usuários podem escolher apenas os IDs de modelo que `claude-sonnet-4-5` [corresponde](#restrict-model-selection), não todos os modelos Sonnet.

353 353 

354### IDs de modelo Mantle354### IDs de modelo Mantle

355 355 


947>947>

948> Uma allowlist `availableModels` entregue através de [MDM ou um arquivo de configurações gerenciado](https://code.claude.com/docs/pt/managed-settings.md#delivery-mechanisms) ainda se aplica ao usar provedores de terceiros; [configurações gerenciadas pelo servidor não são entregues lá](https://code.claude.com/docs/pt/server-managed-settings.md#platform-availability).948> Uma allowlist `availableModels` entregue através de [MDM ou um arquivo de configurações gerenciado](https://code.claude.com/docs/pt/managed-settings.md#delivery-mechanisms) ainda se aplica ao usar provedores de terceiros; [configurações gerenciadas pelo servidor não são entregues lá](https://code.claude.com/docs/pt/server-managed-settings.md#platform-availability).

949>949>

950> A filtragem corresponde a um alias de modelo como `opus`, um prefixo de versão como `claude-opus-4-8`, ou o ID de modelo completo em forma de provedor. Prefixos específicos do provedor como `us.anthropic.` não são removidos, então para permitir um modelo específico, liste seu ID completo em forma de provedor, ou mapeie através de [`modelOverrides`](#override-model-ids-per-version). Para um modelo fixado, esse ID é o valor que você define em sua variável `ANTHROPIC_DEFAULT_*_MODEL`. Qualquer sufixo `[1m]` é removido tanto da entrada da allowlist quanto do modelo solicitado antes da correspondência.950> A filtragem corresponde a um alias de modelo como `opus`, um prefixo de versão como `claude-opus-4-8`, ou o ID de modelo completo em forma de provedor. Prefixos específicos do provedor como `us.anthropic.` não são removidos, então para permitir um modelo específico, mapeie-o através de [`modelOverrides`](#override-model-ids-per-version) ou liste seu ID completo em forma de provedor:

951>

952> * **Google Cloud's Agent Platform**: quando o ID que Claude Code solicita contém uma data com `@`, como `claude-sonnet-4-5@20250929`, inclua a data em sua entrada da allowlist. Sozinho, `claude-sonnet-4-5` não corresponde a esse ID em nenhuma das configurações de [`availableModelsMatch`](https://code.claude.com/docs/pt/settings-reference#availablemodelsmatch).

953> * **Modelos fixados**: liste o valor que você define na variável `ANTHROPIC_DEFAULT_*_MODEL` do modelo

954>

955> Qualquer sufixo `[1m]` é removido tanto da entrada da allowlist quanto do modelo solicitado antes da correspondência.

951 956 

952### Personalizar exibição e capacidades do modelo fixado957### Personalizar exibição e capacidades do modelo fixado

953 958 

Details

605 605 

606* `prompt.id`: UUID que correlaciona um prompt do usuário com todos os eventos subsequentes até o próximo prompt. Consulte [Atributos de correlação de eventos](#event-correlation-attributes).606* `prompt.id`: UUID que correlaciona um prompt do usuário com todos os eventos subsequentes até o próximo prompt. Consulte [Atributos de correlação de eventos](#event-correlation-attributes).

607* `workspace.host_paths`: diretórios do workspace do host selecionados no aplicativo desktop, como um array de strings607* `workspace.host_paths`: diretórios do workspace do host selecionados no aplicativo desktop, como um array de strings

608* `workflow.run_id`: identificador da execução, com prefixo `wf_`, nos eventos de API e de ferramenta emitidos por agentes que pertencem a uma execução da ferramenta [Workflow](https://code.claude.com/docs/pt/workflows.md). Filtrar eventos por um `workflow.run_id` reconstrói as requisições de API e os resultados de ferramenta dessa execução. O identificador abrange os agentes que o script do workflow gera e quaisquer agentes que estes gerem, como invocações de skills. Ele corresponde ao identificador de execução informado no resultado da ferramenta Workflow. Ausente em todos os outros eventos.608* `workflow.run_id`: identificador de execução, com o prefixo `wf_`, nos eventos de API e de ferramenta emitidos por agentes que pertencem a uma execução da ferramenta [Workflow](https://code.claude.com/docs/pt/workflows.md). Filtrar eventos por um `workflow.run_id` reconstrói as requisições de API e os resultados de ferramenta dessa execução. O identificador abrange os agentes que o script do workflow cria e quaisquer agentes que esses criem por sua vez, como invocações de skills. Ele corresponde ao identificador de execução informado no resultado da ferramenta Workflow.

609* `workflow.name`: nome do workflow, o `meta.name` do seu script, emitido junto com `workflow.run_id`. Nomes de workflows integrados aparecem literalmente quando a execução roda o script integrado sem modificações. Nomes criados pelo usuário, incluindo cópias editadas de scripts integrados, são substituídos por `custom`, a menos que `OTEL_LOG_TOOL_DETAILS=1` esteja definido.609* `workflow.name`: nome do workflow, o `meta.name` do seu script, emitido junto com `workflow.run_id`. Nomes de workflows integrados aparecem literalmente quando a execução roda o script integrado sem modificações. Nomes criados pelo usuário, incluindo cópias editadas de scripts integrados, são substituídos por `custom`, a menos que `OTEL_LOG_TOOL_DETAILS=1` esteja definido.

610* `agent_id`: identificador do [subagente](https://code.claude.com/docs/pt/sub-agents.md) que gerou o evento, como `a3f2c1b4d5e6f7a80`. Os eventos que o carregam incluem os eventos de API e de ferramenta de um subagente, seus eventos [`assistant_response`](#assistant-response-event) e [`subagent_completed`](#subagent-completed-event) para o subagente concluído. Ausente em eventos da sessão principal e de [colegas de equipe em processo](https://code.claude.com/docs/pt/agent-teams.md#choose-a-display-mode). O [`agent_id` do span](#span-attributes) do subagente é o mesmo valor, ou adiciona um rótulo após o `a` inicial, como em `acompact-3f2c1b4d5e6f7a80`. Requer Claude Code v2.1.310 ou posterior

611* `parent_agent_id`: o `agent_id` do agente que criou ou retomou por último o subagente que gerou o evento. Ausente quando esse agente é a sessão principal. Requer Claude Code v2.1.310 ou posterior

610 612 

611#### Atributos de repositório613#### Atributos de repositório

612 614 


755| `prompt.id` | Identificador UUID v4 que vincula todos os eventos produzidos durante o processamento de um único prompt do usuário |757| `prompt.id` | Identificador UUID v4 que vincula todos os eventos produzidos durante o processamento de um único prompt do usuário |

756| `event.sequence` | Contador baseado em 0 para ordenar eventos, contado por processo do Claude Code em vez de por sessão |758| `event.sequence` | Contador baseado em 0 para ordenar eventos, contado por processo do Claude Code em vez de por sessão |

757| `message.uuid` | UUID da mensagem conforme persistida na transcrição da sessão, os arquivos `~/.claude/projects/*/*.jsonl`. Presente em `assistant_response`, em `api_response_body` e em `user_prompt`, exceto em despachos de comandos, que podem produzir zero ou várias mensagens. Em `assistant_response` e `api_response_body`, esta é a entrada final da resposta na transcrição, à qual o `parentUuid` do próximo turno se encadeia. Requer Claude Code v2.1.274 ou posterior em `api_response_body` |759| `message.uuid` | UUID da mensagem conforme persistida na transcrição da sessão, os arquivos `~/.claude/projects/*/*.jsonl`. Presente em `assistant_response`, em `api_response_body` e em `user_prompt`, exceto em despachos de comandos, que podem produzir zero ou várias mensagens. Em `assistant_response` e `api_response_body`, esta é a entrada final da resposta na transcrição, à qual o `parentUuid` do próximo turno se encadeia. Requer Claude Code v2.1.274 ou posterior em `api_response_body` |

758| `request_id` | ID atribuído pelo servidor à requisição de API, lido do cabeçalho de resposta `request-id`, como `req_011...`. Em uma resposta sem cabeçalho `request-id`, como no [Amazon Bedrock](https://code.claude.com/docs/pt/amazon-bedrock.md), o valor vem do cabeçalho `x-amzn-requestid`. Presente em `api_request`, `api_error`, `api_refusal`, `assistant_response` e `api_response_body` quando a resposta carrega qualquer um dos cabeçalhos. Corresponde ao mesmo atributo no span de trace `llm_request`. A origem `x-amzn-requestid` requer Claude Code v2.1.282 ou posterior |760| `request_id` | ID atribuído pelo servidor à requisição de API, lido do cabeçalho de resposta `request-id`, como `req_011...`. Em uma resposta sem cabeçalho `request-id`, como no [Amazon Bedrock](https://code.claude.com/docs/pt/amazon-bedrock.md), o valor vem do cabeçalho `x-amzn-requestid`. Presente em `api_request`, `api_error`, `api_refusal`, `assistant_response`, `api_response_body`, [`tool_result`](#tool-result-event) e [`tool_decision`](#tool-decision-event) quando a resposta carrega qualquer um dos cabeçalhos. Corresponde ao mesmo atributo no span de trace `llm_request`. A origem `x-amzn-requestid` requer Claude Code v2.1.282 ou posterior |

759| `client_request_id` | UUID gerado pelo cliente enviado como o cabeçalho de requisição `x-client-request-id`. Presente em `api_request` e `api_error` em conexões de API próprias; ausente em backends de provedores terceiros e quando a requisição foi tentada novamente pelo fallback sem streaming. Emparelha uma requisição com sua resposta e permanece disponível para falhas, como timeouts, que nunca produziram um `request_id` do servidor. Corresponde ao mesmo atributo no span de trace `llm_request` |761| `client_request_id` | UUID gerado pelo cliente enviado como o cabeçalho de requisição `x-client-request-id`. Presente em `api_request` e `api_error` em conexões de API próprias; ausente em backends de provedores terceiros e quando a requisição foi tentada novamente pelo fallback sem streaming. Emparelha uma requisição com sua resposta e permanece disponível para falhas, como timeouts, que nunca produziram um `request_id` do servidor. Corresponde ao mesmo atributo no span de trace `llm_request` |

760 762 

761Para rastrear toda a atividade acionada por um único prompt, filtre seus eventos por um valor específico de `prompt.id`. Isso retorna o evento user\_prompt, quaisquer eventos api\_request e quaisquer eventos tool\_result que ocorreram durante o processamento desse prompt.763Para rastrear toda a atividade acionada por um único prompt, filtre seus eventos por um valor específico de `prompt.id`. Isso retorna o evento user\_prompt, quaisquer eventos api\_request e quaisquer eventos tool\_result que ocorreram durante o processamento desse prompt.


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

821* `tool_name`: Nome da ferramenta823* `tool_name`: Nome da ferramenta

822* `tool_use_id`: Identificador exclusivo desta invocação de ferramenta. Corresponde ao `tool_use_id` passado aos hooks, permitindo a correlação entre eventos OTel e dados capturados por hooks.824* `tool_use_id`: Identificador exclusivo desta invocação de ferramenta. Corresponde ao `tool_use_id` passado aos hooks, permitindo a correlação entre eventos OTel e dados capturados por hooks.

825* `request_id`: o [`request_id`](#event-correlation-attributes) da resposta de API que continha esta chamada de ferramenta, para que você possa unir a chamada aos eventos de API dessa resposta. Ausente quando essa resposta não tinha ID de requisição, ou quando nenhuma resposta de API continha a chamada. Requer Claude Code v2.1.310 ou posterior

823* `success`: `"true"` ou `"false"`826* `success`: `"true"` ou `"false"`

824* `duration_ms`: Tempo de execução em milissegundos827* `duration_ms`: Tempo de execução em milissegundos

825* `error_type`: String da categoria de erro quando a ferramenta falhou, como `"Error:ENOENT"` ou `"ShellError"`828* `error_type`: String da categoria de erro quando a ferramenta falhou, como `"Error:ENOENT"` ou `"ShellError"`


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

973* `tool_name`: Nome da ferramenta (por exemplo, "Read", "Edit", "Write", "NotebookEdit")976* `tool_name`: Nome da ferramenta (por exemplo, "Read", "Edit", "Write", "NotebookEdit")

974* `tool_use_id`: Identificador exclusivo desta invocação de ferramenta. Corresponde ao `tool_use_id` passado aos hooks, permitindo a correlação entre eventos OTel e dados capturados por hooks.977* `tool_use_id`: Identificador exclusivo desta invocação de ferramenta. Corresponde ao `tool_use_id` passado aos hooks, permitindo a correlação entre eventos OTel e dados capturados por hooks.

978* `request_id`: o [`request_id`](#event-correlation-attributes) da resposta de API que continha esta chamada de ferramenta, para que você possa unir a chamada aos eventos de API dessa resposta. Ausente quando essa resposta não tinha ID de requisição, ou quando nenhuma resposta de API continha a chamada. Requer Claude Code v2.1.310 ou posterior

975* `decision`: `"accept"` ou `"reject"`979* `decision`: `"accept"` ou `"reject"`

976* `tool_source`: Sempre presente. A procedência da ferramenta, como um conjunto fechado de valores definidos pela CLI:980* `tool_source`: Sempre presente. A procedência da ferramenta, como um conjunto fechado de valores definidos pela CLI:

977 * `"builtin"`: as próprias ferramentas da CLI981 * `"builtin"`: as próprias ferramentas da CLI


1024 * Para a ferramenta Skill: inclui `skill_name`1028 * Para a ferramenta Skill: inclui `skill_name`

1025 * Para a ferramenta Agent ou a ferramenta legada Task: inclui `subagent_type`1029 * Para a ferramenta Agent ou a ferramenta legada Task: inclui `subagent_type`

1026 1030 

1027Se você reduzir o `OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT` do SDK do OpenTelemetry para abaixo do número de atributos em um evento `tool_decision`, o SDK descarta os atributos que o Claude Code definiu por último. O SDK descarta `permission_mode` primeiro, `classifier_category` em segundo e `classifier_verdict` em terceiro, e descarta os outros atributos do evento somente depois desses três. Essa ordem requer Claude Code v2.1.302 ou posterior.1031Se você reduzir o `OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT` do SDK do OpenTelemetry para um valor abaixo do número de atributos de um evento `tool_decision`, o SDK descarta os atributos que o Claude Code definiu por último. O SDK descarta estes antes de qualquer outro atributo, nesta ordem, ignorando os que o evento não carrega:

1032 

10331. `parent_agent_id`

10342. `agent_id`

10353. `request_id`

10364. `permission_mode`

10375. `classifier_category`

10386. `classifier_verdict`

1039 

1040`permission_mode`, `classifier_category` e `classifier_verdict` são descartados nessa ordem no Claude Code v2.1.302 ou posterior. `parent_agent_id`, `agent_id` e `request_id` requerem v2.1.310 ou posterior.

1028 1041 

1029#### Evento de segurança1042#### Evento de segurança

1030 1043 

Details

240 240 

241Os dois hosts de ingestão do Datadog carregam apenas telemetria operacional opcional, e definir [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](https://code.claude.com/docs/pt/env-vars) desabilita ambos. Sessões em provedores de terceiros nunca enviam para esses hosts, mesmo quando uma plataforma define [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](https://code.claude.com/docs/pt/env-vars) e as métricas de telemetria são ativadas por padrão. Consulte [Serviços de telemetria](https://code.claude.com/docs/pt/data-usage.md#telemetry-services) para tudo que Claude Code envia e como desabilitá-lo antes de finalizar sua lista de permissões.241Os dois hosts de ingestão do Datadog carregam apenas telemetria operacional opcional, e definir [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](https://code.claude.com/docs/pt/env-vars) desabilita ambos. Sessões em provedores de terceiros nunca enviam para esses hosts, mesmo quando uma plataforma define [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](https://code.claude.com/docs/pt/env-vars) e as métricas de telemetria são ativadas por padrão. Consulte [Serviços de telemetria](https://code.claude.com/docs/pt/data-usage.md#telemetry-services) para tudo que Claude Code envia e como desabilitá-lo antes de finalizar sua lista de permissões.

242 242 

243### Roteamento por provedor de nuvem e gateway de LLM

244 

243Ao usar [Amazon Bedrock](https://code.claude.com/docs/pt/amazon-bedrock.md), [Agent Platform do Google Cloud](https://code.claude.com/docs/pt/google-vertex-ai.md), [Microsoft Foundry](https://code.claude.com/docs/pt/microsoft-foundry.md) ou uma sessão de [gateway de aplicativos Claude](https://code.claude.com/docs/pt/claude-apps-gateway) conectada, o tráfego de modelo e autenticação vão para seu provedor ou gateway em vez de `api.anthropic.com`, `claude.ai` ou `platform.claude.com`. A ferramenta WebFetch ainda chama `api.anthropic.com` para sua [verificação de segurança de domínio](https://code.claude.com/docs/pt/data-usage.md#webfetch-domain-safety-check) a menos que você defina `skipWebFetchPreflight: true` em [configurações](https://code.claude.com/docs/pt/settings.md).245Ao usar [Amazon Bedrock](https://code.claude.com/docs/pt/amazon-bedrock.md), [Agent Platform do Google Cloud](https://code.claude.com/docs/pt/google-vertex-ai.md), [Microsoft Foundry](https://code.claude.com/docs/pt/microsoft-foundry.md) ou uma sessão de [gateway de aplicativos Claude](https://code.claude.com/docs/pt/claude-apps-gateway) conectada, o tráfego de modelo e autenticação vão para seu provedor ou gateway em vez de `api.anthropic.com`, `claude.ai` ou `platform.claude.com`. A ferramenta WebFetch ainda chama `api.anthropic.com` para sua [verificação de segurança de domínio](https://code.claude.com/docs/pt/data-usage.md#webfetch-domain-safety-check) a menos que você defina `skipWebFetchPreflight: true` em [configurações](https://code.claude.com/docs/pt/settings.md).

244 246 

245Ao rotear através de um [gateway LLM](https://code.claude.com/docs/pt/llm-gateway) com [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/pt/llm-gateway-connect#set-the-base-url-and-credential), a verificação de disponibilidade do [modo rápido](https://code.claude.com/docs/pt/fast-mode.md) ainda chama `api.anthropic.com` em vez da URL base do gateway. A verificação honra um proxy HTTP configurado, portanto, quando um bloqueio de rede é a causa, uma entrada de lista de permissões para `api.anthropic.com` no proxy é a solução. Um bloqueio de rede falha na verificação apenas quando o host é inacessível mesmo através do proxy, e o modo rápido então relata um erro de conectividade. O mesmo erro de conectividade aparece quando a verificação apresenta uma credencial emitida pelo gateway que Anthropic rejeita; a lista de permissões não ajuda lá, já que nada está bloqueado. Consulte [usar modo rápido atrás de proxies e gateways LLM](https://code.claude.com/docs/pt/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) para as variáveis que o restauram.247Se seus desenvolvedores usam o [modo rápido](https://code.claude.com/docs/pt/fast-mode.md) atrás de um [gateway de LLM](https://code.claude.com/docs/pt/llm-gateway) definido com [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/pt/llm-gateway-connect#set-the-base-url-and-credential), mantenha `api.anthropic.com` acessível através do seu proxy. Quando Claude Code envia a verificação de disponibilidade do modo rápido, ela vai para esse host através de qualquer proxy HTTP configurado, nunca para o gateway. Para saber quando a verificação não é enviada, e qual variável restaura o modo rápido em cada caso, consulte [Usar o modo rápido atrás de proxies e gateways de LLM](https://code.claude.com/docs/pt/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways).

246 248 

247### Listas de permissões de IP da organização e saída de proxy249### Listas de permissões de IP da organização e saída de proxy

248 250 

Details

106 106 

107O código no módulo de hooks está aninhado profundamente demais, ou sua cadeia de importações é longa demais, para que Claude Code consiga carregá-lo. A linha começa com o nome do mod e `hooks module did not load:`, depois fornece o nome de um arquivo e este motivo.107O código no módulo de hooks está aninhado profundamente demais, ou sua cadeia de importações é longa demais, para que Claude Code consiga carregá-lo. A linha começa com o nome do mod e `hooks module did not load:`, depois fornece o nome de um arquivo e este motivo.

108 108 

109Procure nesse arquivo e nos arquivos alcançados por meio de suas importações a parte mais profundamente aninhada e reescreva-a para que fique menos aninhada, ou encurte a cadeia de importações. Se você instalou o mod e não o escreveu, peça ao autor que faça isso.109Procure nesse arquivo e nos arquivos alcançados por meio de suas importações a parte mais profundamente aninhada e reescreva-a para que fique menos aninhada, ou encurte a cadeia de importações. Se você não escreveu o mod, peça ao autor que o corrija.

110 110 

111### `the parser stopped` ou `the engine ran out of stack loading the file`111### `the parser stopped` ou `the engine ran out of stack loading the file`

112 112 

routines.md +20 −2

Details

25* Uma tarefa com apenas um acionador de API é executada quando você chama seu endpoint.25* Uma tarefa com apenas um acionador de API é executada quando você chama seu endpoint.

26* Uma tarefa com apenas um acionador do GitHub é executada quando ocorre um evento de repositório correspondente.26* Uma tarefa com apenas um acionador do GitHub é executada quando ocorre um evento de repositório correspondente.

27 27 

28As tarefas agendadas estão disponíveis nos planos Pro, Max, Team e Enterprise. Crie e gerencie-as em [claude.ai/code/routines](https://claude.ai/code/routines), ou a partir da CLI com `/schedule`. O nome anterior, rotinas, [ainda aparece](#where-the-name-routines-still-appears) no endereço web, na CLI e na API.28As tarefas agendadas estão disponíveis nos planos Pro, Max, Team e Enterprise. Crie e gerencie-as em [claude.ai/code/routines](https://claude.ai/code/routines), ou a partir da CLI com `/schedule`. O nome anterior, rotinas, [ainda aparece](#where-the-name-routines-still-appears).

29 29 

30> [!NOTE]30> [!NOTE]

31>31>


66 66 

67**1. Abrir a caixa de diálogo de criação**67**1. Abrir a caixa de diálogo de criação**

68 68 

69Acesse [claude.ai/code/routines](https://claude.ai/code/routines) e clique em **New task**. Se um menu abrir primeiro, selecione **Set up manually**. A caixa de diálogo **New scheduled task** é aberta. A outra opção do menu, **Create with Claude**, permite que você descreva a tarefa em um chat e deixe Claude criá-la.69Acesse [claude.ai/code/routines](https://claude.ai/code/routines) e clique em **New task** para abrir a caixa de diálogo **New scheduled task**. Verifique estas telas antes de continuar:

70 

71* Se o botão mostrar **New routine** em vez de **New task**, clique em **New routine** e continue com [Formulário de página inteira](#full-page-form).

72* No aplicativo Desktop, se um menu com **Local** e **Cloud** abrir, vá para [Formulário de página inteira](#full-page-form).

73* Se um menu abrir com **Create with Claude** e **Set up manually**, selecione **Set up manually** para abrir a caixa de diálogo. **Create with Claude** permite que você descreva a tarefa em um chat e deixe Claude criá-la.

74* Se uma página inteira abrir no lugar da caixa de diálogo, vá para [Formulário de página inteira](#full-page-form).

70 75 

71Se **Repositories** e **Environment** já estiverem visíveis quando a caixa de diálogo abrir, consulte [como essa caixa de diálogo é diferente](#dialog-with-repositories-and-environment-in-the-main-view). Caso contrário, esta caixa de diálogo também cria tarefas agendadas para o chat do claude.ai. Para que a sua seja o que a caixa de diálogo chama de tarefa do Claude Code, selecione um repositório ou adicione um acionador de evento do GitHub ou de API nas etapas a seguir. Esse tipo de tarefa executa o Claude Code em uma sessão na nuvem.76Se **Repositories** e **Environment** já estiverem visíveis quando a caixa de diálogo abrir, consulte [como essa caixa de diálogo é diferente](#dialog-with-repositories-and-environment-in-the-main-view). Caso contrário, esta caixa de diálogo também cria tarefas agendadas para o chat do claude.ai. Para que a sua seja o que a caixa de diálogo chama de tarefa do Claude Code, selecione um repositório ou adicione um acionador de evento do GitHub ou de API nas etapas a seguir. Esse tipo de tarefa executa o Claude Code em uma sessão na nuvem.

72 77 


126 131 

127Selecione o repositório antes de adicionar um acionador de evento do GitHub, porque esse acionador fica indisponível até que um repositório seja selecionado.132Selecione o repositório antes de adicionar um acionador de evento do GitHub, porque esse acionador fica indisponível até que um repositório seja selecionado.

128 133 

134#### Formulário de página inteira

135 

136No aplicativo Desktop, se um menu com **Local** e **Cloud** abrir, selecione **Cloud**. Uma página intitulada **New routine** ou **New scheduled task** é aberta. Preencha seus campos:

137 

138* **Name**: insira um nome.

139* **Instructions**: insira o prompt. Na mesma caixa, selecione o modelo, os repositórios e o ambiente. Para saber o que cada um controla, consulte as etapas em [Criar a partir da web](#create-from-the-web).

140* **Select a trigger**: selecione **Schedule**, **GitHub event** ou **API**. Para um cronograma, consulte [Adicionar um acionador de cronograma](#add-a-schedule-trigger). Para um [evento do GitHub](#add-a-github-trigger), selecione um repositório. Para um [acionador de API](#add-an-api-trigger), copie o token da caixa de diálogo **API token** que abre depois que você clica em **Create**, porque ele é mostrado uma única vez. Para combinar vários acionadores, clique em **Add another trigger**.

141* **Connectors**: todos os seus conectores conectados são incluídos por padrão, portanto remova aqueles de que a tarefa não precisa.

142 

143Se **Create** estiver indisponível, passe o cursor sobre ele para ver o que o formulário ainda precisa. Clique em **Create**, e a página de detalhes da tarefa é aberta.

144 

129### Criar a partir da CLI145### Criar a partir da CLI

130 146 

131Execute `/schedule` em qualquer sessão para criar uma tarefa agendada de forma conversacional. Você também pode passar uma descrição diretamente, para uma tarefa recorrente como `/schedule daily PR review at 9am` ou uma única como `/schedule clean up feature flag in one week`. Claude percorre as mesmas informações que a caixa de diálogo web coleta e, em seguida, salva a tarefa na sua conta. O comando também está disponível sob o alias `/routines`.147Execute `/schedule` em qualquer sessão para criar uma tarefa agendada de forma conversacional. Você também pode passar uma descrição diretamente, para uma tarefa recorrente como `/schedule daily PR review at 9am` ou uma única como `/schedule clean up feature flag in one week`. Claude percorre as mesmas informações que a caixa de diálogo web coleta e, em seguida, salva a tarefa na sua conta. O comando também está disponível sob o alias `/routines`.


152* **Execuções na hora cheia**: se você agendar uma execução exatamente na hora cheia, como 9:00, ela pode começar alguns minutos atrasada. Para começar próximo ao horário agendado, escolha alguns minutos após a hora, por exemplo 9:07.168* **Execuções na hora cheia**: se você agendar uma execução exatamente na hora cheia, como 9:00, ela pode começar alguns minutos atrasada. Para começar próximo ao horário agendado, escolha alguns minutos após a hora, por exemplo 9:07.

153* **Intervalos personalizados**: para uma cadência que as predefinições não oferecem, crie a tarefa e selecione **Custom** na [caixa de diálogo de edição](#edit-and-control-scheduled-tasks) dela. Em seguida, insira uma expressão cron, como `0 */2 * * *` para a cada duas horas. Para definir uma a partir da CLI, execute [`/schedule update`](#manage-scheduled-tasks-from-the-cli). Expressões que são executadas com mais frequência do que uma vez por hora são rejeitadas.169* **Intervalos personalizados**: para uma cadência que as predefinições não oferecem, crie a tarefa e selecione **Custom** na [caixa de diálogo de edição](#edit-and-control-scheduled-tasks) dela. Em seguida, insira uma expressão cron, como `0 */2 * * *` para a cada duas horas. Para definir uma a partir da CLI, execute [`/schedule update`](#manage-scheduled-tasks-from-the-cli). Expressões que são executadas com mais frequência do que uma vez por hora são rejeitadas.

154* **Fuso horário**: ao escolher uma frequência predefinida, insira o horário no seu fuso horário local.170* **Fuso horário**: ao escolher uma frequência predefinida, insira o horário no seu fuso horário local.

171* **Fuso horário da expressão cron**: quando a expressão tiver apenas os cinco campos, escreva as horas em UTC, de modo que `0 9 * * 1-5` seja executada às 9:00 AM UTC nos dias úteis. Se o campo começar com um prefixo `CRON_TZ=`, mantenha-o e escreva as horas no fuso indicado, ou exclua-o e escreva as horas em UTC.

155 172 

156#### Agendar uma execução única173#### Agendar uma execução única

157 174 


455 472 

456As tarefas agendadas antes se chamavam rotinas, e os seguintes lugares mantêm o nome anterior. Cada um deles se refere ao mesmo recurso:473As tarefas agendadas antes se chamavam rotinas, e os seguintes lugares mantêm o nome anterior. Cada um deles se refere ao mesmo recurso:

457 474 

475* **App**: em algumas contas, o item da barra lateral e o título da página exibem **Routines**, o botão exibe **New routine** e outros rótulos dizem routine. Para criar uma tarefa nesse caso, consulte [Formulário de página inteira](#full-page-form).

458* **Endereço web**: `claude.ai/code/routines`476* **Endereço web**: `claude.ai/code/routines`

459* **CLI**: o alias `/routines` para `/schedule`, a descrição do comando e as respostas do Claude enquanto ele configura uma tarefa477* **CLI**: o alias `/routines` para `/schedule`, a descrição do comando e as respostas do Claude enquanto ele configura uma tarefa

460* **API**: o caminho do endpoint `/fire`, seu cabeçalho beta, o `type` da resposta, a tag `<routine-fire-payload>` e a página de referência [Trigger a routine through the API](https://platform.claude.com/docs/en/api/claude-code/routines-fire)478* **API**: o caminho do endpoint `/fire`, seu cabeçalho beta, o `type` da resposta, a tag `<routine-fire-payload>` e a página de referência [Trigger a routine through the API](https://platform.claude.com/docs/en/api/claude-code/routines-fire)

sandboxing.md +13 −1

Details

537 537 

538* **No seu diretório de trabalho e nos diretórios acima dele**: os arquivos de configuração `.claude`, os diretórios `.claude/skills`, `.claude/agents`, `.claude/commands` e `.claude/hooks`, `.mcp.json` e os arquivos que o Claude Code executa por conta própria, como `.claude/workflows` e `.claude/scheduled_tasks.json`538* **No seu diretório de trabalho e nos diretórios acima dele**: os arquivos de configuração `.claude`, os diretórios `.claude/skills`, `.claude/agents`, `.claude/commands` e `.claude/hooks`, `.mcp.json` e os arquivos que o Claude Code executa por conta própria, como `.claude/workflows` e `.claude/scheduled_tasks.json`

539* **Somente no seu diretório de trabalho**: arquivos de inicialização do shell, como `.bashrc` e `.zshrc`, `.gitconfig`, os diretórios `.vscode` e `.idea`, e `hooks` e `config` dentro de `.git`539* **Somente no seu diretório de trabalho**: arquivos de inicialização do shell, como `.bashrc` e `.zshrc`, `.gitconfig`, os diretórios `.vscode` e `.idea`, e `hooks` e `config` dentro de `.git`

540* **Arquivos que transformariam seu diretório de trabalho em um repositório git bare**: `HEAD`, `objects` e `refs` no nível superior, além das entradas `config` e `hooks` existentes ali quando há um `HEAD` ao lado delas. Um arquivo chamado `config` é negado mesmo sem `HEAD`. No Linux e no WSL2, o sandbox exclui um arquivo `HEAD` ou um diretório `objects` ou `refs` de nível superior que apareça enquanto um comando em sandbox está em execução540* **Arquivos que transformariam seu diretório de trabalho em um repositório git bare**: `HEAD`, `objects` e `refs` no nível superior, além das entradas `config` e `hooks` existentes ali quando há um arquivo ou link simbólico `HEAD` ao lado delas. Um arquivo chamado `config` é negado mesmo sem `HEAD`. [Um `HEAD`, `objects` ou `refs` que apareça depois pode ser excluído](#when-the-sandbox-deletes-head-objects-or-refs). No Linux e no WSL2, um comando em sandbox pode criar um onde não existe nenhum.

541* **Em `~/.claude`, ou no diretório para o qual `CLAUDE_CONFIG_DIR` aponta**: a maior parte de seu conteúdo, além de `~/.claude.json` e do armazenamento de credenciais `.credentials.json`541* **Em `~/.claude`, ou no diretório para o qual `CLAUDE_CONFIG_DIR` aponta**: a maior parte de seu conteúdo, além de `~/.claude.json` e do armazenamento de credenciais `.credentials.json`

542 542 

543Se um link simbólico aparecer no caminho de um arquivo de configuração protegido durante a sessão, o sandbox também nega escritas no arquivo para o qual ele aponta, a partir do próximo comando.543Se um link simbólico aparecer no caminho de um arquivo de configuração protegido durante a sessão, o sandbox também nega escritas no arquivo para o qual ele aponta, a partir do próximo comando.


552 552 

553Se `git merge` ou `git checkout` falhar com `unable to unlink old` em um desses caminhos, consulte [Um comando git falha com `unable to unlink old`](#a-git-command-fails-with-unable-to-unlink-old).553Se `git merge` ou `git checkout` falhar com `unable to unlink old` em um desses caminhos, consulte [Um comando git falha com `unable to unlink old`](#a-git-command-fails-with-unable-to-unlink-old).

554 554 

555#### Quando o sandbox exclui `HEAD`, `objects` ou `refs`

556 

557Depois que um comando em sandbox termina, uma entrada `HEAD`, `objects` ou `refs` de nível superior mais recente no seu diretório de trabalho é excluída, a menos que seja uma pasta com conteúdo. Mais recente significa que a entrada não estava lá quando o sandbox construiu sua configuração pela última vez: no início da sessão ou após uma mudança como [`/cd`](https://code.claude.com/docs/pt/commands).

558 

559Uma pasta `objects` ou `refs` mais recente com conteúdo também é excluída, junto com seu conteúdo, quando havia um arquivo ou link simbólico `HEAD` ali na última vez que o sandbox construiu sua configuração. Para manter uma pasta, consulte [Uma pasta chamada `objects` ou `refs` desaparece após um comando](#a-folder-named-objects-or-refs-disappears-after-a-command).

560 

555#### Caminhos negados que passam por um link simbólico561#### Caminhos negados que passam por um link simbólico

556 562 

557No macOS, quando um caminho negado passa por um link simbólico, como um `~/.claude` que é um link para um repositório de dotfiles, o sandbox também nega a localização real do caminho. Isso abrange as negações do próprio sandbox e suas entradas literais `denyWrite` e `denyRead`.563No macOS, quando um caminho negado passa por um link simbólico, como um `~/.claude` que é um link para um repositório de dotfiles, o sandbox também nega a localização real do caminho. Isso abrange as negações do próprio sandbox e suas entradas literais `denyWrite` e `denyRead`.


881 887 

882Após a falha, Claude pode [oferecer executar novamente o comando fora do sandbox](#the-unsandboxed-retry-escape-hatch). Aprove essa nova tentativa ou execute o comando git você mesmo em outro terminal. Se você definiu `allowUnsandboxedCommands` como `false`, Claude não pode oferecer a nova tentativa, então execute o comando você mesmo.888Após a falha, Claude pode [oferecer executar novamente o comando fora do sandbox](#the-unsandboxed-retry-escape-hatch). Aprove essa nova tentativa ou execute o comando git você mesmo em outro terminal. Se você definiu `allowUnsandboxedCommands` como `false`, Claude não pode oferecer a nova tentativa, então execute o comando você mesmo.

883 889 

890### Uma pasta chamada `objects` ou `refs` desaparece após um comando

891 

892Uma pasta `objects` ou `refs` de nível superior que apareceu durante a sessão pode ser [excluída após o término de um comando em sandbox](#when-the-sandbox-deletes-head-objects-or-refs). Não importa se foi um comando, o Claude ou você quem a criou. Para manter uma pasta, deixe algo dentro dela. Se um arquivo ou link simbólico `HEAD` esteve no nível superior durante a sessão, mova-o para outro lugar e, em seguida, reinicie todas as sessões do Claude Code abertas ali.

893 

894Antes da v2.1.307, a pasta era excluída mesmo com algo dentro dela e sem `HEAD`. Em uma versão anterior, [atualize o Claude Code](https://code.claude.com/docs/pt/setup.md#update-claude-code).

895 

884### Bubblewrap falha ao iniciar dentro de um container896### Bubblewrap falha ao iniciar dentro de um container

885 897 

886Em um container sem privilégios, [bubblewrap](#os-level-enforcement) não consegue montar um sistema de arquivos `/proc` fresco, então comandos em sandbox falham com um erro `bwrap` como `Can't mount proc on /newroot/proc: Operation not permitted`. Defina [`enableWeakerNestedSandbox`](https://code.claude.com/docs/pt/settings-reference#sandbox-enableweakernestedsandbox) como `true` para que o sandbox faça bind-mount do `/proc` existente do container em vez disso. Use esta configuração apenas quando o container externo já fornece o limite de isolamento que você precisa, pois a configuração expõe informações de processo a comandos em sandbox que uma montagem `/proc` fresca ocultaria.898Em um container sem privilégios, [bubblewrap](#os-level-enforcement) não consegue montar um sistema de arquivos `/proc` fresco, então comandos em sandbox falham com um erro `bwrap` como `Can't mount proc on /newroot/proc: Operation not permitted`. Defina [`enableWeakerNestedSandbox`](https://code.claude.com/docs/pt/settings-reference#sandbox-enableweakernestedsandbox) como `true` para que o sandbox faça bind-mount do `/proc` existente do container em vez disso. Use esta configuração apenas quando o container externo já fornece o limite de isolamento que você precisa, pois a configuração expõe informações de processo a comandos em sandbox que uma montagem `/proc` fresca ocultaria.

Details

30 30 

31As duas caixas de Claude Code no diagrama são processos de sessão: um runner executando duas sessões ao mesmo tempo, até sua capacidade configurada. Um runner serve um [proprietário](#key-concepts) por vez e se bloqueia para esse proprietário quando reclama sua primeira sessão, portanto o código verificado nunca se mistura entre proprietários; [Ciclo de vida do runner](#runner-lifecycle) cobre a regra.31As duas caixas de Claude Code no diagrama são processos de sessão: um runner executando duas sessões ao mesmo tempo, até sua capacidade configurada. Um runner serve um [proprietário](#key-concepts) por vez e se bloqueia para esse proprietário quando reclama sua primeira sessão, portanto o código verificado nunca se mistura entre proprietários; [Ciclo de vida do runner](#runner-lifecycle) cobre a regra.

32 32 

33Você pode iniciar runners você mesmo e mantê-los em execução, ou executar o [orquestrador de dimensionamento automático](https://code.claude.com/docs/pt/self-hosted-environments-configuration.md#on-demand-runners), um segundo processo que você hospeda, que inicia runners conforme as sessões são enfileiradas; cada runner sai por conta própria quando seu trabalho termina. De qualquer forma, você configura o ambiente uma vez, e ele aparece no seletor em todas as superfícies suportadas.33Você pode iniciar runners você mesmo e mantê-los em execução, ou executar o [orquestrador de dimensionamento automático](https://code.claude.com/docs/pt/self-hosted-environments-configuration.md#on-demand-runners), um segundo processo que você hospeda, que inicia runners conforme as sessões são enfileiradas. De qualquer forma, você configura o ambiente uma vez, e ele aparece no seletor em todas as superfícies suportadas.

34 34 

35## Disponibilidade e limitações35## Disponibilidade e limitações

36 36 


122 122 

123Proxies de saída corporativos são suportados. O runner e o [orquestrador de dimensionamento automático](https://code.claude.com/docs/pt/self-hosted-environments-configuration.md#on-demand-runners) opcional honram o proxy e as variáveis de ambiente mTLS descritas em [Configuração de rede](https://code.claude.com/docs/pt/network-config.md), como `HTTPS_PROXY` e `NO_PROXY`; defina-as no ambiente de cada processo. As variáveis cobrem chamadas de plano de controle, o WebSocket [conector SCM](https://code.claude.com/docs/pt/self-hosted-environments-reference.md#scm-connector-flags) do orquestrador e o clone integrado para remotes HTTPS, e as sessões as herdam do runner. O streaming de sessão usa eventos enviados pelo servidor por HTTPS, portanto um proxy no caminho não deve armazenar em buffer as respostas.123Proxies de saída corporativos são suportados. O runner e o [orquestrador de dimensionamento automático](https://code.claude.com/docs/pt/self-hosted-environments-configuration.md#on-demand-runners) opcional honram o proxy e as variáveis de ambiente mTLS descritas em [Configuração de rede](https://code.claude.com/docs/pt/network-config.md), como `HTTPS_PROXY` e `NO_PROXY`; defina-as no ambiente de cada processo. As variáveis cobrem chamadas de plano de controle, o WebSocket [conector SCM](https://code.claude.com/docs/pt/self-hosted-environments-reference.md#scm-connector-flags) do orquestrador e o clone integrado para remotes HTTPS, e as sessões as herdam do runner. O streaming de sessão usa eventos enviados pelo servidor por HTTPS, portanto um proxy no caminho não deve armazenar em buffer as respostas.

124 124 

125Se seu proxy também exigir um cabeçalho `Proxy-Authorization`, o runner pode adicioná-lo a cada conexão que abre para o proxy; consulte [Autenticar em um proxy de saída](https://code.claude.com/docs/pt/self-hosted-environments-deploy.md#authenticate-to-an-egress-proxy).125* **Autenticação de proxy**: se seu proxy também exigir um cabeçalho `Proxy-Authorization`, o runner pode adicioná-lo a cada conexão que abre para o proxy; consulte [Autenticar em um proxy de saída](https://code.claude.com/docs/pt/self-hosted-environments-deploy.md#authenticate-to-an-egress-proxy).

126* **Respostas de longa duração**: se um runner pega uma sessão, mas Claude nunca responde à sua primeira mensagem, seu proxy pode ser a causa. Consulte [Uma sessão é pega, mas Claude nunca responde à sua primeira mensagem](https://code.claude.com/docs/pt/self-hosted-environments-deploy.md#when-a-sessions-first-message-is-never-answered).

126 127 

127## O que permanece em sua infraestrutura128## O que permanece em sua infraestrutura

128 129 

Details

36| `CLAUDE_CODE_REMOTE_SESSION_UUID` | O mesmo ID da sessão na forma UUID canônica, para sistemas que usam UUIDs como chave. |36| `CLAUDE_CODE_REMOTE_SESSION_UUID` | O mesmo ID da sessão na forma UUID canônica, para sistemas que usam UUIDs como chave. |

37| `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` | Para uma sessão do [Claude Tag](https://claude.com/docs/claude-tag/overview) que pertence a uma thread do Slack, o link para essa thread. Não definido para outras sessões, e pode não estar definido também para uma sessão de thread. |37| `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` | Para uma sessão do [Claude Tag](https://claude.com/docs/claude-tag/overview) que pertence a uma thread do Slack, o link para essa thread. Não definido para outras sessões, e pode não estar definido também para uma sessão de thread. |

38| `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` | Para uma sessão do Claude Tag que pertence a uma thread do Slack, o timestamp do Slack dessa thread, como `1700000000.000100`. Pode não estar definido, e pode estar definido quando `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` não está, então verifique cada variável separadamente. |38| `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` | Para uma sessão do Claude Tag que pertence a uma thread do Slack, o timestamp do Slack dessa thread, como `1700000000.000100`. Pode não estar definido, e pode estar definido quando `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` não está, então verifique cada variável separadamente. |

39| `CLAUDE_CODE_REMOTE_SLACK_CHANNEL_ID` | Para uma sessão do Claude Tag, o ID do canal do Slack ou da mensagem direta que a sessão atende ou em que sua thread está, como `C0123ABCDE`. Um timestamp do Slack identifica uma mensagem dentro de um único canal, então registre este ID junto com `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS`. Não definido para outras sessões, e pode não estar definido também para uma sessão do Claude Tag. |

39| `CLAUDE_SESSION_INGRESS_TOKEN_FILE` | Caminho absoluto para um arquivo por sessão contendo o JWT da sessão atual, mantido atualizado em atualizações de token. Subprocessos shell o leem para seu cabeçalho `Authorization` ao baixar anexos que o usuário adicionou à sessão. `exec` preserva a variável automaticamente; um wrapper que reconstrói o ambiente do filho deve levar a variável, ou downloads de anexos param silenciosamente de funcionar. |40| `CLAUDE_SESSION_INGRESS_TOKEN_FILE` | Caminho absoluto para um arquivo por sessão contendo o JWT da sessão atual, mantido atualizado em atualizações de token. Subprocessos shell o leem para seu cabeçalho `Authorization` ao baixar anexos que o usuário adicionou à sessão. `exec` preserva a variável automaticamente; um wrapper que reconstrói o ambiente do filho deve levar a variável, ou downloads de anexos param silenciosamente de funcionar. |

40| `CLAUDE_CONFIG_DIR` | Diretório de configuração Claude por sessão, escrito no início da sessão a partir do snapshot da configuração do host do runner que o runner captura na inicialização; consulte [Permissions and tool approval](#permissions-and-tool-approval). Escritas aqui são isoladas para esta sessão. O diretório fica sob `<base-dir>/_sessions/` após o término da sessão, a menos que você inicie o runner com [`--remove-session-state`](https://code.claude.com/docs/pt/self-hosted-environments-reference#runner-cli-flags); consulte [Reuse a pre-warmed checkout](https://code.claude.com/docs/pt/self-hosted-environments-deploy.md#reuse-a-pre-warmed-checkout). |41| `CLAUDE_CONFIG_DIR` | Diretório de configuração Claude por sessão, escrito no início da sessão a partir do snapshot da configuração do host do runner que o runner captura na inicialização; consulte [Permissions and tool approval](#permissions-and-tool-approval). Escritas aqui são isoladas para esta sessão. O diretório fica sob `<base-dir>/_sessions/` após o término da sessão, a menos que você inicie o runner com [`--remove-session-state`](https://code.claude.com/docs/pt/self-hosted-environments-reference#runner-cli-flags); consulte [Reuse a pre-warmed checkout](https://code.claude.com/docs/pt/self-hosted-environments-deploy.md#reuse-a-pre-warmed-checkout). |

41| `CLAUDE_CODE_REMOTE_MCP_CONFIG` | Caminho para um arquivo em `CLAUDE_CONFIG_DIR` contendo as definições de servidores MCP que o plano de controle da Anthropic entregou para esta sessão. Se seu wrapper reconstrói o ambiente do filho, leve esta variável junto. Sem ela, quando o plano de controle atualiza os servidores entregues, o filho encerra qualquer servidor stdio, HTTP ou SSE que seu wrapper adiciona com [`--mcp-config`](https://code.claude.com/docs/pt/cli-reference#cli-flags) que não esteja na atualização. Requer Claude Code v2.1.299 ou posterior. |42| `CLAUDE_CODE_REMOTE_MCP_CONFIG` | Caminho para um arquivo em `CLAUDE_CONFIG_DIR` contendo as definições de servidores MCP que o plano de controle da Anthropic entregou para esta sessão. Se seu wrapper reconstrói o ambiente do filho, leve esta variável junto. Sem ela, quando o plano de controle atualiza os servidores entregues, o filho encerra qualquer servidor stdio, HTTP ou SSE que seu wrapper adiciona com [`--mcp-config`](https://code.claude.com/docs/pt/cli-reference#cli-flags) que não esteja na atualização. Requer Claude Code v2.1.299 ou posterior. |


44 45 

45O wrapper também herda o resto do ambiente gerenciado do filho, incluindo quaisquer variáveis de ambiente fornecidas pelo servidor. `exec` propaga tudo automaticamente; se seu wrapper gera o filho de outra forma, encaminhe o ambiente completo.46O wrapper também herda o resto do ambiente gerenciado do filho, incluindo quaisquer variáveis de ambiente fornecidas pelo servidor. `exec` propaga tudo automaticamente; se seu wrapper gera o filho de outra forma, encaminhe o ambiente completo.

46 47 

47`CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` e `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` chegam ao seu wrapper ou [hook `command`](#command). Elas também chegam ao que a sessão executa, como comandos shell, hooks do git e hooks do Claude Code. Os hooks `checkout`, `post-session` e `spawn-runner` não as recebem.48Você pode ler as variáveis `CLAUDE_CODE_REMOTE_SLACK_*` no seu wrapper ou [hook `command`](#command), e no que a sessão executa, como comandos shell, hooks do git e hooks do Claude Code. Os hooks `checkout`, `post-session` e `spawn-runner` não as recebem.

48 49 

49### Give a default to variables that can be unset50### Give a default to variables that can be unset

50 51 

51`CCR_SESSION_ACCOUNT_EMAIL`, `CLAUDE_RUNNER_CLIENT_PLATFORM`, `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` e `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` podem, cada uma, não estar definidas. Se seu script usa `set -u`, o Bash para com `unbound variable` ao expandir uma que não está definida, então expanda-as com um valor padrão, como `"${CCR_SESSION_ACCOUNT_EMAIL:-}"`.52Se seu script usa `set -u`, expanda `CCR_SESSION_ACCOUNT_EMAIL`, `CLAUDE_RUNNER_CLIENT_PLATFORM`, `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL`, `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` e `CLAUDE_CODE_REMOTE_SLACK_CHANNEL_ID` com um valor padrão, como `"${CCR_SESSION_ACCOUNT_EMAIL:-}"`. Cada uma pode não estar definida, e sob `set -u` o Bash para com `unbound variable` ao expandir uma que não está definida.

52 53 

53### Quote the arguments and variables your script expands54### Quote the arguments and variables your script expands

54 55 


89* **Repasse-as**: termine o wrapper com `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"`, que encaminha as flags de arquivo junto com todos os outros argumentos. Não as descarte nem as reescreva. Se uma sessão perder uma flag de arquivo de prompt, ela será executada sem as instruções que o plano de controle enviou para ela.90* **Repasse-as**: termine o wrapper com `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"`, que encaminha as flags de arquivo junto com todos os outros argumentos. Não as descarte nem as reescreva. Se uma sessão perder uma flag de arquivo de prompt, ela será executada sem as instruções que o plano de controle enviou para ela.

90* **Em um runner na v2.1.281 ou posterior, uma flag de arquivo que você acrescenta substitui a do servidor, nunca se soma a ela**: cada flag de arquivo de prompt aceita um único valor e o Claude Code mantém a última ocorrência, então se você acrescentar `--append-system-prompt-file <path>` depois de `"$@"`, o conteúdo do seu arquivo substitui as instruções anexadas do servidor. Para adicionar instruções além das do servidor, coloque-as no `CLAUDE.md` da imagem do runner, que o runner [insere na configuração de nível de usuário de cada sessão](#how-each-session’s-config-is-assembled).91* **Em um runner na v2.1.281 ou posterior, uma flag de arquivo que você acrescenta substitui a do servidor, nunca se soma a ela**: cada flag de arquivo de prompt aceita um único valor e o Claude Code mantém a última ocorrência, então se você acrescentar `--append-system-prompt-file <path>` depois de `"$@"`, o conteúdo do seu arquivo substitui as instruções anexadas do servidor. Para adicionar instruções além das do servidor, coloque-as no `CLAUDE.md` da imagem do runner, que o runner [insere na configuração de nível de usuário de cada sessão](#how-each-session’s-config-is-assembled).

91 92 

93#### Fix `Argument list too long` at session start

94 

95No Linux, se você juntar o prompt do plano de controle e seu próprio texto em um único argumento `--append-system-prompt`, o runner registra em log uma linha como esta assim que o argumento atinge 128 KB:

96 

97```text theme={null}

98Session <id> finished: failed — reason: child exited 126: /opt/wrapper.sh: line 9: /usr/local/bin/claude: Argument list too long

99```

100 

101O Linux limita cada argumento individual a 32 páginas de memória, ou 128 KB com as páginas usuais de 4 KB. O valor de `getconf ARG_MAX`, frequentemente 2 MB, é um limite separado para todos os argumentos e o ambiente juntos.

102 

103No Claude Code v2.1.283 ou posterior, deixe as flags de arquivo em `"$@"` e passe apenas seu próprio texto como `--append-system-prompt`. O Claude Code [usa ambos](https://code.claude.com/docs/pt/cli-reference.md#system-prompt-flags), primeiro o prompt do plano de controle e depois seu próprio texto:

104 

105```bash theme={null}

106exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@" --append-system-prompt "$(cat /opt/team-instructions.md)"

107```

108 

109No Linux, se seu próprio texto atingir 128 KB, mova-o para o `CLAUDE.md` da imagem do runner, porque ele ainda é um único argumento.

110 

111Na v2.1.281 ou v2.1.282, esse comando sai com `Cannot use both --append-system-prompt and --append-system-prompt-file`. Em versões anteriores, seu texto substitui o prompt do plano de controle sem nenhum erro. Em qualquer uma delas, atualize primeiro ou mova seu próprio texto para o `CLAUDE.md`.

112 

92### Provision credentials scoped to the session creator113### Provision credentials scoped to the session creator

93 114 

94Use o subcomando `decode-token` para ler reivindicações do JWT da sessão. Ele lê o token de um argumento, de `CLAUDE_CODE_SESSION_ACCESS_TOKEN` ou de stdin, nessa ordem; consulte [Verify the token inside the session](https://code.claude.com/docs/pt/self-hosted-environments-identity.md#verify-the-token-inside-the-session) para o que ele verifica. O exemplo abaixo decodifica a identidade do criador, a troca por credenciais AWS de curta duração e faz exec em Claude Code:115Use o subcomando `decode-token` para ler reivindicações do JWT da sessão. Ele lê o token de um argumento, de `CLAUDE_CODE_SESSION_ACCESS_TOKEN` ou de stdin, nessa ordem; consulte [Verify the token inside the session](https://code.claude.com/docs/pt/self-hosted-environments-identity.md#verify-the-token-inside-the-session) para o que ele verifica. O exemplo abaixo decodifica a identidade do criador, a troca por credenciais AWS de curta duração e faz exec em Claude Code:


122| Variável | Descrição |143| Variável | Descrição |

123| :- | :- |144| :- | :- |

124| `CLAUDE_RUNNER_REPO_URL` | URL do repositório para clonar, após qualquer `--git-host-rewrite` e `--git-ssh-rewrite` terem sido aplicados |145| `CLAUDE_RUNNER_REPO_URL` | URL do repositório para clonar, após qualquer `--git-host-rewrite` e `--git-ssh-rewrite` terem sido aplicados |

125| `CLAUDE_RUNNER_REPO_REF` | Revisão para fazer checkout, conforme a sessão a solicitou: um branch, tag, commit SHA ou nome de referência completo como `refs/pull/<number>/head`. Vazio significa o branch padrão do repositório. |146| `CLAUDE_RUNNER_REPO_REF` | Revisão para fazer checkout, conforme a sessão a solicitou: um branch, tag, commit SHA ou nome de referência completo como `refs/heads/<branch>` ou `refs/pull/<number>/head`. Vazio significa o branch padrão do repositório. |

126| `CLAUDE_RUNNER_CHECKOUT_PATH` | Caminho absoluto onde a árvore de trabalho deve ser deixada |147| `CLAUDE_RUNNER_CHECKOUT_PATH` | Caminho absoluto onde a árvore de trabalho deve ser deixada |

127| `CLAUDE_RUNNER_SESSION_ID` | ID da sessão na forma marcada `session_...`, para logging e correlação |148| `CLAUDE_RUNNER_SESSION_ID` | ID da sessão na forma marcada `session_...`, para logging e correlação |

128| `CLAUDE_RUNNER_SESSION_UUID` | O mesmo ID da sessão na forma UUID canônica |149| `CLAUDE_RUNNER_SESSION_UUID` | O mesmo ID da sessão na forma UUID canônica |


303 324 

304O contrato tem quatro regras, qualquer que seja a plataforma em que seu hook provisiona:325O contrato tem quatro regras, qualquer que seja a plataforma em que seu hook provisiona:

305 326 

3061. **Seja idempotente em `CLAUDE_RUNNER_ORDER_ID`.** Reentrega da mesma solicitação deve gerar no máximo um runner. Derive um nome de recurso determinístico do ID de ordem e deixe sua plataforma rejeitar a duplicata. Não use `CLAUDE_RUNNER_SESSION_ID` como chave. Cada re-solicitação para uma sessão carrega o mesmo ID de sessão com um novo ID de ordem, então uma carga de trabalho nomeada ou deduplicada pelo ID de sessão é criada uma vez e nunca novamente para essa sessão.3271. **Seja idempotente em `CLAUDE_RUNNER_ORDER_ID`.** Reentrega da mesma solicitação deve gerar no máximo um runner. Derive um nome de recurso determinístico do ID de ordem e deixe sua plataforma rejeitar a duplicata. Não use `CLAUDE_RUNNER_SESSION_ID` como chave. Cada re-solicitação para uma sessão carrega o mesmo ID de sessão com um novo ID de ordem. Uma carga de trabalho nomeada ou deduplicada pelo ID de sessão não é criada novamente enquanto a primeira existir.

3072. **Não tente novamente a carga de trabalho.** Um ID de ordem significa no máximo uma carga de trabalho criada. Se o runner nunca se registra, Anthropic re-solicita com um ID de ordem fresco após `--expected-spawn-seconds`.3282. **Não tente novamente a carga de trabalho.** Um ID de ordem significa no máximo uma carga de trabalho criada. Se o runner nunca se registra, Anthropic re-solicita com um ID de ordem fresco após `--expected-spawn-seconds`.

3083. **Use o contrato de código de saída.** Saia com o status que corresponde ao resultado:3293. **Use o contrato de código de saída.** Saia com o status que corresponde ao resultado:

309 330 

310 * **Saída 0**: submetido.331 * **Saída 0**: submetido.

311 * **Saída 1, ou ainda em execução quando `--hook-timeout` termina**: falha retentável. A sessão recua e é re-oferecida.332 * **Saída 1, ou ainda em execução quando `--hook-timeout` termina**: falha retentável. A sessão recua e é re-oferecida. Após 10 solicitações com falha seguidas, ela é bloqueada da mesma forma que após a saída 2 ou superior.

312 * **Saída 2 ou superior**: falha não-retentável. A sessão é bloqueada de gerar novamente até que um usuário envie uma nova mensagem a ela ou um [Owner](https://code.claude.com/docs/pt/cloud-environments.md#organization-shared-environments) selecione **Retry** nela na aba **Activity** do ambiente.333 * **Saída 2 ou superior**: falha não-retentável. A sessão é bloqueada de gerar novamente até que um usuário envie uma nova mensagem a ela ou um [Owner](https://code.claude.com/docs/pt/cloud-environments.md#organization-shared-environments) selecione **Retry** nela na aba **Activity** do ambiente.

313 334 

314 Enquanto uma sessão recua, ela aparece como **Queued** na aba **Activity** sem erro de spawn, então leia a saída do hook no log do orquestrador. Uma vez bloqueada, a sessão aparece como **Failed**. Expanda-a para ler o erro de spawn, extraído dos últimos 512 caracteres do stderr do hook. Escreva um erro acionável para stderr, e nenhum segredo. Em um hook de shell, [mantenha falhas transitórias retentáveis](#keep-transient-failures-retryable-in-a-shell-hook).335 Enquanto uma sessão recua, ela aparece como **Queued** na aba **Activity** sem erro de spawn, então leia a saída do hook no log do orquestrador. Uma vez bloqueada, a sessão aparece como **Failed**. Expanda-a para ler o erro de spawn, extraído dos últimos 512 caracteres do stderr do hook. Escreva um erro acionável para stderr, e nenhum segredo. Em um hook de shell, [mantenha falhas transitórias retentáveis](#keep-transient-failures-retryable-in-a-shell-hook).


318 339 

319Tudo que o hook escreve para stdout ou stderr aparece no log do orquestrador com credenciais automaticamente redatadas. Se sessões ficarem enfileiradas, verifique o corpo `/healthz` do orquestrador para contagens de fila, então abra a aba **Activity** do seu ambiente na [página de administração **Cloud environments**](https://claude.ai/admin-settings/cloud-environments): expanda uma sessão falhada lá para seu erro de spawn e selecione **Retry** para re-solicitá-la.340Tudo que o hook escreve para stdout ou stderr aparece no log do orquestrador com credenciais automaticamente redatadas. Se sessões ficarem enfileiradas, verifique o corpo `/healthz` do orquestrador para contagens de fila, então abra a aba **Activity** do seu ambiente na [página de administração **Cloud environments**](https://claude.ai/admin-settings/cloud-environments): expanda uma sessão falhada lá para seu erro de spawn e selecione **Retry** para re-solicitá-la.

320 341 

321Uma sessão que fica enfileirada sem erro de spawn na aba **Activity** pode significar que o hook está usando a chave do ID de sessão. Para confirmar, verifique se sua plataforma tem uma carga de trabalho para a primeira solicitação de spawn dessa sessão e nenhuma para as re-solicitações. Se for assim, use `CLAUDE_RUNNER_ORDER_ID` como chave da carga de trabalho.342#### Corrija sessões reabertas que permanecem Queued ou mostram Failed

343 

344Se sessões reabertas permanecem como **Queued** ou mostram **Failed**, ou se seu hook atinge o timeout nelas, uma causa é um hook que nomeia ou deduplica cargas de trabalho pelo ID de sessão. Uma sessão é reaberta quando o usuário envia uma mensagem a ela depois que seu runner saiu. Por exemplo, considere um hook que monta o nome de cada carga de trabalho assim:

345 

346```bash theme={null}

347name="runner-${CLAUDE_RUNNER_SESSION_ID}"

348```

349 

3501. Na primeira solicitação de spawn da sessão, o hook cria uma carga de trabalho com esse nome, e um runner é iniciado

3512. O runner sai, por exemplo após [`--release-idle-session-min`](#make-on-demand-runners-exit-when-idle), e o usuário reabre a sessão mais tarde

3523. A próxima solicitação de spawn da sessão carrega o mesmo ID de sessão e um novo ID de ordem, então o hook monta o mesmo nome

3534. Se sua plataforma ainda tem a carga de trabalho da primeira solicitação, porque nada a [removeu](#make-on-demand-runners-exit-when-idle) quando seu runner saiu, o hook não cria nenhuma carga de trabalho nova e nenhum runner é iniciado

3545. Cada solicitação de spawn posterior para a sessão termina da mesma forma

355 

356Abra seu próprio hook e leia o que ele faz quando a carga de trabalho já existe, por exemplo quando sua plataforma rejeita o nome duplicado. Encontre esse comportamento na primeira coluna para ver o que a sessão reaberta mostra na aba **Activity**:

357 

358| Quando a carga de trabalho existe, seu hook | **Queued** muda para **Failed** | Erro de spawn |

359| :- | :- | :- |

360| Sai com 0 sem criar nada | Após 10 dessas solicitações seguidas | `runner did not register within ETA after max attempts` |

361| Sai com 1 | Após 10 dessas solicitações seguidas | O final do stderr do seu hook, ou `exit 1` se ele não escreveu nada no stderr |

362| Sai com 2 ou superior | Imediatamente | O final do stderr do seu hook, ou `exit` e o código, como `exit 2`, se ele não escreveu nada no stderr |

363| Aguarda até `--hook-timeout` terminar | Após 10 dessas solicitações seguidas | O final do stderr do seu hook, ou `spawn-runner hook timed out after 60000ms` se ele não escreveu nada no stderr |

364 

365No erro de spawn da última linha, `60000` é o seu `--hook-timeout` em milissegundos. Quando um hook aguarda até `--hook-timeout` terminar, o log do orquestrador também recebe uma linha `timed out after`.

366 

367Para corrigir o hook, monte cada nome ou chave a partir de `CLAUDE_RUNNER_ORDER_ID`, como exige a [regra 1 do contrato do hook](#the-spawn-runner-hook). No exemplo, o nome passa a ser:

368 

369```bash theme={null}

370name="runner-${CLAUDE_RUNNER_ORDER_ID}"

371```

372 

373Se seu hook aguarda, faça-o também sair assim que tiver submetido a carga de trabalho, porque um hook que aguarda [atrasa os próximos hooks do seu orquestrador](https://code.claude.com/docs/pt/self-hosted-environments-reference.md#orchestrator-cli-flags). Depois de alterar o hook, verifique o status de cada sessão travada na aba **Activity**:

374 

375* **Queued**: a sessão recebe sua próxima solicitação de spawn por conta própria

376* **Failed**: selecione **Retry** nela como Owner, ou peça ao usuário dela que envie uma nova mensagem

322 377 

323#### Faça runners sob demanda saírem quando ociosos378#### Faça runners sob demanda saírem quando ociosos

324 379 


740 795 

741O snapshot do `~/.claude/` do host feito pelo runner deixa de fora o diretório `projects/`. O local de armazenamento padrão da memória automática fica sob esse diretório. Se você colocar arquivos de memória lá, o runner não os semeia nas sessões, e eles não ativam a memória automática.796O snapshot do `~/.claude/` do host feito pelo runner deixa de fora o diretório `projects/`. O local de armazenamento padrão da memória automática fica sob esse diretório. Se você colocar arquivos de memória lá, o runner não os semeia nas sessões, e eles não ativam a memória automática.

742 797 

798### Stop sessions that fail to fetch server-managed settings

799 

800Para impedir que uma sessão que busca [configurações gerenciadas pelo servidor](https://code.claude.com/docs/pt/server-managed-settings.md) inicie quando essa busca falha, defina [`forceRemoteSettingsRefresh`](https://code.claude.com/docs/pt/settings-reference#forceremotesettingsrefresh) como `true` no [`managed-settings.json`](https://code.claude.com/docs/pt/settings#where-settings-live) em sua imagem do runner. Uma resposta da API da Anthropic informando que sua organização não tem configurações gerenciadas pelo servidor conta como uma busca bem-sucedida.

801 

802Antes de adicionar a chave, verifique se o ambiente executa sessões de canal do Claude Tag ou envia requisições de modelo para Bedrock ou Agent Platform:

803 

804* **Sessões de canal do Claude Tag**: deixe a chave de fora nos runners de um ambiente para o qual um Owner [direciona canais do Claude Tag](https://code.claude.com/docs/pt/cloud-environments.md#set-the-environment-a-claude-tag-channel-uses). A API da Anthropic recusa a requisição dessas sessões por configurações gerenciadas pelo servidor, então, com a chave definida, elas não conseguem iniciar. Coloque as regras delas no `managed-settings.json` da imagem do runner, que [elas ainda leem](https://code.claude.com/docs/pt/managed-settings.md#where-and-when-a-policy-applies). Para usar a chave em suas outras sessões, execute-as em um ambiente separado.

805* **Bedrock ou Agent Platform**: sessões nesses provedores [não buscam configurações gerenciadas pelo servidor](#what-differs-from-sessions-on-the-anthropic-api), então elas iniciam quer você defina a chave ou não. Em vez disso, aplique suas regras a partir do mesmo `managed-settings.json`.

806 

807Este `managed-settings.json` define a chave:

808 

809```json managed-settings.json theme={null}

810{

811 "forceRemoteSettingsRefresh": true

812}

813```

814 

815Defina a chave nesse arquivo mesmo que você também a defina no console de administração do claude.ai. Uma nova sessão não tem uma [cópia em cache](https://code.claude.com/docs/pt/server-managed-settings.md#fetch-and-caching-behavior) de suas configurações gerenciadas pelo servidor, então, se você definir a chave apenas no console, a sessão ainda não a tem. Se a busca dela falhar nesse momento, a sessão é executada sem essas configurações até que uma busca posterior seja bem-sucedida.

816 

817Para confirmar que uma busca de configurações com falha é o motivo pelo qual uma sessão não iniciou, verifique a [última saída do Claude Code](#keep-stdin-and-file-descriptor-3-attached) na sessão ou o log do runner. Ela inclui `Your organization requires remote managed settings to load, but they could not be loaded.`

818 

743### Repository settings in sessions with several repositories819### Repository settings in sessions with several repositories

744 820 

745Em uma thread de um [projeto](https://code.claude.com/docs/pt/claude-projects.md#what-threads-pick-up-from-your-repositories), nenhum `.claude/settings.json` de repositório tem efeito como configurações de projeto e nenhum `.mcp.json` ou skill de repositório é carregado, onde quer que a thread inicie. Para fornecer uma skill a essas threads, adicione-a à sua imagem do runner.821Em uma thread de um [projeto](https://code.claude.com/docs/pt/claude-projects.md#what-threads-pick-up-from-your-repositories), nenhum `.claude/settings.json` de repositório tem efeito como configurações de projeto e nenhum `.mcp.json` ou skill de repositório é carregado, onde quer que a thread inicie. Para fornecer uma skill a essas threads, adicione-a à sua imagem do runner.

Details

313 313 

314Para cada sessão que usa git gerenciada pela Anthropic, o runner também registra uma linha `[runner:warn]` que começa com `governed git: GIT_SSL_CAINFO is set` ou `governed git: GIT_SSL_NO_VERIFY is set`. A linha diz o que o runner fez com essa variável para seu próprio git, para git dentro da sessão, e para seus hooks de ciclo de vida. Ela termina com se você precisa alterar algo.314Para cada sessão que usa git gerenciada pela Anthropic, o runner também registra uma linha `[runner:warn]` que começa com `governed git: GIT_SSL_CAINFO is set` ou `governed git: GIT_SSL_NO_VERIFY is set`. A linha diz o que o runner fez com essa variável para seu próprio git, para git dentro da sessão, e para seus hooks de ciclo de vida. Ela termina com se você precisa alterar algo.

315 315 

316### Adicione repositórios do github.com a sessões de canal do Claude Tag

317 

318Se o Claude não conseguir adicionar um repositório do github.com a uma sessão de canal do Claude Tag, certifique-se de que o canal tem acesso a ele, mesmo quando seu runner consegue cloná-lo. Esse acesso vem de configurações no GitHub e em sua organização do Claude, não das credenciais git do seu runner.

319 

320**1. Instale o Claude GitHub App**

321 

322Instale o [Claude GitHub App](https://github.com/apps/claude) na organização ou conta do GitHub que é proprietária do repositório e inclua esse repositório na instalação.

323 

324**2. Vincule a organização ou conta do GitHub**

325 

326Em [**Organization settings > Git providers**](https://claude.ai/admin-settings/source-control), vincule essa organização ou conta à sua organização do Claude. Um Owner da sua organização do Claude que também seja proprietário da organização do GitHub pode vinculá-la. Consulte [Link your GitHub organization](https://claude.com/docs/claude-tag/admins/configure-github#link-your-github-organization).

327 

328**3. Conceda o repositório**

329 

330Nas [configurações de administrador do Claude Tag](https://claude.ai/admin-settings/claude-tag), conceda o repositório ao canal ou a um escopo mais amplo que inclua o canal: seu workspace do Slack ou todo o Slack. Alguém com a função Owner ou a permissão Claude Tag Admin pode concedê-lo. Um gerente de canal também pode adicioná-lo ao próprio canal se a conta do GitHub dele for administrador do repositório. Consulte [Grant repository access](https://claude.com/docs/claude-tag/admins/configure-github#grant-repository-access).

331 

332Em seguida, inicie uma nova thread no canal e [nomeie o repositório](https://claude.com/docs/claude-tag/admins/configure-github#how-granted-repositories-reach-a-session) em sua primeira mensagem.

333 

334Se o Claude ainda não conseguir adicionar o repositório, consulte [If Claude can't reach a repository](https://claude.com/docs/claude-tag/admins/configure-github#if-claude-can%E2%80%99t-reach-a-repository) para saber onde verificar o vínculo com o GitHub e a concessão do repositório.

335 

316### Reescrever URLs git para redes privadas336### Reescrever URLs git para redes privadas

317 337 

318URLs de repositório chegam do plano de controle como HTTPS, com o nome do host do seu host git; para GitHub Enterprise, esse é o nome do host que você configurou para a [integração GitHub Enterprise](https://code.claude.com/docs/pt/github-enterprise-server.md) em claude.ai. Duas flags repetíveis reescrevem essas URLs antes do clone:338URLs de repositório chegam do plano de controle como HTTPS, com o nome do host do seu host git; para GitHub Enterprise, esse é o nome do host que você configurou para a [integração GitHub Enterprise](https://code.claude.com/docs/pt/github-enterprise-server.md) em claude.ai. Duas flags repetíveis reescrevem essas URLs antes do clone:


376 396 

377Builds e testes são geralmente a maior e mais variável parte da carga de uma sessão, então execute um build representativo de seu repositório, meça seu pico de CPU e memória, e aumente qualquer valor inicial que deixe sem espaço para o processo Claude Code no topo desse pico.397Builds e testes são geralmente a maior e mais variável parte da carga de uma sessão, então execute um build representativo de seu repositório, meça seu pico de CPU e memória, e aumente qualquer valor inicial que deixe sem espaço para o processo Claude Code no topo desse pico.

378 398 

379O runner usa `--capacity` para limitar quantas sessões ele executa de uma vez. Ele não divide CPU ou memória entre elas, então as sessões em um runner compartilham a CPU e memória do contêiner. Para limitar a participação de uma sessão, aplique limites a partir de seu [script wrapper](https://code.claude.com/docs/pt/self-hosted-environments-configuration.md#wrapper-scripts). O que dar a um contêiner, portanto, depende de quantas sessões ele serve de uma vez:399O runner usa `--capacity` para limitar quantas sessões ele executa de uma vez. Ele não divide CPU ou memória entre elas, então as sessões em um runner compartilham a CPU e memória do contêiner. Para evitar que o uso de memória de uma sessão encerre as outras, execute uma sessão por runner com [seu próprio limite de memória](#give-each-session-its-own-memory-limit).

380 400 

381* **Uma sessão por runner**: dê a cada contêiner os valores de uma sessão. Use este dimensionamento em `--capacity 1`, que a [seção de endurecimento](#harden-your-deployment) recomenda, e para [runners sob demanda](https://code.claude.com/docs/pt/self-hosted-environments-configuration.md#on-demand-runners), onde você define os valores na carga de trabalho que seu [hook `spawn-runner`](https://code.claude.com/docs/pt/self-hosted-environments-configuration#the-spawn-runner-hook) submete, como um modelo de pod de um Kubernetes Job.401* **Uma sessão por runner**: dê a cada contêiner os valores de uma sessão. Use este dimensionamento em `--capacity 1`, que a [seção de endurecimento](#harden-your-deployment) recomenda, e para [runners sob demanda](https://code.claude.com/docs/pt/self-hosted-environments-configuration.md#on-demand-runners), onde você define os valores na carga de trabalho que seu [hook `spawn-runner`](https://code.claude.com/docs/pt/self-hosted-environments-configuration#the-spawn-runner-hook) submete, como um modelo de pod de um Kubernetes Job.

382* **Várias sessões por runner**: em um `--capacity` acima de um, multiplique os valores de uma sessão pela capacidade, porque até muitas sessões podem ser executadas no contêiner ao mesmo tempo. As receitas [Kubernetes](#kubernetes) e [Docker Compose](#docker-compose) executam `--capacity 4` sem limites de CPU ou memória, então adicione limites dimensionados para a capacidade que você executa.402* **Várias sessões por runner**: em um `--capacity` acima de um, multiplique os valores de uma sessão pela capacidade, porque até muitas sessões podem ser executadas no contêiner ao mesmo tempo. As receitas [Kubernetes](#kubernetes) e [Docker Compose](#docker-compose) executam `--capacity 4` sem limites de CPU ou memória, então adicione limites dimensionados para a capacidade que você executa.

403* **Vários contêineres de runner em um host**: dimensione o host para a soma das capacidades dos runners, porque cada runner conta apenas suas próprias sessões em relação ao `--capacity`:

404 

405 * **Memória**: multiplique a memória de uma sessão pela soma e, em seguida, adicione o que os próprios processos do host usam

406 * **CPU**: multiplique a requisição de CPU de uma sessão pela soma. Para permitir que todas as sessões explodam ao mesmo tempo, multiplique o limite de CPU em vez disso.

407 

408 Dê a cada runner seu próprio contêiner. Use o [mesmo caminho `--base-dir`](#keep-the-base-directory-and-capacity-identical-across-runners) em cada um, em um armazenamento que nenhum outro contêiner de runner monte, para que cada runner tenha [seu próprio diretório de trabalho](#harden-your-deployment).

409 

410### Dar a cada sessão seu próprio limite de memória

411 

412Para impedir que uma sessão encerre as outras quando a memória se esgota, execute cada runner em `--capacity 1` sob seu próprio limite de memória, definido como a memória de uma sessão:

413 

414* **Em um contêiner**: execute um runner por contêiner e defina o limite de memória do contêiner, como `limits.memory` no Kubernetes, `--memory` no Docker ou `mem_limit` em um arquivo Compose. Mantenha a soma dos limites dos contêineres abaixo da memória do host, porque quando o próprio host fica sem memória, o kernel pode matar processos em qualquer lugar do host.

415* **Sob systemd sem contêiner**: defina `MemoryMax` na unit do runner e execute um runner por host, porque runners que [usam o mesmo `--base-dir`](#keep-the-base-directory-and-capacity-identical-across-runners) em um sistema de arquivos compartilham os repositórios clonados ali. Por exemplo, em `--capacity 1` sem hook `checkout`, as sessões deles em um repositório podem trabalhar no mesmo checkout ao mesmo tempo. Para executar vários runners em um host, dê a cada um deles um contêiner.

416 

417Quando um contêiner ou unit atinge seu limite de memória, o kernel mata processos apenas dentro dele. Se você definir `--capacity` acima de um, as sessões compartilham um único limite. Quando elas o atingem, o kernel não escolhe por sessão quais processos matar, então o uso de memória de uma sessão pode encerrar as outras.

418 

419No Kubernetes, você não pode separar as sessões com nenhum dos valores da configuração `singleProcessOOMKill` do kubelet. Você também não pode limitar a memória total de uma sessão com um `ulimit` de memória em seu [script wrapper](https://code.claude.com/docs/pt/self-hosted-environments-configuration.md#wrapper-scripts). O kernel aplica um valor como `ulimit -v` a cada processo separadamente.

420 

421### Deixar espaço sob os limites de processos e threads

422 

423Para dimensionar um limite de processos e threads, meça o que uma sessão precisa e multiplique pelo número de sessões que compartilham o limite. Quando essas sessões atingem o limite, o kernel recusa novos processos e threads, então comandos, builds e testes em qualquer uma delas podem falhar. A chamada recusada retorna `EAGAIN`, cuja mensagem padrão é `Resource temporarily unavailable`.

424 

425Suponha que uma sessão atinja um pico de 300 processos e threads, e que quatro sessões compartilhem o limite. Juntas, elas precisam de 1.200 e, com um limite de 2.400, você deixa espaço para builds que precisem do dobro.

426 

427#### Onde definir cada limite

428 

429Cada limite nesta tabela conta threads assim como processos, e `pids.max` é o arquivo que contém o limite de um cgroup:

430 

431| Limite | Onde você o define | O que o compartilha |

432| :- | :- | :- |

433| `pids.max` no Kubernetes | `podPidsLimit` na configuração do kubelet dos nós que executam runners. Você não pode defini-lo em uma especificação de Pod. | Os contêineres de um Pod |

434| `pids.max` no Docker | `--pids-limit`, ou `pids_limit` em um arquivo Compose | Um contêiner |

435| `pids.max` sob systemd | `TasksMax` na unit do runner | Uma unit |

436| `ulimit -u` | O shell ou serviço que inicia o runner | Tudo no host que é executado com o ID de usuário do runner. Não é aplicado para root. |

437 

438Quando você não define `TasksMax`, o systemd aplica `DefaultTasksMax`, cujo padrão é 15% do menor valor entre `kernel.pid_max`, `kernel.threads-max` e o `pids.max` do cgroup raiz.

439 

440#### Medir o pico de uma sessão

441 

442Para obter os números para seus próprios runners, meça uma sessão em seu host, que no Kubernetes é o nó:

443 

444**1. Inicie um runner isoladamente**

445 

446Inicie um runner em `--capacity 1` sem mais nada em seu contêiner ou unit do systemd, sozinho em seu host e em seu ambiente:

447 

448* **Seu host**: use um que não execute nenhum outro runner. Assim você poderá identificar o processo dele na próxima etapa.

449* **Seu ambiente**: faça dele o único runner ali, por exemplo em um ambiente que você [cria para o teste](https://code.claude.com/docs/pt/self-hosted-environments-quickstart.md#set-up-manually). As sessões são roteadas para um ambiente, e não para um runner.

450 

451Não inicie uma sessão ainda, porque você precisa do diretório da próxima etapa antes que o build comece.

452 

453**2. Encontre o diretório cgroup do runner**

454 

455No host, não dentro do contêiner, encontre o ID do processo do runner, por exemplo com `ps`. Leia `/proc/<pid>/cgroup` para esse ID:

456 

457* **Uma linha contém `:pids:`**: o host usa cgroup v1, e o diretório é `/sys/fs/cgroup/pids` seguido do texto após `:pids:`

458* **A única linha começa com `0::`**: o host usa cgroup v2, e o diretório é `/sys/fs/cgroup` seguido do texto após `0::`

459 

460**3. Execute um build representativo e registre o pico**

461 

462Execute uma sessão durante um build representativo e obtenha o pico a partir do diretório cgroup do runner:

463 

464* **O diretório tem `pids.peak`**: leia o arquivo após o término do build

465* **O diretório não tem `pids.peak`**: leia `pids.current` uma vez por segundo enquanto o build é executado e guarde o valor mais alto. Um pico entre duas leituras passa despercebido, então trate esse valor como uma estimativa baixa.

466 

467**4. Multiplique pelas sessões que compartilham o limite**

468 

469* **O Pod, contêiner ou unit de um runner**: multiplique o pico pelo `--capacity` do runner

470* **Um limite que vários runners compartilham**: multiplique o pico pela soma de suas capacidades

471 

472Em seguida, adicione o pico de qualquer outra coisa que compartilhe o limite, como outro contêiner no Pod.

473 

474**5. Defina o limite acima do resultado**

475 

476Com um limite mais alto, você deixa espaço para builds mais pesados e, com um mais baixo, você interrompe uma fork bomb mais cedo.

477 

478#### Verificar um limite `pids.max`

479 

480* **Verifique se `pids.max` foi atingido**: pesquise no log do kernel do host, por exemplo com `dmesg`, uma linha que contenha `cgroup: fork rejected by pids controller in` e o caminho de um cgroup. O kernel a registra em log apenas na primeira vez que recusa um processo ou thread nesse cgroup, então pesquise o log inteiro.

481* **Veja o limite em vigor**: leia `pids.max` no diretório cgroup do runner e em cada diretório acima dele. O menor valor é o limite em vigor, e `max` significa nenhum limite nesse nível.

383 482 

384## Kubernetes483## Kubernetes

385 484 


577 676 

578O que o caminho de reutilização faz e não garante:677O que o caminho de reutilização faz e não garante:

579 678 

580* **Qualquer forma de clone funciona**: um clone completo, raso, ou de um único branch no caminho é usado como está. O runner nunca passa `--depth` ao buscar em um clone existente, então um pré-aquecimento completo mantém seu histórico completo e um raso permanece raso. `CLAUDE_RUNNER_FETCH_DEPTH` (`full`, `0`, ou um número; padrão 50) controla apenas o clone frio que o runner faz quando nenhum clone existe ainda.679* **Profundidade do clone**: crie o clone sem `--depth`, com ou sem `--single-branch`. O runner nunca passa `--depth` ao buscar em um clone com um remote `origin`, mesmo que você defina [`CLAUDE_RUNNER_FETCH_DEPTH`](https://code.claude.com/docs/pt/self-hosted-environments-reference#environment-variable-only-settings). Com um clone completo, cada sessão baixa apenas os commits que faltam ao clone. Com um clone raso, uma sessão em um branch que divergiu antes do commit mais antigo do clone baixa todo o histórico desse branch.

581* **Mudanças rastreadas redefinem, arquivos não rastreados persistem**: em `--capacity 1`, cada sessão começa a partir de uma redefinição dura que limpa as modificações rastreadas da sessão anterior, mas o runner nunca executa `git clean`, então arquivos não rastreados das sessões anteriores do owner bloqueado permanecem na árvore.680* **Mudanças rastreadas redefinem, arquivos não rastreados persistem**: em `--capacity 1`, cada sessão começa a partir de uma redefinição dura que limpa as modificações rastreadas da sessão anterior, mas o runner nunca executa `git clean`, então arquivos não rastreados das sessões anteriores do owner bloqueado permanecem na árvore.

582* **Diretórios por sessão também persistem**: ao lado do checkout, o runner cria entradas por sessão sob `<base-dir>/_sessions/` para cada sessão que executa. O diretório de configuração Claude da sessão contém uma cópia local da transcrição da conversa. Ao lado dele ficam os arquivos carregados da sessão, quando a sessão tem algum. O diretório da sessão também fica lá: ele contém quaisquer worktrees por sessão e checkouts do hook `checkout` enquanto a sessão é executada, e mantém tudo mais que Claude escreveu nele.681* **Diretórios por sessão também persistem**: ao lado do checkout, o runner cria entradas por sessão sob `<base-dir>/_sessions/` para cada sessão que executa. O diretório de configuração Claude da sessão contém uma cópia local da transcrição da conversa. Ao lado dele ficam os arquivos carregados da sessão, quando a sessão tem algum. O diretório da sessão também fica lá: ele contém quaisquer worktrees por sessão e checkouts do hook `checkout` enquanto a sessão é executada, e mantém tudo mais que Claude escreveu nele.

583 682 


587* **Com o proxy git, um pré-aquecimento `reftable` perde suas refs**: quando o runner sanitiza o `.git/` antes de cada sessão, ele mantém `.git/refs/` e remove o diretório `.git/reftable/`. Um clone pré-aquecido no formato de ref `reftable` do git perde suas refs dessa forma, então pré-aqueça o clone no formato de ref `files` do git.686* **Com o proxy git, um pré-aquecimento `reftable` perde suas refs**: quando o runner sanitiza o `.git/` antes de cada sessão, ele mantém `.git/refs/` e remove o diretório `.git/reftable/`. Um clone pré-aquecido no formato de ref `reftable` do git perde suas refs dessa forma, então pré-aqueça o clone no formato de ref `files` do git.

588* **Clones longos não precisam de workaround**: o runner limita cada operação git com um watchdog de 120 segundos sem progresso e um limite duro de 30 minutos, não um tempo limite fixo, então um clone frio lento que continua relatando progresso é concluído.687* **Clones longos não precisam de workaround**: o runner limita cada operação git com um watchdog de 120 segundos sem progresso e um limite duro de 30 minutos, não um tempo limite fixo, então um clone frio lento que continua relatando progresso é concluído.

589 688 

689### Confirmar que o runner usa seu clone

690 

691Para confirmar que o runner usa seu clone, inicie-o com [`--log-level debug`](https://code.claude.com/docs/pt/self-hosted-environments-reference#runner-cli-flags) e inicie uma sessão no repositório. O runner registra em log `Prefetched repo found at` e o caminho do clone. Se, em vez disso, ele registrar `No prefetched repo, fresh init at`, não encontrou nenhum clone utilizável no caminho indicado nessa linha. Verifique se seu clone está nesse caminho, pertence ao usuário do runner e tem um remote chamado `origin`.

692 

693Se o runner encontrar seu clone e as sessões ainda iniciarem lentamente, verifique se o clone é raso.

694 

590## Pin the version695## Pin the version

591 696 

592O processo filho de cada sessão executa o próprio binário do runner por padrão, e o runner desativa auto-update dentro das sessões que gera. Com esse padrão, cada sessão executa a versão que você instalou no host ou incluiu no build da imagem. Uma atualização no nível do host entra em vigor na próxima vez que o runner inicia.697O processo filho de cada sessão executa o próprio binário do runner por padrão, e o runner desativa auto-update dentro das sessões que gera. Com esse padrão, cada sessão executa a versão que você instalou no host ou incluiu no build da imagem. Uma atualização no nível do host entra em vigor na próxima vez que o runner inicia.


609* **Frota fixa**: execute um conjunto estático de réplicas de runner e dimensione nas [métricas Prometheus](https://code.claude.com/docs/pt/self-hosted-environments-reference.md#prometheus-metrics) que cada runner serve714* **Frota fixa**: execute um conjunto estático de réplicas de runner e dimensione nas [métricas Prometheus](https://code.claude.com/docs/pt/self-hosted-environments-reference.md#prometheus-metrics) que cada runner serve

610* **Runners sob demanda**: execute o subcomando `claude self-hosted-runner orchestrator`, que faz polling na Anthropic para sessões que estão enfileiradas sem runner disponível e invoca seu hook `spawn-runner` para iniciar um por sessão. Consulte [Runners sob demanda](https://code.claude.com/docs/pt/self-hosted-environments-configuration.md#on-demand-runners).715* **Runners sob demanda**: execute o subcomando `claude self-hosted-runner orchestrator`, que faz polling na Anthropic para sessões que estão enfileiradas sem runner disponível e invoca seu hook `spawn-runner` para iniciar um por sessão. Consulte [Runners sob demanda](https://code.claude.com/docs/pt/self-hosted-environments-configuration.md#on-demand-runners).

611 716 

717### Liberar sessões ociosas em uma frota fixa

718 

719Se as sessões permanecerem enfileiradas em uma frota fixa enquanto todos os runners estão online, sessões ociosas podem ser a causa. Por padrão, uma sessão mantém seu slot depois que seu turno termina, e seu runner permanece bloqueado para o [owner](https://code.claude.com/docs/pt/self-hosted-environments#key-concepts) dessa sessão. Se a [tarefa agendada na nuvem](https://code.claude.com/docs/pt/routines.md) da sua equipe inicia uma nova sessão a cada execução, suas sessões ociosas podem ocupar todos os slots.

720 

721Para verificar, leia `claude_code_self_hosted_runner_session_idle_seconds` nas [métricas Prometheus](https://code.claude.com/docs/pt/self-hosted-environments-reference.md#prometheus-metrics) de cada runner. Cada sessão que um runner mantém tem sua própria série: `0` enquanto a sessão está ocupada; caso contrário, os segundos desde que ela ficou ociosa. Escolha o tempo ocioso que você permitiria: mais longo do que as pausas que as pessoas fazem no meio de uma tarefa, e curto o suficiente para que cada execução seja liberada antes que a próxima execução da tarefa agendada comece. Compare as séries com ele.

722 

723* **Séries acima desse tempo, como `1800` para 30 minutos**: sessões ociosas mantêm esses slots, então defina `--release-idle-session-min`

724* **Todas as séries abaixo dele**: nenhuma sessão ficou ociosa por tanto tempo. Adicione runners ou defina [`--kill-session-after-min`](https://code.claude.com/docs/pt/self-hosted-environments-reference#runner-cli-flags) para [sessões que nunca ficam ociosas](#some-sessions-don’t-count-as-idle).

725* **Um runner sem séries**: nenhuma sessão o mantém. Consulte **As sessões permanecem enfileiradas** em [Solução de problemas](#troubleshooting).

726* **Um runner cujas métricas não respondem**: seu processo pode ter sido encerrado. Consulte **Um ambiente que parece saudável** em [Quando o runner é encerrado](#when-the-runner-exits).

727 

728Para liberar sessões ociosas, inicie todos os runners com [`--release-idle-session-min`](https://code.claude.com/docs/pt/self-hosted-environments-reference#runner-cli-flags) e esse tempo em minutos, como `--release-idle-session-min 30`. O runner então libera qualquer sessão que permaneça ociosa por esse tempo, seja ela iniciada por uma tarefa agendada ou por uma pessoa.

729 

730* **Trabalho não enviado**: uma sessão liberada é retomada na sua próxima mensagem, sem o trabalho que ela não havia enviado com push. Para manter seus commits, consulte [Sessões retomadas perdem trabalho não enviado](#additional-limitations).

731* **Encerramento do runner**: um runner que libera sua última sessão inicia um [encerramento normal](#when-the-runner-exits). Faça com que seu supervisor o reinicie em um sistema de arquivos novo, conforme descrito em [Proteja sua implantação](#harden-your-deployment).

732* **Sessões que nunca ficam ociosas**: defina também [`--kill-session-after-min`](https://code.claude.com/docs/pt/self-hosted-environments-reference#runner-cli-flags), porque [algumas sessões não contam como ociosas](#some-sessions-don’t-count-as-idle)

733 

612## Problemas conhecidos e limitações734## Problemas conhecidos e limitações

613 735 

614As seguintes são as limitações nesta versão, com workarounds onde um existe.736As seguintes são as limitações nesta versão, com workarounds onde um existe.


642### Limitações adicionais764### Limitações adicionais

643 765 

644* **Sessões retomadas perdem trabalho não enviado**: um runner novo clona o repositório novamente a partir de seu branch inicial, então o trabalho que a sessão não tinha enviado se foi.766* **Sessões retomadas perdem trabalho não enviado**: um runner novo clona o repositório novamente a partir de seu branch inicial, então o trabalho que a sessão não tinha enviado se foi.

645 * **Para manter trabalho com commit**: defina [`--push-outcome-on-release`](https://code.claude.com/docs/pt/self-hosted-environments-reference#runner-cli-flags) em todos os runners do ambiente, porque um runner sem a flag retoma a sessão a partir de seu branch inicial. Um runner com a flag faz um push de melhor esforço dos branches de resultado da sessão antes de liberá-la, e a sessão retomada começa a partir desses commits. O push usa as próprias credenciais git do host do runner, inclusive em um runner que usa [git gerenciado pela Anthropic](#use-the-anthropic-git-proxy). Alterações sem commit ainda são perdidas.767 * **Para manter trabalho com commit**: defina [`--push-outcome-on-release`](https://code.claude.com/docs/pt/self-hosted-environments-reference#runner-cli-flags) em todos os runners do ambiente, porque um runner sem a flag retoma a sessão a partir de seu branch inicial. Um runner com a flag faz um push de melhor esforço dos branches de resultado da sessão antes de liberá-la, e a sessão retomada começa a partir desses commits. O push usa as próprias credenciais git do host do runner, inclusive em um runner que usa [git gerenciado pela Anthropic](#use-the-anthropic-git-proxy).

646 * **Com um hook `checkout`**: repositórios obtidos por meio de um [hook de ciclo de vida `checkout`](https://code.claude.com/docs/pt/self-hosted-environments-configuration#checkout) não recebem push. Em vez disso, faça um snapshot deles a partir do [hook `post-session`](https://code.claude.com/docs/pt/self-hosted-environments-configuration#post-session).768 * **Com um hook `checkout`**: repositórios obtidos por meio de um [hook de ciclo de vida `checkout`](https://code.claude.com/docs/pt/self-hosted-environments-configuration#checkout) não recebem push. Em vez disso, faça um snapshot deles a partir do [hook `post-session`](https://code.claude.com/docs/pt/self-hosted-environments-configuration#post-session).

647 * **Antes de habilitar a flag**: restrinja quem pode fazer push para refs `claude/*` no remoto de origem. Na retomada, o runner busca o branch previamente enviado sem verificar quem o enviou.769 * **Antes de habilitar a flag**: restrinja quem pode fazer push para refs `claude/*` no remoto de origem. Na retomada, o runner busca o branch previamente enviado sem verificar quem o enviou.

770 * **Alterações sem commit ainda são perdidas**: para solicitar que Claude faça commit e push quando terminar de responder, consulte [Solicitar que as sessões enviem seu trabalho](https://code.claude.com/docs/pt/self-hosted-environments-configuration.md#prompt-sessions-to-push-their-work)

648* **Um repositório adicionado no meio da sessão pode falhar ao ser clonado**: Claude o clona com `git clone` via HTTPS. Em um runner sem [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy), o clone falha com um erro de autenticação do git se nada no host puder ler o repositório. Sempre que possível, selecione cada repositório que a sessão precisa quando você a cria.771* **Um repositório adicionado no meio da sessão pode falhar ao ser clonado**: Claude o clona com `git clone` via HTTPS. Em um runner sem [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy), o clone falha com um erro de autenticação do git se nada no host puder ler o repositório. Sempre que possível, selecione cada repositório que a sessão precisa quando você a cria.

649* **Alguns conectores não aparecem em sessões auto-hospedadas**: um conector que você ainda não conectou nas Configurações do claude.ai não está listado em uma sessão auto-hospedada, e a sessão não o solicitará para conectar. Conecte-o nas Configurações primeiro, depois inicie uma sessão fresca. Adicionar um conector a uma sessão já em execução também não torna suas ferramentas disponíveis para Claude; inicie uma sessão fresca para pegar um conector recém-adicionado.772* **Alguns conectores não aparecem em sessões auto-hospedadas**: um conector que você ainda não conectou nas Configurações do claude.ai não está listado em uma sessão auto-hospedada, e a sessão não o solicitará para conectar. Conecte-o nas Configurações primeiro, depois inicie uma sessão fresca. Adicionar um conector a uma sessão já em execução também não torna suas ferramentas disponíveis para Claude; inicie uma sessão fresca para pegar um conector recém-adicionado.

650* **Quando alguém arquiva ou exclui uma sessão, ou libera seu runner a partir do menu da sessão**: não conte com o push de [`--push-outcome-on-release`](https://code.claude.com/docs/pt/self-hosted-environments-reference#runner-cli-flags). Para salvar commits nesses casos, faça push de `HEAD` para um branch de resgate a partir de um [hook `post-session`](https://code.claude.com/docs/pt/self-hosted-environments-configuration#post-session). Se você partir do exemplo ali, faça-o fazer push mesmo quando não houver nada sem commit, porque ele faz push apenas após um commit de snapshot.773* **Quando alguém arquiva ou exclui uma sessão, ou libera seu runner a partir do menu da sessão**: não conte com o push de [`--push-outcome-on-release`](https://code.claude.com/docs/pt/self-hosted-environments-reference#runner-cli-flags). Para salvar commits nesses casos, faça push de `HEAD` para um branch de resgate a partir de um [hook `post-session`](https://code.claude.com/docs/pt/self-hosted-environments-configuration#post-session). Se você partir do exemplo ali, faça-o fazer push mesmo quando não houver nada sem commit, porque ele faz push apenas após um commit de snapshot.


684* **As sessões falham imediatamente após a coleta**: abra a sessão em claude.ai/code para ver o erro. Se o erro mostrar que o git não conseguiu se autenticar, verifique as [credenciais git](#configure-git) do runner. Em um runner iniciado com `--use-anthropic-git-proxy`, consulte [Quando as sessões não iniciam em um runner com o proxy git](#when-anthropic-doesnt-serve-a-session).807* **As sessões falham imediatamente após a coleta**: abra a sessão em claude.ai/code para ver o erro. Se o erro mostrar que o git não conseguiu se autenticar, verifique as [credenciais git](#configure-git) do runner. Em um runner iniciado com `--use-anthropic-git-proxy`, consulte [Quando as sessões não iniciam em um runner com o proxy git](#when-anthropic-doesnt-serve-a-session).

685 808 

686 Um diretório base não gravável interrompe o runner na inicialização em vez de fazer as sessões falharem. Consulte a entrada **O runner sai na inicialização com `cannot create or write to base directory`** nesta lista.809 Um diretório base não gravável interrompe o runner na inicialização em vez de fazer as sessões falharem. Consulte a entrada **O runner sai na inicialização com `cannot create or write to base directory`** nesta lista.

810* **Uma sessão é coletada, mas o Claude nunca responde à primeira mensagem**: se seus runners alcançam `api.anthropic.com` através de um proxy, configure-o para repassar a resposta `/worker/events/stream` da sessão à medida que ela chega. Aumentar os timeouts do runner não ajuda. Para confirmar a causa no log do runner, consulte [Uma sessão é coletada, mas o Claude nunca responde à primeira mensagem](#when-a-sessions-first-message-is-never-answered).

687* **As sessões não iniciam em um runner que definiu `--use-anthropic-git-proxy`**: procure no log do runner por `access denied by the git proxy`, ou por um erro do git que mencione um endereço de `api.anthropic.com` contendo `/git_proxy/`. Para saber se a Anthropic atendeu a sessão e corrigir a causa, consulte [Quando as sessões não iniciam em um runner com o proxy git](#when-anthropic-doesnt-serve-a-session).811* **As sessões não iniciam em um runner que definiu `--use-anthropic-git-proxy`**: procure no log do runner por `access denied by the git proxy`, ou por um erro do git que mencione um endereço de `api.anthropic.com` contendo `/git_proxy/`. Para saber se a Anthropic atendeu a sessão e corrigir a causa, consulte [Quando as sessões não iniciam em um runner com o proxy git](#when-anthropic-doesnt-serve-a-session).

688* **Sessions can't reach the network through an authenticating egress proxy**: quando a fonte que você definiu com [`--proxy-authorization-command` ou `--proxy-authorization-file`](#authenticate-to-an-egress-proxy) falha, expira após 30 segundos ou produz um valor vazio, o runner responde essa conexão com `502 Bad Gateway` e registra o motivo. O runner redige o stderr do comando nesse log e nunca registra o valor do cabeçalho. Com `--proxy-authorization-command`, execute o comando você mesmo no host para confirmar que ele imprime o valor do cabeçalho inteiro em stdout. Se o runner sair na inicialização com `could not start the proxy-authorization listener`, ele não conseguiu abrir seu listener de loopback.812* **Sessions can't reach the network through an authenticating egress proxy**: quando a fonte que você definiu com [`--proxy-authorization-command` ou `--proxy-authorization-file`](#authenticate-to-an-egress-proxy) falha, expira após 30 segundos ou produz um valor vazio, o runner responde essa conexão com `502 Bad Gateway` e registra o motivo. O runner redige o stderr do comando nesse log e nunca registra o valor do cabeçalho. Com `--proxy-authorization-command`, execute o comando você mesmo no host para confirmar que ele imprime o valor do cabeçalho inteiro em stdout. Se o runner sair na inicialização com `could not start the proxy-authorization listener`, ele não conseguiu abrir seu listener de loopback.

689* **O runner registra linhas `Poll failed` contendo `rejecting the malformed poll response`**: o runner recebeu uma resposta de work-poll cujo corpo não é o JSON esperado da fila. Uma causa é um proxy interceptador ou um portal cativo respondendo com sua própria página. Se o runner se conecta através de um proxy, configure o proxy para passar as respostas de `api.anthropic.com` inalteradas.813* **O runner registra linhas `Poll failed` contendo `rejecting the malformed poll response`**: o runner recebeu uma resposta de work-poll cujo corpo não é o JSON esperado da fila. Uma causa é um proxy interceptador ou um portal cativo respondendo com sua própria página. Se o runner se conecta através de um proxy, configure o proxy para passar as respostas de `api.anthropic.com` inalteradas.


708* **Uma sessão não inicia com `This runner couldn't read`**: o runner solicitou um repositório ao host git com suas [credenciais git](#configure-git) e recebeu uma resposta de não encontrado. O repositório não existe, ou essas credenciais não conseguem alcançar o repositório.832* **Uma sessão não inicia com `This runner couldn't read`**: o runner solicitou um repositório ao host git com suas [credenciais git](#configure-git) e recebeu uma resposta de não encontrado. O repositório não existe, ou essas credenciais não conseguem alcançar o repositório.

709 * **Se você administra o runner**: conceda às credenciais git dele acesso de leitura ao repositório e, em seguida, inicie uma nova sessão.833 * **Se você administra o runner**: conceda às credenciais git dele acesso de leitura ao repositório e, em seguida, inicie uma nova sessão.

710 * **Se você iniciou a sessão**: se o repositório não existir, inicie uma nova sessão com o repositório correto. Se o runner não conseguir alcançar o repositório, peça ao administrador do runner que conceda acesso e, em seguida, inicie uma nova sessão.834 * **Se você iniciou a sessão**: se o repositório não existir, inicie uma nova sessão com o repositório correto. Se o runner não conseguir alcançar o repositório, peça ao administrador do runner que conceda acesso e, em seguida, inicie uma nova sessão.

711* **Sessions take minutes to start**: o clone inicial geralmente domina. Observe a métrica `claude_code_self_hosted_runner_session_init_duration_seconds` [metric](https://code.claude.com/docs/pt/self-hosted-environments-reference.md#prometheus-metrics) para confirmar e corte o clone com um [pre-warmed checkout](#reuse-a-pre-warmed-checkout) ou um `CLAUDE_RUNNER_FETCH_DEPTH` menor.835* **As sessões levam minutos para iniciar ou retomar**: uma causa é um clone novo. Em uma frota que inicia cada runner em um disco vazio, sem [hook `checkout`](https://code.claude.com/docs/pt/self-hosted-environments-configuration#checkout), o runner clona os repositórios da sessão do zero antes de iniciar o Claude Code. Uma sessão que é retomada em um disco vazio aguarda o mesmo clone novamente.

836 

837 Para evitar o clone novo, forneça um [checkout pré-aquecido](#reuse-a-pre-warmed-checkout). Se você já fornece um, [confirme que o runner o usa](#confirm-that-the-runner-uses-your-clone). Onde o próprio runner faz o clone e sai após uma sessão, reduza [`CLAUDE_RUNNER_FETCH_DEPTH`](https://code.claude.com/docs/pt/self-hosted-environments-reference#environment-variable-only-settings) do seu padrão de 50 commits para buscar menos histórico.

838 

839 Se você usa um hook, ele é executado no lugar do clone do runner, então verifique o que seu hook faz. Observe a [métrica](https://code.claude.com/docs/pt/self-hosted-environments-reference.md#prometheus-metrics) `claude_code_self_hosted_runner_session_init_duration_seconds` para ver quanto tempo os inícios levam.

712* **Os turnos falham com um 401**: quando um turno termina com um 401 ou 403 da API da Anthropic, o runner busca um [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/pt/self-hosted-environments-configuration#wrapper-scripts) novo da Anthropic e o passa para a sessão. O turno com falha não é tentado novamente. Esse token é de curta duração, e o runner o rotaciona pelo stdin da sessão.840* **Os turnos falham com um 401**: quando um turno termina com um 401 ou 403 da API da Anthropic, o runner busca um [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/pt/self-hosted-environments-configuration#wrapper-scripts) novo da Anthropic e o passa para a sessão. O turno com falha não é tentado novamente. Esse token é de curta duração, e o runner o rotaciona pelo stdin da sessão.

713 841 

714 Quando uma busca falha, o runner registra uma linha `inference_token refresh failed` que diz quando tentará novamente, e continua tentando novamente enquanto a sessão estiver em execução.842 Quando uma busca falha, o runner registra uma linha `inference_token refresh failed` que diz quando tentará novamente, e continua tentando novamente enquanto a sessão estiver em execução.


788 916 

789Para diagnóstico orientado no host do runner, execute o [subcomando doctor](#troubleshooting).917Para diagnóstico orientado no host do runner, execute o [subcomando doctor](#troubleshooting).

790 918 

919### Uma sessão é coletada, mas o Claude nunca responde à primeira mensagem

920 

921Se um runner coleta uma sessão, mas o Claude nunca responde à primeira mensagem, e seus runners alcançam `api.anthropic.com` através de um proxy, o proxy pode ser a causa. A Anthropic envia a uma sessão suas mensagens por uma única resposta de streaming que permanece aberta. Se seu proxy a armazena em buffer, ou a encerra antes de repassar qualquer coisa, a primeira mensagem nunca chega. Outras requisições da sessão ainda são bem-sucedidas.

922 

923Para corrigir, altere como o proxy trata esta requisição:

924 

925```text theme={null}

926GET https://api.anthropic.com/v1/code/sessions/<session-id>/worker/events/stream

927```

928 

929* **Não armazene a resposta em buffer**: repasse-a à medida que ela chega. Seu tipo de conteúdo é `text/event-stream`.

930* **Deixe a resposta permanecer aberta**: ela pode ficar aberta por até uma hora. Se o proxy tiver um timeout de inatividade, mantenha-o bem acima de 15 segundos, porque a Anthropic envia um keep-alive pelo menos com essa frequência por padrão.

931 

932Em seguida, inicie uma nova sessão e verifique se o Claude responde. Aumentar os timeouts do runner não ajuda: você apenas espera mais antes que o runner interrompa a sessão.

933 

934#### Confirme a causa no log do runner

935 

936Estas etapas são para runners no Claude Code v2.1.287 ou posterior, no `--log-level info` padrão. Runners mais antigos registram essas linhas mais tarde, ou não as registram.

937 

9381. Aguarde [`--startup-timeout-min`](https://code.claude.com/docs/pt/self-hosted-environments-reference#runner-cli-flags) passar, 15 minutos por padrão. O runner então interrompe a sessão e registra uma linha que contém `no child output for` e termina com `— releasing`.

9392. Pesquise no log do runner por `SDKStartup: SSE`. Essas linhas vêm depois de uma linha `finished: interrupted`, algumas linhas após a da etapa 1. A maioria não tem timestamp, então um coletor de logs pode exibi-las em outro lugar.

9403. Encontre a linha nesta tabela:

941 

942| A linha de log contém | O que fazer |

943| :- | :- |

944| `SSE connect failed (no response in 30s)` ou `SSE liveness timeout` | Verifique se o proxy encaminha a requisição, repassa os cabeçalhos e os dados da resposta à medida que chegam e não derruba a conexão |

945| `SSE connect failed (HTTP` e um código de status | Verifique o próprio log do proxy. Se o próprio proxy respondeu à requisição, deixe a requisição passar por ele. |

946| `SSE connect failed (` e qualquer outro texto | O texto entre parênteses é o erro. Procure a mesma conexão no próprio log do proxy. |

947| `SSE stream ended by server`, repetidamente | Verifique o limite de tempo do proxy para respostas de longa duração. Uma única linha desse tipo é normal. |

948| `SSE reconnected after` | Procure uma das outras linhas depois dela. Esta não significa que algo chegou à sessão. |

949 

950Se o log não tiver nenhuma dessas linhas, ou o log do proxy não mostrar nada de errado, [relate um problema](#report-an-issue).

951 

952#### Impeça que a sessão tente novamente

953 

954A sessão mantém a mensagem pendente, e um runner que pode atender o proprietário da sessão coleta a sessão novamente. Até que você altere o proxy, a sessão aguarda da mesma forma a cada vez. Para impedir isso, arquive a sessão em claude.ai/code.

955 

791## O que vem a seguir956## O que vem a seguir

792 957 

793* [Customize sessions](https://code.claude.com/docs/pt/self-hosted-environments-configuration.md): wrapper scripts, lifecycle hooks, on-demand runners, MCP servers, and permissions958* [Customize sessions](https://code.claude.com/docs/pt/self-hosted-environments-configuration.md): wrapper scripts, lifecycle hooks, on-demand runners, MCP servers, and permissions

Details

121* **A sessão falha ao iniciar com um erro do git**: se o erro incluir `could not read Username for` do git seguido da URL do seu host git, o runner não tinha credenciais HTTPS para esse host.121* **A sessão falha ao iniciar com um erro do git**: se o erro incluir `could not read Username for` do git seguido da URL do seu host git, o runner não tinha credenciais HTTPS para esse host.

122 * **Fornecer credenciais HTTPS**: consulte [Configurar git](https://code.claude.com/docs/pt/self-hosted-environments-deploy.md#configure-git)122 * **Fornecer credenciais HTTPS**: consulte [Configurar git](https://code.claude.com/docs/pt/self-hosted-environments-deploy.md#configure-git)

123 * **Clonar via SSH**: se o host do runner já tiver uma chave SSH, consulte [Reescrever URLs do git para redes privadas](https://code.claude.com/docs/pt/self-hosted-environments-deploy.md#rewrite-git-urls-for-private-networks)123 * **Clonar via SSH**: se o host do runner já tiver uma chave SSH, consulte [Reescrever URLs do git para redes privadas](https://code.claude.com/docs/pt/self-hosted-environments-deploy.md#rewrite-git-urls-for-private-networks)

124 * **Após qualquer uma das correções**: inicie o runner novamente e observe a sessão que falhou em vez de iniciar uma nova. Se ela tiver falhado várias vezes, aguarde alguns minutos até que o runner registre `Picked up session` no log.

125 * **Para usar um repositório diferente**: [arquive](https://code.claude.com/docs/pt/claude-code-on-the-web.md#archive-sessions) ou [exclua](https://code.claude.com/docs/pt/claude-code-on-the-web.md#delete-sessions) a sessão que falhou, depois inicie o runner novamente e inicie uma nova sessão. Caso contrário, o runner pode pegar a sessão que falhou em vez da nova.

124 126 

125### Se o runner sair127### Se o runner sair

126 128 

Details

83 83 

84| Sinalizador | Padrão | Descrição |84| Sinalizador | Padrão | Descrição |

85| :- | :- | :- |85| :- | :- | :- |

86| `--hook-concurrency <n>` | `4` | Máximo de hooks `spawn-runner` em execução em paralelo. Também limita quantas solicitações de geração são reivindicadas por pesquisa. |86| `--hook-concurrency <n>` | `4` | Máximo de hooks `spawn-runner` em execução em paralelo. Também limita quantas requisições de geração são reivindicadas por pesquisa. O orquestrador verifica novas requisições de geração somente depois que todos os hooks que iniciou tiverem terminado, portanto um hook lento atrasa os próximos hooks desse orquestrador. |

87| `--hook-timeout <sec>` | `60` | Encerre a árvore de processos do hook após muitos segundos. O tempo limite mais sua graça de morte de 5 segundos deve ficar abaixo de `--expected-spawn-seconds`; o orquestrador impõe isso na inicialização. |87| `--hook-timeout <sec>` | `60` | Encerre a árvore de processos do hook após muitos segundos. O tempo limite mais sua graça de morte de 5 segundos deve ficar abaixo de `--expected-spawn-seconds`; o orquestrador impõe isso na inicialização. |

88| `--expected-spawn-seconds <sec>` | `120` | Tempo p99 esperado desde o momento em que o orquestrador recebe uma requisição de geração até o momento em que o executor se registra, incluindo qualquer espera por capacidade na sua plataforma. O servidor impõe um intervalo de 10 a 3600. Enviado em cada pesquisa como a concessão do lado do servidor: se nenhum executor se registrar antes de decorrido, a sessão é re-oferecida com um novo ID de pedido. Todas as réplicas devem compartilhar este valor. |88| `--expected-spawn-seconds <sec>` | `120` | Tempo p99 esperado desde o momento em que o orquestrador recebe uma requisição de geração até o momento em que o executor se registra, incluindo qualquer espera por capacidade na sua plataforma. O servidor impõe um intervalo de 10 a 3600. Enviado em cada pesquisa como a concessão do lado do servidor: se nenhum executor se registrar antes de decorrido, a sessão é re-oferecida com um novo ID de pedido. Todas as réplicas devem compartilhar este valor. |

89| `--min-idle <n>` | `0` | Mantenha pelo menos N slots de sessão ociosos livres gerando executores de espera de forma proativa. `0` desabilita pré-aquecimento. Emparelhe com o `--exit-if-unused-min` do executor para que executores de espera em excesso se recuperem. |89| `--min-idle <n>` | `0` | Mantenha pelo menos N slots de sessão ociosos livres gerando executores de espera de forma proativa. `0` desabilita pré-aquecimento. Emparelhe com o `--exit-if-unused-min` do executor para que executores de espera em excesso se recuperem. |


105 105 

106Em cada tentativa de conexão, o orquestrador envia seu segredo de ambiente existente e tenta novamente automaticamente com backoff exponencial, limitado a 30 segundos mais jitter.106Em cada tentativa de conexão, o orquestrador envia seu segredo de ambiente existente e tenta novamente automaticamente com backoff exponencial, limitado a 30 segundos mais jitter.

107 107 

108## Configurações somente de variável de ambiente108## Configurações somente por variável de ambiente

109 109 

110Essas configurações do executor são lidas apenas do ambiente e cobrem comportamento que a maioria das implantações deixa no padrão:110Estas configurações do runner são lidas apenas do ambiente e abrangem comportamentos que a maioria das implantações mantém no padrão:

111 111 

112| Var de ambiente | Padrão | Descrição |112| Variável de ambiente | Padrão | Descrição |

113| :- | :- | :- |113| :- | :- | :- |

114| `SELF_HOSTED_RUNNER_BG_RESULT_GRACE_MS` | `30000` | Quanto tempo o executor considera uma sessão ocupada após uma tarefa em segundo plano terminar enquanto o turno de acompanhamento que lê o resultado não começou. As linhas [`--drain-wait-sec` e `--release-idle-session-min`](#runner-cli-flags) descrevem onde a retenção se aplica na drenagem e liberação ociosa, e [Runner lifecycle](https://code.claude.com/docs/pt/self-hosted-environments#runner-lifecycle) descreve onde se aplica na aposentadoria `--retire-at`. `0` ou um valor inutilizável volta ao padrão, para que a retenção não possa ser desligada. Requer Claude Code v2.1.228 ou posterior. |114| `SELF_HOSTED_RUNNER_BG_RESULT_GRACE_MS` | `30000` | Por quanto tempo o runner considera uma sessão ocupada depois que uma tarefa em segundo plano termina enquanto o turno seguinte que lê o resultado ainda não começou. As [linhas `--drain-wait-sec` e `--release-idle-session-min`](#runner-cli-flags) descrevem onde essa retenção se aplica na drenagem e na liberação por inatividade, e [Ciclo de vida do runner](https://code.claude.com/docs/pt/self-hosted-environments#runner-lifecycle) descreve onde ela se aplica na desativação por `--retire-at`. `0` ou um valor inutilizável volta ao padrão, portanto a retenção não pode ser desativada. Requer Claude Code v2.1.228 ou posterior. |

115| `SELF_HOSTED_RUNNER_HOST_CONFIG_DIR` | `~/.claude` | Diretório capturado no snapshot de inicialização do executor e semeado no `CLAUDE_CONFIG_DIR` de cada sessão; mudanças em disco se aplicam após um reinício do executor. Definir a variável também move onde o executor lê `.claude.json` para [seeding MCP](https://code.claude.com/docs/pt/self-hosted-environments-configuration.md#mcp-servers), então defini-la, incluindo seu próprio padrão, realoca essa pesquisa; aponte para um diretório vazio para desabilitar o seeding inteiramente. |115| `SELF_HOSTED_RUNNER_HOST_CONFIG_DIR` | `~/.claude` | Diretório capturado no snapshot de inicialização do runner e copiado para o `CLAUDE_CONFIG_DIR` de cada sessão; alterações no disco entram em vigor após reiniciar o runner. Definir a variável também muda o local onde o runner lê `.claude.json` para a [semeadura de MCP](https://code.claude.com/docs/pt/self-hosted-environments-configuration.md#mcp-servers), portanto defini-la, inclusive com seu próprio valor padrão, realoca essa busca; aponte para um diretório vazio para desativar a semeadura por completo. |

116| `SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS` | `900000` | Quanto tempo o executor aguarda após uma sessão atingir seu limite `--kill-session-after-min`, para um turno em execução terminar ou a liberação ser concluída, antes de encerrar a sessão |116| `SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS` | `900000` | Por quanto tempo o runner aguarda, depois que uma sessão atinge seu limite de `--kill-session-after-min`, que um turno em execução termine ou que a liberação seja concluída, antes de encerrar a sessão |

117| `SELF_HOSTED_RUNNER_POST_TURN_SETTLE_MS` | `7000` | Limite superior de quanto tempo o executor conta uma sessão como ocupada para a drenagem `--drain-wait-sec` após um turno terminar, enquanto o processo da sessão relata o fim do turno para a Anthropic. `0` ou um valor inutilizável volta ao padrão, para que a retenção não possa ser desligada. Requer Claude Code v2.1.275 ou posterior. |117| `SELF_HOSTED_RUNNER_POST_TURN_SETTLE_MS` | `7000` | Limite máximo de quanto tempo o runner considera uma sessão ocupada para a drenagem de `--drain-wait-sec` depois que um turno termina, enquanto o processo da sessão informa o fim do turno à Anthropic. `0` ou um valor inutilizável volta ao padrão, portanto a retenção não pode ser desativada. Requer Claude Code v2.1.275 ou posterior. |

118| `SELF_HOSTED_RUNNER_SIGKILL_GRACE_MS` | `30000` | Quanto tempo o executor aguarda o SO entregar `SIGKILL` para um filho preso em I/O não interruptível antes de sair ele mesmo. Limitado a `--post-session-hook-timeout-sec` mais 15 segundos, e 30 mais quando `--push-outcome-on-release` está definido, então o mínimo efetivo é 75 segundos nos padrões. |118| `SELF_HOSTED_RUNNER_SIGKILL_GRACE_MS` | `30000` | Por quanto tempo o runner aguarda que o sistema operacional entregue `SIGKILL` a um processo filho travado em I/O ininterruptível antes de ele próprio encerrar. Tem como valor mínimo `--post-session-hook-timeout-sec` mais 15 segundos, e mais 30 quando `--push-outcome-on-release` está definido, de modo que o mínimo efetivo é de 75 segundos com os valores padrão. |

119| `CLAUDE_RUNNER_FETCH_DEPTH` | `50` | Profundidade de busca git para clones frescos. Defina um inteiro positivo, ou `full` ou `0` para uma busca completa. Repositórios já presentes no workspace mantêm sua profundidade existente. |119| `CLAUDE_RUNNER_FETCH_DEPTH` | `50` | Profundidade do git fetch para clones novos. Defina um número inteiro positivo, ou `full` ou `0` para um fetch completo. Para um clone que já está no workspace, consulte [Reutilizar um checkout pré-aquecido](https://code.claude.com/docs/pt/self-hosted-environments-deploy.md#reuse-a-pre-warmed-checkout). |

120| `CLAUDE_RUNNER_FETCH_SERVER_PROGRESS_CAP_MS` | `600000` | Quanto tempo em milissegundos, por tentativa, uma busca git pode aguardar seus primeiros dados enquanto os próprios números de progresso do servidor git continuam subindo, como quando o servidor prepara o pack para um repositório grande. `0` ou `off` desativa a espera: essa busca é então interrompida após dois minutos sem dados. Qualquer outro número inteiro é limitado entre `120000` e `1800000`, de 2 a 30 minutos. Requer Claude Code v2.1.295 ou posterior. |120| `CLAUDE_RUNNER_FETCH_SERVER_PROGRESS_CAP_MS` | `600000` | Por quanto tempo em milissegundos, por tentativa, um git fetch pode aguardar seus primeiros dados enquanto os próprios números de progresso do servidor git continuam aumentando, como quando o servidor prepara o pack para um repositório grande. `0` ou `off` desativa a espera: esse fetch é então interrompido após dois minutos sem dados. Qualquer outro número inteiro é restringido ao intervalo entre `120000` e `1800000`, de 2 a 30 minutos. Requer Claude Code v2.1.295 ou posterior. |

121| `CLAUDE_RUNNER_SKIP_GIT_VERIFY` | não definido | Quando `1`, pule a verificação de presença `.git` após um hook `checkout` ser executado. Defina isso quando seu hook materializa uma fonte não-git. |121| `CLAUDE_RUNNER_SKIP_GIT_VERIFY` | não definida | Quando `1`, ignora a verificação da presença de `.git` após a execução de um hook `checkout`. Defina isso quando seu hook materializar uma fonte que não seja git. |

122| `FORCE_AUTOUPDATE_PLUGINS` | não definido | Quando `1`, deixe marketplaces de plugin se atualizarem automaticamente mesmo que o binário esteja fixado |122| `FORCE_AUTOUPDATE_PLUGINS` | não definida | Quando `1`, permite que os marketplaces de plugins sejam atualizados automaticamente mesmo com o binário fixado |

123| `CLAUDE_CODE_DISABLE_ARTIFACT` | não definido | Quando `1`, desabilite a ferramenta Artifact em sessões independentemente da configuração de administrador da organização, e solte o requisito de saída `*.frame.claudeusercontent.com` |123| `CLAUDE_CODE_DISABLE_ARTIFACT` | não definida | Quando `1`, desativa a ferramenta Artifact nas sessões independentemente da configuração de administrador da organização e remove o requisito de saída para `*.frame.claudeusercontent.com` |

124 124 

125## Telemetria125## Telemetria

126 126 


231 interval: 30s231 interval: 30s

232```232```

233 233 

234### Regras de alerta de exemplo

235 

234Essas regras de alerta de exemplo são um ponto de partida; ajuste os limites para o tamanho da sua frota:236Essas regras de alerta de exemplo são um ponto de partida; ajuste os limites para o tamanho da sua frota:

235 237 

236```yaml theme={null}238```yaml theme={null}


253 annotations:255 annotations:

254 summary: "Executores estão executando versões mistas"256 summary: "Executores estão executando versões mistas"

255 - alert: ClaudeRunnerInitErrorsHigh257 - alert: ClaudeRunnerInitErrorsHigh

256 expr: increase(claude_code_self_hosted_runner_session_init_errors_total[10m]) > 3258 expr: sum by (namespace) (increase(claude_code_self_hosted_runner_session_init_errors_total[10m])) > 3

257 for: 5m259 for: 5m

258 labels: {severity: warning}260 labels: {severity: warning}

259 annotations:261 annotations:

260 summary: "Executor {{ $labels.pod }}: >3 falhas de inicialização de sessão em 10m (hook de checkout / git / token / falha pré-inicialização)"262 summary: "Sessões estão falhando antes da inicialização (hook de checkout / git / token / falha pré-inicialização)"

261 - alert: ClaudeRunnerPollErrors263 - alert: ClaudeRunnerPollErrors

262 expr: sum by (pod) (rate(claude_code_self_hosted_runner_poll_errors_total[5m])) > 0264 expr: sum by (pod) (rate(claude_code_self_hosted_runner_poll_errors_total[5m])) > 0

263 for: 2m265 for: 2m


265 annotations:267 annotations:

266 summary: "Executor {{ $labels.pod }}: PollWork falhando ({{ $value | humanize }}/s em 5m)"268 summary: "Executor {{ $labels.pod }}: PollWork falhando ({{ $value | humanize }}/s em 5m)"

267 - alert: ClaudeRunnerSessionStartHookErrors269 - alert: ClaudeRunnerSessionStartHookErrors

268 expr: increase(claude_code_self_hosted_runner_session_start_hook_errors_total[10m]) > 3270 expr: sum by (namespace) (increase(claude_code_self_hosted_runner_session_start_hook_errors_total[10m])) > 3

269 for: 5m271 for: 5m

270 labels: {severity: warning}272 labels: {severity: warning}

271 annotations:273 annotations:

272 summary: "Executor {{ $labels.pod }}: >3 falhas de hook SessionStart em 10m"274 summary: "Hooks SessionStart estão falhando"

273 275 

274 - name: claude-code-self-hosted-orchestrator276 - name: claude-code-self-hosted-orchestrator

275 rules:277 rules:


286 annotations:288 annotations:

287 summary: "Orquestrador {{ $labels.pod }} não pesquisou em >90s (loop de pesquisa aguarda execução de hook)"289 summary: "Orquestrador {{ $labels.pod }} não pesquisou em >90s (loop de pesquisa aguarda execução de hook)"

288 - alert: ClaudeOrchestratorCircuitBroken290 - alert: ClaudeOrchestratorCircuitBroken

289 expr: claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions > 0291 expr: max by (namespace) (claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions and on (instance) max_over_time(claude_code_self_hosted_orchestrator_connected[2m]) == 1) > 0

290 for: 1m292 for: 1m

291 labels: {severity: critical}293 labels: {severity: critical}

292 annotations:294 annotations:


305 summary: "Orquestrador {{ $labels.pod }}: >3 falhas de hook spawn-runner em 5m"307 summary: "Orquestrador {{ $labels.pod }}: >3 falhas de hook spawn-runner em 5m"

306```308```

307 309 

310### Alertar sobre executores perdidos e sessões em espera

311 

312Em uma [frota fixa](https://code.claude.com/docs/pt/self-hosted-environments-deploy.md#scale-the-fleet), carregue `ClaudeRunnersBelowFloor`. Com [executores sob demanda](https://code.claude.com/docs/pt/self-hosted-environments-configuration.md#on-demand-runners), carregue `ClaudeOrchestratorSessionsWaiting` e `ClaudeOrchestratorQueueWaitHigh` em vez disso.

313 

314#### Alertar quando uma frota fixa perde executores

315 

316`ClaudeRunnersBelowFloor` dispara quando restam menos executores registrados e raspados do que o piso por 10 minutos:

317 

318```yaml theme={null}

319groups:

320 # Apenas frotas fixas. Com executores sob demanda, a contagem acompanha a demanda,

321 # então ClaudeRunnersBelowFloor dispararia sempre que a demanda fosse baixa.

322 - name: claude-code-self-hosted-fixed-fleet-capacity

323 rules:

324 - alert: ClaudeRunnersBelowFloor

325 expr: (count(claude_code_self_hosted_runner_info{namespace="claude-runners"}) or vector(0)) < 2

326 for: 10m

327 labels: {severity: critical, namespace: claude-runners}

328 annotations:

329 summary: "Executores registrados e raspados: {{ $value }}, abaixo do piso. Verifique primeiro as cargas de trabalho dos executores e, se todas estiverem em execução, os alvos de raspagem."

330```

331 

332* **Piso**: defina o `2` em `expr` para cerca de metade da sua contagem de réplicas, arredondado para cima. Com três réplicas, mantenha `2`, e o alerta dispara quando resta um executor ou nenhum.

333* **Namespace**: substitua `claude-runners` no matcher e em `labels`, e copie o alerta para cada namespace adicional. Se seus alvos não tiverem o rótulo `namespace`, remova o matcher e o rótulo, ou o alerta lerá 0 e disparará.

334* **`ClaudeRunnerPollStale` e `ClaudeRunnerPollErrors`**: mantenha-os carregados a partir das [regras de alerta de exemplo](#sample-alert-rules), porque `ClaudeRunnersBelowFloor` ainda conta um executor que não consegue pesquisar

335 

336#### Alertar quando sessões aguardam executores sob demanda

337 

338`ClaudeOrchestratorSessionsWaiting` dispara quando o número de sessões aguardando um executor permanece acima de 0 por 10 minutos. `ClaudeOrchestratorQueueWaitHigh` dispara quando mais de 1% das esperas na fila nos últimos 10 minutos excederam 160 segundos, e isso se mantém por 5 minutos:

339 

340```yaml theme={null}

341groups:

342 # Apenas executores sob demanda. Não precisa de edição para o namespace.

343 - name: claude-code-self-hosted-on-demand-capacity

344 rules:

345 - alert: ClaudeOrchestratorSessionsWaiting

346 expr: |

347 max by (namespace) (

348 claude_code_self_hosted_orchestrator_pool_pending_sessions

349 and on (instance)

350 max_over_time(claude_code_self_hosted_orchestrator_connected[2m]) == 1

351 ) > 0

352 for: 10m

353 labels: {severity: warning}

354 annotations:

355 summary: "Sessões aguardando um executor: {{ $value }}, acima do limite por 10 minutos. Verifique claude_code_self_hosted_orchestrator_spawn_hooks_total por resultado e, em seguida, as cargas de trabalho dos executores que não iniciam."

356 - alert: ClaudeOrchestratorQueueWaitHigh

357 expr: |

358 histogram_quantile(0.99, sum by (namespace, le) (

359 rate(claude_code_self_hosted_orchestrator_session_queue_wait_seconds_bucket[10m])

360 )) > 160

361 for: 5m

362 labels: {severity: warning}

363 annotations:

364 summary: "Mais de 1% das esperas na fila nos últimos 10 minutos excederam 160 segundos. Verifique se ClaudeOrchestratorDisconnected está disparando e, em seguida, claude_code_self_hosted_orchestrator_spawn_hooks_total por resultado e claude_code_self_hosted_orchestrator_spawn_hook_duration_seconds."

365```

366 

367* **Limite**: se alguma sessão estiver sempre aguardando, aumente o `> 0` em `ClaudeOrchestratorSessionsWaiting` para acima do número que você normalmente vê

368* **`ClaudeOrchestratorDisconnected`**: mantenha-o carregado a partir das [regras de alerta de exemplo](#sample-alert-rules), porque `ClaudeOrchestratorSessionsWaiting` para de disparar cerca de 2 minutos após o último orquestrador no namespace se desconectar

369 

308### Passar através de métricas de filho de sessão370### Passar através de métricas de filho de sessão

309 371 

310Cada sessão é executada em seu próprio processo filho com suas próprias métricas OpenTelemetry; em `--capacity` acima de um, o executor reescreve como essas métricas de filho são expostas. Definir `OTEL_METRICS_EXPORTER=prometheus` no host do executor e `CLAUDE_CODE_ENABLE_TELEMETRY=1` no ambiente da sessão, por exemplo a partir de seu [script wrapper](https://code.claude.com/docs/pt/self-hosted-environments-configuration.md#wrapper-scripts) ou do próprio ambiente do executor, que as sessões herdam, re-expõe cada instrumento de contador e medidor do filho no ponto de extremidade `/metrics` do próprio executor, ao lado das séries do executor. O executor reescreve o exportador do filho para enviar por OTLP para um receptor somente de loopback na porta de saúde, marca cada série com rótulos `session_id` e `client_platform`, e remove as séries de uma sessão quando essa sessão termina. Histogramas não passam, e uma métrica de filho cujo nome colidiria com o prefixo do próprio executor é descartada.372Cada sessão é executada em seu próprio processo filho com suas próprias métricas OpenTelemetry; em `--capacity` acima de um, o executor reescreve como essas métricas de filho são expostas. Definir `OTEL_METRICS_EXPORTER=prometheus` no host do executor e `CLAUDE_CODE_ENABLE_TELEMETRY=1` no ambiente da sessão, por exemplo a partir de seu [script wrapper](https://code.claude.com/docs/pt/self-hosted-environments-configuration.md#wrapper-scripts) ou do próprio ambiente do executor, que as sessões herdam, re-expõe cada instrumento de contador e medidor do filho no ponto de extremidade `/metrics` do próprio executor, ao lado das séries do executor. O executor reescreve o exportador do filho para enviar por OTLP para um receptor somente de loopback na porta de saúde, marca cada série com rótulos `session_id` e `client_platform`, e remove as séries de uma sessão quando essa sessão termina. Histogramas não passam, e uma métrica de filho cujo nome colidiria com o prefixo do próprio executor é descartada.

Details

324}324}

325```325```

326 326 

327Uma entrada de ID de modelo como `"claude-opus-5"` também permite versões posteriores que a estendem, como Opus 5.5. Para bloquear uma dessas versões, use [`deniedModels`](#deniedmodels). Para fazer cada entrada de ID de modelo permitir apenas a versão que ela nomeia, use [`availableModelsMatch`](#availablemodelsmatch). Consulte [Restrinja a seleção de modelo](https://code.claude.com/docs/pt/model-config.md#restrict-model-selection).327Uma entrada de ID de modelo como `"claude-opus-5"` também permite versões posteriores que a estendem, como Opus 5.5. Para bloquear uma dessas versões, use [`deniedModels`](#deniedmodels). Para fazer cada entrada de ID de modelo permitir apenas a versão que ela nomeia, use [`availableModelsMatch`](#availablemodelsmatch). Consulte [Restrinja a seleção de modelo](https://code.claude.com/docs/pt/model-config.md#restrict-model-selection). Para IDs de provedores de terceiros, consulte [Fixe modelos para implantações de terceiros](https://code.claude.com/docs/pt/model-config.md#pin-models-for-third-party-deployments).

328 328 

329### `availableModelsMatch`329### `availableModelsMatch`

330 330 


333* **Escopo**: [`Gerenciado`](#scopes). Claude Code ignora a chave em configurações de usuário, projeto e local e em `--settings`, com um aviso333* **Escopo**: [`Gerenciado`](#scopes). Claude Code ignora a chave em configurações de usuário, projeto e local e em `--settings`, com um aviso

334* **Tipo**: string, um de:334* **Tipo**: string, um de:

335 * `"prefix"`: uma entrada de ID de modelo permite sua versão e qualquer ID de modelo que a estenda com outro segmento335 * `"prefix"`: uma entrada de ID de modelo permite sua versão e qualquer ID de modelo que a estenda com outro segmento

336 * `"exact"`: uma entrada de ID de modelo permite apenas a versão que ela nomeia, incluindo os IDs datados dessa versão, então `"claude-opus-5"` permite Opus 5 mas não `claude-opus-5-5`. Um alias de família como `"opus"` ainda permite toda a família, e entradas `best`, `opusplan` e `default` são ignoradas336 * `"exact"`: uma entrada de ID de modelo permite apenas a versão que ela nomeia, então `"claude-opus-5"` permite Opus 5 mas não `claude-opus-5-5`. Uma entrada como `"claude-opus-4-5"` também permite seu ID de modelo Anthropic datado `claude-opus-4-5-20251101`. Um alias de família como `"opus"` ainda permite toda a família, e entradas `best`, `opusplan` e `default` são ignoradas

337* **Padrão**: `"prefix"`337* **Padrão**: `"prefix"`

338 338 

339Este exemplo permite Opus 5 e Sonnet 5 e nenhuma versão posterior de nenhum deles:339Este exemplo permite Opus 5 e Sonnet 5 e nenhuma versão posterior de nenhum deles:


1371 1371 

1372Claude Code remove uma barra final de um caminho de diretório, então `~/.aws` e `~/.aws/` correspondem ao mesmo diretório. Antes da v2.1.224, Claude Code passava a barra final para o sandbox, e Claude ainda podia ler ou escrever caminhos sob uma entrada `denyRead` ou `denyWrite` escrita com uma.1372Claude Code remove uma barra final de um caminho de diretório, então `~/.aws` e `~/.aws/` correspondem ao mesmo diretório. Antes da v2.1.224, Claude Code passava a barra final para o sandbox, e Claude ainda podia ler ou escrever caminhos sob uma entrada `denyRead` ou `denyWrite` escrita com uma.

1373 1373 

1374Claude Code também remove um `/**` final, então `~/build/**` e `~/build` cobrem o mesmo diretório. Se um curinga como `*` funciona depende de qual lista a entrada está e da plataforma:1374##### Onde os curingas funcionam nos caminhos do sandbox

1375 1375 

1376* **`allowWrite` e `denyWrite`**: em macOS, curingas funcionam. No Linux e WSL2, o sandbox monta caminhos concretos, então Claude Code ignora uma entrada que contém `*`, `?` ou `[` uma vez que o `/**` final é removido, e essa entrada não tem efeito. Claude Code adiciona os caminhos de suas regras de permissão `Edit` a essas listas, então o mesmo limite se aplica a elas, e a aba **Config** do `/sandbox` avisa sobre regras de permissão `Edit` e `Read` que contêm curingas.1376Os curingas `*`, `?` e `**` funcionam nas quatro listas de caminhos de `sandbox.filesystem` no macOS e em menos lugares no Linux e no WSL2:

1377* **`denyRead` e `allowRead`**: curingas funcionam em todas as plataformas. No Linux e WSL2, Claude Code expande uma entrada de leitura para os caminhos concretos que ela corresponde, o que não faz para as listas de escrita.

1378 1377 

1379Chaves são tratadas como caracteres comuns em um nome, então `~/data/{keys,tokens}` cobre um diretório literalmente chamado `{keys,tokens}`, não duas alternativas. Para cobrir `~/data/keys` e `~/data/tokens`, adicione cada um como sua própria entrada.1378| Lista de `sandbox.filesystem` | O que funciona no Linux e no WSL2 | Exemplo que não funciona no Linux e no WSL2 | O que escrever em vez disso |

1379| :- | :- | :- | :- |

1380| `denyRead`, `allowRead` | Um `/**` final funciona, então `~/build/**` cobre o mesmo diretório que `~/build`. Qualquer outro curinga funciona somente após o primeiro nome de diretório do [caminho completo](#sandbox-path-prefixes) da entrada. | `/**/*.pem` em `denyRead` não cobre nada, então não bloqueia nenhuma leitura | `/srv/**/*.pem`, com uma entrada para cada diretório de nível superior |

1381| `allowWrite`, `denyWrite` | Somente um `/**` final funciona, então `~/build/**` cobre o mesmo diretório que `~/build` | `./src/*` cobre apenas um arquivo ou diretório em `src` cujo nome seja literalmente `*`, e nada quando não houver um | `./src`, que cobre tudo sob `src`, ou uma entrada para cada caminho |

1382 

1383Em `~/keys/*.pem`, o curinga vem depois do primeiro nome de diretório, que é `home` para um diretório pessoal `/home/alice`:

1384 

1385```text theme={null}

1386~/keys/*.pem the entry

1387/home/alice/keys/*.pem its full path

1388 ^^^^ the first directory name, home

1389```

1390 

1391No Linux e no WSL2, a aba **Config** do `/sandbox` em uma sessão avisa sobre regras de permissão `Edit` que contêm um curinga diferente de um `/**` final. Esses curingas não funcionam para comandos em sandbox. Adicione cada caminho que a regra deveria cobrir, ou o diretório que os contém, a `allowWrite` no caso de uma regra allow ou a `denyWrite` no caso de uma regra deny.

1392 

1393##### Nomes de diretório com colchetes, chaves ou parênteses

1394 

1395Para permitir ou bloquear um diretório cujo nome contém colchetes, escreva o nome como ele é, por exemplo `./app/[slug]`. Nessa entrada, `[slug]` é o nome real do diretório, com os colchetes:

1396 

1397```text theme={null}

1398app/

1399└── [slug]/

1400 └── page.tsx

1401```

1402 

1403Essa entrada cobre tudo sob o diretório, então omita um `/**` final. No macOS e no Linux e WSL2, o diretório `app/[slug]` precisa existir quando o comando em sandbox é iniciado.

1404 

1405* **Colchetes como `[slug]`**: em todas as listas no macOS, e em `denyRead` e `allowRead` no Linux e WSL2, os colchetes em `./app/[slug]` também são um padrão. A entrada então também corresponde a qualquer caminho sob `app` nomeado com um caractere de `slug`, como `app/s` ou `app/g`. Com essa entrada em `allowRead`, ou em `allowWrite` no macOS, os comandos em sandbox também podem acessar esses caminhos. Renomeie os que eles não devem acessar.

1406* **Colchetes como `[user-id]` ou `[post-id]`, em que o caractere à esquerda do hífen é ordenado depois do caractere à direita**: `./app/[user-id]` cobre apenas o diretório com exatamente esse nome, em todas as listas e em todas as plataformas. Antes da v2.1.304, os comandos em sandbox no Linux e WSL2 não conseguiam iniciar enquanto `denyRead` ou `allowRead` contivesse uma entrada desse tipo.

1407* **Chaves e parênteses**: esses são caracteres comuns, então `~/data/{keys,tokens}` cobre um diretório chamado `{keys,tokens}`, não duas alternativas. Para cobrir `~/data/keys` e `~/data/tokens`, adicione cada um como uma entrada separada.

1380 1408 

1381### `sandbox.filesystem.allowWrite`1409### `sandbox.filesystem.allowWrite`

1382 1410 


3470 3498 

3471A correspondência de nome de host não diferencia maiúsculas de minúsculas e trata `hooks.example.com.`, com o ponto final que marca um nome de domínio totalmente qualificado, da mesma forma que `hooks.example.com`, que é como o DNS os trata. A allowlist se aplica a hooks de todas as fontes, incluindo configurações gerenciadas.3499A correspondência de nome de host não diferencia maiúsculas de minúsculas e trata `hooks.example.com.`, com o ponto final que marca um nome de domínio totalmente qualificado, da mesma forma que `hooks.example.com`, que é como o DNS os trata. A allowlist se aplica a hooks de todas as fontes, incluindo configurações gerenciadas.

3472 3500 

3473Na opção `managedSettings` do Agent SDK, Claude Code ignora essa chave quando sua lista tem entradas, portanto passe a lista na opção `settings` do SDK em vez disso. Consulte [o que cada valor faz nas configurações pai](https://code.claude.com/docs/pt/claude-apps-gateway#how-hook-and-skill-keys-in-parent-settings-take-effect).3501Na opção `managedSettings` do Agent SDK, Claude Code ignora uma lista com entradas, portanto passe-a na [opção `settings`](https://code.claude.com/docs/pt/agent-sdk/typescript#options) do SDK em vez disso. Consulte [o que uma lista vazia faz nas configurações pai](https://code.claude.com/docs/pt/claude-apps-gateway#how-hook-and-skill-keys-in-parent-settings-take-effect).

3474 3502 

3475### `allowManagedHooksOnly`3503### `allowManagedHooksOnly`

3476 3504 


3520O alcance depende de qual arquivo carrega a chave:3548O alcance depende de qual arquivo carrega a chave:

3521 3549 

3522* **Em configurações gerenciadas**: Claude Code desativa todos os hooks configurados, incluindo os gerenciados, e continua executando os hooks que o [Agent SDK](https://code.claude.com/docs/pt/agent-sdk/overview.md) registra em processo3550* **Em configurações gerenciadas**: Claude Code desativa todos os hooks configurados, incluindo os gerenciados, e continua executando os hooks que o [Agent SDK](https://code.claude.com/docs/pt/agent-sdk/overview.md) registra em processo

3523* **Na opção `managedSettings` do Agent SDK**: Claude Code trata a chave como `allowManagedHooksOnly: true`, portanto consulte [o que é executado sob `allowManagedHooksOnly`](#what-runs-under-allowmanagedhooksonly) para saber quais hooks param. Em uma máquina onde um administrador implanta configurações gerenciadas, Claude Code ignora essa chave a menos que o administrador [permita que um host incorporador adicione políticas](https://code.claude.com/docs/pt/managed-settings.md#let-an-embedding-host-add-policy). Requer Claude Code v2.1.309 ou posterior.3551* **Na opção `managedSettings` do Agent SDK**: em uma máquina onde um administrador implanta configurações gerenciadas, Claude Code ignora essa chave a menos que o administrador [permita que um host incorporador adicione políticas](https://code.claude.com/docs/pt/managed-settings.md#let-an-embedding-host-add-policy). Onde a chave tem efeito, hooks de usuário, projeto, local e plugin param, assim como quaisquer hooks na opção `settings` do SDK. Os hooks gerenciados de um administrador, os hooks de plugins [forçadamente ativados](#enabledplugins) e seus [callbacks de hook do SDK](https://code.claude.com/docs/pt/agent-sdk/hooks.md) continuam sendo executados. Requer Claude Code v2.1.309 ou posterior.

3524* **Em qualquer outro arquivo de configurações**: Claude Code desativa hooks de usuário, projeto, local e plugin; hooks gerenciados, hooks do Agent SDK e hooks de plugins forçadamente ativados em [`enabledPlugins`](#enabledplugins) gerenciado continuam sendo executados3552* **Em qualquer outro arquivo de configurações**: Claude Code desativa hooks de usuário, projeto, local e plugin; hooks gerenciados, hooks do Agent SDK e hooks de plugins forçadamente ativados em [`enabledPlugins`](#enabledplugins) gerenciado continuam sendo executados

3525 3553 

3526A chave também interrompe [mods](https://code.claude.com/docs/pt/plugins/mods/overview.md), que são plugins cujo código registra hooks:3554A chave também interrompe [mods](https://code.claude.com/docs/pt/plugins/mods/overview.md), que são plugins cujo código registra hooks:


3624 3652 

3625A allowlist se aplica a hooks de todas as fontes, incluindo configurações gerenciadas.3653A allowlist se aplica a hooks de todas as fontes, incluindo configurações gerenciadas.

3626 3654 

3627Na opção `managedSettings` do Agent SDK, Claude Code ignora essa chave quando sua lista tem entradas, portanto passe a lista na opção `settings` do SDK em vez disso. Consulte [o que cada valor faz nas configurações pai](https://code.claude.com/docs/pt/claude-apps-gateway#how-hook-and-skill-keys-in-parent-settings-take-effect).3655Na opção `managedSettings` do Agent SDK, Claude Code ignora uma lista com entradas, portanto passe-a na [opção `settings`](https://code.claude.com/docs/pt/agent-sdk/typescript#options) do SDK em vez disso. Consulte [o que uma lista vazia faz nas configurações pai](https://code.claude.com/docs/pt/claude-apps-gateway#how-hook-and-skill-keys-in-parent-settings-take-effect).

3628 3656 

3629### `workflowKeywordTriggerEnabled`3657### `workflowKeywordTriggerEnabled`

3630 3658 


3841* **Type**: Boolean3869* **Type**: Boolean

3842 * `true`: Claude Code nunca executa o comando declarado pelo marketplace, não instala ou atualiza plugins originários de comando, e para de carregar os já instalados3870 * `true`: Claude Code nunca executa o comando declarado pelo marketplace, não instala ou atualiza plugins originários de comando, e para de carregar os já instalados

3843 * `false`: Claude Code permite plugins originários de comando explicitamente3871 * `false`: Claude Code permite plugins originários de comando explicitamente

3844* **Default**: não definido, portanto Claude Code segue [`allowManagedHooksOnly`](#allowmanagedhooksonly): uma organização que restringe execução de hook a configurações gerenciadas também obtém fontes de comando desabilitadas3872* **Default**: não definido, portanto Claude Code segue [`allowManagedHooksOnly`](#allowmanagedhooksonly): uma organização que restringe execução de hook a configurações gerenciadas também obtém fontes de comando desabilitadas. Uma aplicação que passa [`disableAllHooks: true`](#disableallhooks) na opção `managedSettings` do Agent SDK não desabilita, por si só, fontes de comando.

3845 3873 

3846```json managed-settings.json theme={null}3874```json managed-settings.json theme={null}

3847{3875{

Details

127 127 

128```bash ~/.tmux.conf theme={null}128```bash ~/.tmux.conf theme={null}

129set -g allow-passthrough on129set -g allow-passthrough on

130set -g focus-events on

130set -s extended-keys on131set -s extended-keys on

131set -as terminal-features 'xterm*:extkeys'132set -as terminal-features 'xterm*:extkeys'

132```133```

133 134 

134A linha `allow-passthrough` permite que notificações e atualizações de progresso cheguem ao terminal externo em vez de serem engolidas pelo tmux. As linhas `extended-keys` permitem que o tmux distinga Shift+Enter de Enter simples para que o atalho de nova linha funcione.135A linha `allow-passthrough` permite que notificações e atualizações de progresso cheguem ao terminal externo em vez de serem engolidas pelo tmux. As linhas `extended-keys` permitem que o tmux distinga Shift+Enter de Enter simples para que o atalho de nova linha funcione.

135 136 

137Um [`Image` de um mod](https://code.claude.com/docs/pt/plugins/mods/reference#elements) precisa das linhas `allow-passthrough` e `focus-events`, junto com os outros [requisitos para desenhar dentro do tmux](https://code.claude.com/docs/pt/plugins/mods/gallery.md#draw-an-image-inside-tmux). Depois de adicionar as linhas, desanexe-se também do tmux, anexe-se novamente e reinicie o Claude Code.

138 

136## Corrigir Backspace deletando uma palavra inteira no Windows139## Corrigir Backspace deletando uma palavra inteira no Windows

137 140 

138No Windows, Claude Code lê um Backspace que chega como `^H` como Ctrl+Backspace, que [deleta a palavra anterior](https://code.claude.com/docs/pt/interactive-mode.md#text-editing), exceto quando `TERM_PROGRAM` é `mintty` ou `TERM` é `cygwin`. No macOS e Linux, Claude Code o lê como Backspace simples.141No Windows, Claude Code lê um Backspace que chega como `^H` como Ctrl+Backspace, que [deleta a palavra anterior](https://code.claude.com/docs/pt/interactive-mode.md#text-editing), exceto quando `TERM_PROGRAM` é `mintty` ou `TERM` é `cygwin`. No macOS e Linux, Claude Code o lê como Backspace simples.

ultrareview.md +2 −2

Details

176O subcomando sai com um dos três códigos:176O subcomando sai com um dos três códigos:

177 177 

178* **0**: a revisão foi concluída, com ou sem descobertas178* **0**: a revisão foi concluída, com ou sem descobertas

179* **1**: a revisão falhou ao iniciar ou foi interrompida antes de terminar, a sessão na nuvem apresentou erro ou o timeout expirou. O código também é 1 quando a [pasta não é confiável](#trust-the-folder-before-the-review-runs), inclusive quando você responde `n` ou pressiona Ctrl-C na pergunta de confiança.179* **1**: a revisão falhou ao iniciar ou foi interrompida antes de terminar, a sessão na nuvem apresentou erro ou o timeout expirou. O código também é 1 quando a [pasta não é confiável](#trust-the-folder-before-the-review-runs), inclusive quando você responde `n`, pressiona Enter ou pressiona Ctrl-C na pergunta de confiança.

180* **130**: você pressionou Ctrl-C enquanto o subcomando estava iniciando a revisão, aguardando as descobertas ou enviando o comentário de `--post`, e não na pergunta de confiança180* **130**: você pressionou Ctrl-C enquanto o subcomando estava iniciando a revisão, aguardando as descobertas ou enviando o comentário de `--post`, e não na pergunta de confiança

181 181 

182Se o subcomando sair antes que as descobertas cheguem, elas nunca chegam ao seu terminal. A revisão ainda pode estar em execução na nuvem. Executar o subcomando novamente inicia uma nova revisão em vez de retomar aquela, e a nova revisão [usa uma execução gratuita ou é cobrada como créditos de uso](#pricing-and-free-runs).182Se o subcomando sair antes que as descobertas cheguem, elas nunca chegam ao seu terminal. A revisão ainda pode estar em execução na nuvem. Executar o subcomando novamente inicia uma nova revisão em vez de retomar aquela, e a nova revisão [usa uma execução gratuita ou é cobrada como créditos de uso](#pricing-and-free-runs).


198claude ultrareview 1234 --trust-workspace198claude ultrareview 1234 --trust-workspace

199```199```

200 200 

201Para revisar um pull request não confiável, execute `claude ultrareview <PR number> --trust-workspace` a partir de um branch em que você confia. Ao contrário de `y`, a flag não salva nada. O PR é [clonado na nuvem](#review-a-pull-request), então você não precisa do branch dele localmente.201Para revisar um pull request não confiável, execute `claude ultrareview <PR number> --trust-workspace` a partir de um branch em que você confia. O PR é [clonado na nuvem](#review-a-pull-request), então você não precisa do branch dele localmente.

202 202 

203## Como ultrareview se compara a /code-review203## Como ultrareview se compara a /code-review

204 204 

vs-code.md +6 −1

Details

1001 1001 

1002### O ditado ou a aba Web falha atrás de um proxy com inspeção TLS1002### O ditado ou a aba Web falha atrás de um proxy com inspeção TLS

1003 1003 

1004Quando o ditado ou a aba Web falha com um erro de certificado como `unable to get local issuer certificate`, defina [`NODE_EXTRA_CA_CERTS`](https://code.claude.com/docs/pt/network-config#custom-ca-certificates) no bloco `env` de `~/.claude/settings.json`. Defina-o como o caminho de um arquivo PEM com o certificado da CA raiz do seu proxy, que sua equipe de TI pode fornecer. Esse texto de erro aparece no botão do microfone ou nos logs da extensão:1004Quando o ditado ou a aba Web falha com um erro de certificado como `unable to get local issuer certificate`, defina [`NODE_EXTRA_CA_CERTS`](https://code.claude.com/docs/pt/network-config#custom-ca-certificates) no bloco `env` de `~/.claude/settings.json`. Defina-o como o caminho de um arquivo PEM com o certificado da CA raiz do seu proxy, que sua equipe de TI pode fornecer. A falha aparece no botão do microfone ou na aba Web, ou nos logs:

1005 1005 

1006* **Ditado**: o botão do microfone mostra o texto de erro após `Dictation error: WebSocket error:`.1006* **Ditado**: o botão do microfone mostra o texto de erro após `Dictation error: WebSocket error:`.

1007* **Aba Web**: a aba que lista as [sessões na nuvem](#resume-cloud-sessions-from-claude-ai) mostra `Remote server is not connected` sem o texto de erro. Para lê-lo nos logs:1007* **Aba Web**: a aba que lista as [sessões na nuvem](#resume-cloud-sessions-from-claude-ai) mostra `Remote server is not connected` sem o texto de erro. Para lê-lo nos logs:

1008 1. Execute **Claude Code: Show Logs** na [Paleta de Comandos](#vs-code-commands-and-shortcuts) para abrir o canal de saída `Claude VSCode`.1008 1. Execute **Claude Code: Show Logs** na [Paleta de Comandos](#vs-code-commands-and-shortcuts) para abrir o canal de saída `Claude VSCode`.

1009 2. Clique em **Reconnect** na aba e aguarde até que ela pare de mostrar `Connecting…`.1009 2. Clique em **Reconnect** na aba e aguarde até que ela pare de mostrar `Connecting…`.

1010 3. Pesquise no canal por `Error fetching remote sessions:` ou `Failed to fetch organization UUID:` e, em seguida, leia o texto de erro após esse prefixo na linha correspondente mais recente.1010 3. Pesquise no canal por `Error fetching remote sessions:` ou `Failed to fetch organization UUID:` e, em seguida, leia o texto de erro após esse prefixo na linha correspondente mais recente.

1011* **Aviso no log**: um aviso que menciona `an authority that Claude Code does not trust` relata um erro de certificado. Atrás de um proxy com inspeção TLS, defina `NODE_EXTRA_CA_CERTS` em `env` em `~/.claude/settings.json`. Versões anteriores à v2.1.309 não registram esse aviso em log.

1011 1012 

1012Esta correção requer a versão 2.1.307 ou posterior da extensão, portanto atualize a extensão primeiro. Em seguida, defina `NODE_EXTRA_CA_CERTS` como o caminho completo do arquivo de certificado, escrito sem `~`. Para um caminho do Windows, escreva cada barra invertida duas vezes em `settings.json`, como em `C:\\certs\\example-ca.pem`.1013Esta correção requer a versão 2.1.307 ou posterior da extensão, portanto atualize a extensão primeiro. Em seguida, defina `NODE_EXTRA_CA_CERTS` como o caminho completo do arquivo de certificado, escrito sem `~`. Para um caminho do Windows, escreva cada barra invertida duas vezes em `settings.json`, como em `C:\\certs\\example-ca.pem`.

1013 1014 

1015> [!NOTE]

1016>

1017> Em uma janela conectada ao WSL, a um host SSH, a um dev container ou a outro sistema, salve o arquivo de certificado e edite `~/.claude/settings.json` nesse sistema, não no seu computador local.

1018 

1014Este exemplo indica um arquivo de certificado no caminho Linux ou macOS `/etc/ssl/certs/example-ca.pem`:1019Este exemplo indica um arquivo de certificado no caminho Linux ou macOS `/etc/ssl/certs/example-ca.pem`:

1015 1020 

1016```json ~/.claude/settings.json theme={null}1021```json ~/.claude/settings.json theme={null}