SpyBara
Go Premium

Documentation 2026-10-09 23:02 UTC to 2026-10-10 03:59 UTC

19 files changed +458 −110. View all changes and history on the product overview
2026
Sat 10 05:00 Fri 9 23:02 Thu 8 22:58 Wed 7 23:59 Tue 6 23:59 Mon 5 23:58 Sun 4 23:58 Sat 3 23:57 Fri 2 22:59 Thu 1 23:59
Details

124 124 

125Sem mensagens parciais ativadas, você recebe todos os tipos de mensagem, exceto `StreamEvent`. Os tipos comuns incluem `SystemMessage` (inicialização de sessão), `AssistantMessage` (blocos de conteúdo completos), `ResultMessage` (resultado final) e uma mensagem de limite compacta indicando quando o histórico de conversa foi compactado (`SDKCompactBoundaryMessage` em TypeScript; `SystemMessage` com subtipo `"compact_boundary"` em Python).125Sem mensagens parciais ativadas, você recebe todos os tipos de mensagem, exceto `StreamEvent`. Os tipos comuns incluem `SystemMessage` (inicialização de sessão), `AssistantMessage` (blocos de conteúdo completos), `ResultMessage` (resultado final) e uma mensagem de limite compacta indicando quando o histórico de conversa foi compactado (`SDKCompactBoundaryMessage` em TypeScript; `SystemMessage` com subtipo `"compact_boundary"` em Python).

126 126 

127<h3 id="handle-a-stream-that’s-cut-off">

128 Lidar com um stream interrompido

129</h3>

130 

131Se um stream for interrompido no meio de uma mensagem, como quando você interrompe o turno ou a conexão cai, você ainda recebe o `message_stop` dessa mensagem antes que o turno termine. Um bloco de texto ou de pensamento interrompido também recebe seu `content_block_stop`. Uma chamada de ferramenta interrompida não recebe, portanto, se `message_stop` chegar enquanto o bloco de uma chamada de ferramenta ainda estiver aberto, trate a entrada dessa chamada como incompleta.

132 

133Antes do Claude Code v2.1.290, um stream interrompido podia encerrar o turno sem `message_stop`, de modo que uma resposta que você renderiza a partir de eventos de stream podia continuar sendo exibida como em andamento. O Agent SDK para TypeScript inclui o Claude Code v2.1.290 ou posterior a partir da v0.3.290, e o Agent SDK para Python a partir da v0.2.164. Se uma resposta continuar sendo exibida como em andamento após o término do turno, atualize o SDK.

134 

127<h2 id="stream-tool-calls">135<h2 id="stream-tool-calls">

128 Transmitir chamadas de ferramentas136 Transmitir chamadas de ferramentas

129</h2>137</h2>

Details

1588 1588 

1589Associe as mensagens de um subagente aos seus eventos de tarefa pelo `agent_id`, em vez de parear o `parent_tool_use_id` de uma mensagem com o `tool_use_id` de um evento de tarefa. Quando uma chamada de ferramenta retoma o subagente, os eventos de tarefa carregam o `tool_use_id` dessa chamada, enquanto as mensagens mantêm o `parent_tool_use_id` da chamada de ferramenta que iniciou o subagente pela primeira vez, de modo que os dois deixam de corresponder.1589Associe as mensagens de um subagente aos seus eventos de tarefa pelo `agent_id`, em vez de parear o `parent_tool_use_id` de uma mensagem com o `tool_use_id` de um evento de tarefa. Quando uma chamada de ferramenta retoma o subagente, os eventos de tarefa carregam o `tool_use_id` dessa chamada, enquanto as mensagens mantêm o `parent_tool_use_id` da chamada de ferramenta que iniciou o subagente pela primeira vez, de modo que os dois deixam de corresponder.

1590 1590 

1591Claude Code define `user_message_uuid` e `user_message_uuids` na primeira mensagem do assistente do turno, sob as condições em [`user_message_uuid`](#user_message_uuid). Quando Claude Code re-executa um turno que uma reinicialização interrompeu, as mensagens do assistente da re-execução que carregam esses campos também carregam [`resume_reason`](#resume_reason).1591O Claude Code define `user_message_uuid` e `user_message_uuids` na primeira mensagem do assistente do turno, nas condições descritas em [`user_message_uuid`](#user_message_uuid). Quando o turno continua um que uma reinicialização interrompeu, as mensagens do assistente que carregam esses campos também carregam [`resume_reason`](#resume_reason).

1592 1592 

1593`timestamp` é a hora ISO 8601 quando o conteúdo da mensagem terminou de ser gerado no processo que o produziu. O valor vem do relógio dessa máquina, portanto use-o apenas para exibição e não ordene mensagens por ele. Um turno de API pode produzir várias mensagens do assistente que compartilham um `message.id`, cada uma com seu próprio `timestamp`. Quando o campo está ausente, recorra à hora em que você recebeu a mensagem.1593`timestamp` é a hora ISO 8601 quando o conteúdo da mensagem terminou de ser gerado no processo que o produziu. O valor vem do relógio dessa máquina, portanto use-o apenas para exibição e não ordene mensagens por ele. Um turno de API pode produzir várias mensagens do assistente que compartilham um `message.id`, cada uma com seu próprio `timestamp`. Quando o campo está ausente, recorra à hora em que você recebeu a mensagem.

1594 1594 


1631 1631 

1632Defina `inline_pastes` para informar ao Claude Code quais partes de `message.content` o usuário colou em vez de digitar, uma string por colagem. O texto do prompt permanece onde o usuário o colocou. O Claude Code pode envolver cada colagem listada em tags `<pasted_content>` no local em que ela está, para que o Claude consiga distinguir o material colado das palavras do próprio usuário. Apenas colagens no último bloco de texto do prompt são envolvidas. Requer o TypeScript Agent SDK v0.3.280 ou posterior.1632Defina `inline_pastes` para informar ao Claude Code quais partes de `message.content` o usuário colou em vez de digitar, uma string por colagem. O texto do prompt permanece onde o usuário o colocou. O Claude Code pode envolver cada colagem listada em tags `<pasted_content>` no local em que ela está, para que o Claude consiga distinguir o material colado das palavras do próprio usuário. Apenas colagens no último bloco de texto do prompt são envolvidas. Requer o TypeScript Agent SDK v0.3.280 ou posterior.

1633 1633 

1634Cada campo de colagem tem um limite de tamanho:

1635 

1636* `pasted_content`: se as entradas mais os blocos de conteúdo dentro delas somarem mais de 1.000, o Claude Code ignora o campo inteiro.

1637* `inline_pastes`: o Claude Code usa as primeiras 100 entradas que não estão em branco e ignora o restante.

1638 

1634Defina `shouldQuery`, `client_composed` ou `priority` para alterar como o Claude Code trata uma mensagem que você envia:1639Defina `shouldQuery`, `client_composed` ou `priority` para alterar como o Claude Code trata uma mensagem que você envia:

1635 1640 

1636* `shouldQuery`: defina como `false` para anexar a mensagem à transcrição sem disparar um turno do assistente. A mensagem é mantida e mesclada na próxima mensagem do usuário que dispara um turno. Use isso para injetar contexto, como a saída de um comando que você executou fora de banda, sem gastar uma chamada de modelo.1641* `shouldQuery`: defina como `false` para anexar a mensagem à transcrição sem disparar um turno do assistente. A mensagem é mantida e mesclada na próxima mensagem do usuário que dispara um turno. Use isso para injetar contexto, como a saída de um comando que você executou fora de banda, sem gastar uma chamada de modelo.


1775* `ttft_stream_ms`: tempo em milissegundos até o primeiro evento de stream `message_start`, quando o stream de resposta abre. Menor que `ttft_ms`; a diferença entre os dois é o tempo gasto transmitindo a primeira mensagem. Presente apenas no braço de sucesso.1780* `ttft_stream_ms`: tempo em milissegundos até o primeiro evento de stream `message_start`, quando o stream de resposta abre. Menor que `ttft_ms`; a diferença entre os dois é o tempo gasto transmitindo a primeira mensagem. Presente apenas no braço de sucesso.

1776* `user_message_uuid`: o `uuid` da mensagem que você enviou que este turno respondeu. Consulte [`user_message_uuid`](#user_message_uuid) para saber quais resultados o carregam.1781* `user_message_uuid`: o `uuid` da mensagem que você enviou que este turno respondeu. Consulte [`user_message_uuid`](#user_message_uuid) para saber quais resultados o carregam.

1777* `user_message_uuids`: os `uuid`s de cada mensagem que você enviou que Claude Code respondeu neste turno. Consulte [`user_message_uuids`](#user_message_uuids).1782* `user_message_uuids`: os `uuid`s de cada mensagem que você enviou que Claude Code respondeu neste turno. Consulte [`user_message_uuids`](#user_message_uuids).

1778* `resume_reason`: por que o Claude Code executou novamente este turno depois que uma reinicialização o interrompeu. Presente em ambos os ramos. Consulte [`resume_reason`](#resume_reason).1783* `resume_reason`: por que este turno continua um que uma reinicialização interrompeu. Presente em ambos os ramos. Consulte [`resume_reason`](#resume_reason).

1779* `local_command`: o nome do comando que o turno despachou, no resultado de sucesso de um turno que um comando completou sem entrar no loop do agente, como `/compact`. O nome é convertido para letras minúsculas e underscores, portanto `/reload-plugins` relata `reload_plugins`. Um comando que um servidor MCP fornece, e o `/mcp` integrado, relatam `mcp`. Um comando que você mesmo definiu relata `custom`. Os argumentos nunca são incluídos. Ausente em cada turno que entrou no loop do agente e em envios que não executaram nenhum comando. Requer Agent SDK v0.3.268 ou posterior.1784* `local_command`: o nome do comando que o turno despachou, no resultado de sucesso de um turno que um comando completou sem entrar no loop do agente, como `/compact`. O nome é convertido para letras minúsculas e underscores, portanto `/reload-plugins` relata `reload_plugins`. Um comando que um servidor MCP fornece, e o `/mcp` integrado, relatam `mcp`. Um comando que você mesmo definiu relata `custom`. Os argumentos nunca são incluídos. Ausente em cada turno que entrou no loop do agente e em envios que não executaram nenhum comando. Requer Agent SDK v0.3.268 ou posterior.

1780* `request_sent_wall_ms`: milissegundos de época em que Claude Code despachou a requisição de API, para junções com timestamps do lado do servidor. Presente apenas junto com [`user_message_uuid`](#user_message_uuid), em um resultado de sucesso com `is_error` false cujo turno enviou uma requisição de API.1785* `request_sent_wall_ms`: milissegundos de época em que Claude Code despachou a requisição de API, para junções com timestamps do lado do servidor. Presente apenas junto com [`user_message_uuid`](#user_message_uuid), em um resultado de sucesso com `is_error` false cujo turno enviou uma requisição de API.

1781* `first_content_frame_ms`: tempo em milissegundos até o primeiro evento de stream `content_block_start` ou `content_block_delta`, contando blocos de pensamento como conteúdo. Presente apenas no braço de sucesso, quando `is_error` é false. Requer Agent SDK v0.3.260 ou posterior.1786* `first_content_frame_ms`: tempo em milissegundos até o primeiro evento de stream `content_block_start` ou `content_block_delta`, contando blocos de pensamento como conteúdo. Presente apenas no braço de sucesso, quando `is_error` é false. Requer Agent SDK v0.3.260 ou posterior.


1825 1830 

1826* **Uma mensagem regular que você enviou**, ou seja, uma sem `isSynthetic: true`: o turno responde a essa mensagem durante toda a sua execução. Quando você envia várias mensagens próximas, Claude Code pode mesclá-las em um turno, e o campo então carrega apenas o `uuid` da última mensagem. Para corresponder a resposta a qualquer uma das mensagens mescladas, use [`user_message_uuids`](#user_message_uuids).1831* **Uma mensagem regular que você enviou**, ou seja, uma sem `isSynthetic: true`: o turno responde a essa mensagem durante toda a sua execução. Quando você envia várias mensagens próximas, Claude Code pode mesclá-las em um turno, e o campo então carrega apenas o `uuid` da última mensagem. Para corresponder a resposta a qualquer uma das mensagens mescladas, use [`user_message_uuids`](#user_message_uuids).

1827* **Uma mensagem que você enviou com `isSynthetic: true`**: o turno responde a essa mensagem no início. Se Claude Code captar uma mensagem regular sua entre chamadas de ferramenta, o turno responde à mensagem captada a partir de então. Ecoar o `uuid` de uma mensagem sintética requer Agent SDK v0.3.265 ou posterior; versões anteriores não ecoam nada em turnos sintéticos.1832* **Uma mensagem que você enviou com `isSynthetic: true`**: o turno responde a essa mensagem no início. Se Claude Code captar uma mensagem regular sua entre chamadas de ferramenta, o turno responde à mensagem captada a partir de então. Ecoar o `uuid` de uma mensagem sintética requer Agent SDK v0.3.265 ou posterior; versões anteriores não ecoam nada em turnos sintéticos.

1828* **O prompt que Claude Code gera para re-executar um turno interrompido sob [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/pt/env-vars)**: quando o último prompt do turno interrompido é uma mensagem regular que você enviou, independentemente de ela ter aberto o turno ou de Claude Code tê-la captado durante o turno, a re-execução responde a essa mensagem no início. [`resume_reason`](#resume_reason) distingue os quadros da re-execução dos da tentativa interrompida. Quando o último prompt não é uma mensagem regular sua, a re-execução não responde a nenhuma mensagem sua no início. Se Claude Code captar uma mensagem regular sua entre chamadas de ferramenta, o turno responde à mensagem captada a partir de então. Ecoar o prompt do turno interrompido requer Agent SDK v0.3.268 ou posterior.1833* **O prompt que o Claude Code gera para continuar um turno interrompido sob [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/pt/env-vars)**: quando o último prompt do turno interrompido é uma mensagem regular que você enviou, seja ela a que abriu o turno ou uma que o Claude Code captou durante o turno, o turno continuado responde a essa mensagem inicialmente. [`resume_reason`](#resume_reason) distingue os frames do turno continuado dos da tentativa interrompida. Quando o último prompt não é uma mensagem regular sua, o turno continuado inicialmente não responde a nenhuma mensagem sua. Se o Claude Code captar uma mensagem regular sua entre chamadas de ferramenta, o turno passa a responder à mensagem captada a partir de então. Ecoar o prompt do turno interrompido requer o Agent SDK v0.3.268 ou posterior.

1829* **Qualquer outro prompt que Claude Code gerou por conta própria**: o turno não responde a nenhuma mensagem sua no início e seus quadros não carregam nenhum eco. Se Claude Code captar uma mensagem regular sua entre chamadas de ferramenta, o turno responde a essa mensagem a partir de então. O eco de captação requer Agent SDK v0.3.265 ou posterior; versões anteriores não ecoam nada nesses turnos.1834* **Qualquer outro prompt que Claude Code gerou por conta própria**: o turno não responde a nenhuma mensagem sua no início e seus quadros não carregam nenhum eco. Se Claude Code captar uma mensagem regular sua entre chamadas de ferramenta, o turno responde a essa mensagem a partir de então. O eco de captação requer Agent SDK v0.3.265 ou posterior; versões anteriores não ecoam nada nesses turnos.

1830 1835 

1831Claude Code ecoa o `uuid` da mensagem respondida em três tipos de quadro:1836Claude Code ecoa o `uuid` da mensagem respondida em três tipos de quadro:


1857 `resume_reason`1862 `resume_reason`

1858</h4>1863</h4>

1859 1864 

1860Por que Claude Code re-executou este turno após uma reinicialização. Claude Code define este campo em um turno que re-executou sob [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/pt/env-vars), para que você possa distinguir a resposta e o resultado da re-execução dos da tentativa interrompida. Requer Agent SDK v0.3.268 ou posterior.1865Por que este turno continua um que uma reinicialização interrompeu. O Claude Code define este campo em um turno que continua um turno interrompido sob [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/pt/env-vars), para que você possa distinguir a resposta e o resultado do turno continuado dos da tentativa interrompida. Requer o Agent SDK v0.3.268 ou posterior.

1861 1866 

1862Claude Code define o campo em dois tipos de quadro:1867Claude Code define o campo em dois tipos de quadro:

1863 1868 

1864* **O resultado da re-execução**: tanto no braço de sucesso quanto no de erro, independentemente de o resultado carregar `user_message_uuid`.1869* **O resultado do turno continuado**: tanto no ramo de sucesso quanto no de erro, quer o resultado carregue ou não `user_message_uuid`.

1865* **Os quadros de resposta da re-execução**: aqueles que carregam [`user_message_uuid`](#user_message_uuid).1870* **Os frames de resposta do turno continuado**: aqueles que carregam [`user_message_uuid`](#user_message_uuid).

1866 1871 

1867O valor é um token curto em minúsculas que nomeia por que o turno foi executado novamente, como `interrupted_turn`.1872O valor é um token curto em minúsculas, como `interrupted_turn`.

1868 1873 

1869<h4 id="queued_turn_count">1874<h4 id="queued_turn_count">

1870 `queued_turn_count`1875 `queued_turn_count`


2029};2034};

2030```2035```

2031 2036 

2032Claude Code define `user_message_uuid` e `user_message_uuids` no primeiro evento de stream não-ping do turno, e novamente quando a mensagem que o turno está respondendo muda, sob as condições em [`user_message_uuid`](#user_message_uuid). Quando Claude Code re-executa um turno que uma reinicialização interrompeu, os eventos de stream da re-execução que carregam esses campos também carregam [`resume_reason`](#resume_reason).2037O Claude Code define `user_message_uuid` e `user_message_uuids` no primeiro evento de stream do turno que não seja ping, e novamente quando a mensagem que o turno está respondendo muda, nas condições descritas em [`user_message_uuid`](#user_message_uuid). Quando o turno continua um que uma reinicialização interrompeu, os eventos de stream que carregam esses campos também carregam [`resume_reason`](#resume_reason).

2033 2038 

2034<h3 id="sdkcompactboundarymessage">2039<h3 id="sdkcompactboundarymessage">

2035 `SDKCompactBoundaryMessage`2040 `SDKCompactBoundaryMessage`


3560| - | - | - |3565| - | - | - |

3561| `script` | `string` | Script de workflow inline. Deve começar com `export const meta = { name, description }` como um literal, seguido pelo corpo do script usando `agent()`, `parallel()`, `pipeline()` e `phase()`. Um array `phases` opcional em `meta` agrupa agentes sob estágios nomeados na visualização de progresso |3566| `script` | `string` | Script de workflow inline. Deve começar com `export const meta = { name, description }` como um literal, seguido pelo corpo do script usando `agent()`, `parallel()`, `pipeline()` e `phase()`. Um array `phases` opcional em `meta` agrupa agentes sob estágios nomeados na visualização de progresso |

3562| `name` | `string` | Nome de um workflow integrado ou um salvo em `.claude/workflows/`. Resolvido para um script |3567| `name` | `string` | Nome de um workflow integrado ou um salvo em `.claude/workflows/`. Resolvido para um script |

3563| `scriptPath` | `string` | Caminho para um arquivo de script de workflow no disco. Tem precedência sobre `script` e `name`. Claude Code persiste cada invocação do script e retorna o caminho no resultado, para que você possa editar esse arquivo e reinvocar com o mesmo `scriptPath` para iterar |3568| `scriptPath` | `string` | Caminho para um arquivo de script de workflow no disco, como o `scriptPath` que uma execução anterior retornou. Tem precedência sobre `script` e `name`. Claude Code rejeita `scriptPath` com um erro quando as ferramentas da sessão não incluem `Read` |

3564| `args` | `unknown` | Valor de entrada exposto ao script como o `args` global, para workflows nomeados parametrizados, como uma pergunta de pesquisa ou uma lista de caminhos de arquivo. Passe arrays e objetos como valores JSON reais, não como uma string codificada em JSON |3569| `args` | `unknown` | Valor de entrada exposto ao script como o `args` global, para workflows nomeados parametrizados, como uma pergunta de pesquisa ou uma lista de caminhos de arquivo. Passe arrays e objetos como valores JSON reais, não como uma string codificada em JSON |

3565| `resumeFromRunId` | `string` | ID de execução de uma invocação anterior de `Workflow` para retomar. Chamadas `agent()` concluídas com entradas inalteradas geralmente retornam resultados em cache; o resto é executado ao vivo. [Retomar após uma pausa](/docs/pt/workflows#resume-after-a-pause) cobre quais chamadas concluídas são re-executadas. Apenas a mesma sessão |3570| `resumeFromRunId` | `string` | ID de execução de uma invocação anterior de `Workflow` para retomar. Chamadas `agent()` concluídas com entradas inalteradas geralmente retornam resultados em cache; o resto é executado ao vivo. [Retomar após uma pausa](/docs/pt/workflows#resume-after-a-pause) cobre quais chamadas concluídas são re-executadas. Apenas a mesma sessão |

3566| `title` | `string` | Ignorado; o bloco `meta` do script define o título |3571| `title` | `string` | Ignorado; o bloco `meta` do script define o título |

chrome.md +3 −4

Details

129 Prompts de permissão em sessões do VS Code129 Prompts de permissão em sessões do VS Code

130</h3>130</h3>

131 131 

132Em uma sessão do VS Code, se Claude Code pergunta a você antes de uma ação do navegador depende de como a sessão se conectou ao seu navegador:132Em uma sessão do VS Code, quando Claude Code pergunta a você antes de uma ação do navegador, o prompt aparece como um cartão no painel de chat. Quando a ação tem como alvo um site que você não permitiu, o cartão também oferece a opção de permitir esse site.

133 133 

134* **Você digitou `@browser`**: a extensão aprova cada ação do navegador sobre a qual Claude Code, de outra forma, perguntaria a você.134Em uma sessão que se conectou ao seu navegador ao iniciar porque [Enabled by default](#enable-chrome-by-default) está ativado, Claude Code pergunta a você antes de ações do navegador em um site que você não permitiu, nos modos de permissão Manual, Edit automatically, Auto e Bypass permissions. Nos modos de permissão Auto e Bypass permissions, isso se aplica até que você digite `@browser` nessa sessão.

135* **A configuração [Enabled by default](#enable-chrome-by-default) a conectou ao iniciar**: Claude Code pergunta a você antes de ações do navegador em um site que você não permitiu, nos modos de permissão Manual, Edit automatically, Auto e Bypass permissions, até que você digite `@browser` nessa sessão.

136 135 

137<h3 id="browser-tools-in-plan-mode">136<h3 id="browser-tools-in-plan-mode">

138 Ferramentas do navegador no modo de plano137 Ferramentas do navegador no modo de plano

139</h3>138</h3>

140 139 

141No [modo de planejamento](/docs/pt/permission-modes#analyze-before-you-edit-with-plan-mode), um prompt de permissão aparece antes de Claude gravar um GIF, abrir uma nova aba ou executar um atalho, exceto em uma sessão do VS Code em que você digitou [`@browser`](#permission-prompts-in-vs-code-sessions). Em uma sessão interativa da CLI, se o [modo de bypass de permissões estiver disponível](/docs/pt/permission-modes#skip-all-checks-with-bypasspermissions-mode) e a [busca de sinalizador de recurso](/docs/pt/env-vars#features-that-need-feature-flag-fetching) estiver desativada, essas chamadas são executadas sem um prompt.140No [modo de planejamento](/docs/pt/permission-modes#analyze-before-you-edit-with-plan-mode), um prompt de permissão aparece antes de Claude gravar um GIF, abrir uma nova aba ou executar um atalho. Em uma sessão interativa da CLI, se o [modo de bypass de permissões estiver disponível](/docs/pt/permission-modes#skip-all-checks-with-bypasspermissions-mode) e a [busca de feature flags](/docs/pt/env-vars#features-that-need-feature-flag-fetching) estiver desativada, essas chamadas são executadas sem um prompt.

142 141 

143Uma chamada `tabs_context_mcp` também solicita quando define `createIfEmpty`, e o mesmo ocorre com uma chamada `browser_batch` que inclui qualquer uma dessas ações.142Uma chamada `tabs_context_mcp` também solicita quando define `createIfEmpty`, e o mesmo ocorre com uma chamada `browser_batch` que inclui qualquer uma dessas ações.

144 143 

Details

981 * **Chaves misturadas**: um arquivo que tem tanto `code` quanto `cli`, ou sua grafia anterior `settings`, interrompe o gateway na inicialização. Coloque todos os blocos sob uma única chave, em uma única edição.981 * **Chaves misturadas**: um arquivo que tem tanto `code` quanto `cli`, ou sua grafia anterior `settings`, interrompe o gateway na inicialização. Coloque todos os blocos sob uma única chave, em uma única edição.

982</Warning>982</Warning>

983 983 

984As configurações do Claude Code de uma política, como uma regra que nega a leitura de arquivos `.env`, ficam em um bloco sob a chave `cli` ou `code`. Ambas as chaves aceitam o mesmo conteúdo. A chave decide onde as configurações são aplicadas:984As configurações do Claude Code de uma política, como uma regra que nega a leitura de arquivos `.env`, ficam em um bloco sob a chave `cli` ou `code`. `code` é a chave recomendada, e `cli` é a chave legada. Ambas as chaves aceitam o mesmo conteúdo. A chave decide onde as configurações são aplicadas:

985 985 

986* **`cli`**: o terminal, as extensões do VS Code e do JetBrains e o Agent SDK. Com `cli`, a aba Code do Claude Desktop recebe as [configurações derivadas](#claude-desktop-overlay), então uma regra com escopo como `Read(./.env)` não impede um usuário ali.986* **`cli`**: o terminal, as extensões do VS Code e do JetBrains e o Agent SDK. Com `cli`, a aba Code do Claude Desktop recebe as [configurações derivadas](#claude-desktop-overlay), então uma regra com escopo como `Read(./.env)` não impede um usuário ali.

987* **`code`**: os mesmos lugares, e a aba Code do Claude Desktop também pode ser coberta.987* **`code`**: os mesmos lugares, e a aba Code do Claude Desktop também pode ser coberta.

988 988 

989A escolha é se essas configurações também devem cobrir a aba Code. Se não, não altere nada. Um arquivo que usa `cli` funciona como antes, e um gateway que encontra `cli` em uma política com uma chave [`desktop`](#claude-desktop-overlay) emite um aviso na inicialização e inicia mesmo assim. Para cobrir a aba Code, mude para `code`, a chave recomendada.989Um arquivo que usa `cli` funciona como antes, e um gateway que encontra `cli` em uma política com uma chave [`desktop`](#claude-desktop-overlay) emite um aviso na inicialização e inicia mesmo assim. Mude para `code` para que as configurações também possam cobrir a aba Code.

990 990 

991Antes de mudar, leia [Aplicar configurações de `code` na aba Code](#apply-code-settings-in-the-code-tab). A política precisa de uma chave `desktop` e as máquinas dos usuários precisam de configuração antes que as configurações se apliquem ali, e a pesquisa na web é desativada no Claude Desktop.991Antes de mudar, leia [Aplicar configurações de `code` na aba Code](#apply-code-settings-in-the-code-tab). A política precisa de uma chave `desktop` e as máquinas dos usuários precisam de configuração antes que as configurações se apliquem ali, e a pesquisa na web é desativada no Claude Desktop.

992 992 

Details

277 277 

278As threads são executadas em [modo auto](/docs/pt/permission-modes#eliminate-prompts-with-auto-mode) quando o modelo da thread o suporta, então a maioria das chamadas de ferramenta são executadas sem pedir a você. Quando uma thread precisa de sua aprovação, o prompt está dentro dessa thread e a thread aguarda até que você responda lá. Dizer a Claude na conversa do projeto para prosseguir não a alcança.278As threads são executadas em [modo auto](/docs/pt/permission-modes#eliminate-prompts-with-auto-mode) quando o modelo da thread o suporta, então a maioria das chamadas de ferramenta são executadas sem pedir a você. Quando uma thread precisa de sua aprovação, o prompt está dentro dessa thread e a thread aguarda até que você responda lá. Dizer a Claude na conversa do projeto para prosseguir não a alcança.

279 279 

280Cada aprovação cobre esse prompt, ou o resto dessa thread se você escolher a opção mais ampla. Para deixar cada thread executar certos comandos sem perguntar, ou para bloquear alguns, adicione [regras de permissão](/docs/pt/permissions) ao `.claude/settings.json` do repositório. As threads as aplicam apenas em um projeto com um repositório; veja [O que as threads pegam de seus repositórios](#what-threads-pick-up-from-your-repositories). Em um projeto com vários repositórios, nenhuma regra de permissão do repositório alcança uma thread na nuvem, então você depende do modo auto e das aprovações que você dá dentro de cada thread.280Cada aprovação cobre esse prompt, ou o resto dessa thread se você escolher a opção mais ampla.

281 

282Para deixar cada thread executar certos comandos sem perguntar, ou para bloquear alguns, adicione [regras de permissão](/docs/pt/permissions) ao `.claude/settings.json` do repositório. Verifique se as threads na nuvem do seu projeto as aplicam:

283 

284* **Um repositório**: as threads na nuvem aplicam as regras. Veja [O que as threads pegam de seus repositórios](#what-threads-pick-up-from-your-repositories).

285* **Vários repositórios, ambiente hospedado pela Anthropic**: nenhuma regra de permissão de repositório alcança uma thread na nuvem, então você depende do modo auto e das aprovações que você dá dentro de cada thread.

286* **Vários repositórios, ambiente auto-hospedado**: veja [quais configurações de repositório se aplicam](/docs/pt/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories).

281 287 

282<h3 id="run-a-thread-on-your-own-computer">288<h3 id="run-a-thread-on-your-own-computer">

283 Executar uma thread no seu próprio computador289 Executar uma thread no seu próprio computador


381 O que as threads pegam de seus repositórios387 O que as threads pegam de seus repositórios

382</h3>388</h3>

383 389 

384Cada thread em nuvem clona cada repositório no projeto e carrega `CLAUDE.md` e skills de todos eles. Regras de permissão, hooks e `env` vêm apenas do `.claude/settings.json` no diretório em que a thread começa: dentro do repositório quando o projeto tem um, e acima dos clones quando tem vários, onde nenhum arquivo de repositório é lido para eles.390Cada thread em nuvem clona cada repositório no projeto e carrega `CLAUDE.md` e skills de todos eles. Regras de permissão, hooks e `env` vêm apenas do `.claude/settings.json` no diretório em que a thread começa.

385 391 

386| Em cada repositório | Um repositório | Vários repositórios |392| Em cada repositório | Um repositório | Vários repositórios |

387| :- | :- | :- |393| :- | :- | :- |

388| `CLAUDE.md` | Carregado quando a thread começa | Carregado de cada repositório quando a thread começa |394| `CLAUDE.md` | Carregado quando a thread começa | Carregado de cada repositório quando a thread começa |

389| Skills, agentes e comandos em `.claude/` | Carregado | Carregado de cada repositório |395| Skills, agentes e comandos em `.claude/` | Carregado | Carregado de cada repositório |

390| Plugins habilitados em `.claude/settings.json` | Não carregado. Adicione o plugin em **Project settings > Plugins** em vez disso | Não carregado. Adicione o plugin em **Project settings > Plugins** em vez disso |396| Plugins habilitados em `.claude/settings.json` | Não carregado. Adicione o plugin em **Project settings > Plugins** em vez disso | Não carregado. Adicione o plugin em **Project settings > Plugins** em vez disso |

391| Regras de permissão, hooks e `env` definidos em `.claude/settings.json` | Aplicam-se à thread, exceto as chaves `env` que [nenhuma sessão na nuvem honra](/docs/pt/cloud-environments#what-carries-over-from-your-setup) | Não se aplicam |397| Regras de permissão, hooks e `env` definidos em `.claude/settings.json` | Aplicam-se à thread, exceto as chaves `env` que [nenhuma sessão na nuvem honra](/docs/pt/cloud-environments#what-carries-over-from-your-setup) | Não se aplicam em um ambiente hospedado pela Anthropic. Para um ambiente auto-hospedado, veja [quais configurações de repositório se aplicam](/docs/pt/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories) |

392 398 

393Em um projeto com vários repositórios, cada clone é anexado à thread como um [diretório adicional](/docs/pt/memory#load-from-additional-directories) com carregamento de `CLAUDE.md` ativado, e é por isso que o `CLAUDE.md` e as skills de cada repositório carregam no início mesmo que a thread comece acima deles. Em tal projeto, coloque regras permanentes em instruções do projeto e dê às threads variáveis de ambiente através do [ambiente em nuvem](#choose-an-environment-for-threads).399Em um projeto com vários repositórios, coloque regras permanentes em instruções do projeto e dê às threads variáveis de ambiente através do [ambiente em nuvem](#choose-an-environment-for-threads).

394 400 

395<h3 id="choose-an-environment-for-threads">401<h3 id="choose-an-environment-for-threads">

396 Escolher um ambiente para threads402 Escolher um ambiente para threads


406 412 

407As threads em nuvem não têm as skills, servidores MCP, plugins e ferramentas instalados apenas na sua máquina. Uma thread que Claude executa na sua máquina através de [Remote Control](/docs/pt/remote-control) usa o que está instalado lá. Para disponibilizar cada um desses para threads em nuvem:413As threads em nuvem não têm as skills, servidores MCP, plugins e ferramentas instalados apenas na sua máquina. Uma thread que Claude executa na sua máquina através de [Remote Control](/docs/pt/remote-control) usa o que está instalado lá. Para disponibilizar cada um desses para threads em nuvem:

408 414 

409* Skills, subagentes e comandos: faça commit deles em um repositório que você adicionou ao projeto, por exemplo uma skill em `.claude/skills/<skill-name>/SKILL.md`. Cada thread em nuvem clona cada repositório no projeto e carrega `.claude/skills/`, `.claude/agents/` e `.claude/commands/` de cada um deles, então uma skill com commit em um repositório está disponível em cada thread em nuvem. As threads em nuvem também carregam as skills que você habilita para sua conta claude.ai.415* Skills, subagentes e comandos: faça commit deles em um repositório que você adicionou ao projeto, por exemplo uma skill em `.claude/skills/<skill-name>/SKILL.md`. Cada thread em nuvem clona cada repositório no projeto e carrega `.claude/skills/`, `.claude/agents/` e `.claude/commands/` de cada um deles, então uma skill com commit em um repositório está disponível em cada thread em nuvem. As threads em nuvem também carregam as [skills que você habilita para sua conta claude.ai](/docs/pt/skills#skills-in-cowork-and-cloud-sessions).

410* Plugins: adicione-os em **Project settings > Plugins**; eles carregam em cada nova thread em nuvem. Plugins que um repositório declara em seu `.claude/settings.json` [não carregam em threads em nuvem](/docs/pt/cloud-environments#what-carries-over-from-your-setup).416* Plugins: adicione-os em **Project settings > Plugins**; eles carregam em cada nova thread em nuvem. Plugins que um repositório declara em seu `.claude/settings.json` [não carregam em threads em nuvem](/docs/pt/cloud-environments#what-carries-over-from-your-setup).

411* Servidores MCP: as threads em nuvem obtêm suas ferramentas MCP dos conectores em sua conta claude.ai, que são servidores MCP que você conecta uma vez em [claude.ai/customize/connectors](https://claude.ai/customize/connectors) ou através do link **Manage connectors** em **Project settings > Environment**. Cada thread em nuvem pode usar todos eles sem configuração por projeto. A conversa do projeto em si não tem conectores, então envie trabalho que precisa de um como uma tarefa para uma thread em nuvem. Em um projeto com um repositório, as threads em nuvem também carregam servidores MCP do [`.mcp.json`](/docs/pt/cloud-environments#what-carries-over-from-your-setup) desse repositório. [Como conectores alcançam Claude Code](/docs/pt/mcp#how-connectors-reach-claude-code) lista as regras para sessões na nuvem e as configurações que desativam conectores.417* Servidores MCP: as threads em nuvem obtêm suas ferramentas MCP dos conectores em sua conta claude.ai, que são servidores MCP que você conecta uma vez em [claude.ai/customize/connectors](https://claude.ai/customize/connectors) ou através do link **Manage connectors** em **Project settings > Environment**. Cada thread em nuvem pode usar todos eles sem configuração por projeto. A conversa do projeto em si não tem conectores, então envie trabalho que precisa de um como uma tarefa para uma thread em nuvem. Em um projeto com um repositório, as threads em nuvem também carregam servidores MCP do [`.mcp.json`](/docs/pt/cloud-environments#what-carries-over-from-your-setup) desse repositório. [Como conectores alcançam Claude Code](/docs/pt/mcp#how-connectors-reach-claude-code) lista as regras para sessões na nuvem e as configurações que desativam conectores.

412* Ferramentas de linha de comando e pacotes: instale-os no [script de configuração](/docs/pt/cloud-environments#setup-scripts) do ambiente.418* Ferramentas de linha de comando e pacotes: instale-os no [script de configuração](/docs/pt/cloud-environments#setup-scripts) do ambiente.

Details

108| `--maintenance` | Executar hooks de [Setup](/docs/pt/hooks#setup) com o matcher `maintenance` antes da sessão (apenas modo print) | `claude -p --maintenance "query"` |108| `--maintenance` | Executar hooks de [Setup](/docs/pt/hooks#setup) com o matcher `maintenance` antes da sessão (apenas modo print) | `claude -p --maintenance "query"` |

109| `--max-budget-usd` | Interromper a execução quando o gasto estimado em chamadas de API atingir este valor (apenas modo print). Claude Code compara o limite com sua [estimativa de custo do lado do cliente](/docs/pt/agent-sdk/cost-tracking#estimates-not-billing), que pode diferir da sua fatura. Gastos de [subagentes](/docs/pt/sub-agents) contam para o limite. O gasto pode ultrapassar o limite, portanto [deixe uma margem](/docs/pt/agent-sdk/agent-loop#budget-headroom). Quando você retorna a uma conversa com `--continue` ou `--resume`, totais [restaurados de execuções anteriores](/docs/pt/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls) não contam para ele. Uma vez que o gasto atinge o limite, gerar outro subagente falha com `Budget limit reached`, e Claude Code para subagentes de fundo que ainda estão em execução; os comportamentos de aplicação do limite requerem Claude Code v2.1.217 ou posterior | `claude -p --max-budget-usd 5.00 "query"` |109| `--max-budget-usd` | Interromper a execução quando o gasto estimado em chamadas de API atingir este valor (apenas modo print). Claude Code compara o limite com sua [estimativa de custo do lado do cliente](/docs/pt/agent-sdk/cost-tracking#estimates-not-billing), que pode diferir da sua fatura. Gastos de [subagentes](/docs/pt/sub-agents) contam para o limite. O gasto pode ultrapassar o limite, portanto [deixe uma margem](/docs/pt/agent-sdk/agent-loop#budget-headroom). Quando você retorna a uma conversa com `--continue` ou `--resume`, totais [restaurados de execuções anteriores](/docs/pt/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls) não contam para ele. Uma vez que o gasto atinge o limite, gerar outro subagente falha com `Budget limit reached`, e Claude Code para subagentes de fundo que ainda estão em execução; os comportamentos de aplicação do limite requerem Claude Code v2.1.217 ou posterior | `claude -p --max-budget-usd 5.00 "query"` |

110| `--max-turns` | Limitar o número de turnos de agente (apenas modo print). Sai com um erro quando o limite é atingido. Sem limite por padrão. Com `--input-format stream-json`, uma mensagem ainda enfileirada quando o limite termina um turno permanece enfileirada e inicia um novo turno com seu próprio limite | `claude -p --max-turns 3 "query"` |110| `--max-turns` | Limitar o número de turnos de agente (apenas modo print). Sai com um erro quando o limite é atingido. Sem limite por padrão. Com `--input-format stream-json`, uma mensagem ainda enfileirada quando o limite termina um turno permanece enfileirada e inicia um novo turno com seu próprio limite | `claude -p --max-turns 3 "query"` |

111| `--mcp-config` | Carregar servidores MCP de arquivos JSON ou strings (separados por espaço). Quando você passa este sinalizador com `-p`, Claude Code aguarda servidores ainda pendentes se conectarem antes de executar o primeiro turno, até o tempo limite de inicialização [`MCP_TIMEOUT`](/docs/pt/env-vars), 30 segundos por padrão; um servidor com uma [lista de ferramentas em cache](/docs/pt/mcp#managing-your-servers) pula a espera e se conecta no primeiro uso. A espera requer Claude Code v2.1.221 ou posterior | `claude --mcp-config ./mcp.json` |111| `--mcp-config` | Carregar servidores MCP de arquivos JSON ou strings (separados por espaço). Quando você passa este sinalizador com `-p`, Claude Code aguarda servidores ainda pendentes se conectarem antes de executar o primeiro turno, até o timeout de inicialização [`MCP_TIMEOUT`](/docs/pt/env-vars), 30 segundos por padrão; um servidor com uma [lista de ferramentas em cache](/docs/pt/mcp#managing-your-servers) pula a espera e se conecta no primeiro uso. Em um [ambiente auto-hospedado](/docs/pt/self-hosted-environments-configuration#connection-timing), uma espera mais curta se aplica em vez disso. A espera requer Claude Code v2.1.221 ou posterior | `claude --mcp-config ./mcp.json` |

112| `--model` | Define o modelo para a sessão atual com um [alias de modelo](/docs/pt/model-config#model-aliases) como `sonnet`, `opus`, `haiku` ou `fable`, ou o nome completo de um modelo. Substitui a configuração [`model`](/docs/pt/settings-reference#model) e [`ANTHROPIC_MODEL`](/docs/pt/model-config#environment-variables) | `claude --model claude-sonnet-5` |112| `--model` | Define o modelo para a sessão atual com um [alias de modelo](/docs/pt/model-config#model-aliases) como `sonnet`, `opus`, `haiku` ou `fable`, ou o nome completo de um modelo. Substitui a configuração [`model`](/docs/pt/settings-reference#model) e [`ANTHROPIC_MODEL`](/docs/pt/model-config#environment-variables) | `claude --model claude-sonnet-5` |

113| `--name`, `-n` | Definir um nome de exibição para a sessão, mostrado em `/resume` e no título do terminal. Você pode retomar uma sessão nomeada com `claude --resume <name>`. Em uma sessão interativa, se outra sessão ativa nesta máquina já usar o nome, Claude Code aplica [uma variante dele](/docs/pt/sessions#name-your-sessions) em vez disso. <br /><br />[`/rename`](/docs/pt/commands) altera o nome durante a sessão e também o mostra na barra de prompt | `claude -n "my-feature-work"` |113| `--name`, `-n` | Definir um nome de exibição para a sessão, mostrado em `/resume` e no título do terminal. Você pode retomar uma sessão nomeada com `claude --resume <name>`. Em uma sessão interativa, se outra sessão ativa nesta máquina já usar o nome, Claude Code aplica [uma variante dele](/docs/pt/sessions#name-your-sessions) em vez disso. <br /><br />[`/rename`](/docs/pt/commands) altera o nome durante a sessão e também o mostra na barra de prompt | `claude -n "my-feature-work"` |

114| `--no-chrome` | Desativar [integração do navegador Chrome](/docs/pt/chrome) para esta sessão | `claude --no-chrome` |114| `--no-chrome` | Desativar [integração do navegador Chrome](/docs/pt/chrome) para esta sessão | `claude --no-chrome` |

Details

314| Plugins e marketplaces declarados em seu `.claude/settings.json` do repositório | Não | Uma sessão na nuvem não instala os plugins que um repositório ativa em [`enabledPlugins`](/docs/pt/settings-reference#enabledplugins), incluindo aqueles dos marketplaces que lista em [`extraKnownMarketplaces`](/docs/pt/settings-reference#extraknownmarketplaces) |314| Plugins e marketplaces declarados em seu `.claude/settings.json` do repositório | Não | Uma sessão na nuvem não instala os plugins que um repositório ativa em [`enabledPlugins`](/docs/pt/settings-reference#enabledplugins), incluindo aqueles dos marketplaces que lista em [`extraKnownMarketplaces`](/docs/pt/settings-reference#extraknownmarketplaces) |

315| As [configurações gerenciadas pelo servidor](/docs/pt/server-managed-settings) de sua organização | Sim, exceto em sessões [Claude Tag](https://claude.com/docs/claude-tag/overview) | Buscadas dos servidores da Anthropic quando a sessão é iniciada. Veja [Cobertura de superfície](/docs/pt/model-config#surface-coverage) para como `availableModels` é aplicado em sessões na nuvem. As configurações implantadas em seu dispositivo através de MDM ou arquivos de configurações gerenciadas não se aplicam, porque a sessão é executada em uma VM gerenciada pela Anthropic; em um [ambiente auto-hospedado](/docs/pt/self-hosted-environments), as sessões também leem o arquivo de configurações gerenciadas na imagem do executor, por [como Claude Code combina fontes gerenciadas](/docs/pt/managed-settings#how-claude-code-combines-managed-sources) |315| As [configurações gerenciadas pelo servidor](/docs/pt/server-managed-settings) de sua organização | Sim, exceto em sessões [Claude Tag](https://claude.com/docs/claude-tag/overview) | Buscadas dos servidores da Anthropic quando a sessão é iniciada. Veja [Cobertura de superfície](/docs/pt/model-config#surface-coverage) para como `availableModels` é aplicado em sessões na nuvem. As configurações implantadas em seu dispositivo através de MDM ou arquivos de configurações gerenciadas não se aplicam, porque a sessão é executada em uma VM gerenciada pela Anthropic; em um [ambiente auto-hospedado](/docs/pt/self-hosted-environments), as sessões também leem o arquivo de configurações gerenciadas na imagem do executor, por [como Claude Code combina fontes gerenciadas](/docs/pt/managed-settings#how-claude-code-combines-managed-sources) |

316| Seu `~/.claude/CLAUDE.md` do usuário | Não | Vive em sua máquina, não no repositório. Veja [Adicione preferências pessoais sem fazer commit no repositório](#add-personal-preferences-without-committing-to-the-repo) |316| Seu `~/.claude/CLAUDE.md` do usuário | Não | Vive em sua máquina, não no repositório. Veja [Adicione preferências pessoais sem fazer commit no repositório](#add-personal-preferences-without-committing-to-the-repo) |

317| Seu `~/.claude/skills/`, `~/.claude/agents/`, `~/.claude/commands/` do usuário | Não | Vivem em sua máquina, não no repositório. Faça commit deles no diretório `.claude/` do repositório em vez disso. As sessões na nuvem carregam automaticamente skills que você ativa em claude.ai |317| Seu `~/.claude/skills/`, `~/.claude/agents/`, `~/.claude/commands/` do usuário | Não | Vivem em sua máquina, não no repositório. Faça commit deles no diretório `.claude/` do repositório em vez disso. As sessões na nuvem carregam automaticamente [skills que você ativa em claude.ai](/docs/pt/skills#skills-in-cowork-and-cloud-sessions) |

318| Plugins ativados apenas em suas configurações de usuário | Não | O `enabledPlugins` com escopo de usuário vive em `~/.claude/settings.json` em sua máquina |318| Plugins ativados apenas em suas configurações de usuário | Não | O `enabledPlugins` com escopo de usuário vive em `~/.claude/settings.json` em sua máquina |

319| Servidores MCP que você adicionou com `claude mcp add` no escopo local padrão ou no escopo de usuário | Não | Aqueles escrevem em `~/.claude.json` em sua máquina, não no repositório. Adicione o servidor com `claude mcp add --scope project`, que escreve o [`.mcp.json`](/docs/pt/mcp#project-scope) do repositório, e faça commit desse arquivo. Uma sessão com um repositório o carrega |319| Servidores MCP que você adicionou com `claude mcp add` no escopo local padrão ou no escopo de usuário | Não | Aqueles escrevem em `~/.claude.json` em sua máquina, não no repositório. Adicione o servidor com `claude mcp add --scope project`, que escreve o [`.mcp.json`](/docs/pt/mcp#project-scope) do repositório, e faça commit desse arquivo. Uma sessão com um repositório o carrega |

320| Variáveis de transporte em seu bloco `env` `.claude/settings.json` do repositório, como `NODE_EXTRA_CA_CERTS` e as [variáveis de certificado de cliente mTLS](/docs/pt/network-config#mtls-authentication) | Não | O ambiente de hospedagem gerencia a conexão de API da sessão, portanto Claude Code ignora essas chaves e anota cada chave ignorada no log de depuração da sessão |320| Variáveis de transporte em seu bloco `env` `.claude/settings.json` do repositório, como `NODE_EXTRA_CA_CERTS` e as [variáveis de certificado de cliente mTLS](/docs/pt/network-config#mtls-authentication) | Não | O ambiente de hospedagem gerencia a conexão de API da sessão, portanto Claude Code ignora essas chaves e anota cada chave ignorada no log de depuração da sessão |

env-vars.md +1 −1

Details

340| `CLAUDE_CODE_MAX_WEB_SEARCHES_PER_SESSION` | Limite de chamadas de [WebSearch](/docs/pt/tools-reference#session-search-limit) (padrão: 200). Quando o Claude atinge o limite, chamadas adicionais de WebSearch retornam um aviso dizendo para continuar com as informações já reunidas. Aceita um número inteiro positivo sem limite superior. Qualquer outro valor é ignorado e o padrão se aplica, portanto o limite pode ser aumentado, mas não desativado. Requer o Claude Code v2.1.212 ou posterior |340| `CLAUDE_CODE_MAX_WEB_SEARCHES_PER_SESSION` | Limite de chamadas de [WebSearch](/docs/pt/tools-reference#session-search-limit) (padrão: 200). Quando o Claude atinge o limite, chamadas adicionais de WebSearch retornam um aviso dizendo para continuar com as informações já reunidas. Aceita um número inteiro positivo sem limite superior. Qualquer outro valor é ignorado e o padrão se aplica, portanto o limite pode ser aumentado, mas não desativado. Requer o Claude Code v2.1.212 ou posterior |

341| `CLAUDE_CODE_MCP_ALLOWLIST_ENV` | Defina como `1` para iniciar servidores MCP stdio apenas com um ambiente básico seguro mais o `env` configurado do servidor, em vez de herdar o ambiente do seu shell |341| `CLAUDE_CODE_MCP_ALLOWLIST_ENV` | Defina como `1` para iniciar servidores MCP stdio apenas com um ambiente básico seguro mais o `env` configurado do servidor, em vez de herdar o ambiente do seu shell |

342| `CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS` | Tempo decorrido em milissegundos antes que uma chamada de ferramenta MCP ainda em execução [passe para uma tarefa em segundo plano](/docs/pt/mcp#automatic-backgrounding-of-long-tool-calls) (padrão: 120000, ou 2 minutos). Defina como `0` para desativar a passagem automática para segundo plano. Requer o Claude Code v2.1.212 ou posterior |342| `CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS` | Tempo decorrido em milissegundos antes que uma chamada de ferramenta MCP ainda em execução [passe para uma tarefa em segundo plano](/docs/pt/mcp#automatic-backgrounding-of-long-tool-calls) (padrão: 120000, ou 2 minutos). Defina como `0` para desativar a passagem automática para segundo plano. Requer o Claude Code v2.1.212 ou posterior |

343| `CLAUDE_CODE_MCP_STARTUP_WAIT_MS` | Por quanto tempo, em milissegundos, o primeiro turno de uma sessão [não interativa](/docs/pt/headless) aguarda servidores MCP que ainda estão se conectando, no lugar da [espera padrão do primeiro turno](/docs/pt/agent-sdk/mcp#connection-timing). Quando definida, a espera abrange todos os servidores pendentes. Defina como `0` para ignorar a espera. Um servidor de [`--permission-prompt-tool`](/docs/pt/cli-reference#cli-flags) mantém sua própria espera de `MCP_TIMEOUT` independentemente do valor. Requer o Claude Code v2.1.274 ou posterior |343| `CLAUDE_CODE_MCP_STARTUP_WAIT_MS` | Quanto tempo, em milissegundos, o primeiro turno de uma sessão [não interativa](/docs/pt/headless) aguarda servidores MCP que ainda estão se conectando, no lugar da [espera padrão do primeiro turno](/docs/pt/agent-sdk/mcp#connection-timing). Quando definida, a espera abrange todos os servidores pendentes; em um [ambiente auto-hospedado](/docs/pt/self-hosted-environments-configuration#connection-timing), altera apenas quanto tempo a espera dura. Defina como `0` para ignorar a espera. Um servidor de [`--permission-prompt-tool`](/docs/pt/cli-reference#cli-flags) mantém sua própria espera de `MCP_TIMEOUT` independentemente do valor. Requer o Claude Code v2.1.274 ou posterior |

344| `CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT` | Timeout de inatividade em milissegundos para chamadas de ferramentas MCP. Quando um servidor MCP stdio, HTTP, SSE, WebSocket ou de [conector do claude.ai](/docs/pt/mcp#use-mcp-servers-from-claude-ai) não envia nenhuma resposta nem notificação de progresso por esse tempo, a chamada de ferramenta é abortada com um erro em vez de aguardar o `MCP_TOOL_TIMEOUT` geral. Sobrescreve os padrões por transporte de 300000 (5 minutos) para servidores de rede e 1800000 (30 minutos) para servidores stdio. Defina como `0` para desativar a verificação de inatividade. Valores abaixo de 1000 são elevados para um segundo, e o valor é limitado ao `MCP_TOOL_TIMEOUT` efetivo. Um `timeout` por servidor em `.mcp.json` de pelo menos 1000 eleva a janela de inatividade desse servidor para pelo menos o valor de `timeout`. Não se aplica a servidores de IDE nem a servidores SDK em processo. Requer o Claude Code v2.1.187 ou posterior. Antes da v2.1.203, os servidores stdio estavam isentos do timeout de inatividade |344| `CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT` | Timeout de inatividade em milissegundos para chamadas de ferramentas MCP. Quando um servidor MCP stdio, HTTP, SSE, WebSocket ou de [conector do claude.ai](/docs/pt/mcp#use-mcp-servers-from-claude-ai) não envia nenhuma resposta nem notificação de progresso por esse tempo, a chamada de ferramenta é abortada com um erro em vez de aguardar o `MCP_TOOL_TIMEOUT` geral. Sobrescreve os padrões por transporte de 300000 (5 minutos) para servidores de rede e 1800000 (30 minutos) para servidores stdio. Defina como `0` para desativar a verificação de inatividade. Valores abaixo de 1000 são elevados para um segundo, e o valor é limitado ao `MCP_TOOL_TIMEOUT` efetivo. Um `timeout` por servidor em `.mcp.json` de pelo menos 1000 eleva a janela de inatividade desse servidor para pelo menos o valor de `timeout`. Não se aplica a servidores de IDE nem a servidores SDK em processo. Requer o Claude Code v2.1.187 ou posterior. Antes da v2.1.203, os servidores stdio estavam isentos do timeout de inatividade |

345| `CLAUDE_CODE_MESSAGING_SOCKET` | Definida pelo Claude Code, não por você: em sessões que vinculam um [socket de caixa de entrada](/docs/pt/cross-session-messaging#the-sessions-inbox-socket), o Claude Code exporta o caminho desse socket para hooks e comandos Bash quando vincula o socket. Em uma sessão que começa com mensagens ativadas, o Claude Code vincula o socket antes de qualquer hook ser executado. Outras sessões na máquina entregam mensagens a este caminho. Cada sessão exporta seu próprio socket em vez de um herdado de um processo pai, e as mensagens que chegam nele passam pelos [controles de entrada](/docs/pt/cross-session-messaging#control-inbound-messages) da sessão. Blocos `env` de configurações não podem defini-la. Requer o Claude Code v2.1.224 ou posterior |345| `CLAUDE_CODE_MESSAGING_SOCKET` | Definida pelo Claude Code, não por você: em sessões que vinculam um [socket de caixa de entrada](/docs/pt/cross-session-messaging#the-sessions-inbox-socket), o Claude Code exporta o caminho desse socket para hooks e comandos Bash quando vincula o socket. Em uma sessão que começa com mensagens ativadas, o Claude Code vincula o socket antes de qualquer hook ser executado. Outras sessões na máquina entregam mensagens a este caminho. Cada sessão exporta seu próprio socket em vez de um herdado de um processo pai, e as mensagens que chegam nele passam pelos [controles de entrada](/docs/pt/cross-session-messaging#control-inbound-messages) da sessão. Blocos `env` de configurações não podem defini-la. Requer o Claude Code v2.1.224 ou posterior |

346| `CLAUDE_CODE_MESSAGING_TOKEN` | Definida pelo Claude Code, não por você: em sessões que vinculam um [socket de caixa de entrada](/docs/pt/cross-session-messaging#the-sessions-inbox-socket), o Claude Code exporta este token por sessão para hooks e comandos Bash junto com `CLAUDE_CODE_MESSAGING_SOCKET`. Um script que publica no socket pode enviar `{"type":"auth","token":"<token>"}` como primeira linha para provar que pertence à sessão. No Windows nativo, o Claude Code exige essa linha e fecha qualquer conexão que não comece com uma válida. As [regras de processo filho próprio](/docs/pt/cross-session-messaging#the-sessions-inbox-socket) dizem quando o Claude Code consulta o token. Cada sessão exporta seu próprio token, nunca um herdado de uma sessão pai. Blocos `env` de configurações não podem defini-la. Requer o Claude Code v2.1.228 ou posterior |346| `CLAUDE_CODE_MESSAGING_TOKEN` | Definida pelo Claude Code, não por você: em sessões que vinculam um [socket de caixa de entrada](/docs/pt/cross-session-messaging#the-sessions-inbox-socket), o Claude Code exporta este token por sessão para hooks e comandos Bash junto com `CLAUDE_CODE_MESSAGING_SOCKET`. Um script que publica no socket pode enviar `{"type":"auth","token":"<token>"}` como primeira linha para provar que pertence à sessão. No Windows nativo, o Claude Code exige essa linha e fecha qualquer conexão que não comece com uma válida. As [regras de processo filho próprio](/docs/pt/cross-session-messaging#the-sessions-inbox-socket) dizem quando o Claude Code consulta o token. Cada sessão exporta seu próprio token, nunca um herdado de uma sessão pai. Blocos `env` de configurações não podem defini-la. Requer o Claude Code v2.1.228 ou posterior |

errors.md +45 −8

Details

247| `Windows reported an error (EBADF) when Claude Code read this session's transcript file` | [Command-line errors](#windows-reported-an-error-ebadf) |247| `Windows reported an error (EBADF) when Claude Code read this session's transcript file` | [Command-line errors](#windows-reported-an-error-ebadf) |

248| `Cannot switch renderers in this session` | [Command-line errors](#cannot-switch-renderers-in-this-session) |248| `Cannot switch renderers in this session` | [Command-line errors](#cannot-switch-renderers-in-this-session) |

249| `Cannot switch renderers while work is running in the background` | [Command-line errors](#cannot-switch-renderers-in-this-session) |249| `Cannot switch renderers while work is running in the background` | [Command-line errors](#cannot-switch-renderers-in-this-session) |

250| `Claude Code couldn't restart` | [Command-line errors](#claude-code-couldnt-restart) |

250| `Couldn't open Claude Desktop` | [Command-line errors](#couldnt-open-claude-desktop) |251| `Couldn't open Claude Desktop` | [Command-line errors](#couldnt-open-claude-desktop) |

251| `Failed to open Claude Desktop. Please try opening it manually.` | [Command-line errors](#couldnt-open-claude-desktop) |252| `Failed to open Claude Desktop. Please try opening it manually.` | [Command-line errors](#couldnt-open-claude-desktop) |

252| `Couldn't read your Zed keymap` / `Couldn't back up your Zed keymap` / `Couldn't update your Zed keymap` | [Command-line errors](#terminal-setup-left-your-zed-keymap-unchanged) |253| `Couldn't read your Zed keymap` / `Couldn't back up your Zed keymap` / `Couldn't update your Zed keymap` | [Command-line errors](#terminal-setup-left-your-zed-keymap-unchanged) |


334| `Session isn't responding` / `Press enter again to restart this session — it isn't responding` | [Background session errors](#session-isnt-responding) |335| `Session isn't responding` / `Press enter again to restart this session — it isn't responding` | [Background session errors](#session-isnt-responding) |

335| `Session <id> was stopped while the respawn was in flight` | [Background session errors](#session-was-stopped-while-the-respawn-was-in-flight) |336| `Session <id> was stopped while the respawn was in flight` | [Background session errors](#session-was-stopped-while-the-respawn-was-in-flight) |

336| `This session was running agent '<name>', which is no longer available` | [Background session errors](#session-agent-no-longer-available) |337| `This session was running agent '<name>', which is no longer available` | [Background session errors](#session-agent-no-longer-available) |

338| `This session restarted <time> after its next /loop wakeup was due, so that wakeup will not fire` | [Background session errors](#restarted-after-its-next-loop-wakeup-was-due) |

337| `CLAUDE_CODE_PROCESS_WRAPPER: launcher ...` | [Background session errors](#claude_code_process_wrapper-launcher-errors) |339| `CLAUDE_CODE_PROCESS_WRAPPER: launcher ...` | [Background session errors](#claude_code_process_wrapper-launcher-errors) |

338| `EUNKNOWN: unknown error, uv_spawn` | [Background session errors](#eunknown-when-starting-a-background-session) |340| `EUNKNOWN: unknown error, uv_spawn` | [Background session errors](#eunknown-when-starting-a-background-session) |

339| `EACCES: permission denied, posix_spawn` | [Background session errors](#eacces-when-starting-a-background-session) |341| `EACCES: permission denied, posix_spawn` | [Background session errors](#eacces-when-starting-a-background-session) |


439| :- | :- | :- |441| :- | :- | :- |

440| [`CLAUDE_CODE_MAX_RETRIES`](/docs/pt/env-vars) | 10 | Número de novas tentativas. Limitado a 15 a partir da v2.1.186; a partir da v2.1.199 `CLAUDE_CODE_RETRY_WATCHDOG` aumenta o padrão e remove o limite. Reduza-o para expor falhas mais rapidamente em scripts. |442| [`CLAUDE_CODE_MAX_RETRIES`](/docs/pt/env-vars) | 10 | Número de novas tentativas. Limitado a 15 a partir da v2.1.186; a partir da v2.1.199 `CLAUDE_CODE_RETRY_WATCHDOG` aumenta o padrão e remove o limite. Reduza-o para expor falhas mais rapidamente em scripts. |

441| [`CLAUDE_CODE_RETRY_WATCHDOG`](/docs/pt/env-vars) | não definido | Defina como `1` em sessões não supervisionadas, como jobs de CI, para tentar novamente erros de capacidade `429` e `529` indefinidamente em vez de falhar após `CLAUDE_CODE_MAX_RETRIES` tentativas. Claude Code falha imediatamente quando uma requisição de velocidade padrão recebe um `429` que relata um limite de gastos ou créditos de uso esgotados, mesmo um de um [limite de gastos de gateway](#spend-limit-reached) que é redefinido em um cronograma. Antes da v2.1.239, o watchdog tentava novamente esses erros indefinidamente. Para requisições no modo rápido, veja [Handle rate limits](/docs/pt/fast-mode#handle-rate-limits). Na v2.1.199 ou posterior, também aumenta a contagem padrão de novas tentativas para outros erros transitórios, como erros de servidor, timeouts e conexões perdidas, para 300, aproximadamente três horas de backoff, e remove o limite de 15 em `CLAUDE_CODE_MAX_RETRIES` se você definir essa variável explicitamente. |443| [`CLAUDE_CODE_RETRY_WATCHDOG`](/docs/pt/env-vars) | não definido | Defina como `1` em sessões não supervisionadas, como jobs de CI, para tentar novamente erros de capacidade `429` e `529` indefinidamente em vez de falhar após `CLAUDE_CODE_MAX_RETRIES` tentativas. Claude Code falha imediatamente quando uma requisição de velocidade padrão recebe um `429` que relata um limite de gastos ou créditos de uso esgotados, mesmo um de um [limite de gastos de gateway](#spend-limit-reached) que é redefinido em um cronograma. Antes da v2.1.239, o watchdog tentava novamente esses erros indefinidamente. Para requisições no modo rápido, veja [Handle rate limits](/docs/pt/fast-mode#handle-rate-limits). Na v2.1.199 ou posterior, também aumenta a contagem padrão de novas tentativas para outros erros transitórios, como erros de servidor, timeouts e conexões perdidas, para 300, aproximadamente três horas de backoff, e remove o limite de 15 em `CLAUDE_CODE_MAX_RETRIES` se você definir essa variável explicitamente. |

444| [`CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS`](/docs/pt/env-vars) | não definido | Tempo máximo em milissegundos que cada requisição de API passa aguardando erros `429` e `529` quando `CLAUDE_CODE_RETRY_WATCHDOG` está definido. Quando não definido, a espera não tem limite. Requer Claude Code v2.1.295 ou posterior. |

442| [`CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS`](/docs/pt/env-vars) | 500 | Atraso inicial em milissegundos do backoff entre novas tentativas de uma requisição que a API rejeita com um erro de sobrecarga `529`. Aumente-o, até 32000, para distribuir as novas tentativas por uma janela mais longa quando a API estiver no limite de capacidade. Não tem efeito quando `CLAUDE_CODE_RETRY_WATCHDOG` está definido como `1`, ou quando a requisição rejeitada foi enviada no [modo rápido](/docs/pt/fast-mode#handle-rate-limits). Requer Claude Code v2.1.292 ou posterior. |445| [`CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS`](/docs/pt/env-vars) | 500 | Atraso inicial em milissegundos do backoff entre novas tentativas de uma requisição que a API rejeita com um erro de sobrecarga `529`. Aumente-o, até 32000, para distribuir as novas tentativas por uma janela mais longa quando a API estiver no limite de capacidade. Não tem efeito quando `CLAUDE_CODE_RETRY_WATCHDOG` está definido como `1`, ou quando a requisição rejeitada foi enviada no [modo rápido](/docs/pt/fast-mode#handle-rate-limits). Requer Claude Code v2.1.292 ou posterior. |

443| [`API_TIMEOUT_MS`](/docs/pt/env-vars) | 600000 | Timeout por requisição em milissegundos. Aumente-o para redes lentas ou proxies. Também limita quanto tempo Claude Code aguarda os cabeçalhos de resposta, conforme descrito em [No response from API](#no-response-from-api). |446| [`API_TIMEOUT_MS`](/docs/pt/env-vars) | 600000 | Timeout por requisição em milissegundos. Aumente-o para redes lentas ou proxies. Também limita quanto tempo Claude Code aguarda os cabeçalhos de resposta, conforme descrito em [No response from API](#no-response-from-api). |

444| [`CLAUDE_CODE_NONSTREAMING_TIMEOUT_RETRIES`](/docs/pt/env-vars) | não definido | Limite de reenvios de uma [requisição sem streaming](#streaming-response-ended-before-any-complete-data-was-received) que atinge o timeout. Ao atingir o limite, a requisição falha. Uma resposta do Claude que leva mais tempo que o timeout para ser gerada atinge o timeout novamente a cada reenvio, então defina um número baixo, como `0`, para falhar mais cedo. Cada tentativa sem streaming atinge o timeout após 300 segundos em uma sessão local, ou após `API_TIMEOUT_MS` quando você define um valor positivo. Requer Claude Code v2.1.285 ou posterior. |447| [`CLAUDE_CODE_NONSTREAMING_TIMEOUT_RETRIES`](/docs/pt/env-vars) | não definido | Limite de reenvios de uma [requisição sem streaming](#streaming-response-ended-before-any-complete-data-was-received) que atinge o timeout. Ao atingir o limite, a requisição falha. Uma resposta do Claude que leva mais tempo que o timeout para ser gerada atinge o timeout novamente a cada reenvio, então defina um número baixo, como `0`, para falhar mais cedo. Cada tentativa sem streaming atinge o timeout após 300 segundos em uma sessão local, ou após `API_TIMEOUT_MS` quando você define um valor positivo. Requer Claude Code v2.1.285 ou posterior. |


3412 3415 

3413O Claude Code mostra o mesmo erro para qualquer skill que [injeta contexto dinâmico](/docs/pt/skills#when-an-injected-command-fails), e um comando injetado com falha aborta a invocação dessa skill. Duas strings irmãs são disparadas antes mesmo de o comando ser executado:3416O Claude Code mostra o mesmo erro para qualquer skill que [injeta contexto dinâmico](/docs/pt/skills#when-an-injected-command-fails), e um comando injetado com falha aborta a invocação dessa skill. Duas strings irmãs são disparadas antes mesmo de o comando ser executado:

3414 3417 

3415* `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](/docs/pt/skills#permission-checks-on-injected-commands) explica quais resultados abortam em cada modo de permissão e como pré-aprovar um comando com `allowed-tools`3418* `Shell command permission check failed for pattern "..."`: a verificação de permissão do comando não o permitiu. [Permission checks on injected commands](/docs/pt/skills#permission-checks-on-injected-commands) explica quais resultados abortam em cada modo de permissão e como pré-aprovar um comando com `allowed-tools`

3416* ``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](/docs/pt/skills#how-injected-commands-run)3419* ``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](/docs/pt/skills#how-injected-commands-run)

3417 3420 

3418**O que fazer:**3421**O que fazer:**


3562 3565 

3563* **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 acima3566* **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

3564* **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>`)``3567* **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>`)``

3565* **Você passou um branch base que não estava no seu clone**: o Claude Code fez o fetch dele a partir 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 seu clone é raso (shallow), ele sugere `git fetch --unshallow origin`. Antes da v2.1.221, a dica sugeria `git fetch --unshallow origin` para todo branch base obtido via fetch, e em um clone completo esse comando falha com `fatal: --unshallow on a complete repository does not make sense`.3568* **Você passou um branch base que não estava no seu clone**: o Claude Code fez fetch dele a partir 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 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 obtido por fetch, e em um clone completo esse comando falha com `fatal: --unshallow on a complete repository does not make sense`.

3566 3569 

3567**O que fazer:**3570**O que fazer:**

3568 3571 


3816 3819 

3817* Em uma sessão iniciada sem essas restrições, execute `/tui fullscreen`, ou `/tui default` para voltar. O Claude Code salva a [configuração `tui`](/docs/pt/settings-reference#tui) ali3820* Em uma sessão iniciada sem essas restrições, execute `/tui fullscreen`, ou `/tui default` para voltar. O Claude Code salva a [configuração `tui`](/docs/pt/settings-reference#tui) ali

3818 3821 

3822<h3 id="claude-code-couldnt-restart">

3823 Claude Code couldn't restart

3824</h3>

3825 

3826O Claude Code estava reiniciando, por exemplo para ativar ou desativar a renderização em tela cheia depois que você executou [`/tui`](/docs/pt/fullscreen#enable-fullscreen-rendering). Ele fechou a sessão, mas não conseguiu iniciar o novo processo, então imprimiu esta mensagem e saiu com o status 1:

3827 

3828```text theme={null}

3829Claude Code couldn't restart. Your conversation is saved. Start Claude Code again and run /resume to pick it up.

3830```

3831 

3832Quando a reinicialização não tinha nenhuma conversa para reabrir, por exemplo porque `/tui` foi sua primeira entrada em uma nova sessão, a mensagem diz `Claude Code couldn't restart. Start Claude Code again.`

3833 

3834**O que fazer:**

3835 

3836* Execute `claude` novamente no seu shell a partir do mesmo diretório. Se a mensagem disse que sua conversa foi salva, execute [`/resume`](/docs/pt/sessions#resume-a-session) na nova sessão e selecione-a

3837* Se as reinicializações continuarem falhando, inicie o Claude Code a partir do seu shell com [`claude --debug-file claude-debug.log`](/docs/pt/cli-reference#cli-flags). Se uma reinicialização a partir dessa sessão falhar, o `claude-debug.log` no diretório de onde você iniciou registra uma linha `Failed to relaunch:` com o erro do sistema operacional. Inclua essa linha ao [relatar o problema](#report-an-error)

3838 

3819<h3 id="couldnt-open-claude-desktop">3839<h3 id="couldnt-open-claude-desktop">

3820 Não foi possível abrir o Claude Desktop3840 Não foi possível abrir o Claude Desktop

3821</h3>3841</h3>


4752 Comando bloqueado pelas verificações de isolamento de worktree4772 Comando bloqueado pelas verificações de isolamento de worktree

4753</h3>4773</h3>

4754 4774 

4755Claude executou um comando Bash ou Monitor em uma [sessão isolada em um worktree](/docs/pt/worktrees#how-claude-code-enforces-isolation), e Claude Code recusou-o por uma de duas razões:4775Claude executou um comando Bash, [PowerShell](/docs/pt/tools-reference#powershell-tool) ou [Monitor](/docs/pt/tools-reference#monitor-tool) em uma [sessão isolada em um worktree](/docs/pt/worktrees#how-claude-code-enforces-isolation), e Claude Code recusou-o por uma destas razões:

4756 4776 

4757* O comando aponta git para o checkout principal.4777* O comando seria executado no checkout principal ou em outro worktree. A mensagem diz que seu diretório de trabalho `resolved to the shared checkout` ou `is in a different worktree`.

4758* Claude Code não consegue verificar a partir do texto do comando que qualquer git que o comando executa fica dentro do worktree. Um comando que nunca nomeia git ainda pode ser recusado por essa razão, porque expandir uma indireção de variável como `${!name}` ou executar uma substituição de função Bash como `${ command; }` produz um valor em tempo de execução que pode ser um comando em si.4778* Um comando Bash ou Monitor aponta git para o checkout principal.

4779* Claude Code não consegue verificar a partir do texto de um comando Bash ou Monitor que qualquer git que o comando executa fica dentro do worktree. Um comando que nunca nomeia git ainda pode ser recusado por essa razão, porque expandir uma indireção de variável como `${!name}` ou executar uma substituição de função Bash como `${ command; }` produz um valor em tempo de execução que pode ser um comando em si.

4759 4780 

4760O meio da mensagem nomeia o que não pôde ser verificado:4781A mensagem diz `is isolated in the worktree <path>, but this command`, seguido pela razão, como um comando cujo texto Claude Code não conseguiu verificar:

4761 4782 

4762```text wrap theme={null}4783```text wrap theme={null}

4763This session is isolated in the worktree /path/to/worktree, but this command evaluates ${!x@P} arithmetically inside a construct too complex to verify, which can run a command hidden in a variable's value. Refusing to run it — a worktree-isolated session's git operations must target its own worktree. Split it into plain, separate commands and run them from /path/to/worktree.4784This session is isolated in the worktree /path/to/worktree, but this command evaluates ${!x@P} arithmetically inside a construct too complex to verify, which can run a command hidden in a variable's value. Refusing to run it — a worktree-isolated session's git operations must target its own worktree. Split it into plain, separate commands and run them from /path/to/worktree.


4765 4786 

4766**O que fazer:**4787**O que fazer:**

4767 4788 

4768* Geralmente nada: Claude lê a mensagem e reescreve o comando da forma que sua sentença final pede4789* **Git apontado para o checkout principal, ou texto de comando que não pode ser verificado**: nada. Claude lê a mensagem e reescreve o comando da forma que sua sentença final pede. Se um comando que você pediu continua sendo recusado por causa de uma expansão em seu texto, escreva o valor sinalizado literalmente e execute git como seu próprio comando simples de dentro do worktree

4769* Se um comando que você pediu continua sendo recusado, escreva o valor sinalizado literalmente: substitua a indireção ou substituição por seu valor, e execute git como seu próprio comando simples de dentro do worktree

4770* Para agir no checkout principal propositalmente, execute o comando você mesmo em um terminal fora da sessão4790* Para agir no checkout principal propositalmente, execute o comando você mesmo em um terminal fora da sessão

4771 4791 

4772<h3 id="this-session-has-no-saved-transcript">4792<h3 id="this-session-has-no-saved-transcript">


4946* Ou retome com `--agent <name>` nomeando um agente que existe, para executar a sessão como esse agente em vez disso4966* Ou retome com `--agent <name>` nomeando um agente que existe, para executar a sessão como esse agente em vez disso

4947* Se o agente tem escopo de projeto e você não confiou no diretório original da sessão, execute Claude Code lá uma vez, aceite o diálogo de confiança, depois retome novamente4967* Se o agente tem escopo de projeto e você não confiou no diretório original da sessão, execute Claude Code lá uma vez, aceite o diálogo de confiança, depois retome novamente

4948 4968 

4969<h3 id="restarted-after-its-next-loop-wakeup-was-due">

4970 Esta sessão reiniciou depois que seu próximo despertar do /loop estava previsto

4971</h3>

4972 

4973Um [`/loop` autorregulado](/docs/pt/scheduled-tasks#let-claude-choose-the-interval) em uma [sessão em background](/docs/pt/agent-view) parou. O processo da sessão terminou enquanto o loop estava esperando seu próximo despertar, e esse despertar venceu antes que o [próximo processo](/docs/pt/agent-view#the-supervisor-process) da sessão iniciasse. O despertar perdido não dispara com atraso. O aviso diz quão atrasado o despertar estava quando a sessão reiniciou:

4974 

4975```text theme={null}

4976This session restarted 12m after its next /loop wakeup was due, so that wakeup will not fire. The loop stays stopped until Claude schedules it again: reply to continue it.

4977```

4978 

4979Antes da v2.1.295, o loop parava nessa situação sem um aviso.

4980 

4981**O que fazer:**

4982 

4983* Para continuar o loop, [responda à sessão](/docs/pt/agent-view#peek-and-reply) e diga isso, como `keep the loop running`. Claude lê o aviso com sua resposta e pode agendar o próximo despertar

4984* Se você terminou com o loop, não faça nada. Ele já parou

4985 

4949<h3 id="claude_code_process_wrapper-launcher-errors">4986<h3 id="claude_code_process_wrapper-launcher-errors">

4950 Erros do launcher CLAUDE\_CODE\_PROCESS\_WRAPPER4987 Erros do launcher CLAUDE\_CODE\_PROCESS\_WRAPPER

4951</h3>4988</h3>

headless.md +15 −13

Details

89* **Observações do [Monitor](/docs/pt/tools-reference#monitor-tool)**: a execução aguarda até que a observação atinja o timeout ou o limite de 10 minutos encerre a espera, o que vier primeiro. Enquanto aguarda, Claude continua respondendo ao que a observação relata. Por padrão, uma observação atinge o timeout cinco minutos após Claude iniciá-la.89* **Observações do [Monitor](/docs/pt/tools-reference#monitor-tool)**: a execução aguarda até que a observação atinja o timeout ou o limite de 10 minutos encerre a espera, o que vier primeiro. Enquanto aguarda, Claude continua respondendo ao que a observação relata. Por padrão, uma observação atinge o timeout cinco minutos após Claude iniciá-la.

90* **Despertares pendentes**: em uma execução cujo prompt você passou como texto em vez de com `--input-format stream-json`, quando Claude agendou um [despertar de `/loop` com ritmo próprio](/docs/pt/scheduled-tasks#let-claude-choose-the-interval), a execução aguarda cada despertar disparar e executa sua iteração até que o [loop termine](/docs/pt/scheduled-tasks#stop-a-loop), mesmo além do limite de 10 minutos.90* **Despertares pendentes**: em uma execução cujo prompt você passou como texto em vez de com `--input-format stream-json`, quando Claude agendou um [despertar de `/loop` com ritmo próprio](/docs/pt/scheduled-tasks#let-claude-choose-the-interval), a execução aguarda cada despertar disparar e executa sua iteração até que o [loop termine](/docs/pt/scheduled-tasks#stop-a-loop), mesmo além do limite de 10 minutos.

91 91 

92Quando stderr é um terminal e a execução já aguardou cinco segundos, Claude Code imprime uma linha em stderr que começa com `Waiting for background work to finish` e nomeia o trabalho. Com [saída `json` ou `stream-json`](#get-structured-output), a linha é impressa apenas quando stdout não é um terminal, para que o JSON que seu script lê nunca a contenha.

93 

92Se a execução atingir seu limite de [`--max-budget-usd`](/docs/pt/cli-reference#cli-flags), Claude Code para o trabalho em segundo plano restante em vez de aguardar.94Se a execução atingir seu limite de [`--max-budget-usd`](/docs/pt/cli-reference#cli-flags), Claude Code para o trabalho em segundo plano restante em vez de aguardar.

93 95 

94Quando o trabalho em segundo plano inicia outro turno, a execução imprime o resultado de cada turno com a saída `text` padrão e o resultado do último turno com a saída `json`. Antes da v2.1.295, a execução imprimia apenas o resultado do último turno também com a saída `text`.96Quando o trabalho em segundo plano inicia outro turno, a execução imprime o resultado de cada turno com a saída `text` padrão e o resultado do último turno com a saída `json`. Antes da v2.1.295, a execução imprimia apenas o resultado do último turno também com a saída `text`.


130cat build-error.txt | claude -p 'concisely explain the root cause of this build error' > output.txt132cat build-error.txt | claude -p 'concisely explain the root cause of this build error' > output.txt

131```133```

132 134 

133Com `--output-format json`, a carga de resposta inclui `total_cost_usd` e um detalhamento de custo por modelo, para que os chamadores com script possam rastrear gastos sem consultar o [painel de uso](/docs/pt/costs). Quando você continua uma conversa anterior com `--continue` ou `--resume`, a execução relata o total da conversa, [gastos de execuções anteriores inclusos](/docs/pt/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls). Ambas as figuras são [estimativas do lado do cliente](/docs/pt/agent-sdk/cost-tracking) e podem diferir da sua fatura real.135Com `--output-format json`, o payload da resposta inclui `total_cost_usd` e um detalhamento de custo por modelo, para que os chamadores com script possam rastrear gastos sem consultar o [painel de uso](/docs/pt/costs). Quando você continua uma conversa anterior com `--continue` ou `--resume`, a execução relata o total da conversa, [gastos de execuções anteriores inclusos](/docs/pt/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls). Ambas as figuras são [estimativas do lado do cliente](/docs/pt/agent-sdk/cost-tracking) e podem diferir da sua fatura real.

134 136 

135<Note>137<Note>

136 Stdin canalizado é limitado a 10MB. Se você exceder o limite, Claude Code sai com um erro claro e um status diferente de zero. Para trabalhar com entradas maiores, escreva o conteúdo em um arquivo e faça referência ao caminho do arquivo em seu prompt em vez de canalizá-lo.138 Stdin canalizado é limitado a 10MB. Se você exceder o limite, Claude Code sai com um erro claro e um status diferente de zero. Para trabalhar com entradas maiores, escreva o conteúdo em um arquivo e faça referência ao caminho do arquivo em seu prompt em vez de canalizá-lo.


172claude -p "Summarize this project" --output-format json174claude -p "Summarize this project" --output-format json

173```175```

174 176 

175Para obter saída em conformidade com um esquema específico, use `--output-format json` com `--json-schema` e uma definição de [JSON Schema](https://json-schema.org/). A resposta inclui metadados sobre a solicitação (ID de sessão, uso, etc.) com a saída estruturada no campo `structured_output`.177Para obter saída em conformidade com um esquema específico, use `--output-format json` com `--json-schema` e uma definição de [JSON Schema](https://json-schema.org/). A resposta inclui metadados sobre a requisição (ID de sessão, uso, etc.) com a saída estruturada no campo `structured_output`.

176 178 

177Este exemplo extrai nomes de funções e os retorna como uma matriz de strings:179Este exemplo extrai nomes de funções e os retorna como uma matriz de strings:

178 180 


257 Lidar com tentativas de API259 Lidar com tentativas de API

258</h4>260</h4>

259 261 

260Quando uma solicitação de API falha com um erro que pode ser repetido, Claude Code emite um evento `system/api_retry` antes de tentar novamente. Na v2.1.246 ou posterior, quando um `401` ou `403` rejeita uma credencial [`apiKeyHelper`](/docs/pt/settings-reference#apikeyhelper), Claude Code faz as duas primeiras tentativas silenciosamente sem evento, depois emite o evento como usual a partir da terceira tentativa consecutiva em diante. As tentativas silenciosas ainda contam para `attempt`. Você pode usar o evento para mostrar progresso de repetição em sua própria interface.262Quando uma requisição de API falha com um erro que pode ser repetido, Claude Code emite um evento `system/api_retry` antes de tentar novamente. Na v2.1.246 ou posterior, quando um `401` ou `403` rejeita uma credencial [`apiKeyHelper`](/docs/pt/settings-reference#apikeyhelper), Claude Code faz as duas primeiras tentativas silenciosamente sem evento, depois emite o evento como usual a partir da terceira tentativa consecutiva em diante. As tentativas silenciosas ainda contam para `attempt`. Você pode usar o evento para mostrar progresso de repetição em sua própria interface.

261 263 

262| Campo | Tipo | Descrição |264| Campo | Tipo | Descrição |

263| - | - | - |265| - | - | - |


296 298 

297Quando um diretório ou arquivo `--plugin-dir` em si falha ao carregar, sua entrada `plugin_errors` inclui o caminho absoluto resolvido como `path`. Use-o para dizer qual de vários valores `--plugin-dir` falhou. O campo `path` requer Claude Code v2.1.283 ou posterior.299Quando um diretório ou arquivo `--plugin-dir` em si falha ao carregar, sua entrada `plugin_errors` inclui o caminho absoluto resolvido como `path`. Use-o para dizer qual de vários valores `--plugin-dir` falhou. O campo `path` requer Claude Code v2.1.283 ou posterior.

298 300 

299Use os campos de servidor MCP da mesma forma. Quando você passa [`--mcp-config`](/docs/pt/cli-reference#cli-flags) com `-p`, Claude Code aguarda servidores ainda pendentes antes de executar a primeira volta, até o tempo limite de inicialização [`MCP_TIMEOUT`](/docs/pt/env-vars), 30 segundos por padrão. Um servidor remoto com uma [lista de ferramentas em cache](/docs/pt/agent-sdk/mcp#connection-timing) pula a espera, mostra `pending` em `system/init` e se conecta em sua primeira chamada de ferramenta. A espera requer Claude Code v2.1.221 ou posterior.301Use os campos de servidor MCP da mesma forma. Quando você passa [`--mcp-config`](/docs/pt/cli-reference#cli-flags) com `-p`, Claude Code aguarda servidores ainda pendentes antes de executar o primeiro turno, até o timeout de inicialização [`MCP_TIMEOUT`](/docs/pt/env-vars), 30 segundos por padrão. Um servidor remoto com uma [lista de ferramentas em cache](/docs/pt/agent-sdk/mcp#connection-timing) pula a espera, mostra `pending` em `system/init` e se conecta em sua primeira chamada de ferramenta. Em um [ambiente auto-hospedado](/docs/pt/self-hosted-environments-configuration#connection-timing), aplica-se uma espera mais curta. A espera requer Claude Code v2.1.221 ou posterior.

300 302 

301Claude Code valida cada entrada `--mcp-config` na inicialização e pula entradas que falham na validação, por exemplo uma entrada `url` sem `type`. A execução continua e sai limpa, então verifique esses campos para capturar um servidor que nunca foi carregado:303Claude Code valida cada entrada `--mcp-config` na inicialização e pula entradas que falham na validação, por exemplo uma entrada `url` sem `type`. A execução continua e sai limpa, então verifique esses campos para capturar um servidor que nunca foi carregado:

302 304 


311 Rastrear instalações de plugin313 Rastrear instalações de plugin

312</h4>314</h4>

313 315 

314Quando [`CLAUDE_CODE_SYNC_PLUGIN_INSTALL`](/docs/pt/env-vars) está definido, Claude Code emite eventos `system/plugin_install` enquanto plugins do marketplace instalam antes da primeira volta. Use estes para exibir o progresso de instalação em sua própria UI.316Quando [`CLAUDE_CODE_SYNC_PLUGIN_INSTALL`](/docs/pt/env-vars) está definido, Claude Code emite eventos `system/plugin_install` enquanto plugins do marketplace instalam antes do primeiro turno. Use estes para exibir o progresso de instalação em sua própria UI.

315 317 

316| Campo | Tipo | Descrição |318| Campo | Tipo | Descrição |

317| - | - | - |319| - | - | - |


338 340 

339* **`auto`**: passe `--permission-mode auto` para ter um classificador revisar a maioria das ações em vez de você341* **`auto`**: passe `--permission-mode auto` para ter um classificador revisar a maioria das ações em vez de você

340* **`dontAsk`**: Claude Code nega qualquer chamada que de outra forma solicitaria, o que é útil para execuções de CI bloqueadas. Ações que não precisam de aprovação no modo Manual ainda são executadas, como leituras de arquivo em seus diretórios de trabalho e o [conjunto de comandos somente leitura](/docs/pt/permissions#read-only-commands), e também ações que suas entradas `--allowedTools` ou regras `permissions.allow` cobrem. `AskUserQuestion`, ferramentas de conector [que sua organização definiu como `ask`](/docs/pt/mcp#organization-controls-on-connector-tools), e ferramentas MCP marcadas [`requiresUserInteraction`](/docs/pt/mcp#require-approval-for-a-specific-tool) são negadas mesmo quando uma regra de permissão corresponde342* **`dontAsk`**: Claude Code nega qualquer chamada que de outra forma solicitaria, o que é útil para execuções de CI bloqueadas. Ações que não precisam de aprovação no modo Manual ainda são executadas, como leituras de arquivo em seus diretórios de trabalho e o [conjunto de comandos somente leitura](/docs/pt/permissions#read-only-commands), e também ações que suas entradas `--allowedTools` ou regras `permissions.allow` cobrem. `AskUserQuestion`, ferramentas de conector [que sua organização definiu como `ask`](/docs/pt/mcp#organization-controls-on-connector-tools), e ferramentas MCP marcadas [`requiresUserInteraction`](/docs/pt/mcp#require-approval-for-a-specific-tool) são negadas mesmo quando uma regra de permissão corresponde

341* **`acceptEdits`**: Claude escreve arquivos sem solicitar, e Claude Code aprova automaticamente comandos comuns do sistema de arquivos como `mkdir`, `touch`, `mv` e `cp`. As [ações que nenhum modo aprova automaticamente](/docs/pt/permission-modes#actions-no-mode-auto-approves) ainda se aplicam. Além do conjunto de comandos somente leitura, outros comandos de shell e solicitações de rede ainda precisam de uma entrada `--allowedTools` ou uma regra `permissions.allow`. Consulte [o que `acceptEdits` aprova automaticamente](/docs/pt/permission-modes#auto-approve-file-edits-with-acceptedits-mode) para a lista completa343* **`acceptEdits`**: Claude escreve arquivos sem solicitar, e Claude Code aprova automaticamente comandos comuns do sistema de arquivos como `mkdir`, `touch`, `mv` e `cp`. As [ações que nenhum modo aprova automaticamente](/docs/pt/permission-modes#actions-no-mode-auto-approves) ainda se aplicam. Além do conjunto de comandos somente leitura, outros comandos de shell e requisições de rede ainda precisam de uma entrada `--allowedTools` ou uma regra `permissions.allow`. Consulte [o que `acceptEdits` aprova automaticamente](/docs/pt/permission-modes#auto-approve-file-edits-with-acceptedits-mode) para a lista completa

342 344 

343Este exemplo aplica correções de lint com `acceptEdits` como a linha de base:345Este exemplo aplica correções de lint com `acceptEdits` como a linha de base:

344 346 


350 Desativar prompts de permissão em execuções autônomas352 Desativar prompts de permissão em execuções autônomas

351</h3>353</h3>

352 354 

353Passe `--permission-prompts none` quando ninguém estiver disponível para responder prompts de permissão, por exemplo em um trabalho agendado. O sinalizador é mais importante quando sua execução tem um host de permissão: um aplicativo Agent SDK com um callback [`canUseTool`](/docs/pt/agent-sdk/user-input), ou uma ferramenta MCP que você passa com [`--permission-prompt-tool`](/docs/pt/cli-reference#cli-flags). Sem o sinalizador, sua execução aguarda que esse host responda cada solicitação de permissão.355Passe `--permission-prompts none` quando ninguém estiver disponível para responder prompts de permissão, por exemplo em um trabalho agendado. A flag é mais importante quando sua execução tem um host de permissão: um aplicativo Agent SDK com um callback [`canUseTool`](/docs/pt/agent-sdk/user-input), ou uma ferramenta MCP que você passa com [`--permission-prompt-tool`](/docs/pt/cli-reference#cli-flags). Sem a flag, sua execução aguarda que esse host responda cada solicitação de permissão.

354 356 

355Com o sinalizador, sua execução não consulta o host ou aguarda por ele. Qualquer coisa que solicitaria é negada a menos que um hook `PermissionRequest` a permita, Claude é informado que ninguém pode aprovar a solicitação e não deve tentar novamente, e a execução continua. Em uma execução `-p` sem host, essas solicitações são negadas de qualquer forma, e o sinalizador também diz a Claude não tentar novamente. Regras de permissão, [hooks `PermissionRequest`](/docs/pt/hooks#permissionrequest) e o modo de permissão que você definir ainda decidem cada chamada primeiro; Claude Code nega apenas as solicitações que nada mais resolve.357Com a flag, sua execução não consulta o host ou aguarda por ele. Qualquer coisa que solicitaria é negada a menos que um hook `PermissionRequest` a permita, Claude é informado que ninguém pode aprovar a solicitação e não deve tentar novamente, e a execução continua. Em uma execução `-p` sem host, essas solicitações são negadas de qualquer forma, e a flag também diz a Claude não tentar novamente. Regras de permissão, [hooks `PermissionRequest`](/docs/pt/hooks#permissionrequest) e o modo de permissão que você definir ainda decidem cada chamada primeiro; Claude Code nega apenas as solicitações que nada mais resolve.

356 358 

357Este exemplo executa uma tarefa autônoma em [modo auto](/docs/pt/permission-modes#eliminate-prompts-with-auto-mode). O classificador revisa cada ação como usual, e Claude Code nega qualquer coisa que teria caído de volta para um prompt:359Este exemplo executa uma tarefa autônoma em [modo auto](/docs/pt/permission-modes#eliminate-prompts-with-auto-mode). O classificador revisa cada ação como usual, e Claude Code nega qualquer coisa que teria caído de volta para um prompt:

358 360 


365Com `--output-format stream-json`, negações aparecem como mensagens de sistema `permission_denied`, e a mensagem de resultado final as lista em `permission_denials`.367Com `--output-format stream-json`, negações aparecem como mensagens de sistema `permission_denied`, e a mensagem de resultado final as lista em `permission_denials`.

366 368 

367<Note>369<Note>

368 O sinalizador `--permission-prompts` requer Claude Code v2.1.259 ou posterior. Versões anteriores o rejeitam com um erro de opção desconhecida.370 A flag `--permission-prompts` requer Claude Code v2.1.259 ou posterior. Versões anteriores a rejeitam com um erro de opção desconhecida.

369</Note>371</Note>

370 372 

371<h3 id="create-a-commit">373<h3 id="create-a-commit">


379 --allowedTools "Bash(git diff *),Bash(git log *),Bash(git status *),Bash(git commit *)"381 --allowedTools "Bash(git diff *),Bash(git log *),Bash(git status *),Bash(git commit *)"

380```382```

381 383 

382O sinalizador `--allowedTools` usa [sintaxe de regra de permissão](/docs/pt/settings-reference#permission-rule-syntax). O ` *` à direita habilita correspondência de prefixo, então `Bash(git diff *)` permite qualquer comando começando com `git diff`. O espaço antes de `*` é importante: sem ele, `Bash(git diff*)` também corresponderia a `git diff-index`.384A flag `--allowedTools` usa [sintaxe de regra de permissão](/docs/pt/settings-reference#permission-rule-syntax). O ` *` à direita habilita correspondência de prefixo, então `Bash(git diff *)` permite qualquer comando começando com `git diff`. O espaço antes de `*` é importante: sem ele, `Bash(git diff*)` também corresponderia a `git diff-index`.

383 385 

384<Note>386<Note>

385 O suporte a comandos difere no modo `-p`:387 O suporte a comandos difere no modo `-p`:

386 388 

387 * [Skills](/docs/pt/skills) invocadas pelo usuário e comandos personalizados funcionam. Inclua `/skill-name` na string de prompt e Claude Code o expande antes de executar.389 * [Skills](/docs/pt/skills) invocadas pelo usuário e comandos personalizados funcionam. Inclua `/skill-name` na string de prompt e Claude Code o expande antes de executar.

388 * Comandos integrados que abrem um diálogo interativo, como `/login`, não estão disponíveis no modo `-p`.390 * Comandos integrados que só são executados na interface do terminal, como `/login`, não estão disponíveis.

389 * `/model`, `/effort`, `/fast`, `/color` e `/rename` aceitam o valor como um argumento, por exemplo `/model sonnet`, e `/mcp` sem argumento imprime um resumo de texto do status do servidor. Essas formas requerem Claude Code v2.1.205 ou posterior e seguem as [notas de disponibilidade de cada comando](/docs/pt/commands#all-commands).391 * `/model`, `/effort`, `/fast`, `/color` e `/rename` aceitam o valor como um argumento, por exemplo `/model sonnet`, e `/mcp` sem argumento imprime um resumo de texto do status do servidor. Essas formas requerem Claude Code v2.1.205 ou posterior e seguem as [notas de disponibilidade de cada comando](/docs/pt/commands#all-commands).

390 * Para alterar uma configuração, passe `key=value` para `/config`, por exemplo `/config thinking=false`.392 * Para alterar uma configuração, passe `key=value` para `/config`, por exemplo `/config thinking=false`.

391 * `/output-style <style>` alterna [estilos de saída](/docs/pt/output-styles) e `/output-style` sozinho os lista. Requer Claude Code v2.1.269 ou posterior.393 * `/output-style <style>` alterna [estilos de saída](/docs/pt/output-styles) e `/output-style` sozinho os lista. Requer Claude Code v2.1.269 ou posterior.

392</Note>394</Note>

393 395 

394<h3 id="customize-the-system-prompt">396<h3 id="customize-the-system-prompt">

395 Personalizar o prompt do sistema397 Personalizar o system prompt

396</h3>398</h3>

397 399 

398Use `--append-system-prompt` para adicionar instruções mantendo o comportamento padrão do Claude Code. Este exemplo envia um diff de PR para Claude e o instrui a revisar vulnerabilidades de segurança. Salve como um script de shell, por exemplo `review.sh`:400Use `--append-system-prompt` para adicionar instruções mantendo o comportamento padrão do Claude Code. Este exemplo envia um diff de PR para Claude e o instrui a revisar vulnerabilidades de segurança. Salve como um script de shell, por exemplo `review.sh`:


405 407 

406No script, `"$1"` representa o primeiro argumento que você passa na linha de comando. Execute `bash review.sh 123` e o shell substitui `"$1"` por `123`, então o script busca o diff para PR 123. Claude Code imprime a revisão como JSON, com o texto no campo `result`.408No script, `"$1"` representa o primeiro argumento que você passa na linha de comando. Execute `bash review.sh 123` e o shell substitui `"$1"` por `123`, então o script busca o diff para PR 123. Claude Code imprime a revisão como JSON, com o texto no campo `result`.

407 409 

408Consulte [system prompt flags](/docs/pt/cli-reference#system-prompt-flags) para mais opções, incluindo `--system-prompt` para substituir completamente o prompt padrão.410Consulte [flags de system prompt](/docs/pt/cli-reference#system-prompt-flags) para mais opções, incluindo `--system-prompt` para substituir completamente o prompt padrão.

409 411 

410<h3 id="continue-conversations">412<h3 id="continue-conversations">

411 Continuar conversas413 Continuar conversas

Details

132O runner e suas sessões fazem vários tipos de conexão de saída, e nenhuma conectividade de entrada de Anthropic é necessária:132O runner e suas sessões fazem vários tipos de conexão de saída, e nenhuma conectividade de entrada de Anthropic é necessária:

133 133 

134* **Plano de controle**: o runner sonda `api.anthropic.com` para trabalho e publica eventos de progresso de configuração e falha, tudo HTTPS de saída. A sondagem funciona como o batimento cardíaco do runner.134* **Plano de controle**: o runner sonda `api.anthropic.com` para trabalho e publica eventos de progresso de configuração e falha, tudo HTTPS de saída. A sondagem funciona como o batimento cardíaco do runner.

135* **Conector SCM**: o orquestrador opcional [conector SCM](/docs/pt/self-hosted-environments-reference#scm-connector-flags) tunnel é a única conexão WebSocket.135* **Git**: o runner clona de e envia para seu host git por HTTPS ou SSH, autenticado com credenciais que sua implantação fornece. Consulte [Configurar git](/docs/pt/self-hosted-environments-deploy#configure-git) para as opções, incluindo credenciais cunhadas por sessão. Com o [proxy git Anthropic](/docs/pt/self-hosted-environments-deploy#use-the-anthropic-git-proxy), o tráfego git para repositórios no github.com passa por `api.anthropic.com` em vez disso.

136* **Git**: o runner clona de e envia para seu host git por HTTPS ou SSH, autenticado com credenciais que sua implantação fornece; [Configurar git](/docs/pt/self-hosted-environments-deploy#configure-git) cobre as opções, incluindo credenciais cunhadas por sessão e o [proxy git Anthropic](/docs/pt/self-hosted-environments-deploy#use-the-anthropic-git-proxy), que roteia git através de `api.anthropic.com` em vez disso.136* **Filho da sessão**: o processo filho de Claude Code mantém o fluxo de eventos da sessão para `api.anthropic.com` e faz suas próprias chamadas de saída para inferência de modelo e para comandos git executados durante a sessão. Em uma sessão que usa [git gerenciado pela Anthropic](/docs/pt/self-hosted-environments-deploy#use-the-anthropic-git-proxy), o filho envia seu tráfego `git` e `gh` para github.com por uma conexão WebSocket que ele abre para `api.anthropic.com`.

137* **Filho da sessão**: o processo filho de Claude Code mantém o fluxo de eventos da sessão para `api.anthropic.com` e faz suas próprias chamadas de saída para inferência de modelo e para comandos git executados durante a sessão. Consulte [Requisitos de rede](/docs/pt/self-hosted-environments-deploy#network-requirements) para a lista completa de saída. O [diagrama acima](#how-self-hosted-environments-work) mostra esses caminhos, além do conector SCM opcional.137* **Conector SCM**: o [conector SCM](/docs/pt/self-hosted-environments-reference#scm-connector-flags) opcional do orquestrador não está disponível, portanto seu túnel não é aberto. O túnel é uma conexão WebSocket para `api.anthropic.com`.

138 

139Consulte [Requisitos de rede](/docs/pt/self-hosted-environments-deploy#network-requirements) para a lista completa de saída. O [diagrama acima](#how-self-hosted-environments-work) mostra esses caminhos, exceto o conector SCM opcional e a conexão git gerenciada pela Anthropic.

138 140 

139Por padrão, a inferência de modelo usa a API Anthropic. O plano de controle entrega o endpoint da API para cada sessão, e a sessão se autentica com um token OAuth emitido pela Anthropic, com escopo de sessão. Para enviar requisições de modelo para sua própria conta de nuvem em vez disso, consulte [Enviar requisições de modelo para Bedrock ou Agent Platform](/docs/pt/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform).141Por padrão, a inferência de modelo usa a API Anthropic. O plano de controle entrega o endpoint da API para cada sessão, e a sessão se autentica com um token OAuth emitido pela Anthropic, com escopo de sessão. Para enviar requisições de modelo para sua própria conta de nuvem em vez disso, consulte [Enviar requisições de modelo para Bedrock ou Agent Platform](/docs/pt/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform).

140 142 

Details

31| Variável | Descrição |31| Variável | Descrição |

32| :- | :- |32| :- | :- |

33| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | O JWT da sessão, prefixado com `sk-ant-cc-`. Sua reivindicação `act` identifica o criador da sessão, com o email do criador quando a superfície criadora o registrou. O valor é o token no momento do spawn; atualizações chegam pela stdin do filho, então um wrapper vê apenas o valor inicial. Consulte [Verify session identity](/docs/pt/self-hosted-environments-identity). |33| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | O JWT da sessão, prefixado com `sk-ant-cc-`. Sua reivindicação `act` identifica o criador da sessão, com o email do criador quando a superfície criadora o registrou. O valor é o token no momento do spawn; atualizações chegam pela stdin do filho, então um wrapper vê apenas o valor inicial. Consulte [Verify session identity](/docs/pt/self-hosted-environments-identity). |

34| `CCR_SESSION_ACCOUNT_EMAIL` | O email do criador da sessão, pré-extraído pelo runner da reivindicação `act.email` do token sem verificação de assinatura. Adequado para rotulagem, como trailers de commit. Quando o email controla a emissão de credenciais, verifique o token e leia a reivindicação dele em vez disso; consulte [Provision credentials scoped to the session creator](#provision-credentials-scoped-to-the-session-creator). Não definido quando o token não carrega email do criador. Trate como informação de identificação pessoal. |34| `CCR_SESSION_ACCOUNT_EMAIL` | O email do criador da sessão, pré-extraído pelo runner da reivindicação `act.email` do token sem verificação de assinatura. Adequado para rotulagem, como trailers de commit. Quando o email controla a emissão de credenciais, verifique o token e leia a reivindicação dele em vez disso. Consulte [Provision credentials scoped to the session creator](#provision-credentials-scoped-to-the-session-creator). Não definido quando o token não carrega email do criador, por exemplo em sessões que a identidade de serviço da sua organização cria. Trate como informação de identificação pessoal. |

35| `CLAUDE_RUNNER_CLIENT_PLATFORM` | A superfície do cliente que criou a sessão, como `web_claude_ai`, `desktop_app`, `ios`, `claude_code_cli` ou `scheduled_trigger`. Anthropic registra o valor uma vez na criação da sessão, então o wrapper e cada hook de ciclo de vida veem o mesmo valor. Use-o apenas para análise de adoção e rotulagem, não como sinal de autorização. Não definido quando a sessão não tem superfície registrada ou reconhecida, então referencie-o como `${CLAUDE_RUNNER_CLIENT_PLATFORM:-}` sob `set -u`. Requer Claude Code v2.1.229 ou posterior. |35| `CLAUDE_RUNNER_CLIENT_PLATFORM` | A superfície do cliente que criou a sessão, como `web_claude_ai`, `desktop_app`, `ios`, `claude_code_cli` ou `scheduled_trigger`. Anthropic registra o valor uma vez na criação da sessão, então o wrapper e cada hook de ciclo de vida veem o mesmo valor. Use-o apenas para análise de adoção e rotulagem, não como sinal de autorização. Não definido quando a sessão não tem superfície registrada ou reconhecida. Requer Claude Code v2.1.229 ou posterior. |

36| `CLAUDE_RUNNER_CLAUDE_BIN` | Caminho absoluto para o binário Claude Code próprio do runner. Termine seu wrapper com `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"` para passar o controle para o binário fixado sem codificar um caminho de instalação. |36| `CLAUDE_RUNNER_CLAUDE_BIN` | Caminho absoluto para o binário Claude Code próprio do runner. Termine seu wrapper com `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"` para passar o controle para o binário fixado sem codificar um caminho de instalação. |

37| `CLAUDE_CODE_REMOTE_SESSION_ID` | ID da sessão na forma marcada `cse_...`. Esta é a mesma sessão que os [lifecycle hooks](#lifecycle-hooks) veem como `CLAUDE_RUNNER_SESSION_ID` na forma `session_...`; as variáveis UUID correspondem em ambos, e substituir o prefixo `cse_` por `session_` produz o ID mostrado na URL da sessão. |37| `CLAUDE_CODE_REMOTE_SESSION_ID` | ID da sessão na forma marcada `cse_...`. Esta é a mesma sessão que os [lifecycle hooks](#lifecycle-hooks) veem como `CLAUDE_RUNNER_SESSION_ID` na forma `session_...`; as variáveis UUID correspondem em ambos, e substituir o prefixo `cse_` por `session_` produz o ID mostrado na URL da sessão. |

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

39| `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. |

40| `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_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. |41| `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`](/docs/pt/self-hosted-environments-reference#runner-cli-flags); consulte [Reuse a pre-warmed checkout](/docs/pt/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout). |42| `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`](/docs/pt/self-hosted-environments-reference#runner-cli-flags); consulte [Reuse a pre-warmed checkout](/docs/pt/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout). |

41| `ANTHROPIC_BASE_URL` | A URL base da API que o filho usará, entregue pelo plano de controle por sessão e normalmente `https://api.anthropic.com`. Não a sobrescreva: a credencial de inferência da sessão é um token OAuth emitido pela Anthropic que outros provedores não aceitam. |43| `ANTHROPIC_BASE_URL` | A URL base da API que o filho usará, entregue pelo plano de controle por sessão e normalmente `https://api.anthropic.com`. Não a sobrescreva: a credencial de inferência da sessão é um token OAuth emitido pela Anthropic que outros provedores não aceitam. |


43 45 

44O 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.

45 47 

48`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.

49 

50<h3 id="give-a-default-to-variables-that-can-be-unset">

51 Give a default to variables that can be unset

52</h3>

53 

54`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:-}`.

55 

56Onde quer que um shell expanda o link da thread do Slack, tome estas precauções:

57 

58* **Coloque-o entre aspas**: o link pode conter caracteres que um shell interpreta, como `?` e `&`, então coloque a variável entre aspas, como em `"${CLAUDE_CODE_REMOTE_SLACK_THREAD_URL:-}"`.

59* **Mantenha seu valor fora de strings de `eval` e `sh -c`**: não substitua seu valor em uma string que `eval` ou `sh -c` executa, mesmo entre aspas. Em vez disso, faça essa string referenciar a variável.

60 

46<h3 id="keep-stdin-and-file-descriptor-3-attached">61<h3 id="keep-stdin-and-file-descriptor-3-attached">

47 Keep stdin and file descriptor 3 attached62 Keep stdin and file descriptor 3 attached

48</h3>63</h3>

49 64 

50A stdin do filho é o canal de controle do runner. Rotações de token e sinais de fim de sessão chegam nela. O runner também abre um pipe no descritor de arquivo 3 e lê sinais de atividade do filho dele para conduzir timeouts de inatividade e inicialização. Um simples `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"` preserva ambos automaticamente.65A stdin do filho é o canal de controle do runner. Rotações de token e sinais de fim de sessão chegam nela. O runner também abre um pipe no descritor de arquivo 3 e lê sinais de atividade do filho dele para conduzir timeouts de inatividade e inicialização. Um simples `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"` preserva ambos automaticamente.

51 66 

52Se seu wrapper coloca o filho em background com um simples `&`, ele corta a stdin do filho: a sessão parece saudável até a vida útil do token OAuth inicial de aproximadamente 30 minutos expirar, então cada chamada de API falha com `401 authentication_error`. Se seu wrapper deve colocar o filho em background, por exemplo para manter uma trap de teardown viva, salve stdin no descritor de arquivo 4 ou superior e re-anexe-a explicitamente:67Se seu wrapper coloca o filho em background com um simples `&`, ele corta a stdin do filho. A sessão parece saudável até a vida útil do token OAuth inicial de aproximadamente 30 minutos expirar, e então cada chamada de API que usa o token falha com `401 authentication_error`. Se seu wrapper deve colocar o filho em background, por exemplo para manter uma trap de teardown viva, salve stdin no descritor de arquivo 4 ou superior e re-anexe-a explicitamente:

53 68 

54```bash theme={null}69```bash theme={null}

55exec 4<&070exec 4<&0


59wait "$CHILD"74wait "$CHILD"

60```75```

61 76 

62Não feche ou reutilize o descritor de arquivo 3 no wrapper. Redirecionar stdout e stderr do filho é aceitável.77Você pode redirecionar o stdout do filho. Mantenha o descritor de arquivo 3 e o stderr anexados ao runner:

78 

79* **Descritor de arquivo 3**: transporta os sinais de atividade do filho para o runner. Não o feche nem o reutilize no wrapper.

80* **stderr**: quando o wrapper ou o filho sai com código diferente de zero, o runner publica as últimas linhas do stderr na sessão e as imprime em seu próprio log. O usuário da sessão vê essas linhas, então não imprima segredos no stderr e remova `set -x` antes de implantar o wrapper. Se você redirecionar o stderr, as sessões ainda são executadas, mas o runner relata uma falha apenas com o código de saída.

63 81 

64<h3 id="pass-the-system-prompt-flags-through">82<h3 id="pass-the-system-prompt-flags-through">

65 Pass the system prompt flags through83 Pass the system prompt flags through


108 checkout126 checkout

109</h3>127</h3>

110 128 

111Executado uma vez por repositório, no lugar do clone e fetch integrados do runner. Use o hook para clonar de um espelho de leitura, semear uma árvore de trabalho de um arquivo ou aplicar autenticação git por sessão. O runner define estas variáveis, e pode definir outras variáveis `CLAUDE_RUNNER_` que a tabela não lista:129Executado uma vez por repositório, no lugar do clone e fetch integrados do runner. Use o hook para clonar de um espelho de leitura que você acessa por HTTPS ou SSH, semear uma árvore de trabalho a partir de um arquivo ou aplicar autenticação git por sessão. O runner define estas variáveis, e pode definir outras variáveis `CLAUDE_RUNNER_` que a tabela não lista:

112 130 

113| Variável | Descrição |131| Variável | Descrição |

114| :- | :- |132| :- | :- |

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

116| `CLAUDE_RUNNER_REPO_REF` | Revisão para fazer checkout: branch, tag ou commit SHA conforme a sessão o solicitou. Vazio significa o branch padrão do repositório. |134| `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. |

117| `CLAUDE_RUNNER_CHECKOUT_PATH` | Caminho absoluto onde a árvore de trabalho deve ser deixada |135| `CLAUDE_RUNNER_CHECKOUT_PATH` | Caminho absoluto onde a árvore de trabalho deve ser deixada |

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

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

120| `CLAUDE_RUNNER_API_BASE_URL` | URL base da API Anthropic para chamadas com escopo de sessão |138| `CLAUDE_RUNNER_API_BASE_URL` | URL base da API Anthropic para chamadas com escopo de sessão |

121| `CLAUDE_RUNNER_CLIENT_PLATFORM` | A superfície do cliente que criou a sessão, como `web_claude_ai`, `desktop_app` ou `ios`. Não definido quando a sessão não tem superfície registrada ou reconhecida. |139| `CLAUDE_RUNNER_CLIENT_PLATFORM` | A superfície do cliente que criou a sessão, como `web_claude_ai`, `desktop_app` ou `ios`. Não definido quando a sessão não tem superfície registrada ou reconhecida, então referencie-a como `${CLAUDE_RUNNER_CLIENT_PLATFORM:-}` sob `set -u`. Requer Claude Code v2.1.229 ou posterior. |

122| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | O token de acesso da sessão, para chamadas de API com escopo de sessão |140| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | O token de acesso da sessão, para chamadas de API com escopo de sessão |

123| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | Configurações git que o runner fixa para o git que seu hook executa. [Configuração do Git dentro de lifecycle hooks](#git-configuration-inside-lifecycle-hooks) as descreve. Requer Claude Code v2.1.280 ou posterior. |141| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | Configurações git que o runner fixa para o git que seu hook executa. [Configuração do Git dentro de lifecycle hooks](#git-configuration-inside-lifecycle-hooks) as descreve. Requer Claude Code v2.1.280 ou posterior. |

124 142 

125O script deve deixar uma árvore de trabalho em `CLAUDE_RUNNER_CHECKOUT_PATH` com checkout na revisão solicitada. HEAD desanexado é aceitável; o runner cria o branch de trabalho da sessão em cima. O runner verifica se o caminho contém um `.git` depois; se seu hook materializa uma fonte não-git como Perforce ou um tarball desempacotado, defina `CLAUDE_RUNNER_SKIP_GIT_VERIFY=1` no ambiente do runner para pular essa verificação. Fluxos baseados em Git como criação de branch de trabalho e push de resultados requerem um checkout git, então exporte resultados de árvores não-git com um hook [`post-session`](#post-session).143O script deve deixar uma árvore de trabalho em `CLAUDE_RUNNER_CHECKOUT_PATH` com checkout na revisão solicitada. Um HEAD desanexado funciona, porque o runner cria o branch de trabalho da sessão em cima.

126 144 

127O runner não passa uma credencial git para o hook. Em vez disso, emita uma credencial de clone por sessão a partir da identidade da sessão: verifique `CLAUDE_CODE_SESSION_ACCESS_TOKEN` com uma biblioteca JWT padrão contra o endpoint JWKS sob `CLAUDE_RUNNER_API_BASE_URL`, conforme descrito em [Verify the token from your service](/docs/pt/self-hosted-environments-identity#verify-the-token-from-your-service), então faça seu serviço de credencial emitir uma credencial de clone de curta duração para a identidade na reivindicação `act` do token. `CLAUDE_RUNNER_CLAUDE_BIN` não está definido no ambiente do checkout-hook, então o subcomando `decode-token` não está disponível aqui. Voltar para qualquer autenticação git que o host já tenha, como um agente SSH, credential helper ou `.netrc`, também é uma opção.145Depois que seu hook retorna, o runner verifica se `CLAUDE_RUNNER_CHECKOUT_PATH` contém um `.git`. Se seu hook materializa uma fonte não-git como Perforce ou um tarball desempacotado, defina `CLAUDE_RUNNER_SKIP_GIT_VERIFY=1` no ambiente do runner para pular essa verificação. Fluxos baseados em Git como criação de branch de trabalho e push de resultados requerem um checkout git, então exporte resultados de árvores não-git com um [hook `post-session`](#post-session).

128 146 

129Quando o hook sai com código diferente de zero, ou sai com 0 sem deixar um checkout utilizável atrás, o que o runner faz depende do repositório:147<h4 id="get-git-credentials-in-the-hook">

148 Obter credenciais git no hook

149</h4>

130 150 

131* **Um repositório para o qual a sessão faz push de resultados**: o runner falha a sessão, e em uma saída diferente de zero exibe a cauda do stderr do script para o usuário.151O runner não passa uma credencial git para o hook. O subcomando `decode-token` também não está disponível aqui, porque `CLAUDE_RUNNER_CLAUDE_BIN` não está definido no ambiente do checkout-hook. Em vez disso, emita uma credencial de clone por sessão a partir da identidade da sessão, ou recorra à própria autenticação git do host:

132* **Um repositório que a sessão apenas lê**, como um repositório adicionado a uma sessão em execução: o runner registra uma linha `[runner:warn]` com o detalhe da falha, publica um passo `Skipped` para a sessão, remove o que o hook deixou no caminho de checkout e continua com os repositórios restantes. Quando o runner não consegue remover o caminho imediatamente, ele tenta novamente a remoção no fim da sessão. Se pular deixa a sessão sem nenhum repositório, o runner falha a sessão mesmo assim.

133 152 

134Antes da v2.1.228, o runner falhava a sessão em uma falha de hook para qualquer repositório, então um repositório somente leitura que o hook não conseguia servir falhava a sessão novamente em cada novo runner fresco em que a sessão retomava.153* **Credencial de clone por sessão**: verifique `CLAUDE_CODE_SESSION_ACCESS_TOKEN` com uma biblioteca JWT padrão contra o endpoint JWKS sob `CLAUDE_RUNNER_API_BASE_URL`, conforme descrito em [Verify the token from your service](/docs/pt/self-hosted-environments-identity#verify-the-token-from-your-service). Em seguida, faça seu serviço de credencial emitir uma credencial de clone de curta duração para a identidade na reivindicação `act` do token. Associe essa credencial a `act.sub`, e não exija `act.email`.

154* **Autenticação git do host**: use qualquer autenticação git que o host já tenha, como um agente SSH, credential helper ou `.netrc`.

135 155 

136O runner remove o caminho de checkout após a sessão terminar.156<h4 id="when-the-hook-fails">

157 Quando o hook falha

158</h4>

159 

160O hook falha quando sai com código diferente de zero, ou sai com 0 sem deixar um checkout utilizável para trás:

161 

162* **Um repositório para o qual a sessão faz push de resultados**: o runner falha a sessão, e em uma saída diferente de zero exibe a cauda do stderr do script para o usuário.

163* **Um repositório que a sessão apenas lê**, como um repositório adicionado a uma sessão em execução: o runner registra uma linha `[runner:warn]` com o detalhe da falha, publica um passo `Skipped` para a sessão, remove o que o hook deixou no caminho de checkout e continua com os repositórios restantes. Se pular deixa a sessão sem nenhum repositório, o runner falha a sessão mesmo assim.

164 

165Quando o hook é bem-sucedido, o runner remove o caminho de checkout após a sessão terminar.

137 166 

138<h3 id="post-session">167<h3 id="post-session">

139 post-session168 post-session


151| `CLAUDE_RUNNER_WORKSPACE_PATHS` | Caminhos absolutos separados por dois-pontos das árvores de trabalho da sessão. Vazio para sessões sem repositório. |180| `CLAUDE_RUNNER_WORKSPACE_PATHS` | Caminhos absolutos separados por dois-pontos das árvores de trabalho da sessão. Vazio para sessões sem repositório. |

152| `CLAUDE_RUNNER_DEBUG_LOG_PATH` | Caminho para o log de debug da sessão, ainda em disco enquanto o hook é executado |181| `CLAUDE_RUNNER_DEBUG_LOG_PATH` | Caminho para o log de debug da sessão, ainda em disco enquanto o hook é executado |

153| `CLAUDE_RUNNER_API_BASE_URL` | URL base da API Anthropic para chamadas com escopo de sessão |182| `CLAUDE_RUNNER_API_BASE_URL` | URL base da API Anthropic para chamadas com escopo de sessão |

154| `CLAUDE_RUNNER_CLIENT_PLATFORM` | A superfície do cliente que criou a sessão, como `web_claude_ai`, `desktop_app` ou `ios`. Não definido quando a sessão não tem superfície registrada ou reconhecida. Requer Claude Code v2.1.229 ou posterior. |183| `CLAUDE_RUNNER_CLIENT_PLATFORM` | A superfície do cliente que criou a sessão, como `web_claude_ai`, `desktop_app` ou `ios`. Não definido quando a sessão não tem superfície registrada ou reconhecida, então referencie-a como `${CLAUDE_RUNNER_CLIENT_PLATFORM:-}` sob `set -u`. Requer Claude Code v2.1.229 ou posterior. |

155| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | O token de acesso da sessão, para chamadas de API com escopo de sessão |184| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | O token de acesso da sessão, para chamadas de API com escopo de sessão |

156| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | Configurações git que o runner fixa para o git que seu hook executa. [Configuração do Git dentro de lifecycle hooks](#git-configuration-inside-lifecycle-hooks) as descreve. Requer Claude Code v2.1.280 ou posterior. |185| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | Configurações git que o runner fixa para o git que seu hook executa. [Configuração do Git dentro de lifecycle hooks](#git-configuration-inside-lifecycle-hooks) as descreve. Requer Claude Code v2.1.280 ou posterior. |

157 186 

158`CLAUDE_RUNNER_EXIT_REASON` toma um de quatro valores:187`CLAUDE_RUNNER_EXIT_REASON` toma um de quatro valores:

159 188 

160* `completed`: a sessão terminou de forma limpa. O processo Claude Code saiu normalmente, ou a sessão foi arquivada ou deletada enquanto ainda estava em execução.189* `completed`: a sessão terminou de forma limpa. O processo Claude Code saiu normalmente, ou saiu por conta própria depois que a sessão foi arquivada ou deletada.

161* `failed`: o processo Claude Code travou, ou a configuração falhou após ele ter iniciado.190* `failed`: o processo Claude Code travou, ou a configuração falhou após ele ter iniciado.

162* `interrupted`: o runner parou a sessão. Ele liberou a sessão para liberar o slot, a sessão expirou na inicialização, o servidor moveu a sessão para fora deste runner, o runner estava drenando, ou a sessão ultrapassou seu limite [`--kill-session-after-min`](/docs/pt/self-hosted-environments-reference#runner-cli-flags).191* `interrupted`: o runner parou a sessão, em um destes casos:

192 * O runner liberou a sessão para liberar o slot.

193 * A sessão atingiu o timeout na inicialização.

194 * O servidor moveu a sessão para fora deste runner.

195 * A verificação periódica do runner detectou um arquivamento ou exclusão antes de o processo sair.

196 * O runner estava drenando.

197 * A sessão ultrapassou seu limite [`--kill-session-after-min`](/docs/pt/self-hosted-environments-reference#runner-cli-flags).

163* `abandoned`: reservado para uma sessão que outro runner reivindicou. O hook não dispara atualmente nesse caso.198* `abandoned`: reservado para uma sessão que outro runner reivindicou. O hook não dispara atualmente nesse caso.

164 199 

165Os [contadores de ciclo de vida da sessão](/docs/pt/self-hosted-environments-reference#session-lifecycle-counter-semantics) contam uma liberação, um timeout de inicialização e uma movimentação de servidor como `completed` em vez de `interrupted`, porque o runner devolveu o slot de forma limpa. Espere essa diferença se você comparar recibos de hook com os contadores.200Se você comparar recibos de hook com os [contadores de ciclo de vida da sessão](/docs/pt/self-hosted-environments-reference#session-lifecycle-counter-semantics), espere que alguns recibos `interrupted` contem como `completed` ali. Os contadores contam uma liberação, um timeout de inicialização, uma movimentação de servidor e um arquivamento ou exclusão que a verificação periódica do runner detectou primeiro como `completed`, porque o runner devolveu o slot de forma limpa.

166 201 

167O status de saída do hook nunca afeta o resultado da sessão; uma falha é registrada e ignorada. O runner aguarda até `--post-session-hook-timeout-sec`, 60 segundos por padrão, em cada fim de sessão incluindo shutdown do runner. Este exemplo salva trabalho não confirmado para um branch de resgate:202O status de saída do hook nunca afeta o resultado da sessão; uma falha é registrada e ignorada. O runner aguarda até `--post-session-hook-timeout-sec`, 60 segundos por padrão, em cada fim de sessão incluindo shutdown do runner. Este exemplo salva trabalho não confirmado para um branch de resgate:

168 203 

169```bash theme={null}204```bash theme={null}

170#!/usr/bin/env bash205#!/usr/bin/env bash

171set -u206set -u

207export GIT_ALLOW_PROTOCOL=${GIT_ALLOW_PROTOCOL:-https:http:ssh}

172IFS=':'208IFS=':'

173# -c overrides beat repo-local settings, blocking session-written fsmonitor,209# -c overrides beat repo-local settings, blocking session-written fsmonitor,

174# hook-path, and gpg-program config from executing code with the hook's210# hook-path, and gpg-program config from executing code with the hook's


188done224done

189```225```

190 226 

227A linha `GIT_ALLOW_PROTOCOL` no script limita o git a remotos HTTPS, HTTP e SSH. Se o ambiente do runner já define uma lista `GIT_ALLOW_PROTOCOL` própria não vazia, o script mantém essa lista.

228 

191O hook faz push com quaisquer credenciais git disponíveis em seu próprio ambiente no host do runner. Sob a [postura de sem-credenciais-na-imagem](/docs/pt/self-hosted-environments-deploy#configure-git), incluindo quando o clone integrado passa pelo proxy git Anthropic, não há nenhuma, então emita uma credencial de push de curta duração dentro do hook antes de fazer push: troque o token de sessão que o hook recebe em `CLAUDE_CODE_SESSION_ACCESS_TOKEN` com seu próprio serviço de token, verificando-o conforme [Verify session identity](/docs/pt/self-hosted-environments-identity) descreve. Quando o hook mantém uma credencial que a sessão não tinha, substitua `origin` por uma URL fornecida pelo operador e passe `-c credential.helper=` mais seu próprio helper. [Configuração do Git dentro de lifecycle hooks](#git-configuration-inside-lifecycle-hooks) descreve o que a configuração escrita pela sessão ainda pode afetar.229O hook faz push com quaisquer credenciais git disponíveis em seu próprio ambiente no host do runner. Sob a [postura de sem-credenciais-na-imagem](/docs/pt/self-hosted-environments-deploy#configure-git), incluindo quando o clone integrado passa pelo proxy git Anthropic, não há nenhuma, então emita uma credencial de push de curta duração dentro do hook antes de fazer push: troque o token de sessão que o hook recebe em `CLAUDE_CODE_SESSION_ACCESS_TOKEN` com seu próprio serviço de token, verificando-o conforme [Verify session identity](/docs/pt/self-hosted-environments-identity) descreve. Quando o hook mantém uma credencial que a sessão não tinha, substitua `origin` por uma URL fornecida pelo operador e passe `-c credential.helper=` mais seu próprio helper. [Configuração do Git dentro de lifecycle hooks](#git-configuration-inside-lifecycle-hooks) descreve o que a configuração escrita pela sessão ainda pode afetar.

192 230 

193<h4 id="hook-timing-when-the-runner-releases-a-session">231<h4 id="hook-timing-when-the-runner-releases-a-session">


264| `CLAUDE_RUNNER_ORDER_ID` | Chave de idempotência opaca, única por solicitação de spawn e segura para nomes de recursos Kubernetes. Use apenas o ID de ordem como sua chave de dedup do provisionador. |302| `CLAUDE_RUNNER_ORDER_ID` | Chave de idempotência opaca, única por solicitação de spawn e segura para nomes de recursos Kubernetes. Use apenas o ID de ordem como sua chave de dedup do provisionador. |

265| `CLAUDE_RUNNER_SESSION_ID` | A sessão para a qual esta solicitação é. Ela se repete em cada re-solicitação para a sessão, então use-a para logging e roteamento, não como chave de dedup. Vazio para solicitações de pré-aquecimento, que inicializam um runner em standby antes de qualquer sessão específica quando [`--min-idle`](/docs/pt/self-hosted-environments-reference#orchestrator-cli-flags) está definido, então não assuma que a variável está definida. |303| `CLAUDE_RUNNER_SESSION_ID` | A sessão para a qual esta solicitação é. Ela se repete em cada re-solicitação para a sessão, então use-a para logging e roteamento, não como chave de dedup. Vazio para solicitações de pré-aquecimento, que inicializam um runner em standby antes de qualquer sessão específica quando [`--min-idle`](/docs/pt/self-hosted-environments-reference#orchestrator-cli-flags) está definido, então não assuma que a variável está definida. |

266| `CLAUDE_RUNNER_SESSION_UUID` | O mesmo ID da sessão na forma UUID canônica. Vazio para solicitações de pré-aquecimento. |304| `CLAUDE_RUNNER_SESSION_UUID` | O mesmo ID da sessão na forma UUID canônica. Vazio para solicitações de pré-aquecimento. |

267| `CLAUDE_RUNNER_ATTEMPT` | Quantas solicitações de spawn esta sessão teve. `0` para solicitações de pré-aquecimento. |305| `CLAUDE_RUNNER_ATTEMPT` | Um contador por sessão para usar em logging. Não é uma contagem de novas tentativas nem uma contagem de solicitações. `0` para solicitações de pré-aquecimento, embora uma solicitação para uma sessão também possa carregar `0`. |

268| `CLAUDE_RUNNER_ORDER_SERVER_TIME` | Hora do servidor do cabeçalho HTTP `Date` da resposta de poll. Quando o hook verifica o `exp` do JWT da ordem de trabalho, compare contra este valor em vez do relógio local para tolerar skew. Vazio quando o gateway omitiu o cabeçalho. |306| `CLAUDE_RUNNER_ORDER_SERVER_TIME` | Hora do servidor do cabeçalho HTTP `Date` da resposta de poll. Quando o hook verifica o `exp` do JWT da ordem de trabalho, compare contra este valor em vez do relógio local para tolerar skew. Vazio quando o gateway omitiu o cabeçalho. |

269| `CLAUDE_RUNNER_POOL_ID` | O ID do ambiente que o novo runner deve se juntar, na forma `ccpool_...` |307| `CLAUDE_RUNNER_POOL_ID` | O ID do ambiente que o novo runner deve se juntar, na forma `ccpool_...` |

270| `CLAUDE_RUNNER_ACCOUNT_ID` | ID marcado da conta que enfileirou a sessão, para roteamento por conta, quota ou chargeback. Vazio quando indisponível, e sempre vazio para sessões do canal Claude Tag, que nenhuma conta enfileira. |308| `CLAUDE_RUNNER_ACCOUNT_ID` | ID marcado da conta que enfileirou a sessão, para roteamento por conta, quota ou chargeback. Vazio quando indisponível, e sempre vazio para sessões do canal Claude Tag, que nenhuma conta enfileira. |

271| `CLAUDE_RUNNER_ACCOUNT_EMAIL` | Email da conta que enfileirou a sessão. Vazio quando indisponível. Trate o email como informação de identificação pessoal e não o registre. |309| `CLAUDE_RUNNER_ACCOUNT_EMAIL` | Email da conta que enfileirou a sessão. Vazio quando indisponível. Trate o email como informação de identificação pessoal e não o registre. |

272| `CLAUDE_RUNNER_PRIMARY_REPO_URL` | URL da primeira fonte git da sessão, para roteamento para um runner com esse repositório pré-aquecido. Vazio quando a sessão não tem fontes git. |310| `CLAUDE_RUNNER_PRIMARY_REPO_URL` | URL da primeira fonte git da sessão, para roteamento para um runner com esse repositório pré-aquecido. Vazio quando a sessão não tem fontes git. |

273| `CLAUDE_RUNNER_PRIMARY_REPO_REVISION` | Revisão da primeira fonte git da sessão: branch, SHA ou tag. Vazio quando não especificado. |311| `CLAUDE_RUNNER_PRIMARY_REPO_REVISION` | Revisão da primeira fonte git da sessão: branch, SHA, tag ou nome completo da referência. Vazio quando não especificado. |

274| `CLAUDE_RUNNER_REPO_SOURCES` | Array JSON de `{url, revision}` para todas as fontes git da sessão, para hooks que roteiam em um repositório secundário. Vazio quando não há fontes. |312| `CLAUDE_RUNNER_REPO_SOURCES` | Array JSON de `{url, revision}` para todas as fontes git da sessão, para hooks que roteiam em um repositório secundário. Vazio quando não há fontes. |

275| `CLAUDE_RUNNER_CORRELATION_ID` | O ID de correlação fornecido na criação da sessão, ecoado de volta para que o hook possa mapear esta ordem de trabalho para a solicitação que criou a sessão. Vazio quando a sessão não tem nenhum. |313| `CLAUDE_RUNNER_CORRELATION_ID` | O ID de correlação fornecido na criação da sessão, ecoado de volta para que o hook possa mapear esta ordem de trabalho para a solicitação que criou a sessão. Vazio quando a sessão não tem nenhum. |

276| `CLAUDE_RUNNER_CLIENT_PLATFORM` | A superfície do cliente que criou a sessão, como `web_claude_ai`, `desktop_app`, `ios` ou `scheduled_trigger`, para análise de adoção. Não definido quando a sessão não tem superfície registrada ou reconhecida, e para solicitações de pré-aquecimento; verifique-o com `[ -n "${CLAUDE_RUNNER_CLIENT_PLATFORM:-}" ]`, que permanece seguro sob `set -u`. |314| `CLAUDE_RUNNER_CLIENT_PLATFORM` | A superfície do cliente que criou a sessão, como `web_claude_ai`, `desktop_app`, `ios` ou `scheduled_trigger`, para análise de adoção. Não definido quando a sessão não tem superfície registrada ou reconhecida, e para solicitações de pré-aquecimento; verifique-o com `[ -n "${CLAUDE_RUNNER_CLIENT_PLATFORM:-}" ]`, que permanece seguro sob `set -u`. |


282* **Use `--capacity 1` em runners gerados**: uma ordem de trabalho vinculada a sessão registra exatamente um runner vinculado a essa sessão, então uma capacidade maior adiciona slots que nunca recebem trabalho, e o runner registra um aviso na inicialização.320* **Use `--capacity 1` em runners gerados**: uma ordem de trabalho vinculada a sessão registra exatamente um runner vinculado a essa sessão, então uma capacidade maior adiciona slots que nunca recebem trabalho, e o runner registra um aviso na inicialização.

283* **Ordens de trabalho de pré-aquecimento registram desvinculadas**: o runner em standby não está vinculado a uma sessão e reclama trabalho enfileirado como um runner de frota fixa.321* **Ordens de trabalho de pré-aquecimento registram desvinculadas**: o runner em standby não está vinculado a uma sessão e reclama trabalho enfileirado como um runner de frota fixa.

284 322 

285O contrato tem quatro regras agnósticas do provisionador:323O contrato tem quatro regras, qualquer que seja a plataforma em que seu hook provisiona:

286 324 

2871. **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.3251. **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.

2882. **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`.3262. **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`.

2893. **Use o contrato de código de saída.** Saída 0 significa submetido. Saída 1 significa falha retentável; a sessão recua e é re-oferecida. Saída 2 ou superior significa não-retentável; a sessão é bloqueada de gerar novamente até um [Owner](/docs/pt/cloud-environments#organization-shared-environments) selecionar **Retry** nela na aba **Activity** do ambiente. Em saída diferente de zero, a cauda do stderr do hook aparece lá como o motivo da falha, então escreva o erro acionável para stderr e nunca segredos. Para uma solicitação de pré-aquecimento não há sessão para falhar: o orquestrador registra uma saída diferente de zero localmente apenas, e o servidor re-solicita o spawn após a concessão.3273. **Use o contrato de código de saída.** Saia com o status que corresponde ao resultado:

2904. **Defina `--expected-spawn-seconds` para pelo menos seu tempo de boot p99.** Esta é a concessão no lado do servidor. Todas as réplicas do orquestrador devem usar o mesmo valor.328 

329 * **Saída 0**: submetido.

330 * **Saída 1**: falha retentável. A sessão recua e é re-oferecida.

331 * **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](/docs/pt/cloud-environments#organization-shared-environments) selecione **Retry** nela na aba **Activity** do ambiente.

332 

333 Em saída diferente de zero, a cauda do stderr do hook aparece na aba **Activity** como o motivo da falha, então escreva o erro acionável para stderr e nunca escreva segredos lá. Em um hook de shell, [mantenha falhas transitórias retentáveis](#keep-transient-failures-retryable-in-a-shell-hook).

334 

335 Uma solicitação de pré-aquecimento não tem sessão para falhar: o orquestrador registra uma saída diferente de zero localmente apenas, e o servidor re-solicita o spawn após a concessão de `--expected-spawn-seconds` expirar.

3364. **Defina `--expected-spawn-seconds` para pelo menos seu tempo p99 desde a solicitação de spawn até o registro do runner.** Meça a partir do momento em que o orquestrador recebe a solicitação de spawn e inclua qualquer espera por capacidade na sua plataforma, além do tempo de boot. Este valor é a concessão no lado do servidor, e a ordem de trabalho expira com ela, então um runner cuja carga de trabalho demora mais não consegue se registrar. Todas as réplicas do orquestrador devem usar o mesmo valor.

291 337 

292Tudo 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.338Tudo 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.

293 339 

294Uma 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.340Uma 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.

295 341 

342<h4 id="keep-transient-failures-retryable-in-a-shell-hook">

343 Mantenha falhas transitórias retentáveis em um hook de shell

344</h4>

345 

346Em um hook de shell que usa `set -e`, uma falha que uma nova tentativa poderia ter resolvido pode bloquear a sessão. O hook para no comando que falhou e sai com o próprio status desse comando, e o orquestrador aplica o contrato de código de saída a esse status. Muitas falhas retornam um status de 2 ou superior, como `127` quando um comando não está instalado e `22` de `curl --fail` em um erro HTTP, então elas bloqueiam a sessão na sua primeira falha.

347 

348Uma sessão que o hook já bloqueou permanece bloqueada até que um usuário envie uma nova mensagem a ela ou um [Owner](/docs/pt/cloud-environments#organization-shared-environments) selecione **Retry** nela na aba **Activity** do ambiente.

349 

350Para transformar essa falha em saída 1, coloque estas linhas diretamente abaixo da linha `#!` do hook, acima de qualquer coisa que possa falhar:

351 

352```bash theme={null}

353set -e

354PERMANENT=; permanent() { printf '%s\n' "$*" >&2; PERMANENT=1; exit 2; }

355trap 'rc=$?; [ "$rc" -eq 0 ] || [ -n "${PERMANENT:-}" ] || exit 1' EXIT

356```

357 

358Estas linhas mudam como o restante do hook se comporta, então verifique-o quanto a cada um destes padrões depois de adicioná-las:

359 

360* **`exit 2` ou superior isolado**: com o trap definido, ele se torna saída 1. Para um erro que nenhuma nova tentativa pode corrigir, chame `permanent` com o motivo, como `permanent "namespace claude-runners does not exist"`. Chame-o no shell principal, não dentro de `$( )`, `( )` ou de um pipe.

361* **`exec`**: não inicie o último comando do hook com `exec`, porque `exec` substitui o shell e o trap não é executado.

362* **Segundo trap `EXIT`**: um segundo `trap ... EXIT` substitui o primeiro, então mescle os dois em um único trap. Coloque seus comandos de limpeza diretamente após `rc=$?;` e termine cada um com `|| true;`. A limpeza então é executada tanto em caso de falha quanto de sucesso, e um comando de limpeza que falha não define o status de saída do hook. Este trap mesclado mostra o formato, com `your-cleanup-command` representando o seu próprio comando:

363 

364 ```bash theme={null}

365 trap 'rc=$?; your-cleanup-command || true; [ "$rc" -eq 0 ] || [ -n "${PERMANENT:-}" ] || exit 1' EXIT

366 ```

367* **Comandos que podem falhar**: se o hook não usava `set -e` antes, agora ele para no primeiro comando que retorna diferente de zero, como uma consulta que não encontra nada ou uma submissão duplicada que sua plataforma rejeita. Se o hook age com base no resultado, faça desse comando a condição de um `if`. Se ele ignora o resultado, siga o comando com `|| true`.

368 

369Para confirmar que o trap funciona, adicione uma linha diretamente abaixo da linha `trap` que chama um comando que não existe, como `no-such-command`. Execute o arquivo do hook a partir do seu shell e verifique se `echo $?` imprime `1`, depois remova a linha.

370 

296<h2 id="send-model-requests-to-bedrock-or-agent-platform">371<h2 id="send-model-requests-to-bedrock-or-agent-platform">

297 Enviar requisições de modelo para Bedrock ou Agent Platform372 Enviar requisições de modelo para Bedrock ou Agent Platform

298</h2>373</h2>


381Uma sessão que envia requisições de modelo para o Amazon Bedrock ou para o Agent Platform do Google Cloud difere de uma sessão na API da Anthropic das seguintes maneiras:456Uma sessão que envia requisições de modelo para o Amazon Bedrock ou para o Agent Platform do Google Cloud difere de uma sessão na API da Anthropic das seguintes maneiras:

382 457 

383* **Políticas do claude.ai**: as [configurações gerenciadas pelo servidor](/docs/pt/server-managed-settings) não chegam a essas sessões. Também não chegam as políticas da organização que um Owner define nas configurações de administração do Claude Code, portanto o Claude Code não as aplica dentro da sessão. Coloque as regras das quais você depende no [arquivo de configurações gerenciadas](/docs/pt/managed-settings#delivery-mechanisms) da imagem do runner.458* **Políticas do claude.ai**: as [configurações gerenciadas pelo servidor](/docs/pt/server-managed-settings) não chegam a essas sessões. Também não chegam as políticas da organização que um Owner define nas configurações de administração do Claude Code, portanto o Claude Code não as aplica dentro da sessão. Coloque as regras das quais você depende no [arquivo de configurações gerenciadas](/docs/pt/managed-settings#delivery-mechanisms) da imagem do runner.

459* **Skills da conta**: essas sessões não baixam as skills ativadas para a conta do claude.ai de uma pessoa. Consulte [Como a configuração de cada sessão é montada](#how-each-session’s-config-is-assembled).

384* **Arquivos**: os arquivos que as pessoas anexam a uma sessão no claude.ai ou no aplicativo móvel ou desktop não chegam a ela, e o Claude não pode enviar arquivos de volta com a [ferramenta `SendUserFile`](/docs/pt/tools-reference). Em vez disso, coloque os arquivos de entrada no repositório ou no runner.460* **Arquivos**: os arquivos que as pessoas anexam a uma sessão no claude.ai ou no aplicativo móvel ou desktop não chegam a ela, e o Claude não pode enviar arquivos de volta com a [ferramenta `SendUserFile`](/docs/pt/tools-reference). Em vez disso, coloque os arquivos de entrada no repositório ou no runner.

385* **Seleção de modelo**: o plano de controle da Anthropic envia o modelo de cada sessão e, quando uma sessão é iniciada sem um, o Claude Code usa o seu padrão para o provedor. O runner remove `ANTHROPIC_MODEL` e `ANTHROPIC_DEFAULT_MODEL` do ambiente que passa às sessões. Os exemplos das páginas dos provedores definem `ANTHROPIC_MODEL`, mas no ambiente do runner nenhuma das duas variáveis tem efeito. As variáveis por família em Fixar versões de modelo para o [Amazon Bedrock](/docs/pt/amazon-bedrock#4-pin-model-versions) e o [Agent Platform](/docs/pt/google-vertex-ai#5-pin-model-versions) chegam às sessões. Elas decidem para o que um alias como `opus` é resolvido, não para o que um ID de modelo completo é resolvido.461* **Seleção de modelo**: o plano de controle da Anthropic envia o modelo de cada sessão e, quando uma sessão é iniciada sem um, o Claude Code usa o seu padrão para o provedor. Não é possível escolher o modelo com `ANTHROPIC_MODEL` ou `ANTHROPIC_DEFAULT_MODEL` no ambiente do runner, mas você pode fixar para o que um alias é resolvido:

462 * **`ANTHROPIC_MODEL` e `ANTHROPIC_DEFAULT_MODEL`**: o runner as remove do ambiente que passa às sessões, embora os exemplos das páginas dos provedores definam `ANTHROPIC_MODEL`.

463 * **Variáveis de fixação por família**: as variáveis em Fixar versões de modelo para o [Amazon Bedrock](/docs/pt/amazon-bedrock#4-pin-model-versions) e o [Agent Platform](/docs/pt/google-vertex-ai#5-pin-model-versions) chegam, sim, às sessões. Elas decidem para o que um alias como `opus` é resolvido, não para o que um ID de modelo completo é resolvido.

386* **Modelos que a sua conta não disponibiliza**: uma sessão pode falhar em uma mensagem com um erro que nomeia o modelo. Ative os modelos que os seus desenvolvedores podem escolher, o modelo de segundo plano descrito em Fixar versões de modelo e o modelo classificador que o [modo auto](/docs/pt/permission-modes#enable-auto-mode-on-bedrock-agent-platform-or-foundry) usa. No Amazon Bedrock, permita cada um deles na sua política.464* **Modelos que a sua conta não disponibiliza**: uma sessão pode falhar em uma mensagem com um erro que nomeia o modelo. Ative os modelos que os seus desenvolvedores podem escolher, o modelo de segundo plano descrito em Fixar versões de modelo e o modelo classificador que o [modo auto](/docs/pt/permission-modes#enable-auto-mode-on-bedrock-agent-platform-or-foundry) usa. No Amazon Bedrock, permita cada um deles na sua política.

387* **Pesquisa na web e modo rápido**: a [pesquisa na web](/docs/pt/tools-reference#websearch-tool-behavior) não está disponível no Amazon Bedrock, e o [modo rápido](/docs/pt/fast-mode) não está disponível em nenhum dos dois provedores. Para outros recursos que variam por provedor, consulte [Recursos da CLI que variam por provedor](/docs/pt/feature-availability#cli-capabilities-that-vary-by-provider).465* **Pesquisa na web e modo rápido**: a [pesquisa na web](/docs/pt/tools-reference#websearch-tool-behavior) não está disponível no Amazon Bedrock, e o [modo rápido](/docs/pt/fast-mode) não está disponível em nenhum dos dois provedores. Para outros recursos que variam por provedor, consulte [Recursos da CLI que variam por provedor](/docs/pt/feature-availability#cli-capabilities-that-vary-by-provider).

388 466 


411 489 

412As sessões herdam o ambiente do runner, então defina [`ENABLE_TOOL_SEARCH`](/docs/pt/mcp#scale-with-mcp-tool-search) lá para controlar a busca de ferramentas MCP em todas as sessões que um runner inicia; a página de MCP aborda os valores.490As sessões herdam o ambiente do runner, então defina [`ENABLE_TOOL_SEARCH`](/docs/pt/mcp#scale-with-mcp-tool-search) lá para controlar a busca de ferramentas MCP em todas as sessões que um runner inicia; a página de MCP aborda os valores.

413 491 

492<a id="connection-timing" />

493 

494<h3 id="wait-for-mcp-servers-before-the-first-turn">

495 Aguardar os servidores MCP antes do primeiro turno

496</h3>

497 

498Uma sessão auto-hospedada aguarda brevemente pelos servidores MCP que ainda estão se conectando, em dois pontos distintos. Um servidor que perde uma espera fica com suas ferramentas ausentes quando o primeiro turno começa, e elas ficam disponíveis mais tarde sem nenhuma ação da sua parte. As duas esperas são:

499 

500* **Inicialização da sessão**: antes de a lista de ferramentas ser obtida pela primeira vez, a sessão aguarda até 5 segundos por padrão por um servidor HTTP ou SSE cuja entrada define [`alwaysLoad: true`](/docs/pt/mcp#exempt-a-server-from-deferral), ou por todos os servidores quando você define [`MCP_CONNECTION_NONBLOCKING=0`](/docs/pt/env-vars) no ambiente do runner. Caso contrário, os servidores HTTP e SSE se conectam em segundo plano. Enquanto a sessão aguarda aqui, ela demora mais para inicializar. [`MCP_CONNECT_TIMEOUT_MS`](/docs/pt/env-vars) altera o padrão de 5 segundos.

501* **Primeiro turno**: depois que a mensagem chega, o primeiro turno aguarda até 2 segundos pelos servidores stdio que ainda estão se conectando. Enquanto a sessão aguarda aqui, a primeira resposta demora mais. Para alterar a duração dessa espera, defina [`CLAUDE_CODE_MCP_STARTUP_WAIT_MS`](/docs/pt/env-vars) no ambiente do runner. Isso não altera quais servidores a espera abrange. Requer o Claude Code v2.1.274 ou posterior.

502 

503O `claude mcp add` não tem uma flag `alwaysLoad`. Para definir a chave, adicione o servidor com `claude mcp add-json`, que a recebe no JSON do servidor e a grava em `.claude.json`. No seu Dockerfile:

504 

505```dockerfile theme={null}

506RUN claude mcp add-json core '{"type":"http","url":"https://mcp.example.com/mcp","alwaysLoad":true}' --scope user

507```

508 

509Se as ferramentas de um servidor também não aparecerem nos turnos seguintes, verifique se o servidor chegou à sessão, conforme descrito em [Servidores MCP](#mcp-servers).

510 

414<h3 id="turn-off-built-in-session-tools">511<h3 id="turn-off-built-in-session-tools">

415 Desativar as ferramentas de sessão integradas512 Desativar as ferramentas de sessão integradas

416</h3>513</h3>


571 668 

572Defina `SELF_HOSTED_RUNNER_HOST_CONFIG_DIR` para semear de um caminho diferente, ou aponte-o para um diretório vazio para desabilitar a semeadura.669Defina `SELF_HOSTED_RUNNER_HOST_CONFIG_DIR` para semear de um caminho diferente, ou aponte-o para um diretório vazio para desabilitar a semeadura.

573 670 

574O `.claude/settings.json` com commit no repositório se sobrepõe como configurações de projeto. Em uma sessão com vários repositórios, [no máximo o arquivo de um repositório tem efeito](#repository-settings-in-sessions-with-several-repositories). Sessões também leem [`managed-settings.json`](/docs/pt/settings#where-settings-live) do caminho de sistema padrão em sua imagem do runner. Se suas chaves se aplicam ao lado de [server-managed settings](/docs/pt/server-managed-settings) segue [como Claude Code combina fontes gerenciadas](/docs/pt/managed-settings#how-claude-code-combines-managed-sources): por padrão, quando sua organização entrega quaisquer chaves gerenciadas pelo servidor, sessões ignoram o arquivo da imagem do runner além das [chaves que Claude Code lê de cada fonte de administrador](/docs/pt/managed-settings#keys-read-from-every-admin-source), como o bloco `env`, os locks de sandbox, os caminhos binários de sandbox e `forceRemoteSettingsRefresh`. Consulte [settings precedence](/docs/pt/settings#settings-precedence).671As sessões também leem estes arquivos de configurações:

672 

673* **Configurações de projeto**: um `.claude/settings.json` com commit no repositório se sobrepõe à linha de base de nível de usuário. Em uma sessão com vários repositórios, [no máximo o arquivo de um repositório tem efeito](#repository-settings-in-sessions-with-several-repositories).

674* **Configurações gerenciadas**: as sessões leem [`managed-settings.json`](/docs/pt/settings#where-settings-live) do caminho de sistema padrão em sua imagem do runner. Para saber se suas chaves se aplicam ao lado de [server-managed settings](/docs/pt/server-managed-settings), consulte [como Claude Code combina fontes gerenciadas](/docs/pt/managed-settings#how-claude-code-combines-managed-sources).

675 

676Para a ordem em que essas fontes se aplicam, consulte [settings precedence](/docs/pt/settings#settings-precedence).

575 677 

576Quando o plano de controle da Anthropic fornece uma sessão com [Claude Code hooks](/docs/pt/hooks), o runner os instala ao lado, não sobre, sua própria configuração. Requer Claude Code v2.1.229 ou posterior.678Quando o plano de controle da Anthropic fornece uma sessão com [Claude Code hooks](/docs/pt/hooks), o runner os instala ao lado, não sobre, sua própria configuração. Requer Claude Code v2.1.229 ou posterior.

577 679 


579* **Quem os autora**: o plano de controle popula os scripts de constantes fixas em sua própria implantação, nunca de entrada por sessão ou de terceiros.681* **Quem os autora**: o plano de controle popula os scripts de constantes fixas em sua própria implantação, nunca de entrada por sessão ou de terceiros.

580* **O que ainda os governa**: hooks entregues através de `--settings` entram na configuração de hook mesclada ordinária, não na camada gerenciada, então suas configurações gerenciadas ainda se aplicam. `disableAllHooks` os desabilita, e eles não estão entre as categorias que [`allowManagedHooksOnly`](/docs/pt/settings-reference#allowmanagedhooksonly) mantém carregadas.682* **O que ainda os governa**: hooks entregues através de `--settings` entram na configuração de hook mesclada ordinária, não na camada gerenciada, então suas configurações gerenciadas ainda se aplicam. `disableAllHooks` os desabilita, e eles não estão entre as categorias que [`allowManagedHooksOnly`](/docs/pt/settings-reference#allowmanagedhooksonly) mantém carregadas.

581 683 

684Quando uma pessoa inicia sua própria sessão, o Claude Code também baixa as [skills habilitadas para sua conta claude.ai](/docs/pt/skills#skills-in-cowork-and-cloud-sessions) no diretório de configuração dessa sessão. Uma execução de [rotina](/docs/pt/routines) não recebe as skills de seu proprietário, e uma sessão que [envia requisições de modelo para Bedrock ou Agent Platform](#send-model-requests-to-bedrock-or-agent-platform) não baixa nenhuma. Para uma skill de que essas sessões precisem, faça commit dela no `.claude/skills/` do repositório ou adicione-a à sua imagem do runner.

685 

582Fora das sessões do [Claude Tag](https://claude.com/docs/claude-tag/overview), uma sessão em um ambiente auto-hospedado é executada com a [memória automática](/docs/pt/memory#auto-memory) desativada por padrão. Para instruções que devem persistir entre sessões, use o `CLAUDE.md` em sua imagem do runner ou no repositório.686Fora das sessões do [Claude Tag](https://claude.com/docs/claude-tag/overview), uma sessão em um ambiente auto-hospedado é executada com a [memória automática](/docs/pt/memory#auto-memory) desativada por padrão. Para instruções que devem persistir entre sessões, use o `CLAUDE.md` em sua imagem do runner ou no repositório.

583 687 

584O 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.688O 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.

Details

20 20 

21* **Contêineres efêmeros por sessão**: execute cada processo runner em um contêiner ou VM fresco que é destruído quando o processo sai, com `--capacity 1` e o padrão `--drain-grace-sec 0` para que cada contêiner sirva exatamente uma sessão. Em uma capacidade mais alta, ou com uma graça de drenagem positiva, um contêiner serve múltiplas sessões do mesmo [owner bloqueado](/docs/pt/self-hosted-environments#key-concepts); consulte [Ciclo de vida do Runner](/docs/pt/self-hosted-environments#runner-lifecycle). Não reutilize um sistema de arquivos entre reinicializações do runner, exceto na configuração deliberada de [checkout pré-aquecido](#reuse-a-pre-warmed-checkout), e nunca entre owners.21* **Contêineres efêmeros por sessão**: execute cada processo runner em um contêiner ou VM fresco que é destruído quando o processo sai, com `--capacity 1` e o padrão `--drain-grace-sec 0` para que cada contêiner sirva exatamente uma sessão. Em uma capacidade mais alta, ou com uma graça de drenagem positiva, um contêiner serve múltiplas sessões do mesmo [owner bloqueado](/docs/pt/self-hosted-environments#key-concepts); consulte [Ciclo de vida do Runner](/docs/pt/self-hosted-environments#runner-lifecycle). Não reutilize um sistema de arquivos entre reinicializações do runner, exceto na configuração deliberada de [checkout pré-aquecido](#reuse-a-pre-warmed-checkout), e nunca entre owners.

22 * <span id="processes-a-stopped-session-leaves" />Quando o runner interrompe uma sessão, ele não envia nenhum sinal para um processo que ainda esteja em execução depois que seu comando shell foi encerrado, como um serviço que foi daemonizado. Destruir o contêiner ou a VM encerra esse processo.22 * <span id="processes-a-stopped-session-leaves" />Quando o runner interrompe uma sessão, ele não envia nenhum sinal para um processo que ainda esteja em execução depois que seu comando shell foi encerrado, como um serviço que foi daemonizado. Destruir o contêiner ou a VM encerra esse processo.

23* **Sem credenciais amplas na imagem**: não inclua chaves SSH de longa duração, credenciais de provedor de nuvem ou tokens de acesso pessoal que concedem mais do que uma sessão precisa. Crie credenciais usadas durante uma sessão, como tokens de push ou API, por sessão a partir de seu [script wrapper](/docs/pt/self-hosted-environments-configuration#wrapper-scripts). Para o clone inicial, que acontece antes do wrapper ser executado, use um [hook de ciclo de vida `checkout`](/docs/pt/self-hosted-environments-configuration#checkout) ou [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy); consulte [Configurar git](#configure-git).23* **Sem credenciais amplas na imagem**: não inclua chaves SSH de longa duração, credenciais de provedor de nuvem ou tokens de acesso pessoal que concedem mais do que uma sessão precisa. Crie credenciais usadas durante uma sessão, como tokens de push ou API, por sessão a partir de seu [script wrapper](/docs/pt/self-hosted-environments-configuration#wrapper-scripts). O clone inicial acontece antes do wrapper ser executado, então trate-o com um [hook de ciclo de vida `checkout`](/docs/pt/self-hosted-environments-configuration#checkout), ou com [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) quando todos os repositórios de uma sessão estiverem no github.com. Para ambos, consulte [Configurar git](#configure-git).

24* **Mantenha as credenciais GitHub do host longe das sessões**: Claude pode usar qualquer credencial GitHub que uma sessão consiga ler, com qualquer acesso que essa credencial conceda. Mantenha as próprias credenciais GitHub de escopo amplo do host runner fora de qualquer coisa que uma sessão possa ler. Tal credencial pode ser um token de acesso pessoal, o token que `gh auth login` salva para sua conta, ou um `GH_TOKEN` no ambiente do runner.

25 * **Com [git gerenciado pela Anthropic](#use-the-anthropic-git-proxy)**: com tal credencial, Claude acessa o GitHub diretamente em vez de passar pelo git gerenciado pela Anthropic.

26 * **Sem git gerenciado pela Anthropic**: uma credencial de clone pode permanecer na imagem se você restringir seu escopo tanto quanto [Incluir a configuração do git em sua imagem](#ship-git-config-in-your-image) descreve.

24* **Mantenha o segredo do ambiente fora dos hosts que executam sessões**: o segredo do ambiente pode registrar runners e pegar qualquer sessão enfileirada no ambiente. Em uma frota fixa, ele vive em cada host runner, onde o código de qualquer sessão pode ler o arquivo secreto. Prefira [runners sob demanda](/docs/pt/self-hosted-environments-configuration#on-demand-runners), onde o segredo fica no host do orquestrador, que nunca executa código do usuário, e cada runner recebe uma ordem de trabalho de uso único que registra exatamente um runner. Em uma frota fixa, trate o arquivo environment-secret como legível por cada sessão e gire o segredo após qualquer suspeita de comprometimento de sessão.27* **Mantenha o segredo do ambiente fora dos hosts que executam sessões**: o segredo do ambiente pode registrar runners e pegar qualquer sessão enfileirada no ambiente. Em uma frota fixa, ele vive em cada host runner, onde o código de qualquer sessão pode ler o arquivo secreto. Prefira [runners sob demanda](/docs/pt/self-hosted-environments-configuration#on-demand-runners), onde o segredo fica no host do orquestrador, que nunca executa código do usuário, e cada runner recebe uma ordem de trabalho de uso único que registra exatamente um runner. Em uma frota fixa, trate o arquivo environment-secret como legível por cada sessão e gire o segredo após qualquer suspeita de comprometimento de sessão.

25* **Saída de rede padrão-negar**: restrinja o tráfego de saída do contêiner runner e sessão no seu próprio limite de rede em cada ambiente; [Saída padrão-negar](#default-deny-egress) cobre o que permitir e por quê.28* **Saída de rede padrão-negar**: restrinja o tráfego de saída do contêiner runner e sessão no seu próprio limite de rede em cada ambiente; [Saída padrão-negar](#default-deny-egress) cobre o que permitir e por quê.

26* **IAM de host com privilégio mínimo**: a identidade de computação anexada ao host runner, como um perfil de instância ou conta de serviço de nó, deve conceder apenas o que o próprio runner precisa. As sessões devem obter suas próprias credenciais através de seu script wrapper em vez de herdar a do host.29* **IAM de host com privilégio mínimo**: a identidade de computação anexada ao host runner, como um perfil de instância ou conta de serviço de nó, deve conceder apenas o que o próprio runner precisa. As sessões devem obter suas próprias credenciais através de seu script wrapper em vez de herdar a do host.


42 O guard é executado independentemente de [`--trust-workspace`](/docs/pt/self-hosted-environments-reference#runner-cli-flags), e não cobre hooks de repositório, `.mcp.json`, ou regras Bash; consulte [Permissões e aprovação de ferramentas](/docs/pt/self-hosted-environments-configuration#permissions-and-tool-approval) para onde essas concessões pertencem.45 O guard é executado independentemente de [`--trust-workspace`](/docs/pt/self-hosted-environments-reference#runner-cli-flags), e não cobre hooks de repositório, `.mcp.json`, ou regras Bash; consulte [Permissões e aprovação de ferramentas](/docs/pt/self-hosted-environments-configuration#permissions-and-tool-approval) para onde essas concessões pertencem.

43 46 

44<Note>47<Note>

45 A lista de permissões de IP de sua organização não cobre o tráfego do runner auto-hospedado por padrão. Não confie nela como um controle de rede para tráfego de runner ou sessão; aplique saída padrão-negar no seu próprio limite de rede em vez disso, e entre em contato com sua equipe de conta Anthropic se você quiser aplicação de lista de permissões de IP para sua organização.48 Se sua organização tiver a [allowlist de IP](https://support.claude.com/en/articles/13200993-restrict-access-to-claude-with-ip-allowlisting) ativada, adicione os endereços públicos de saída de seus runners e contêineres de sessão à allowlist antes de iniciá-los. Se você executar [runners sob demanda](/docs/pt/self-hosted-environments-configuration#on-demand-runners), adicione também o endereço do host do orquestrador. Não confie na allowlist como um controle de rede para tráfego de runner ou sessão. Em vez disso, aplique saída padrão-negar no seu próprio limite de rede.

46</Note>49</Note>

47 50 

48<h2 id="network-requirements">51<h2 id="network-requirements">


55 58 

56| Host | Porta | Usado para |59| Host | Porta | Usado para |

57| :- | :- | :- |60| :- | :- | :- |

58| `api.anthropic.com` | 443, HTTPS; WSS apenas para o conector SCM | Plano de controle do runner e streaming de sessão, inferência de modelo, sinalizadores de recursos, análise de produtos, buscas de chave [JWKS](/docs/pt/self-hosted-environments-identity), assinatura de commit, o proxy git quando `--use-anthropic-git-proxy` está definido, e o túnel [conector SCM](/docs/pt/self-hosted-environments-reference#scm-connector-flags) do orquestrador quando `--scm-connector-host` está definido |61| `api.anthropic.com` | 443, HTTPS; WSS para [git gerenciado pela Anthropic](#use-the-anthropic-git-proxy) | Plano de controle do runner e streaming de sessão, inferência de modelo, sinalizadores de recursos, análise de produtos, buscas de chave [JWKS](/docs/pt/self-hosted-environments-identity), assinatura de commit e git gerenciado pela Anthropic quando `--use-anthropic-git-proxy` está definido |

59| Seu host git, como `github.com` ou seu host GitHub Enterprise | 443 ou 22 | Clonagem e push de repositórios. Não necessário se o runner usar `--use-anthropic-git-proxy`, que roteia o tráfego git através de `api.anthropic.com`. |62| Seu host git, como `github.com` ou seu host GitHub Enterprise | 443 ou 22 | Clonagem e push de repositórios em cada host git que as sessões do runner usam. Em um runner que usa [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy), consulte [quando o caminho para `github.com` ainda é necessário](#github-com-egress-with-the-anthropic-git-proxy). |

63 

64<span id="github-com-egress-with-the-anthropic-git-proxy" />Um runner que usa [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) roteia seu tráfego git de `github.com` através de `api.anthropic.com`, então ele não precisa do caminho para o host git `github.com`. Ele ainda precisa desse caminho se você definir `--push-outcome-on-release` ou fizer push a partir de um hook `post-session`.

60 65 

61Se esses hosts são necessários depende de sua configuração:66Se esses hosts são necessários depende de sua configuração:

62 67 


71| `browser-intake-us5-datadoghq.com` | 443 | Uploads de relatório de erro da Anthropic, enviados apenas quando [relatório de erro](/docs/pt/data-usage#telemetry-services) está habilitado para a conta da sessão. Suprimido por `DISABLE_ERROR_REPORTING=1` ou `DISABLE_TELEMETRY=1`. |76| `browser-intake-us5-datadoghq.com` | 443 | Uploads de relatório de erro da Anthropic, enviados apenas quando [relatório de erro](/docs/pt/data-usage#telemetry-services) está habilitado para a conta da sessão. Suprimido por `DISABLE_ERROR_REPORTING=1` ou `DISABLE_TELEMETRY=1`. |

72| Os endpoints do seu provedor de nuvem para requisições de modelo, consultas de modelo e renovação de credenciais, como `bedrock-runtime.us-east-1.amazonaws.com` ou `aiplatform.googleapis.com` | 443 | Apenas quando o runner [envia requisições de modelo para o Amazon Bedrock ou o Agent Platform do Google Cloud](/docs/pt/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform) |77| Os endpoints do seu provedor de nuvem para requisições de modelo, consultas de modelo e renovação de credenciais, como `bedrock-runtime.us-east-1.amazonaws.com` ou `aiplatform.googleapis.com` | 443 | Apenas quando o runner [envia requisições de modelo para o Amazon Bedrock ou o Agent Platform do Google Cloud](/docs/pt/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform) |

73 78 

74O runner não alcança `statsig.anthropic.com`, `*.sentry.io`, `claude.ai`, ou `platform.claude.com`. Esses hosts aparecem em algumas listas de verificação de rede corporativa mais antigas, mas você não precisa colocá-los na lista de permissões para tráfego de runner ou sessão: as buscas de sinalizador de recurso vão para `api.anthropic.com`, e o runner se autentica com o segredo do ambiente em vez de OAuth interativo. Dois fluxos do lado do host alcançam `claude.ai`, então execute-os a partir de um host cuja saída permite, em vez de ampliar a saída do contêiner de sessão: o instalador de uma linha busca `install.sh` de `claude.ai` no tempo de instalação, e `claude auth login` interativo, que a [configuração guiada](/docs/pt/self-hosted-environments-quickstart#set-up-an-environment-and-runner), modo assinado do `doctor`, e [dispatch de CI](/docs/pt/self-hosted-environments-testing#authenticate-from-ci) usam, faz login através de `claude.ai`, `claude.com`, e `platform.claude.com`. `mcp-proxy.anthropic.com` também não é necessário: sessões auto-hospedadas não o usam, e a entrega dos conectores claude.ai de sua organização para sessões, quando habilitada para sua organização, roteia através de `api.anthropic.com`. Consulte [Servidores MCP](/docs/pt/self-hosted-environments-configuration#mcp-servers).79Você não precisa adicionar estes hosts à allowlist para tráfego de runner ou sessão:

80 

81* **`statsig.anthropic.com`, `*.sentry.io`, `claude.ai` e `platform.claude.com`**: esses hosts aparecem em algumas listas de verificação de rede corporativa mais antigas, mas o runner não os alcança. As buscas de sinalizadores de recursos vão para `api.anthropic.com`, e o runner se autentica com o segredo do ambiente em vez de OAuth interativo.

82* **`mcp-proxy.anthropic.com`**: sessões auto-hospedadas não o usam. Quando a entrega de conectores está habilitada para sua organização, os conectores claude.ai de sua organização alcançam as sessões através de `api.anthropic.com`. Consulte [Servidores MCP](/docs/pt/self-hosted-environments-configuration#mcp-servers).

83 

84Estes fluxos do lado do host alcançam `claude.ai`, então execute-os a partir de um host cuja saída permita isso, em vez de ampliar a saída do contêiner de sessão:

85 

86* **O instalador de uma linha**: busca `install.sh` de `claude.ai` no tempo de instalação.

87* **`claude auth login` interativo**: faz login através de `claude.ai`, `claude.com` e `platform.claude.com`. A [configuração guiada](/docs/pt/self-hosted-environments-quickstart#run-the-guided-setup), o modo com login do `doctor` e o [dispatch de CI](/docs/pt/self-hosted-environments-testing#authenticate-from-ci) o usam. O navegador com o qual você faz login também carrega as verificações de navegador da página de login do claude.ai a partir de `hcaptcha.com`, `*.hcaptcha.com` e `challenges.cloudflare.com`.

75 88 

76<h3 id="default-deny-egress">89<h3 id="default-deny-egress">

77 Saída padrão-negar90 Saída padrão-negar


127* **Deixe o runner configurar git**: inicie o runner com `--configure-git` para que ele escreva a mesma identidade e configuração de assinatura de commit que as sessões hospedadas pela Anthropic usam140* **Deixe o runner configurar git**: inicie o runner com `--configure-git` para que ele escreva a mesma identidade e configuração de assinatura de commit que as sessões hospedadas pela Anthropic usam

128* **Envie configuração git em sua imagem**: defina identidade e credenciais de push você mesmo, por exemplo para fazer commit sob sua própria identidade de bot141* **Envie configuração git em sua imagem**: defina identidade e credenciais de push você mesmo, por exemplo para fazer commit sob sua própria identidade de bot

129 142 

143Para repositórios em github.com, você também pode iniciar o runner com [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy), ou definir `CLAUDE_RUNNER_USE_GIT_PROXY=1`, para pedir que a Anthropic sirva o git para as sessões do runner.

144 

130Pisos de versão Git no host runner: [`--configure-git`](#let-the-runner-configure-git) a assinatura de commit SSH requer Git 2.34 ou mais recente, [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) requer 2.32 ou mais recente, e retomar sessões de branches enviados por [`--push-outcome-on-release`](/docs/pt/self-hosted-environments-reference#runner-cli-flags) requer 2.29 ou mais recente. Git 2.24 é suficiente se você omitir todos os três e gerenciar a identidade git você mesmo.145Pisos de versão Git no host runner: [`--configure-git`](#let-the-runner-configure-git) a assinatura de commit SSH requer Git 2.34 ou mais recente, [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) requer 2.32 ou mais recente, e retomar sessões de branches enviados por [`--push-outcome-on-release`](/docs/pt/self-hosted-environments-reference#runner-cli-flags) requer 2.29 ou mais recente. Git 2.24 é suficiente se você omitir todos os três e gerenciar a identidade git você mesmo.

131 146 

132<h3 id="let-the-runner-configure-git">147<h3 id="let-the-runner-configure-git">


138* `user.name = Claude` e `user.email = noreply@anthropic.com`, correspondendo às sessões hospedadas pela Anthropic153* `user.name = Claude` e `user.email = noreply@anthropic.com`, correspondendo às sessões hospedadas pela Anthropic

139* Assinatura de commit e tag em formato SSH, roteada através de um shim gerenciado pelo runner que assina cada commit através do serviço de assinatura da Anthropic usando as credenciais da própria sessão. As assinaturas são verificáveis no GitHub contra a chave de assinatura SSH publicada da Anthropic.154* Assinatura de commit e tag em formato SSH, roteada através de um shim gerenciado pelo runner que assina cada commit através do serviço de assinatura da Anthropic usando as credenciais da própria sessão. As assinaturas são verificáveis no GitHub contra a chave de assinatura SSH publicada da Anthropic.

140* `push.negotiate = true`, para que git pergunte ao seu host git quais commits ele já possui antes de empacotar um push. Requer Claude Code v2.1.257 ou posterior.155* `push.negotiate = true`, para que git pergunte ao seu host git quais commits ele já possui antes de empacotar um push. Requer Claude Code v2.1.257 ou posterior.

141* `core.hooksPath` apontando para um diretório de hooks gerenciado pelo runner. Seus hooks `commit-msg` e `prepare-commit-msg` adicionam um trailer `Co-authored-by:` para o criador da sessão a cada commit, construído a partir do email em [`CCR_SESSION_ACCOUNT_EMAIL`](/docs/pt/self-hosted-environments-configuration#wrapper-scripts) e omitido quando essa variável não está definida. Se sua imagem já define `core.hooksPath`, o runner deixa sua configuração no lugar, pula a instalação desses hooks e imprime um aviso `[runner:git]`.156* `core.hooksPath` apontando para um diretório de hooks gerenciado pelo runner. Seus hooks `commit-msg` e `prepare-commit-msg` adicionam um trailer `Co-authored-by:` para o criador da sessão a cada commit. O trailer é construído a partir do email em [`CCR_SESSION_ACCOUNT_EMAIL`](/docs/pt/self-hosted-environments-configuration#wrapper-scripts) e omitido quando essa variável não está definida. Se sua imagem já define `core.hooksPath` e o runner não usa [git gerenciada pela Anthropic](#use-the-anthropic-git-proxy), o runner mantém sua configuração, pula a instalação desses hooks e imprime um aviso `[runner:git]`.

142 157 

143A assinatura de commit requer git 2.34 ou mais recente; o runner verifica na inicialização e sai com um erro se seu git for mais antigo. Este sinalizador não configura credenciais de push, que você ainda fornece na imagem.158A assinatura de commit requer git 2.34 ou mais recente; o runner verifica na inicialização e sai com um erro se seu git for mais antigo. Este sinalizador não configura credenciais de push, que você ainda fornece na imagem.

144 159 

145Em um runner na v2.1.280 ou posterior, os commits que você faz a partir de um hook de ciclo de vida `checkout` ou `post-session` também são assinados como a sessão, sem o trailer `Co-authored-by:`. [Configuração git dentro de hooks de ciclo de vida](/docs/pt/self-hosted-environments-configuration#git-configuration-inside-lifecycle-hooks) descreve as configurações git que o runner fixa dentro desses hooks.160Em um runner na v2.1.280 ou posterior, os commits que você faz a partir de um hook de ciclo de vida `checkout` ou `post-session` também são assinados como a sessão, sem o trailer `Co-authored-by:`. [Configuração git dentro de hooks de ciclo de vida](/docs/pt/self-hosted-environments-configuration#git-configuration-inside-lifecycle-hooks) descreve as configurações git que o runner fixa dentro desses hooks.

146 161 

162Com ou sem `--configure-git`, o Claude Code instrui o Claude a terminar suas mensagens de commit com um trailer `Claude-Session: <url>` e suas descrições de pull request com a URL da sessão. Para omitir ambos, defina [`attribution.sessionUrl`](/docs/pt/settings-reference#attribution-sessionurl) como `false` no [`~/.claude/settings.json`](/docs/pt/self-hosted-environments-configuration#how-each-session’s-config-is-assembled) do host runner e, em seguida, reinicie o runner.

163 

147<h3 id="ship-git-config-in-your-image">164<h3 id="ship-git-config-in-your-image">

148 Envie configuração git em sua imagem165 Envie configuração git em sua imagem

149</h3>166</h3>


186 Use o proxy git da Anthropic203 Use o proxy git da Anthropic

187</h3>204</h3>

188 205 

189Inicie o runner com `--use-anthropic-git-proxy`, ou defina `CLAUDE_RUNNER_USE_GIT_PROXY=1`, para que ele clone através do proxy git da Anthropic, autenticado com o token de curta duração da própria sessão. Para sessões de usuário comum, o proxy usa o token OAuth do GitHub ou GitHub Enterprise armazenado para o criador da sessão; para sessões de bot e agente, ele usa o token de instalação do GitHub App de sua organização. De qualquer forma, a imagem do runner não precisa de nenhuma credencial git: sem chaves SSH, sem credential helper, sem `.netrc`. Este é o mesmo caminho de autenticação que os ambientes hospedados pela Anthropic usam.206Com o proxy git da Anthropic, também chamado de git gerenciada pela Anthropic, a imagem do runner não precisa de chaves SSH, credential helper, `.netrc` ou outras credenciais git para a própria sessão. Em vez disso, o runner pede que a Anthropic sirva o git para suas sessões. Para a sessão de um usuário que a Anthropic serve, o clone do runner e os próprios fetches e pushes da sessão passam pela Anthropic, que usa o token OAuth do GitHub armazenado para o criador da sessão. [Como a Anthropic serve git para uma sessão](#how-anthropic-serves-git-for-a-session) cobre sessões de bot e agente.

207 

208O proxy git fica desativado, a menos que você [o ative](#turn-the-anthropic-git-proxy-on). Um runner que alcança seu host git com suas próprias credenciais não precisa dele, e seu git funciona com qualquer host git.

209 

210Em troca, o proxy git limita o que o runner suporta e muda o que ele precisa:

211 

212* **Somente github.com**: a Anthropic serve uma sessão apenas quando todos os seus repositórios estão em github.com, e o proxy git ainda não suporta GitHub Enterprise Server. Em um runner com o proxy git, uma sessão com um repositório em outro host git [falha ao iniciar](#when-anthropic-doesnt-serve-a-session).

213* **Contas do GitHub conectadas**: a pessoa que criou uma sessão de usuário deve ter conectado o GitHub em claude.ai, ou a sessão [não inicia](#creator-has-no-github-connection).

214* **`--capacity 1`**: o proxy git requer uma sessão por processo runner, então execute mais réplicas para paralelismo. [Ative o proxy git da Anthropic](#turn-the-anthropic-git-proxy-on) lista os requisitos.

215* **Configuração git global substituída**: o runner [exclui e substitui a configuração git global](#git-proxy-replaces-global-git-config) do usuário com o qual é executado. Execute-o como um usuário dedicado ou em um contêiner.

216* **Credenciais do host para pushes do host**: o push de [`--push-outcome-on-release`](/docs/pt/self-hosted-environments-reference#runner-cli-flags) do runner e qualquer push que seu [hook `post-session`](/docs/pt/self-hosted-environments-configuration#post-session) faça ainda usam as próprias credenciais git do host runner e seu [caminho de rede até `github.com`](#github-com-egress-with-the-anthropic-git-proxy). Para essas credenciais, consulte [Envie configuração git em sua imagem](#ship-git-config-in-your-image).

217* **Decisão por sessão**: a Anthropic decide, para cada sessão no runner, se serve o git dela, e uma sessão que ela não serve falha ao iniciar. [Quando as sessões falham ao iniciar em um runner com o proxy git](#when-anthropic-doesnt-serve-a-session) cobre as causas.

218 

219<span id="git-proxy-replaces-global-git-config" />

220 

221<Warning>

222 Com `--use-anthropic-git-proxy` definido, o runner exclui e substitui a configuração git global do usuário com o qual é executado, e não mantém nenhum backup. Ele faz isso na inicialização e antes de cada sessão. Um login ou credential helper que você mantinha ali é perdido. As configurações que [`--configure-git`](#let-the-runner-configure-git) escreve sobrevivem. Execute o runner como um usuário dedicado ou em um contêiner, nunca como seu próprio usuário.

223</Warning>

224 

225Mantenha configurações git que não são secretas, como identidade e `safe.directory`, na configuração git do sistema.

226 

227<h4 id="turn-the-anthropic-git-proxy-on">

228 Ative o proxy git da Anthropic

229</h4>

230 

231Antes de iniciar o runner com `--use-anthropic-git-proxy`, confirme que o host runner atende a cada um destes requisitos. O runner se recusa a iniciar quando o requisito de capacidade ou de git não é atendido:

190 232 

191O proxy requer `--capacity 1` porque a URL do proxy é por sessão, e git 2.32 ou mais recente porque git mais antigo ignora o mecanismo de configuração que o proxy usa para isolar sessões uma da outra. O runner se recusa a iniciar se qualquer requisito não for atendido. Como o proxy busca do lado da Anthropic, seu host git deve ser alcançável a partir da infraestrutura da Anthropic, o mesmo requisito que as sessões hospedadas pela Anthropic têm; para um host git que é apenas roteável dentro de sua rede, use um [hook de ciclo de vida `checkout`](/docs/pt/self-hosted-environments-configuration#checkout) em vez disso. Cada processo runner lida com uma sessão por vez, então execute mais réplicas para paralelismo. Quando o proxy está habilitado, `--git-host-rewrite` e `--git-ssh-rewrite` não têm efeito: a URL do proxy aponta para `api.anthropic.com`, não seu host git.233* **Claude Code v2.1.267 ou posterior**: versões anteriores aceitam a flag, mas não relatam a solicitação para que a Anthropic sirva o git nem imprimem a linha `Registering as opted in`, então a Anthropic não serve suas sessões.

234* **`--capacity 1`, o padrão**: cada processo runner lida com uma sessão por vez, então execute mais réplicas para paralelismo.

235* **Git 2.32 ou mais recente**: git mais antigo ignora a configuração git por sessão que o runner prepara para o proxy git.

192 236 

193<Warning>237<Warning>

194 As receitas [Kubernetes](#kubernetes) e [Docker Compose](#docker-compose) nesta página usam `--capacity 4`. Se você adicionar `--use-anthropic-git-proxy` ou `CLAUDE_RUNNER_USE_GIT_PROXY=1` a uma delas sem alterar a capacidade para `1`, o runner sai na inicialização toda vez que seu orquestrador o reinicia. Defina `--capacity 1` e execute mais réplicas para paralelismo. [Quando o runner sai](#when-the-runner-exits) mostra a linha que o runner imprime.238 As receitas [Kubernetes](#kubernetes) e [Docker Compose](#docker-compose) nesta página usam `--capacity 4`. Se você adicionar `--use-anthropic-git-proxy` ou `CLAUDE_RUNNER_USE_GIT_PROXY=1` a uma delas sem alterar a capacidade para `1`, o runner sai na inicialização toda vez que seu orquestrador o reinicia. Defina `--capacity 1` e execute mais réplicas para paralelismo. [Quando o runner sai](#when-the-runner-exits) mostra a linha que o runner imprime.

195</Warning>239</Warning>

196 240 

197O runner também relata a aceitação à Anthropic quando se registra, imprimindo `Registering as opted in to Anthropic-managed git (--use-anthropic-git-proxy)` na inicialização. Relatar a aceitação requer Claude Code v2.1.267 ou posterior, e versões anteriores aceitam o sinalizador sem relatá-lo ou imprimir essa linha. Cada sessão em um runner aceito usa a git gerenciada pela Anthropic ou a URL do proxy por sessão. Quando uma sessão usa a URL do proxy por sessão, o runner registra uma linha `[runner:warn]` dizendo isso.241Para ativar o proxy git, adicione `--use-anthropic-git-proxy` ao comando do runner ou defina `CLAUDE_RUNNER_USE_GIT_PROXY=1` no ambiente do runner. Este comando, executado em um shell no host runner, inicia o runner do [guia de início rápido](/docs/pt/self-hosted-environments-quickstart#set-up-manually) com o proxy git ativado:

242 

243```bash theme={null}

244claude self-hosted-runner --environment-secret-file '/etc/claude/environment-secret' --base-dir '<writable-dir>' --use-anthropic-git-proxy

245```

246 

247Na inicialização, o runner imprime `Registering as opted in to Anthropic-managed git (--use-anthropic-git-proxy)`. A Anthropic então decide, para cada sessão nesse runner, se serve o git dela. Para cada sessão que ela serve, o runner registra uma linha `[runner:session]` contendo `governed git ACTIVE`. Se, em vez disso, uma sessão falhar ao iniciar, consulte [Quando as sessões falham ao iniciar em um runner com o proxy git](#when-anthropic-doesnt-serve-a-session).

248 

249<h4 id="how-anthropic-serves-git-for-a-session">

250 Como a Anthropic serve git para uma sessão

251</h4>

252 

253Para uma sessão que a Anthropic serve, o clone do runner e os próprios fetches e pushes da sessão passam pela Anthropic, autenticados com o token de curta duração da própria sessão:

254 

255* **Sessões de usuário**: a Anthropic usa o token OAuth do GitHub armazenado para o criador da sessão.

256* **Sessões de bot e agente**: a Anthropic usa o token de instalação do GitHub App de sua organização.

257* **Reescritas de URL**: `--git-host-rewrite` e `--git-ssh-rewrite` não têm efeito em um repositório que o proxy git serve.

258 

259<h4 id="when-anthropic-doesnt-serve-a-session">

260 Quando as sessões falham ao iniciar em um runner com o proxy git

261</h4>

262 

263Em um runner iniciado com `--use-anthropic-git-proxy`, uma sessão falha ao iniciar quando a Anthropic não serve o git dela. Procure no log do runner um erro git que nomeie um endereço `api.anthropic.com` contendo `/git_proxy/`.

264 

265Para cada sessão, um runner no Claude Code v2.1.267 ou posterior também registra uma linha `[runner:session]` contendo `governed git ACTIVE` quando a Anthropic serve o git da sessão, ou uma linha `[runner:warn]` contendo `the server withheld Anthropic-managed git for this session` quando não serve. Encontre a linha que você está vendo entre estes casos:

266 

267* **Nem `governed git ACTIVE` nem a linha `withheld`**: um runner anterior ao Claude Code v2.1.267 não registra nenhuma das linhas, e a Anthropic não serve suas sessões. Atualize o runner para a v2.1.267 ou posterior seguindo [Fixe a versão](#pin-the-version).

268* **A linha `withheld`**: a Anthropic não serviu a sessão. Um runner que funcionava antes com o proxy git pode falhar dessa forma sem nenhuma mudança do seu lado.

269 * **Um repositório não está em github.com**: uma sessão com mesmo um único repositório em outro host git, como GitHub Enterprise Server, não é servida, incluindo seus repositórios em github.com. [Desative o proxy git da Anthropic](#turn-the-anthropic-git-proxy-off) para os runners desse ambiente.

270 * **Todos os repositórios estão em github.com**: relate a falha à [sua equipe de conta da Anthropic](#report-an-issue) com o ID da sessão da linha `withheld`. A Anthropic registra o motivo do lado dela.

271* **Uma linha contendo `remote: access denied by the git proxy`**: uma sessão que a Anthropic serve ainda pode ser recusada, por exemplo quando a política da organização nega acesso git para a sessão, ou a sessão não está autorizada para o repositório. O log do runner então mostra uma linha contendo `remote: access denied by the git proxy`, e o restante dessa linha diz o motivo.

272* <span id="creator-has-no-github-connection" />**`GitHub authentication required`**: isso aparece quando o criador da sessão não tem uma conexão funcional com o GitHub em claude.ai. O clone da sessão falha, e o erro git diz `GitHub authentication required. Please reconnect your GitHub account.` Peça a essa pessoa que conecte ou reconecte o GitHub nas configurações do claude.ai.

273 

274Depois de corrigir a causa, inicie novamente as sessões que falharam.

275 

276<h4 id="turn-the-anthropic-git-proxy-off">

277 Desative o proxy git da Anthropic

278</h4>

279 

280Se as sessões em um ambiente usam um repositório em um host git diferente de github.com, como GitHub Enterprise Server, desative `--use-anthropic-git-proxy` para os runners desse ambiente.

281 

282<Steps>

283 <Step title="Remova a flag">

284 Remova `--use-anthropic-git-proxy` do comando do runner. Se você definiu `CLAUDE_RUNNER_USE_GIT_PROXY` no ambiente do runner, como em uma especificação de pod ou em um arquivo Compose, remova-a de lá. Em um shell, remova a definição dela:

285 

286 ```bash theme={null}

287 unset CLAUDE_RUNNER_USE_GIT_PROXY

288 ```

289 </Step>

290 

291 <Step title="Forneça credenciais git ao runner">

292 Forneça credenciais que funcionem sem um prompt para cada host git que as sessões dos runners usam, incluindo github.com. Qualquer credencial que estava na configuração git global do usuário do runner se perdeu, porque o runner excluiu essa configuração enquanto `--use-anthropic-git-proxy` estava definido. [Envie credenciais em sua imagem](#ship-git-config-in-your-image) ou use um [hook de ciclo de vida `checkout`](/docs/pt/self-hosted-environments-configuration#checkout).

293 </Step>

294 

295 <Step title="Abra o caminho de rede">

296 Permita que o runner alcance cada host git que as sessões dos runners usam na porta 443 ou 22. Consulte a linha do host git em [Requisitos de rede](#network-requirements).

297 </Step>

298 

299 <Step title="Reinicie os runners">

300 Reinicie os runners para que eles se registrem sem o proxy git. Em seguida, inicie novamente cada sessão que falhou.

301 </Step>

302</Steps>

198 303 

199<h4 id="github-api-access-without-the-github-cli">304<h4 id="github-api-access-without-the-github-cli">

200 Acesso à API do GitHub sem o GitHub CLI305 Acesso à API do GitHub sem o GitHub CLI


266```dockerfile theme={null}371```dockerfile theme={null}

267FROM debian:bookworm-slim372FROM debian:bookworm-slim

268ARG CLAUDE_CODE_VERSION373ARG CLAUDE_CODE_VERSION

269RUN apt-get update && apt-get install -y --no-install-recommends git curl ca-certificates openssh-client \374RUN apt-get update && apt-get install -y --no-install-recommends git curl ca-certificates openssh-client jq \

270 && rm -rf /var/lib/apt/lists/*375 && rm -rf /var/lib/apt/lists/*

271RUN curl -fsSL "https://downloads.claude.ai/claude-code-releases/${CLAUDE_CODE_VERSION:?set with --build-arg CLAUDE_CODE_VERSION}/linux-x64/claude" \376RUN curl -fsSL "https://downloads.claude.ai/claude-code-releases/${CLAUDE_CODE_VERSION:?set with --build-arg CLAUDE_CODE_VERSION}/linux-x64/claude" \

272 -o /usr/local/bin/claude && chmod +x /usr/local/bin/claude377 -o /usr/local/bin/claude && chmod +x /usr/local/bin/claude


382kubectl create namespace claude-runners487kubectl create namespace claude-runners

383```488```

384 489 

385Crie o Secret de suporte a partir de um arquivo local contendo o valor que você copiou na etapa [**Copy environment key**](/docs/pt/self-hosted-environments-quickstart#set-up-an-environment-and-runner) da UI de admin, para que o segredo nunca apareça no histórico do shell. Execute `(umask 077 && cat > ./environment-secret)`, cole o segredo, pressione Enter, depois Ctrl-D. Depois crie o Secret e delete o arquivo:490Crie o Secret de suporte a partir de um arquivo local contendo o valor que você copiou na etapa [**Copy environment key**](/docs/pt/self-hosted-environments-quickstart#set-up-manually) da UI de admin, para que o segredo nunca apareça no histórico do shell. Execute `(umask 077 && cat > ./environment-secret)`, cole o segredo, pressione Enter, depois Ctrl-D. Depois crie o Secret e delete o arquivo:

386 491 

387```bash theme={null}492```bash theme={null}

388kubectl create secret generic claude-runner-environment-secret -n claude-runners --from-file=environment-secret=./environment-secret493kubectl create secret generic claude-runner-environment-secret -n claude-runners --from-file=environment-secret=./environment-secret


500 Reuse a pre-warmed checkout605 Reuse a pre-warmed checkout

501</h2>606</h2>

502 607 

503Para repositórios grandes, o clone pode dominar a inicialização da sessão. Em `--capacity 1` sem um [hook `checkout`](/docs/pt/self-hosted-environments-configuration#checkout), o runner mantém um clone canônico por repositório em `<base-dir>/<repo-owner>/<repo>` e o reutiliza entre sessões: ele busca a ref solicitada, destaca `HEAD`, e redefine duramente para ela, o que é quase instantâneo quando pouco mudou. Para pular o clone frio, forneça o clone de uma de duas maneiras:608Para repositórios grandes, o clone pode dominar a inicialização da sessão. Para pular o clone frio, forneça você mesmo um clone no caminho onde o runner mantém o seu próprio. Sem um [hook `checkout`](/docs/pt/self-hosted-environments-configuration#checkout), o runner mantém um clone canônico por repositório em `<base-dir>/<repo-owner>/<repo>` e o reutiliza entre sessões:

609 

610* **Em `--capacity 1`**: o runner busca a ref solicitada, destaca `HEAD` e redefine duramente para ela, o que é quase instantâneo quando pouco mudou.

611* **Em um `--capacity` acima de um**: o runner busca nesse clone e, em seguida, faz o checkout de um worktree separado a partir dele para cada sessão. Um clone pré-aquecido economiza o download, mas não o checkout.

612 

613Forneça o clone na imagem ou em um volume persistente:

504 614 

505* **Clone na imagem**: construa o clone em sua imagem de runner naquele caminho. Cada contêiner fresco então começa com o clone quente sem reutilizar um disco.615* **Clone na imagem**: construa o clone em sua imagem de runner naquele caminho. Cada contêiner fresco então começa com o clone quente sem reutilizar um disco.

506* **Clone em um volume persistente**: em runners que você pré-bloqueia para a conta de um usuário com [`--lock-to-account`](/docs/pt/self-hosted-environments-reference#runner-cli-flags), aponte `--base-dir` para um volume persistente, para que o disco apenas sirva essa conta. Um runner pré-bloqueado nunca pega sessões de canal Claude Tag, então essa opção não se aplica a runners que as servem.616* **Clone em um volume persistente**: em runners que você pré-bloqueia para a conta de um usuário com [`--lock-to-account`](/docs/pt/self-hosted-environments-reference#runner-cli-flags), aponte `--base-dir` para um volume persistente, para que o disco apenas sirva essa conta. Um runner pré-bloqueado nunca pega sessões de canal Claude Tag, então essa opção não se aplica a runners que as servem.


508O que o caminho de reutilização faz e não garante:618O que o caminho de reutilização faz e não garante:

509 619 

510* **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.620* **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.

511* **Mudanças rastreadas redefinem, arquivos não rastreados persistem**: 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.621* **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.

512* **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.622* **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.

513 623 

514 Por padrão, o runner deixa esses em vigor quando a sessão termina, então em um disco que sobrevive ao processo do runner eles se acumulam. Cada sessão é executada como o próprio usuário do runner, então qualquer sessão posterior que o disco servir pode lê-los. Se você manter um `--base-dir` persistente, dimensione o volume para esse crescimento. O mesmo se aplica a qualquer configuração que reinicie o runner no mesmo sistema de arquivos, incluindo a [receita Docker Compose](#docker-compose).624 Por padrão, o runner deixa esses em vigor quando a sessão termina, então em um disco que sobrevive ao processo do runner eles se acumulam. Cada sessão é executada como o próprio usuário do runner, então qualquer sessão posterior que o disco servir pode lê-los. Se você manter um `--base-dir` persistente, dimensione o volume para esse crescimento. O mesmo se aplica a qualquer configuração que reinicie o runner no mesmo sistema de arquivos, incluindo a [receita Docker Compose](#docker-compose).


522 632 

523Cada processo filho Claude Code da sessão executa o próprio binário do runner, e o runner desativa auto-update dentro das sessões que gera, então cada sessão executa a versão que você instalou no host ou construiu na imagem. Uma atualização no nível do host entra em vigor na próxima vez que o runner inicia.633Cada processo filho Claude Code da sessão executa o próprio binário do runner, e o runner desativa auto-update dentro das sessões que gera, então cada sessão executa a versão que você instalou no host ou construiu na imagem. Uma atualização no nível do host entra em vigor na próxima vez que o runner inicia.

524 634 

525Um modelo que suas sessões usam pode exigir uma versão mais recente do Claude Code do que aquela que executam. O servidor então rejeita solicitações para esse modelo com [Claude Code does not support this model](/docs/pt/errors#claude-code-does-not-support-this-model). Antes de fixar uma versão, verifique [as versões do Claude Code que os modelos exigem](/docs/pt/model-config#available-models) para cada modelo que suas sessões usam.635Escolha qual versão suas sessões executam e quando ela muda:

526 636 

637* **Antes de fixar uma versão**: verifique [as versões do Claude Code que os modelos exigem](/docs/pt/model-config#available-models) para cada modelo que suas sessões usam. Se um modelo exigir uma versão mais recente do que aquela que suas sessões executam, o servidor rejeita requisições para esse modelo com [Claude Code does not support this model](/docs/pt/errors#claude-code-does-not-support-this-model).

527* **Para manter uma frota em uma versão**: construa a imagem com uma versão fixada, ou em um host nu instale uma versão específica e [desabilite auto-updates](/docs/pt/setup#disable-auto-updates)638* **Para manter uma frota em uma versão**: construa a imagem com uma versão fixada, ou em um host nu instale uma versão específica e [desabilite auto-updates](/docs/pt/setup#disable-auto-updates)

528* **Para atualizar**: instale a versão mais recente ou reconstrua a imagem, depois reinicie os runners639* **Para atualizar uma frota fixa**: leia as entradas do [changelog](/docs/en/changelog) entre a sua versão e a que você está instalando, depois instale a versão mais recente ou recrie a imagem e reinicie os runners

640* **Para atualizar runners sob demanda**: leia as entradas do [changelog](/docs/en/changelog) entre a sua versão e a que você está instalando, depois altere a imagem que o seu [hook `spawn-runner`](/docs/pt/self-hosted-environments-configuration#the-spawn-runner-hook) inicia. Cada novo runner recebe a nova versão. Um runner que já está em execução, incluindo um runner de reserva que [`--min-idle`](/docs/pt/self-hosted-environments-reference#orchestrator-cli-flags) iniciou, mantém sua versão até encerrar. Não o reinicie, porque sua ordem de trabalho é de uso único.

529* **Plugins**: marketplaces de plugin também não auto-atualizam; defina `FORCE_AUTOUPDATE_PLUGINS=1` no ambiente do runner para deixar plugins auto-atualizarem enquanto o binário permanece fixado641* **Plugins**: marketplaces de plugin também não auto-atualizam; defina `FORCE_AUTOUPDATE_PLUGINS=1` no ambiente do runner para deixar plugins auto-atualizarem enquanto o binário permanece fixado

530 642 

531<h2 id="scale-the-fleet">643<h2 id="scale-the-fleet">


580</h3>692</h3>

581 693 

582* **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.694* **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.

583 * **Para manter trabalho com commit**: defina [`--push-outcome-on-release`](/docs/pt/self-hosted-environments-reference#runner-cli-flags). O runner então 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. Alterações sem commit ainda são perdidas.695 * **Para manter trabalho com commit**: defina [`--push-outcome-on-release`](/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.

696 * **Com um hook `checkout`**: repositórios obtidos por meio de um [hook de ciclo de vida `checkout`](/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`](/docs/pt/self-hosted-environments-configuration#post-session).

584 * **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.697 * **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.

585* **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.698* **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.

586* **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.699* **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.


606* **Runner não aparece no ambiente**: confirme que o host pode alcançar `api.anthropic.com` via HTTPS, o segredo do ambiente está atual e o relógio do host está dentro de cinco minutos da hora real; desvios maiores causam falha na autenticação. O runner registra `[runner:fatal]` com o motivo da rejeição em caso de falha de autenticação.719* **Runner não aparece no ambiente**: confirme que o host pode alcançar `api.anthropic.com` via HTTPS, o segredo do ambiente está atual e o relógio do host está dentro de cinco minutos da hora real; desvios maiores causam falha na autenticação. O runner registra `[runner:fatal]` com o motivo da rejeição em caso de falha de autenticação.

607* **Runner sai na inicialização com `cannot create or write to base directory`**: o runner não consegue criar ou escrever em `--base-dir`, que padrão é `/workspace`. Corrija a propriedade do diretório ou aponte `--base-dir` para um caminho gravável, conforme descrito em [Keep the base directory and capacity identical across runners](#keep-the-base-directory-and-capacity-identical-across-runners). Se o runner registrar `[runner:fatal]` dizendo que a verificação do diretório base expirou, o diretório está em uma montagem NFS ou CSI travada. Verifique a saúde da montagem em vez de permissões. O runner imprime ambas essas falhas de inicialização para stderr antes de abrir `--log-file`, então procure por elas no terminal ou nos logs do contêiner da sua plataforma em vez do arquivo de log. Antes da v2.1.225, o runner não verificava o diretório base na inicialização, e essa configuração incorreta falhava nas sessões após a coleta.720* **Runner sai na inicialização com `cannot create or write to base directory`**: o runner não consegue criar ou escrever em `--base-dir`, que padrão é `/workspace`. Corrija a propriedade do diretório ou aponte `--base-dir` para um caminho gravável, conforme descrito em [Keep the base directory and capacity identical across runners](#keep-the-base-directory-and-capacity-identical-across-runners). Se o runner registrar `[runner:fatal]` dizendo que a verificação do diretório base expirou, o diretório está em uma montagem NFS ou CSI travada. Verifique a saúde da montagem em vez de permissões. O runner imprime ambas essas falhas de inicialização para stderr antes de abrir `--log-file`, então procure por elas no terminal ou nos logs do contêiner da sua plataforma em vez do arquivo de log. Antes da v2.1.225, o runner não verificava o diretório base na inicialização, e essa configuração incorreta falhava nas sessões após a coleta.

608* **Sessions stay queued**: cada runner online pode estar bloqueado para um proprietário diferente. Verifique a métrica `claude_code_self_hosted_runner_locked_account` [metric](/docs/pt/self-hosted-environments-reference#prometheus-metrics) de cada runner ou o campo `locked_account` de sua linha de log `[runner:health]` para ver quem a mantém. Ambos mostram o email do proprietário apenas depois que o runner recebeu um token de sessão com uma reivindicação `act.email`, que as sessões de um agente Claude Tag nunca fazem. Sem a reivindicação, o runner não emite nenhuma série `locked_account` e registra `locked_account=yes`, o que informa que o runner está bloqueado, mas não para qual proprietário. Adicione réplicas ou aguarde um runner existente drenar e reiniciar. Se o ambiente usar runners sob demanda, verifique o orquestrador; consulte [On-demand runners](/docs/pt/self-hosted-environments-configuration#on-demand-runners).721* **Sessions stay queued**: cada runner online pode estar bloqueado para um proprietário diferente. Verifique a métrica `claude_code_self_hosted_runner_locked_account` [metric](/docs/pt/self-hosted-environments-reference#prometheus-metrics) de cada runner ou o campo `locked_account` de sua linha de log `[runner:health]` para ver quem a mantém. Ambos mostram o email do proprietário apenas depois que o runner recebeu um token de sessão com uma reivindicação `act.email`, que as sessões de um agente Claude Tag nunca fazem. Sem a reivindicação, o runner não emite nenhuma série `locked_account` e registra `locked_account=yes`, o que informa que o runner está bloqueado, mas não para qual proprietário. Adicione réplicas ou aguarde um runner existente drenar e reiniciar. Se o ambiente usar runners sob demanda, verifique o orquestrador; consulte [On-demand runners](/docs/pt/self-hosted-environments-configuration#on-demand-runners).

609* **Sessions fail immediately after pickup**: abra a sessão em claude.ai/code para ver o erro. As causas mais comuns são [git credentials](#configure-git) ausentes na imagem do runner e ferramentas de compilação que não estão instaladas. Um diretório base não gravável interrompe o runner na inicialização em vez de falhar nas sessões. Consulte a entrada **Runner sai na inicialização com `cannot create or write to base directory`** nesta lista.722* **As sessões falham imediatamente após a coleta**: abra a sessão em claude.ai/code para ver o erro. As causas mais comuns são [credenciais git](#configure-git) ausentes na imagem do runner e ferramentas de build que não estão instaladas. 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). 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.

723* **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).

610* **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.724* **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.

611* **Runner logs `Poll failed` lines containing `rejecting the malformed poll response`**: o runner recebeu uma resposta de work-poll cujo corpo não é o JSON esperado da fila, na maioria das vezes porque algo entre o runner e `api.anthropic.com`, como um proxy interceptador ou um portal cativo, respondeu com sua própria página. O runner rejeita a resposta, a conta sob o tipo `transport` da métrica `claude_code_self_hosted_runner_poll_errors_total` [metric](/docs/pt/self-hosted-environments-reference#prometheus-metrics), e tenta novamente no cronograma de falha de pesquisa descrito em [Session lifecycle](/docs/pt/self-hosted-environments#session-lifecycle). O runner continua servindo suas sessões ativas. Configure o proxy para passar respostas de `api.anthropic.com` inalteradas. Antes da v2.1.246, o runner lia tal resposta como uma fila de trabalho vazia, o que poderia encerrar suas sessões ativas ou fazer com que saísse.725* **Runner logs `Poll failed` lines containing `rejecting the malformed poll response`**: o runner recebeu uma resposta de work-poll cujo corpo não é o JSON esperado da fila, na maioria das vezes porque algo entre o runner e `api.anthropic.com`, como um proxy interceptador ou um portal cativo, respondeu com sua própria página. O runner rejeita a resposta, a conta sob o tipo `transport` da métrica `claude_code_self_hosted_runner_poll_errors_total` [metric](/docs/pt/self-hosted-environments-reference#prometheus-metrics), e tenta novamente no cronograma de falha de pesquisa descrito em [Session lifecycle](/docs/pt/self-hosted-environments#session-lifecycle). O runner continua servindo suas sessões ativas. Configure o proxy para passar respostas de `api.anthropic.com` inalteradas. Antes da v2.1.246, o runner lia tal resposta como uma fila de trabalho vazia, o que poderia encerrar suas sessões ativas ou fazer com que saísse.

612* **A session's branch no longer exists on the remote**: para uma fonte git que a sessão apenas lê, o runner pula essa fonte e continua nas restantes. Para a fonte para a qual a sessão envia resultados, uma ramificação excluída, normalmente porque foi mesclada e auto-excluída, falha na sessão com um erro nomeando o repositório e a ramificação e pedindo que você restaure a ramificação e tente novamente. O runner falha na sessão com o mesmo erro quando pular deixaria sem nenhum repositório. Antes da v2.1.228, tal sessão começava em um diretório vazio.726* **A session's branch no longer exists on the remote**: para uma fonte git que a sessão apenas lê, o runner pula essa fonte e continua nas restantes. Para a fonte para a qual a sessão envia resultados, uma ramificação excluída, normalmente porque foi mesclada e auto-excluída, falha na sessão com um erro nomeando o repositório e a ramificação e pedindo que você restaure a ramificação e tente novamente. O runner falha na sessão com o mesmo erro quando pular deixaria sem nenhum repositório. Antes da v2.1.228, tal sessão começava em um diretório vazio.


616 730 

617 A verificação de acesso é executada novamente cada vez que a sessão é iniciada em um runner, portanto, uma vez que a identidade git do runner tenha acesso de leitura, o próximo início clona o repositório. Antes da v2.1.274, cada uma dessas recusas falhava no início da sessão.731 A verificação de acesso é executada novamente cada vez que a sessão é iniciada em um runner, portanto, uma vez que a identidade git do runner tenha acesso de leitura, o próximo início clona o repositório. Antes da v2.1.274, cada uma dessas recusas falhava no início da sessão.

618* **Sessions take minutes to start**: o clone inicial geralmente domina. Observe a métrica `claude_code_self_hosted_runner_session_init_duration_seconds` [metric](/docs/pt/self-hosted-environments-reference#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.732* **Sessions take minutes to start**: o clone inicial geralmente domina. Observe a métrica `claude_code_self_hosted_runner_session_init_duration_seconds` [metric](/docs/pt/self-hosted-environments-reference#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.

619* **Turns fail with a 401**: cada sessão autentica chamadas de modelo com o token de curta duração [`CLAUDE_CODE_OAUTH_TOKEN`](/docs/pt/self-hosted-environments-configuration#wrapper-scripts) que o runner busca da Anthropic e rotaciona sobre o stdin da sessão. Quando uma volta termina com um 401 ou 403 da API do modelo, o runner busca um token novo e o passa para a sessão. A volta com falha não é retentada.733* **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`](/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.

620 734 

621 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.735 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.

622 736 


637 751 

638* **A normal exit**: o runner terminou suas sessões e drenagem, atingiu seu tempo de aposentadoria ou foi instruído a parar. Reinicie-o para que o ambiente tenha capacidade novamente. [Runner lifecycle](/docs/pt/self-hosted-environments#runner-lifecycle) descreve essas saídas.752* **A normal exit**: o runner terminou suas sessões e drenagem, atingiu seu tempo de aposentadoria ou foi instruído a parar. Reinicie-o para que o ambiente tenha capacidade novamente. [Runner lifecycle](/docs/pt/self-hosted-environments#runner-lifecycle) descreve essas saídas.

639* **A failed start**: o runner não consegue iniciar com a configuração ou host que foi dado, então sai segundos depois de iniciar, e sai da mesma forma toda vez que você o reinicia. Reiniciá-lo mais rápido não ajuda. Alguém precisa ler sua saída e corrigir a causa.753* **A failed start**: o runner não consegue iniciar com a configuração ou host que foi dado, então sai segundos depois de iniciar, e sai da mesma forma toda vez que você o reinicia. Reiniciá-lo mais rápido não ajuda. Alguém precisa ler sua saída e corrigir a causa.

754* **Perda de contato**: um runner que não consegue alcançar a Anthropic por mais tempo do que seu [lease](/docs/pt/self-hosted-environments#session-lifecycle), por exemplo enquanto seu host está em suspensão, pode ser removido do ambiente. Quando um runner removido se reconecta, ele sai. Seu log pode mostrar uma linha `[runner:fatal]` que contém `runner record gone server-side` ou, após uma interrupção mais longa, [`poll auth failed`](/docs/pt/self-hosted-environments-quickstart#set-up-an-environment-and-runner). O runner não se registra novamente por conta própria, então reinicie-o.

640 755 

641Configure seu supervisor para reiniciar o runner sempre que sair, para aguardar mais tempo entre reinicializações quando o runner continuar saindo logo após iniciar, e para informar alguém quando isso continuar acontecendo.756Configure seu supervisor para reiniciar o runner sempre que sair, para aguardar mais tempo entre reinicializações quando o runner continuar saindo logo após iniciar, e para informar alguém quando isso continuar acontecendo.

642 757 

Details

195 195 

196Wrappers recebem o caminho absoluto para o binário do próprio runner em `CLAUDE_RUNNER_CLAUDE_BIN`; use esse caminho em vez de um `claude` resolvido por PATH para que a decodificação seja executada no mesmo binário que o runner usa.196Wrappers recebem o caminho absoluto para o binário do próprio runner em `CLAUDE_RUNNER_CLAUDE_BIN`; use esse caminho em vez de um `claude` resolvido por PATH para que a decodificação seja executada no mesmo binário que o runner usa.

197 197 

198Use `jq -re` em vez de `jq -r` para que uma declaração ausente cause uma saída diferente de zero. Com apenas `-r`, uma declaração ausente imprime a string literal `null` e sai com zero, o que silenciosamente passa um valor ruim para jusante. Passe `--no-verify` para `decode-token` apenas para inspeção offline onde o endpoint JWKS está inacessível.198Use `jq -re` em vez de `jq -r` para que uma declaração ausente cause uma saída diferente de zero. Com apenas `-r`, uma declaração ausente imprime a string literal `null` e sai com zero, o que silenciosamente passa um valor ruim para jusante.

199 

200Se `decode-token` não conseguir buscar as chaves do endpoint JWKS ou não conseguir verificar o token, ele imprime o motivo em stderr, não imprime nenhuma declaração e sai com o código 1. Passe `--no-verify` para `decode-token` apenas para inspeção offline onde o endpoint JWKS está inacessível.

199 201 

200<h2 id="claims-reference">202<h2 id="claims-reference">

201 Referência de declarações203 Referência de declarações

Details

34O host do runner precisa de:34O host do runner precisa de:

35 35 

36* Um host ou container Linux ou macOS com HTTPS de saída para `api.anthropic.com`, para `claude.ai` e os hosts de download para os quais ele redireciona para a etapa de instalação abaixo, e para seu host git para o clone; a [tabela de requisitos de rede](/docs/pt/self-hosted-environments-deploy#network-requirements) tem a lista completa. Windows não é suportado como host de runner; execute o runner em um container Linux. Estações de trabalho de desenvolvedores não são afetadas, pois as sessões começam a partir de claude.ai em um navegador.36* Um host ou container Linux ou macOS com HTTPS de saída para `api.anthropic.com`, para `claude.ai` e os hosts de download para os quais ele redireciona para a etapa de instalação abaixo, e para seu host git para o clone; a [tabela de requisitos de rede](/docs/pt/self-hosted-environments-deploy#network-requirements) tem a lista completa. Windows não é suportado como host de runner; execute o runner em um container Linux. Estações de trabalho de desenvolvedores não são afetadas, pois as sessões começam a partir de claude.ai em um navegador.

37* Um repositório para a sessão de teste: um público, ou um que este host já consiga clonar pela sua URL HTTPS sem que sejam solicitadas credenciais.

37* Um relógio sincronizado com a hora real, por exemplo com NTP. A autenticação falha quando o relógio está mais de cinco minutos atrasado; consulte [Troubleshooting](/docs/pt/self-hosted-environments-deploy#troubleshooting).38* Um relógio sincronizado com a hora real, por exemplo com NTP. A autenticação falha quando o relógio está mais de cinco minutos atrasado; consulte [Troubleshooting](/docs/pt/self-hosted-environments-deploy#troubleshooting).

38 39 

39<h3 id="software-on-the-runner-host">40<h3 id="software-on-the-runner-host">


57 Configurar um ambiente e runner58 Configurar um ambiente e runner

58</h2>59</h2>

59 60 

60Claude Code inclui uma configuração guiada: uma sessão Claude Code interativa que o orienta na criação do ambiente na interface de administração, inicia um runner local com o arquivo de segredo que você salva, confirma que o runner se registra e escreve uma folha de dicas em `./runner-setup/CHEAT-SHEET.md`. Execute-o em uma máquina onde você se conectou com `claude auth login` usando uma conta que possui uma função de Proprietário; não está disponível com chaves de API ou provedores de modelo de terceiros. Em hosts onde uma sessão interativa não é possível, use as etapas manuais abaixo. Confirme que a [verificação de versão](#software-on-the-runner-host) passou primeiro: em versões anteriores a 2.1.224, este comando inicia uma sessão Claude comum com as palavras como o prompt em vez da configuração guiada. Para iniciar a configuração guiada, execute o subcomando setup e siga os prompts:61Use a [configuração guiada](#run-the-guided-setup) ou as [etapas manuais](#set-up-manually). A configuração guiada é um único comando que inicia uma sessão interativa do Claude Code e orienta você pelo restante. Use as etapas manuais em um host onde uma sessão interativa não seja possível. Use-as também quando alguém com a função Owner tiver criado o ambiente e entregado o segredo a você, já que a configuração guiada exige login de um Owner.

62 

63<h3 id="run-the-guided-setup">

64 Executar a configuração guiada

65</h3>

66 

67A configuração guiada orienta você na criação do ambiente na interface de administração, inicia um runner local com o arquivo de segredo que você salva, confirma que o runner se registra e escreve uma folha de dicas em `./runner-setup/CHEAT-SHEET.md`. Antes de executá-la, confirme seu login e sua versão:

68 

69* **Login**: execute-a em uma máquina onde você fez login com `claude auth login` usando uma conta que possui a função Owner. Com apenas uma chave de API ou um provedor de modelo de terceiros, a sessão é iniciada, mas as verificações de organização falham.

70* **Versão**: confirme que a [verificação de versão](#software-on-the-runner-host) passou. Em versões anteriores a 2.1.224, o comando setup inicia uma sessão Claude com as palavras como o prompt em vez da configuração guiada.

71 

72Para iniciar a configuração guiada, execute o subcomando setup no seu shell e siga os prompts:

61 73 

62```bash theme={null}74```bash theme={null}

63claude self-hosted-runner setup75claude self-hosted-runner setup

64```76```

65 77 

66Para configurar manualmente:78A configuração não inicia uma sessão de teste por conta própria: ela pede que você inicie uma em claude.ai/code. A última etapa da configuração para o runner que ela iniciou. Se você sair da configuração antes dessa etapa, o runner continua em execução. Para continuar após a última etapa, inicie o runner novamente no seu shell com o comando em `./runner-setup/CHEAT-SHEET.md` e, em seguida, [roteie uma sessão para o ambiente](#route-a-session).

79 

80<h3 id="set-up-manually">

81 Configurar manualmente

82</h3>

83 

84Crie o ambiente em claude.ai, inicie o runner a partir de um terminal no host e depois retorne a claude.ai para confirmar que o runner aparece e rotear uma sessão para ele. Se alguém com a função Owner já tiver criado o ambiente e entregado o segredo a você, comece na etapa 2.

67 85 

68<Steps>86<Steps>

69 <Step title="Criar um ambiente">87 <Step title="Criar um ambiente">


73 </Step>91 </Step>

74 92 

75 <Step title="Iniciar um runner">93 <Step title="Iniciar um runner">

76 Crie o diretório de segredo. Esta etapa e a próxima precisam de root para o caminho `/etc/claude`; qualquer caminho que o processo runner possa ler funciona, então ajuste ambos os comandos e o valor `--environment-secret-file` juntos se você usar um diferente.94 Crie o diretório de segredo. Este comando e o próximo usam `/etc/claude`, que precisa de root, e o arquivo de segredo que eles criam é legível apenas pelo usuário que os executa. Se o runner for executado como outro usuário, ele sai com `error: Failed to read environment secret file <path> (EACCES: permission denied, open '<path>')`. Nesse caso, execute ambos os comandos como o usuário do runner, com um diretório no qual esse usuário possa escrever no lugar de `/etc/claude`, e passe o mesmo caminho para `--environment-secret-file`. Qualquer caminho que o processo do runner possa ler funciona.

77 95 

78 ```bash theme={null}96 ```bash theme={null}

79 mkdir -p /etc/claude97 mkdir -p /etc/claude


89 107 

90 Se o runner não conseguir criar ou escrever no caminho, ele sai na inicialização com um erro nomeando o diretório em vez de se registrar. Consulte [Troubleshooting](/docs/pt/self-hosted-environments-deploy#troubleshooting).108 Se o runner não conseguir criar ou escrever no caminho, ele sai na inicialização com um erro nomeando o diretório em vez de se registrar. Consulte [Troubleshooting](/docs/pt/self-hosted-environments-deploy#troubleshooting).

91 109 

92 Depois inicie o runner com `--environment-secret-file` e `--base-dir`. O runner se registra com seu ambiente e começa a pesquisar por trabalho. Se o runner sair, reinicie-o manualmente. Implantações de produção executam o runner sob um orquestrador que reinicia runners que saíram, normalmente com um sistema de arquivos fresco por reinicialização; [Reutilizar um checkout pré-aquecido](/docs/pt/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout) cobre a configuração de disco persistente suportada.110 Depois inicie o runner com `--environment-secret-file` e `--base-dir`:

93 111 

94 ```bash theme={null}112 ```bash theme={null}

95 claude self-hosted-runner --environment-secret-file '/etc/claude/environment-secret' --base-dir '<writable-dir>'113 claude self-hosted-runner --environment-secret-file '/etc/claude/environment-secret' --base-dir '<writable-dir>'

96 ```114 ```

115 

116 O runner registra `Registered: runner_id=<runner-id>` no log assim que se registra com seu ambiente e, em seguida, começa a pesquisar por trabalho. Se o runner sair mais tarde, reinicie-o você mesmo. Consulte [Se o runner sair](#if-the-runner-exits) para saber quando isso acontece.

97 </Step>117 </Step>

98 118 

99 <Step title="Verificar se o runner aparece">119 <Step title="Verificar se o runner aparece">

100 Retorne à [página **Cloud environments**](https://claude.ai/admin-settings/cloud-environments). O status do seu ambiente muda de **Nenhum runner implantado** para **Saudável** em alguns segundos após o runner iniciar; abra o ambiente e selecione **Atividade** para ver o runner em si.120 Retorne à [página **Cloud environments**](https://claude.ai/admin-settings/cloud-environments). O status do seu ambiente muda de **Nenhum runner implantado** para **Saudável** em alguns segundos após o runner iniciar; abra o ambiente e selecione **Atividade** para ver o runner em si. Se você não tiver acesso à página de administração, a linha `Registered: runner_id=<runner-id>` no log do runner da etapa anterior fornece o mesmo sinal.

101 </Step>121 </Step>

102 122 

103 <Step title="Rotear uma sessão para o ambiente">123 <Step title="Rotear uma sessão para o ambiente">

104 Inicie uma sessão em claude.ai/code e selecione seu ambiente no seletor de ambiente, onde ambientes auto-hospedados aparecem ao lado dos hospedados pela Anthropic. O runner clona com quaisquer credenciais git que o host já tenha, então escolha um repositório que este host já possa clonar, ou um público; as opções de credencial para repositórios privados em produção estão em [Configurar git](/docs/pt/self-hosted-environments-deploy#configure-git). O próximo runner disponível pega a sessão enfileirada e registra `Picked up session <session-id>` junto com sua contagem ativa e capacidade, para que você possa confirmar a partir da própria saída do runner qual host pegou a sessão. Observe a sessão funcionar e leia as respostas do Claude em [claude.ai/code](https://claude.ai/code). Se a sessão ficar enfileirada, consulte [Troubleshooting](/docs/pt/self-hosted-environments-deploy#troubleshooting).124 <span id="route-a-session" />Inicie uma sessão em claude.ai/code e selecione seu ambiente no seletor de ambiente, onde ambientes auto-hospedados aparecem ao lado dos hospedados pela Anthropic. Para o repositório, escolha o dos [pré-requisitos](#host-and-network): um repositório público ou um que este host já possa clonar. O runner clona com quaisquer credenciais git que o host já tenha.

125 

126 O próximo runner disponível pega a sessão enfileirada e registra `Picked up session <session-id>` junto com sua contagem ativa e capacidade, para que você possa confirmar a partir da própria saída do runner qual host pegou a sessão. Observe a sessão funcionar e leia as respostas do Claude em [claude.ai/code](https://claude.ai/code).

127 

128 Se a sessão não começar a funcionar, compare com o que você vê:

129 

130 * **A sessão fica enfileirada**: consulte [Solução de problemas](/docs/pt/self-hosted-environments-deploy#troubleshooting).

131 * **A sessão falha ao iniciar com um erro do git**: o erro aparece na sessão e no log do runner. Se ele 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. Consulte [Configurar git](/docs/pt/self-hosted-environments-deploy#configure-git), que também cobre as opções de credencial para repositórios privados em produção.

105 </Step>132 </Step>

106</Steps>133</Steps>

107 134 

108O runner sai por design uma vez que suas sessões ativas terminam; consulte [Ciclo de vida do runner](/docs/pt/self-hosted-environments#runner-lifecycle). Para produção, implante-o sob um orquestrador que o reinicia na saída e aguarda mais tempo entre reinicializações quando o runner continua saindo logo após iniciar. Consulte [Implantar em produção](/docs/pt/self-hosted-environments-deploy) e [Quando o runner sai](/docs/pt/self-hosted-environments-deploy#when-the-runner-exits).135<h3 id="if-the-runner-exits">

136 Se o runner sair

137</h3>

138 

139Se o runner sair durante este guia de início rápido, inicie-o novamente com o mesmo comando. O runner pode sair por conta própria:

140 

141* **Sessões concluídas**: o log mostra `[runner:exit] account workload drained — exiting`. O runner sai por design uma vez que suas sessões ativas terminam. Consulte [Ciclo de vida do runner](/docs/pt/self-hosted-environments#runner-lifecycle).

142* **Perda de contato**: o log mostra uma linha `[runner:fatal]` com `runner record gone server-side` ou com `poll auth failed`. Se o runner perder contato com a Anthropic por um tempo, por exemplo porque o host entra em suspensão, ele pode sair quando alcançar a Anthropic novamente.

143 

144Um turno concluído não encerra sua sessão de teste. Após o primeiro turno, a sessão ainda está anexada e o runner ainda está ativo, então você pode [enviar uma mensagem de acompanhamento para a sessão](#send-a-follow-up-message-to-a-running-session) sem reiniciar o runner primeiro.

145 

146Para produção, implante o runner sob um orquestrador que o reinicia na saída e aguarda mais tempo entre reinicializações quando o runner continua saindo logo após iniciar. Consulte [Implantar em produção](/docs/pt/self-hosted-environments-deploy) e [Quando o runner sai](/docs/pt/self-hosted-environments-deploy#when-the-runner-exits).

109 147 

110<h2 id="send-a-follow-up-message-to-a-running-session">148<h2 id="send-a-follow-up-message-to-a-running-session">

111 Enviar uma mensagem de acompanhamento para uma sessão em execução149 Enviar uma mensagem de acompanhamento para uma sessão em execução

Details

52| `--release-idle-session-min <n>` | `SELF_HOSTED_RUNNER_SESSION_IDLE_MS` | `0` | Libere um slot de sessão após N minutos de inatividade uma vez que um turno termine ou a sessão aguarde a ação do usuário. Uma sessão que ainda está no meio de um turno, incluindo uma que mantém uma tarefa em segundo plano que nunca termina ou uma aprovação solicitada de dentro de uma chamada de ferramenta em execução, não conta como ociosa; emparelhe com `--kill-session-after-min` como o backstop duro. Após a tarefa em segundo plano de uma sessão terminar, o executor considera a sessão ocupada até o turno de acompanhamento que lê o resultado começar, por no máximo a janela [`SELF_HOSTED_RUNNER_BG_RESULT_GRACE_MS`](#environment-variable-only-settings). Até o executor receber um sinal de desligamento ou atingir seu tempo de aposentadoria, uma liberação que deixa o executor sem sessões ativas inicia o mesmo caminho de saída que uma drenagem normal, governada por `--drain-grace-sec`. Após um primeiro sinal que você adiou com [`--defer-shutdown-max-min`](/docs/pt/self-hosted-environments-deploy#defer-the-drain-past-the-first-signal), o executor sai assim que uma liberação o deixa sem sessões. `0` desabilita. |52| `--release-idle-session-min <n>` | `SELF_HOSTED_RUNNER_SESSION_IDLE_MS` | `0` | Libere um slot de sessão após N minutos de inatividade uma vez que um turno termine ou a sessão aguarde a ação do usuário. Uma sessão que ainda está no meio de um turno, incluindo uma que mantém uma tarefa em segundo plano que nunca termina ou uma aprovação solicitada de dentro de uma chamada de ferramenta em execução, não conta como ociosa; emparelhe com `--kill-session-after-min` como o backstop duro. Após a tarefa em segundo plano de uma sessão terminar, o executor considera a sessão ocupada até o turno de acompanhamento que lê o resultado começar, por no máximo a janela [`SELF_HOSTED_RUNNER_BG_RESULT_GRACE_MS`](#environment-variable-only-settings). Até o executor receber um sinal de desligamento ou atingir seu tempo de aposentadoria, uma liberação que deixa o executor sem sessões ativas inicia o mesmo caminho de saída que uma drenagem normal, governada por `--drain-grace-sec`. Após um primeiro sinal que você adiou com [`--defer-shutdown-max-min`](/docs/pt/self-hosted-environments-deploy#defer-the-drain-past-the-first-signal), o executor sai assim que uma liberação o deixa sem sessões. `0` desabilita. |

53| `--remove-session-state [bool]` | `SELF_HOSTED_RUNNER_REMOVE_SESSION_STATE` | desligado | Remova os diretórios por sessão de uma sessão sob `<base-dir>/_sessions/` quando a sessão terminar neste executor, seja qual for o resultado. [Reuse a pre-warmed checkout](/docs/pt/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout) descreve o que eles contêm e quem pode lê-los quando permanecem. A remoção é melhor esforço: os diretórios por sessão permanecem no lugar quando o executor é morto ou atinge seu prazo de drenagem antes da limpeza ser executada. Com o sinalizador ativado, o log de depuração de uma sessão falhada ou interrompida não é mantido em disco. Requer Claude Code v2.1.268 ou posterior. |53| `--remove-session-state [bool]` | `SELF_HOSTED_RUNNER_REMOVE_SESSION_STATE` | desligado | Remova os diretórios por sessão de uma sessão sob `<base-dir>/_sessions/` quando a sessão terminar neste executor, seja qual for o resultado. [Reuse a pre-warmed checkout](/docs/pt/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout) descreve o que eles contêm e quem pode lê-los quando permanecem. A remoção é melhor esforço: os diretórios por sessão permanecem no lugar quando o executor é morto ou atinge seu prazo de drenagem antes da limpeza ser executada. Com o sinalizador ativado, o log de depuração de uma sessão falhada ou interrompida não é mantido em disco. Requer Claude Code v2.1.268 ou posterior. |

54| `--retire-at <epoch-seconds>` | `SELF_HOSTED_RUNNER_RETIRE_AT` | não definido | Aposentar o executor em um timestamp Unix absoluto em segundos, para infraestrutura que mata o executor em um tempo conhecido; [Runner lifecycle](/docs/pt/self-hosted-environments#runner-lifecycle) descreve a sequência de liberação e como dimensionar a margem. Valores antes de 2001 ou após o ano 5138 são rejeitados pelo sinalizador e ignorados pela variável de ambiente. |54| `--retire-at <epoch-seconds>` | `SELF_HOSTED_RUNNER_RETIRE_AT` | não definido | Aposentar o executor em um timestamp Unix absoluto em segundos, para infraestrutura que mata o executor em um tempo conhecido; [Runner lifecycle](/docs/pt/self-hosted-environments#runner-lifecycle) descreve a sequência de liberação e como dimensionar a margem. Valores antes de 2001 ou após o ano 5138 são rejeitados pelo sinalizador e ignorados pela variável de ambiente. |

55| `--server-auto-mode-lists <mode>` | `SELF_HOSTED_RUNNER_SERVER_AUTO_MODE_LISTS` | `no-allow` | Quais das listas de regras do classificador do [modo auto](/docs/pt/permission-modes#eliminate-prompts-with-auto-mode) que o plano de controle envia com uma sessão podem chegar a essa sessão: `all`, `no-allow` ou `none`. Consulte [Listas de regras do modo auto](#auto-mode-rule-lists) para saber o que cada valor aplica. Um valor inválido interrompe o executor na inicialização. Requer Claude Code v2.1.295 ou posterior. |

55| `--session-stop-grace-sec <n>` | `SELF_HOSTED_RUNNER_SESSION_STOP_GRACE_MS` | `5` | Quanto tempo aguardar para que o processo Claude saia limpo após uma sessão terminar, antes de forçar o encerramento. Aumente o valor se os hooks `SessionEnd` do próprio filho precisarem de mais tempo. |56| `--session-stop-grace-sec <n>` | `SELF_HOSTED_RUNNER_SESSION_STOP_GRACE_MS` | `5` | Quanto tempo aguardar para que o processo Claude saia limpo após uma sessão terminar, antes de forçar o encerramento. Aumente o valor se os hooks `SessionEnd` do próprio filho precisarem de mais tempo. |

56| `--startup-timeout-min <n>` | `SELF_HOSTED_RUNNER_STARTUP_TIMEOUT_MS` | `15` | Libere um slot de sessão se o filho não tiver sinalizado que inicializou dentro de N minutos de geração. Limpo pelo sinal de inicialização do filho no [canal de atividade](/docs/pt/self-hosted-environments-configuration#keep-stdin-and-file-descriptor-3-attached), não por saída ordinária, após o qual `--release-idle-session-min` assume. `0` desabilita. |57| `--startup-timeout-min <n>` | `SELF_HOSTED_RUNNER_STARTUP_TIMEOUT_MS` | `15` | Libere um slot de sessão se o filho não tiver sinalizado que inicializou dentro de N minutos de geração. A clonagem acontece antes da geração, então o tempo de clonagem não conta. Limpo pelo sinal de inicialização do filho no [canal de atividade](/docs/pt/self-hosted-environments-configuration#keep-stdin-and-file-descriptor-3-attached), não por saída ordinária, após o qual `--release-idle-session-min` assume. `0` desabilita. |

57| `--trust-workspace [bool]` | `SELF_HOSTED_RUNNER_TRUST_WORKSPACE` | ativado | Semeie confiança persistida para cada caminho de repositório de sessão para que `permissions.allow` e `additionalDirectories` confirmados no repo sejam honrados. Defina `false` para descartar concessões de permissão confirmadas no repo e configure regras de permissão no `settings.json` da configuração do host em vez disso; configurações `sandbox.*` confirmadas no repositório ainda se aplicam de qualquer forma, é por isso que a [proteção de configurações do repo](/docs/pt/self-hosted-environments-deploy#harden-your-deployment) as verifica independentemente deste sinalizador. |58| `--trust-workspace [bool]` | `SELF_HOSTED_RUNNER_TRUST_WORKSPACE` | ativado | Semeie confiança persistida para cada caminho de repositório de sessão para que `permissions.allow` e `additionalDirectories` confirmados no repo sejam honrados. Defina `false` para descartar concessões de permissão confirmadas no repo e configure regras de permissão no `settings.json` da configuração do host em vez disso; configurações `sandbox.*` confirmadas no repositório ainda se aplicam de qualquer forma, é por isso que a [proteção de configurações do repo](/docs/pt/self-hosted-environments-deploy#harden-your-deployment) as verifica independentemente deste sinalizador. |

58| `--use-anthropic-git-proxy` | `CLAUDE_RUNNER_USE_GIT_PROXY=1` | desligado | Clone via [proxy git da Anthropic](/docs/pt/self-hosted-environments-deploy#use-the-anthropic-git-proxy) em vez de autenticação git gerenciada pelo cliente. Requer `--capacity 1` e git 2.32 ou mais recente; o executor recusa iniciar caso contrário. Substitui os sinalizadores de reescrita. |59| `--use-anthropic-git-proxy` | `CLAUDE_RUNNER_USE_GIT_PROXY=1` | desligado | Clone repositórios no github.com via [proxy git da Anthropic](/docs/pt/self-hosted-environments-deploy#use-the-anthropic-git-proxy) em vez de autenticação git gerenciada pelo cliente. Requer `--capacity 1` e git 2.32 ou mais recente; o executor recusa iniciar caso contrário. Substitui as flags de reescrita. |

59 60 

60A maioria dos sinalizadores de duração tem um máximo, escolhido para manter cada tempo limite dentro do teto do temporizador de 32 bits do tempo de execução de aproximadamente 24,85 dias. Os sinalizadores `--*-min` limitam a 10080 minutos, 7 dias; `--drain-grace-sec` a 604800 segundos, também 7 dias; e `--drain-wait-sec` a 86400 segundos, 24 horas. `--session-stop-grace-sec` e `--post-session-hook-timeout-sec` não têm limite. Exceder um limite se comporta diferentemente por superfície:61A maioria dos sinalizadores de duração tem um máximo, escolhido para manter cada tempo limite dentro do teto do temporizador de 32 bits do tempo de execução de aproximadamente 24,85 dias. Os sinalizadores `--*-min` limitam a 10080 minutos, 7 dias; `--drain-grace-sec` a 604800 segundos, também 7 dias; e `--drain-wait-sec` a 86400 segundos, 24 horas. `--session-stop-grace-sec` e `--post-session-hook-timeout-sec` não têm limite. Exceder um limite se comporta diferentemente por superfície:

61 62 

62* **Sinalizador**: a inicialização falha com um erro.63* **Sinalizador**: a inicialização falha com um erro.

63* **Variável de ambiente**: o executor fixa o valor ao teto do temporizador em vez de rejeitá-lo.64* **Variável de ambiente**: o executor fixa o valor ao teto do temporizador em vez de rejeitá-lo.

64 65 

66<h3 id="auto-mode-rule-lists">

67 Listas de regras do modo auto

68</h3>

69 

70`--server-auto-mode-lists` permite que você decida quais regras do classificador do [modo auto](/docs/pt/permission-modes#eliminate-prompts-with-auto-mode) vindas de fora do executor chegam às sessões nos seus executores. O plano de controle da Anthropic pode enviar listas de regras com uma sessão e pedir ao executor que as aplique. Algumas entradas podem ser regras que um administrador da sua organização escreveu. As listas são `environment`, `soft_deny` e `allow`:

71 

72* **`environment`**: uma entrada pode fazer o classificador permitir mais, assim como menos.

73* **`soft_deny`**: uma entrada bloqueia uma ação, a menos que o usuário a tenha solicitado explicitamente ou uma exceção `allow` se aplique.

74* **`allow`**: as exceções às entradas `soft_deny`.

75 

76O valor da flag escolhe quais listas o executor aplica:

77 

78* **`no-allow`**: o padrão. Aplica `environment` e `soft_deny` e retém `allow`. Uma entrada `environment` ainda pode fazer o classificador permitir mais, então o padrão não descarta todo afrouxamento.

79* **`all`**: aplica as três listas.

80* **`none`**: não aplica nenhuma delas. Escolha `none` para descartar todo afrouxamento vindo dessas listas. Isso também remove as restrições de `soft_deny`.

81 

82Nenhuma configuração do executor faz o plano de controle pedir ao executor que aplique as listas. Quando ele não pede, as sessões não recebem nenhuma lista, seja qual for o valor que você definir. Para ver o que aconteceu, inicie o executor com `--log-level debug`. Para cada sessão, o executor então registra em log uma linha contendo `the server asked this runner to apply`, ou uma contendo `the server did not ask this runner to apply the auto mode lists it sends`.

83 

65<h2 id="orchestrator-cli-flags">84<h2 id="orchestrator-cli-flags">

66 Sinalizadores CLI do orquestrador85 Sinalizadores CLI do orquestrador

67</h2>86</h2>


72| :- | :- | :- |91| :- | :- | :- |

73| `--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. |92| `--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. |

74| `--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. |93| `--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. |

75| `--expected-spawn-seconds <sec>` | `120` | Tempo de inicialização p99 esperado para executores gerados, no intervalo imposto pelo servidor 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. |94| `--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. |

76| `--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. |95| `--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. |

77| `--debug-dir <path>` | não definido | Escreva a ordem de trabalho de cada solicitação de geração e stderr do hook em disco. Apenas depuração; nunca defina em produção. |96| `--debug-dir <path>` | não definido | Escreva a ordem de trabalho de cada solicitação de geração e stderr do hook em disco. Apenas depuração; nunca defina em produção. |

78 97 


108| `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. |127| `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. |

109| `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. |128| `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. |

110| `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. |129| `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. |

130| `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. |

111| `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. |131| `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. |

112| `FORCE_AUTOUPDATE_PLUGINS` | não definido | Quando `1`, deixe marketplaces de plugin se atualizarem automaticamente mesmo que o binário esteja fixado |132| `FORCE_AUTOUPDATE_PLUGINS` | não definido | Quando `1`, deixe marketplaces de plugin se atualizarem automaticamente mesmo que o binário esteja fixado |

113| `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` |133| `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` |


178| `claude_code_self_hosted_orchestrator_poll_errors_total{error_kind}` | Falhas cumulativas de PollSpawnHints por tipo: `transport`, `timeout`, `5xx`, `429` ou `4xx`. Todas as cinco séries estão presentes desde o início do processo; alerte em `rate(...[5m]) > 0`. |198| `claude_code_self_hosted_orchestrator_poll_errors_total{error_kind}` | Falhas cumulativas de PollSpawnHints por tipo: `transport`, `timeout`, `5xx`, `429` ou `4xx`. Todas as cinco séries estão presentes desde o início do processo; alerte em `rate(...[5m]) > 0`. |

179| `claude_code_self_hosted_orchestrator_queue_pending_sessions` | Solicitações de geração reivindicáveis agora |199| `claude_code_self_hosted_orchestrator_queue_pending_sessions` | Solicitações de geração reivindicáveis agora |

180| `claude_code_self_hosted_orchestrator_queue_backing_off_sessions` | Solicitações de geração em backoff de repetição após uma falha de hook retentável |200| `claude_code_self_hosted_orchestrator_queue_backing_off_sessions` | Solicitações de geração em backoff de repetição após uma falha de hook retentável |

181| `claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions` | Solicitações de geração bloqueadas até que um Owner as tente novamente na aba **Activity** do ambiente; alerte se acima de zero |201| `claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions` | Sessões impedidas de serem geradas. Cada uma permanece bloqueada até que um usuário envie uma nova mensagem para ela ou um Owner a tente novamente na aba **Activity** do ambiente. A contagem pode permanecer acima de zero depois que você corrigir a causa. Alerte se acima de zero. |

182| `claude_code_self_hosted_orchestrator_pool_pending_sessions` | Total de sessões aguardando um executor para este ambiente. Agregado em toda a organização, idêntico em cada instância do orquestrador: use `MAX` em vez de `SUM` entre instâncias. |202| `claude_code_self_hosted_orchestrator_pool_pending_sessions` | Total de sessões aguardando um executor para este ambiente. Agregado em toda a organização, idêntico em cada instância do orquestrador: use `MAX` em vez de `SUM` entre instâncias. |

183| `claude_code_self_hosted_orchestrator_pool_active_sessions` | Sessões atualmente atribuídas a um executor vivo neste ambiente. Agregado em toda a organização, idêntico em cada instância do orquestrador: use `MAX` em vez de `SUM` entre instâncias. |203| `claude_code_self_hosted_orchestrator_pool_active_sessions` | Sessões atualmente atribuídas a um executor vivo neste ambiente. Agregado em toda a organização, idêntico em cada instância do orquestrador: use `MAX` em vez de `SUM` entre instâncias. |

184| `claude_code_self_hosted_orchestrator_spawn_hooks_total{result}` | Resultados cumulativos de hook `spawn-runner`: `ok`, `retryable`, `non_retryable`. Conta invocações de hook do orquestrador, não filhos de sessão que os executores geram: não comparável a `sessions_started_total`, já que capacidade acima de um, pools quentes e executores gerados novamente para a mesma sessão divergem os dois. |204| `claude_code_self_hosted_orchestrator_spawn_hooks_total{result}` | Resultados cumulativos de hook `spawn-runner`: `ok`, `retryable`, `non_retryable`. Conta invocações de hook do orquestrador, não filhos de sessão que os executores geram: não comparável a `sessions_started_total`, já que capacidade acima de um, pools quentes e executores gerados novamente para a mesma sessão divergem os dois. |


286 for: 1m306 for: 1m

287 labels: {severity: critical}307 labels: {severity: critical}

288 annotations:308 annotations:

289 summary: "{{ $value }} sessões com circuito aberto — hook spawn-runner é repetidamente não retentável; corrija a infraestrutura e tente novamente na aba Activity"309 summary: "Sessões impedidas de serem geradas: {{ $value }}. Leia o erro de cada uma na aba Activity, corrija a causa e então selecione Retry"

290 - alert: ClaudeOrchestratorPollErrors310 - alert: ClaudeOrchestratorPollErrors

291 expr: sum by (pod) (rate(claude_code_self_hosted_orchestrator_poll_errors_total[5m])) > 0311 expr: sum by (pod) (rate(claude_code_self_hosted_orchestrator_poll_errors_total[5m])) > 0

292 for: 2m312 for: 2m


321 341 

322Antes da v2.1.260, o executor encerrava cada sessão que atingia seu limite `--kill-session-after-min` e a contava em `sessions_interrupted_total`.342Antes da v2.1.260, o executor encerrava cada sessão que atingia seu limite `--kill-session-after-min` e a contava em `sessions_interrupted_total`.

323 343 

324O `CLAUDE_RUNNER_EXIT_REASON` do hook [`post-session`](/docs/pt/self-hosted-environments-configuration#post-session) classifica entregas limpas de forma diferente. O hook relata uma liberação, um tempo limite de inicialização e uma desatribuição do servidor como `interrupted`, porque o executor parou o filho. Esses contadores registram os mesmos eventos como `completed`, porque o slot foi devolvido limpo.344O `CLAUDE_RUNNER_EXIT_REASON` do hook [`post-session`](/docs/pt/self-hosted-environments-configuration#post-session) classifica entregas limpas de forma diferente. O hook relata estes como `interrupted`, porque o executor parou o filho: uma liberação, um tempo limite de inicialização, uma desatribuição do servidor e um arquivamento ou exclusão que a pesquisa notou primeiro. Esses contadores registram os mesmos eventos como `completed`, porque o slot foi devolvido limpo.

325 345 

326Se você reconciliar recebimentos de hook contra `sessions_completed_total` diretamente, você subestima as conclusões. Use o hook para garantias por sessão e os contadores para taxas agregadas.346Se você reconciliar recebimentos de hook contra `sessions_completed_total` diretamente, você subestima as conclusões. Use o hook para garantias por sessão e os contadores para taxas agregadas.

327 347 

Details

87 87 

88Os sinalizadores de dispatch `--environment` e `--ref` requerem Claude Code v2.1.224 ou posterior na máquina que executa o script, o mesmo piso que o próprio runner. Com o hook em vigor e um runner iniciado neste host, o script de teste:88Os sinalizadores de dispatch `--environment` e `--ref` requerem Claude Code v2.1.224 ou posterior na máquina que executa o script, o mesmo piso que o próprio runner. Com o hook em vigor e um runner iniciado neste host, o script de teste:

89 89 

901. Cria uma sessão no ambiente de teste com `claude -p "<prompt>" --environment <environment-id> --output-format json`, executado a partir de um checkout de git para que a CLI possa detectar automaticamente o repositório a partir do remote `origin`. O `--ref <branch>` opcional baseia o checkout da sessão em uma ref nomeada em vez do HEAD local. O comando cria a sessão, imprime uma linha de JSON contendo `session_id` e sai sem aguardar a resposta do Claude.901. Cria uma sessão no ambiente de teste com `claude -p "<prompt>" --environment <environment-id> --output-format json`. Execute o comando a partir de um checkout de git para que a CLI possa detectar automaticamente o repositório a partir do remote `origin`. O `--ref <branch>` opcional baseia o checkout da sessão em uma ref nomeada em vez do HEAD local. O comando sai sem aguardar a resposta do Claude. O que ele imprime informa ao seu script o resultado:

91 * **Sessão criada**: uma linha de JSON como `{"ok":true,"session_id":"session_...","title":"...","url":"...","pool_id":"..."}`

92 * **Falha na criação da sessão**: a linha `{"ok":false,"error":"..."}`, e o comando sai com status 1

93 * **Alguns erros anteriores**, como sessões na nuvem indisponíveis para sua organização ou um prompt ausente: o erro no stderr sem linha de JSON, e o comando sai com status 1

912. Aguarda a resposta aparecer em `$E2E_REPLY_DIR/<session_id>.txt`, escrita pelo hook Stop no runner assim que o turno é concluído.942. Aguarda a resposta aparecer em `$E2E_REPLY_DIR/<session_id>.txt`, escrita pelo hook Stop no runner assim que o turno é concluído.

923. Envia um acompanhamento com `claude -p "<message>" --cloud <session_id> --output-format json` (consulte [Enviar uma mensagem de acompanhamento para uma sessão em execução](/docs/pt/claude-code-on-the-web#send-follow-ups-from-the-cli)), que publica um evento de usuário na sessão existente e sai.953. Envia um acompanhamento com `claude -p "<message>" --cloud <session_id> --output-format json` (consulte [Enviar uma mensagem de acompanhamento para uma sessão em execução](/docs/pt/claude-code-on-the-web#send-follow-ups-from-the-cli)), que publica um evento de usuário na sessão existente e sai.

934. Aguarda a resposta do acompanhamento da mesma forma que a etapa 2.964. Aguarda a resposta do acompanhamento da mesma forma que a etapa 2.


104 Script de exemplo107 Script de exemplo

105</h2>108</h2>

106 109 

107O script abaixo executa o loop completo contra `$CLAUDE_TEST_ENVIRONMENT_ID`, o ID `ccpool_...` do seu ambiente de teste, mostrado no diálogo de detalhes do ambiente na página de administração ou retornado pela [chamada create-environment](#create-a-dedicated-test-environment), e afirma uma frase sentinela em cada resposta. Execute-o a partir de um checkout de git do repositório no qual você deseja que a sessão funcione, após iniciar um runner neste host com o hook de captura instalado e `E2E_REPLY_DIR` exportado. Primeiro, faça login com uma conta claude.ai na máquina que executa o script, conforme descrito em [Autenticar a partir de CI](#authenticate-from-ci). Sem esse login, o primeiro envio falha com um erro como `Unable to get organization UUID for cloud session creation`.110O script de exemplo é executado na mesma máquina que o executor de testes. Antes de executá-lo, prepare essa máquina:

111 

112* **Checkout do repositório**: execute o script a partir de um checkout de git do repositório no qual você deseja que a sessão funcione.

113* **Runner**: inicie um runner neste host com o hook de captura instalado e `E2E_REPLY_DIR` exportado.

114* **Login**: faça login com uma conta claude.ai na máquina que executa o script, conforme descrito em [Autenticar a partir de CI](#authenticate-from-ci).

115* **ID do ambiente**: defina `CLAUDE_TEST_ENVIRONMENT_ID` como o ID `ccpool_...` do seu ambiente de teste, mostrado no diálogo de detalhes do ambiente na página de administração ou retornado pela [chamada create-environment](#create-a-dedicated-test-environment).

116 

117O script abaixo executa o loop completo contra `$CLAUDE_TEST_ENVIRONMENT_ID` e afirma uma frase sentinela em cada resposta.

108 118 

109```bash theme={null}119```bash theme={null}

110#!/usr/bin/env bash120#!/usr/bin/env bash


152TURN1="e2e-probe-$(date +%s)-$$: say exactly 'ok: custom tools are reachable' and nothing else"162TURN1="e2e-probe-$(date +%s)-$$: say exactly 'ok: custom tools are reachable' and nothing else"

153EXPECT1="ok: custom tools are reachable"163EXPECT1="ok: custom tools are reachable"

154create_json=$(claude -p "$TURN1" --environment "$CLAUDE_TEST_ENVIRONMENT_ID" \164create_json=$(claude -p "$TURN1" --environment "$CLAUDE_TEST_ENVIRONMENT_ID" \

155 --ref "$TEST_REPO_REF" --output-format json)165 --ref "$TEST_REPO_REF" --output-format json < /dev/null)

156echo "create: $create_json"166echo "create: $create_json"

157SESSION_ID=$(jq -er '.session_id' <<<"$create_json")167SESSION_ID=$(jq -er '.session_id' <<<"$create_json")

158 168 


163# 3. Post a follow-up via the CLI.173# 3. Post a follow-up via the CLI.

164TURN2="e2e-probe-followup-$(date +%s): say exactly 'ok: follow-up delivered' and nothing else"174TURN2="e2e-probe-followup-$(date +%s): say exactly 'ok: follow-up delivered' and nothing else"

165EXPECT2="ok: follow-up delivered"175EXPECT2="ok: follow-up delivered"

166followup_json=$(claude -p "$TURN2" --cloud "$SESSION_ID" --output-format json)176followup_json=$(claude -p "$TURN2" --cloud "$SESSION_ID" --output-format json < /dev/null)

167echo "followup: $followup_json"177echo "followup: $followup_json"

168jq -e '.ok == true' <<<"$followup_json" >/dev/null178jq -e '.ok == true' <<<"$followup_json" >/dev/null

169 179 

skills.md +1 −1

Details

235 235 

236Se uma skill existe apenas em `~/.claude/skills/` em sua máquina, Claude Code relata que a skill não foi encontrada quando uma [rotina](/docs/pt/routines) a invoca, porque cada execução de rotina começa como uma sessão cloud nova. Para disponibilizar uma skill pessoal nessas sessões:236Se uma skill existe apenas em `~/.claude/skills/` em sua máquina, Claude Code relata que a skill não foi encontrada quando uma [rotina](/docs/pt/routines) a invoca, porque cada execução de rotina começa como uma sessão cloud nova. Para disponibilizar uma skill pessoal nessas sessões:

237 237 

238* Para sessões Cowork e cloud, habilite a skill para sua conta claude.ai.238* Para sessões Cowork e na nuvem, habilite a skill para sua conta claude.ai. [Algumas sessões em um ambiente auto-hospedado](/docs/pt/self-hosted-environments-configuration#how-each-session’s-config-is-assembled) não carregam as skills da sua conta.

239* Para sessões cloud, você pode em vez disso confirmar a skill no `.claude/skills/` do repositório. Plugins declarados no `.claude/settings.json` do repositório e plugins habilitados apenas em suas configurações de usuário [não carregam em sessões cloud](/docs/pt/cloud-environments#what-carries-over-from-your-setup).239* Para sessões cloud, você pode em vez disso confirmar a skill no `.claude/skills/` do repositório. Plugins declarados no `.claude/settings.json` do repositório e plugins habilitados apenas em suas configurações de usuário [não carregam em sessões cloud](/docs/pt/cloud-environments#what-carries-over-from-your-setup).

240 240 

241[Tarefas agendadas do Desktop](/docs/pt/desktop-scheduled-tasks) executam localmente em sua máquina, então elas carregam `~/.claude/skills/`.241[Tarefas agendadas do Desktop](/docs/pt/desktop-scheduled-tasks) executam localmente em sua máquina, então elas carregam `~/.claude/skills/`.

vs-code.md +1 −1

Details

479 479 

480Claude abre novas abas para tarefas do navegador e compartilha o estado de login do seu navegador, para que possa acessar qualquer site em que você já esteja conectado.480Claude abre novas abas para tarefas do navegador e compartilha o estado de login do seu navegador, para que possa acessar qualquer site em que você já esteja conectado.

481 481 

482Para que cada sessão se conecte ao seu navegador assim que iniciar, sem digitar `@browser`, consulte [Ativar o Chrome por padrão](/docs/pt/chrome#enable-chrome-by-default). Para quando o Claude Code pedir sua confirmação antes de uma ação do navegador em uma sessão conectada dessa forma, consulte [Prompts de permissão em sessões do VS Code](/docs/pt/chrome#permission-prompts-in-vs-code-sessions).482Para que cada sessão se conecte ao seu navegador assim que iniciar, sem digitar `@browser`, consulte [Ativar o Chrome por padrão](/docs/pt/chrome#enable-chrome-by-default). Para quando o Claude Code pedir sua confirmação antes de uma ação do navegador, consulte [Prompts de permissão em sessões do VS Code](/docs/pt/chrome#permission-prompts-in-vs-code-sessions).

483 483 

484Para instruções de configuração, a lista completa de recursos e solução de problemas, consulte [Use Claude Code with Chrome](/docs/pt/chrome).484Para instruções de configuração, a lista completa de recursos e solução de problemas, consulte [Use Claude Code with Chrome](/docs/pt/chrome).

485 485