SpyBara
Go Premium

Documentation 2026-10-09 23:02 UTC to 2026-10-10 18:02 UTC

28 files changed +565 −141. View all changes and history on the product overview
2026
Sat 10 18:58 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 |

agent-view.md +2 −0

Details

256 256 

257Sessões anexadas sempre renderizam em [modo fullscreen](/docs/pt/fullscreen), independentemente de sua configuração `tui`, porque uma sessão em background não tem scrollback de terminal para anexar. Role com `PgUp`, `PgDn` ou a roda do mouse, e pressione `Ctrl+O` para modo de transcrição. O scroll nativo do seu terminal e o modo de cópia tmux mostram apenas o viewport atual, o mesmo que quando você executa qualquer aplicativo fullscreen.257Sessões anexadas sempre renderizam em [modo fullscreen](/docs/pt/fullscreen), independentemente de sua configuração `tui`, porque uma sessão em background não tem scrollback de terminal para anexar. Role com `PgUp`, `PgDn` ou a roda do mouse, e pressione `Ctrl+O` para modo de transcrição. O scroll nativo do seu terminal e o modo de cópia tmux mostram apenas o viewport atual, o mesmo que quando você executa qualquer aplicativo fullscreen.

258 258 

259Uma sessão anexada não [informa seu status ao seu terminal](/docs/pt/terminal-config#see-session-status-in-your-terminal).

260 

259Pressione `←` em um prompt vazio, ou execute `/exit`, para desanexar e retornar a agent view, independentemente de você ter aberto a sessão a partir de agent view ou com `claude attach <id>` a partir do seu shell.261Pressione `←` em um prompt vazio, ou execute `/exit`, para desanexar e retornar a agent view, independentemente de você ter aberto a sessão a partir de agent view ou com `claude attach <id>` a partir do seu shell.

260 262 

261`←` também desanexa enquanto o [overlay `/btw`](/docs/pt/interactive-mode#side-questions-with-%2Fbtw) está aberto. Requer Claude Code v2.1.257 ou posterior. Uma pergunta lateral que ainda está respondendo continua em execução enquanto você está ausente. Na próxima vez que você anexar, o overlay reabre com ela, ou com sua resposta.263`←` também desanexa enquanto o [overlay `/btw`](/docs/pt/interactive-mode#side-questions-with-%2Fbtw) está aberto. Requer Claude Code v2.1.257 ou posterior. Uma pergunta lateral que ainda está respondendo continua em execução enquanto você está ausente. Na próxima vez que você anexar, o overlay reabre com ela, ou com sua resposta.

Details

114 Mensagens enviadas no meio do turno não checkpointed114 Mensagens enviadas no meio do turno não checkpointed

115</h3>115</h3>

116 116 

117Quando uma mensagem que você [enfileira enquanto Claude trabalha](/docs/pt/interactive-mode#queue-messages-while-claude-works) chega ao Claude dentro do turno em execução, ela se junta a esse turno em vez de iniciar um novo. A mensagem aparece na conversa, mas Claude Code não cria um checkpoint para ela. Uma mensagem enfileirada que Claude Code envia como parte de um novo turno recebe um checkpoint como de costume, incluindo quando várias mensagens enfileiradas [compartilham esse turno](/docs/pt/interactive-mode#when-claude-code-sends-what-you-queued).117No menu de rewind, uma mensagem que você [digitou enquanto Claude ainda estava trabalhando](/docs/pt/interactive-mode#queue-messages-while-claude-works) pode ser marcada como **No code restore**. Claude leu essa mensagem antes de seu turno terminar. [Checkpoints são criados para prompts que iniciam um turno](#how-checkpoints-work), então essa mensagem não tem um checkpoint próprio. As edições que Claude fez depois de lê-la contam para o prompt que iniciou o turno.

118 118 

119Para desfazer as edições que Claude fez depois de tal mensagem, faça rewind para o prompt que iniciou o turno. Isso faz rewind de todo o turno, incluindo o trabalho que Claude fez antes de sua mensagem chegar.119Você não precisa fazer nada em relação à mensagem em si. Para desfazer as alterações de arquivo dessa parte da sessão, selecione o prompt que iniciou o turno e escolha **Restore code** ou **Restore code and conversation**. Isso reverte as edições de arquivo do Claude de todo o turno, incluindo as feitas antes de sua mensagem chegar. Selecionar a mensagem marcada ainda oferece **Restore conversation**, que faz rewind da conversa até ela e mantém seus arquivos como estão.

120 120 

121<h3 id="symlinked-and-hard-linked-paths-not-restored">121<h3 id="symlinked-and-hard-linked-paths-not-restored">

122 Caminhos symlinked e hard-linked não restaurados122 Caminhos symlinked e hard-linked não restaurados

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

263 Conectar desenvolvedores263 Conectar desenvolvedores

264</h2>264</h2>

265 265 

266Os desenvolvedores se conectam de seus próprios laptops com um sign-in de navegador, usando sua conta de trabalho corporativa. Eles não precisam de uma conta claude.ai, uma chave de API ou uma assinatura, porque as requisições para o modelo passam pelo gateway usando a credencial upstream da organização. A conexão é orientada pelas [configurações gerenciadas no lado do cliente](/docs/pt/claude-apps-gateway-config#client-side-managed-settings) que você envia via MDM, então não há configuração manual no lado do desenvolvedor; esta seção cobre o que o administrador configura.266Os desenvolvedores se conectam de seus próprios laptops com um sign-in de navegador, usando sua conta de trabalho corporativa. Eles não precisam de uma conta claude.ai, uma chave de API ou uma assinatura, porque as requisições para o modelo passam pelo gateway usando a credencial upstream da organização. A conexão é orientada pelas [configurações gerenciadas no lado do cliente](/docs/pt/claude-apps-gateway-config#client-side-managed-settings) que você envia via MDM, e esta seção cobre o que o administrador configura.

267 267 

268A CLI coloca a impressão digital do certificado TLS folha do gateway na primeira conexão e a fixa por nome de host. Ela verifica esse pino novamente durante o sign-in, em atualizações de sessão silenciosas e em buscas de configurações gerenciadas, enquanto requisições de inferência usam validação TLS padrão sem o pino. Requisições roteadas através de um proxy HTTPS pulam a verificação de pino, então adicione o host do gateway a `NO_PROXY` para mantê-las diretas.268A CLI coloca a impressão digital do certificado TLS folha do gateway na primeira conexão e a fixa por nome de host. Ela verifica esse pino novamente durante o sign-in, em atualizações de sessão silenciosas e em buscas de configurações gerenciadas, enquanto requisições de inferência usam validação TLS padrão sem o pino. Requisições roteadas através de um proxy HTTPS pulam a verificação de pino, então adicione o host do gateway a `NO_PROXY` para mantê-las diretas.

269 269 


287 Defina a URL do gateway287 Defina a URL do gateway

288</h3>288</h3>

289 289 

290Três chaves vão no arquivo de [configurações gerenciadas](/docs/pt/managed-settings#delivery-mechanisms) por SO que você implanta via MDM ou diretamente no disco. `forceLoginMethod` e `forceLoginGatewayUrl` abrem `/login` diretamente na tela **Cloud gateway** com a URL preenchida, e `parentSettingsBehavior: "merge"` permite que Claude Desktop entregue a allowlist de egresso do gateway para as sessões Claude Code que ele inicia, explicado em [Entregar política para sessões Claude Desktop](#deliver-policy-to-claude-desktop-sessions):290Três chaves vão no arquivo de [configurações gerenciadas](/docs/pt/managed-settings#delivery-mechanisms) por SO que você implanta via MDM ou diretamente no disco. Para uma máquina sem configurações gerenciadas, consulte [Defina a URL do gateway nas configurações de usuário](#set-the-gateway-url-in-user-settings). `forceLoginMethod` e `forceLoginGatewayUrl` abrem `/login` diretamente na tela **Cloud gateway** com a URL preenchida, e `parentSettingsBehavior: "merge"` permite que Claude Desktop entregue a allowlist de egresso do gateway para as sessões Claude Code que ele inicia, explicado em [Entregar política para sessões Claude Desktop](#deliver-policy-to-claude-desktop-sessions):

291 291 

292```json theme={null}292```json theme={null}

293{293{


299 299 

300O desenvolvedor pressiona Enter para se conectar. O [prompt de impressão digital TLS de primeira conexão](#connect-developers) ainda aparece. Uma vez que o arquivo está em uma máquina, um desenvolvedor que não completou o sign-in do gateway vê uma das mensagens descritas em [A política do administrador requer um sign-in Cloud gateway](/docs/pt/errors#administrator-policy-requires-a-cloud-gateway-sign-in). Desenvolvedores que selecionam um provedor de nuvem através de uma variável de ambiente como `CLAUDE_CODE_USE_BEDROCK` não precisam do sign-in do gateway.300O desenvolvedor pressiona Enter para se conectar. O [prompt de impressão digital TLS de primeira conexão](#connect-developers) ainda aparece. Uma vez que o arquivo está em uma máquina, um desenvolvedor que não completou o sign-in do gateway vê uma das mensagens descritas em [A política do administrador requer um sign-in Cloud gateway](/docs/pt/errors#administrator-policy-requires-a-cloud-gateway-sign-in). Desenvolvedores que selecionam um provedor de nuvem através de uma variável de ambiente como `CLAUDE_CODE_USE_BEDROCK` não precisam do sign-in do gateway.

301 301 

302Um desenvolvedor não pode configurar isso manualmente. O seletor de login não tem opção de gateway, e `forceLoginGatewayUrl` é ignorado nos arquivos de configurações próprias de um desenvolvedor. `forceLoginMethod` sozinho, sem uma URL, deixa o desenvolvedor em uma mensagem "Entre em contato com seu administrador de TI". As chaves de login pertencem ao arquivo que você envia para máquinas, não ao bloco `managed.policies[].cli` do gateway, que só alcança clientes que já estão conectados.302O seletor de login não tem opção de gateway, e nas configurações gerenciadas `forceLoginMethod` sozinho, sem uma URL, deixa o desenvolvedor em uma mensagem "Entre em contato com seu administrador de TI". As chaves de login pertencem ao arquivo que você envia para máquinas, não ao bloco `managed.policies[].cli` do gateway, que só alcança clientes que já estão conectados.

303 

304<h4 id="set-the-gateway-url-in-user-settings">

305 Defina a URL do gateway nas configurações de usuário

306</h4>

307 

308Em máquinas sem configurações gerenciadas, peça que cada desenvolvedor adicione `forceLoginMethod` e `forceLoginGatewayUrl` ao seu próprio arquivo de configurações de usuário, `~/.claude/settings.json`. Isso requer Claude Code v2.1.295 ou posterior na máquina do desenvolvedor. Este exemplo nomeia um gateway em `claude-gateway.internal.example.com`:

309 

310```json theme={null}

311{

312 "forceLoginMethod": "gateway",

313 "forceLoginGatewayUrl": "https://claude-gateway.internal.example.com"

314}

315```

316 

317Quando o desenvolvedor executa `/login` no prompt do Claude Code, a tela **Cloud gateway** abre nesse endereço e ele pressiona Enter para se conectar. O [prompt de impressão digital TLS de primeira conexão](#connect-developers) ainda aparece. Estes limites se aplicam às chaves definidas dessa forma:

318 

319* **Apenas configurações de usuário**: Claude Code lê as duas chaves de `~/.claude/settings.json`, não do `.claude/settings.json` ou `.claude/settings.local.json` de um projeto.

320* **Configurações gerenciadas as desativam**: assim que as configurações de um administrador chegam à máquina por meio de um arquivo de configurações gerenciadas, um plist do macOS ou uma política HKLM do Windows, ou um [policy helper](/docs/pt/settings-reference#policyhelper), Claude Code ignora um gateway nomeado nas configurações de usuário.

303 321 

304<h3 id="allow-a-gateway-on-public-address-space-you-own">322<h3 id="allow-a-gateway-on-public-address-space-you-own">

305 Permitir um gateway em espaço de endereço público que você possui323 Permitir um gateway em espaço de endereço público que você possui

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 


1713 1713 

1714Para Claude Desktop, defina a chave `bootstrapUrl` na própria [configuração gerenciada](https://claude.com/docs/third-party/claude-desktop/configuration) do Claude Desktop como `<listen.public_url>/user/bootstrap`. O fluxo de entrada e a política por grupo correspondem aos da CLI uma vez que uma política aceita no servidor com uma chave `desktop`; sem a aceitação, `/user/bootstrap` retorna 404. Veja [Claude Desktop overlay](#claude-desktop-overlay) para a metade do servidor.1714Para Claude Desktop, defina a chave `bootstrapUrl` na própria [configuração gerenciada](https://claude.com/docs/third-party/claude-desktop/configuration) do Claude Desktop como `<listen.public_url>/user/bootstrap`. O fluxo de entrada e a política por grupo correspondem aos da CLI uma vez que uma política aceita no servidor com uma chave `desktop`; sem a aceitação, `/user/bootstrap` retorna 404. Veja [Claude Desktop overlay](#claude-desktop-overlay) para a metade do servidor.

1715 1715 

1716Claude Code honra [`forceLoginGatewayUrl`](/docs/pt/settings-reference#forcelogingatewayurl), [`gatewayInternalNetworks`](/docs/pt/settings-reference#gatewayinternalnetworks) e o valor `"gateway"` de [`forceLoginMethod`](/docs/pt/settings-reference#forceloginmethod) apenas de uma fonte gerenciada na máquina: `managed-settings.json`, o plist do macOS ou registro HKLM do Windows, ou um auxiliar de política. Defini-los no próprio `~/.claude/settings.json` de um desenvolvedor ou no payload do gateway não configura o login no gateway.1716Claude Code honra [`forceLoginGatewayUrl`](/docs/pt/settings-reference#forcelogingatewayurl), [`gatewayInternalNetworks`](/docs/pt/settings-reference#gatewayinternalnetworks) e o valor `"gateway"` de [`forceLoginMethod`](/docs/pt/settings-reference#forceloginmethod) de uma fonte gerenciada na máquina: `managed-settings.json`, o plist do macOS ou registro HKLM do Windows, ou um auxiliar de política. Defini-los no payload do gateway não configura o login no gateway. Para o próprio `~/.claude/settings.json` de um desenvolvedor, veja [Definir a URL do gateway nas configurações do usuário](/docs/pt/claude-apps-gateway#set-the-gateway-url-in-user-settings).

1717 1717 

1718Deixe `forceLoginMethod` e `forceLoginOrgUUID` fora do payload. O Claude Code ainda lê ambas as chaves do payload para sua verificação de credenciais na inicialização, portanto um desenvolvedor que mantém uma credencial emitida pela Anthropic na máquina recebe a saída na inicialização descrita em [Administrator policy requires a Cloud gateway sign-in](/docs/pt/errors#administrator-policy-requires-a-cloud-gateway-sign-in) mesmo depois de fazer login.1718Deixe `forceLoginMethod` e `forceLoginOrgUUID` fora do payload. O Claude Code ainda lê ambas as chaves do payload para sua verificação de credenciais na inicialização, portanto um desenvolvedor que mantém uma credencial emitida pela Anthropic na máquina recebe a saída na inicialização descrita em [Administrator policy requires a Cloud gateway sign-in](/docs/pt/errors#administrator-policy-requires-a-cloud-gateway-sign-in) mesmo depois de fazer login.

1719 1719 

Details

135 Envie a URL do gateway para máquinas de desenvolvedores135 Envie a URL do gateway para máquinas de desenvolvedores

136</h3>136</h3>

137 137 

138Assim que o gateway estiver servindo, envie `forceLoginMethod`, `forceLoginGatewayUrl` e `parentSettingsBehavior: "merge"` para a máquina de cada desenvolvedor através de configurações gerenciadas, via MDM ou escrevendo o `managed-settings.json` por SO diretamente. Sem isso, `/login` mostra o seletor de conta padrão sem opção de gateway.138Assim que o gateway estiver servindo, envie `forceLoginMethod`, `forceLoginGatewayUrl` e `parentSettingsBehavior: "merge"` para a máquina de cada desenvolvedor através de configurações gerenciadas, via MDM ou escrevendo o `managed-settings.json` por SO diretamente.

139 139 

140Uma vez que você implanta as chaves, Claude Code para de usar uma chave de API restante ou login claude.ai na máquina, então planeje o envio junto com suas instruções de sign-in. [A política do administrador requer um sign-in de gateway Cloud](/docs/pt/errors#administrator-policy-requires-a-cloud-gateway-sign-in) descreve as mensagens que os desenvolvedores veem.140Uma vez que você implanta as chaves, Claude Code para de usar uma chave de API restante ou login claude.ai na máquina, então planeje o envio junto com suas instruções de sign-in. [A política do administrador requer um sign-in de gateway Cloud](/docs/pt/errors#administrator-policy-requires-a-cloud-gateway-sign-in) descreve as mensagens que os desenvolvedores veem.

141 141 

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 |

commands.md +1 −1

Details

77| `/compact [instructions]` | Libere contexto resumindo a conversa até agora. Opcionalmente passe instruções de foco para o resumo. Consulte [como a compactação lida com regras, skills e arquivos de memória](/docs/pt/context-window#what-survives-compaction) |77| `/compact [instructions]` | Libere contexto resumindo a conversa até agora. Opcionalmente passe instruções de foco para o resumo. Consulte [como a compactação lida com regras, skills e arquivos de memória](/docs/pt/context-window#what-survives-compaction) |

78| `/config [key=value ...]` | Abra a interface de [Configurações](/docs/pt/settings) para ajustar tema, modelo, [estilo de saída](/docs/pt/output-styles) e outras preferências. Passe um ou mais pares `key=value` para definir uma configuração diretamente sem abrir a interface, por exemplo `/config thinking=false`, `/config theme=dark`, ou `/config model=sonnet`. O formulário `key=value` também funciona em modo não interativo (`-p`) e do aplicativo móvel Claude via [Remote Control](/docs/pt/remote-control). O formulário `key=value` não pode ativar uma configuração que precisa de sua confirmação no painel, como [`autoContinueAtUsageLimit`](/docs/pt/interactive-mode#turn-automatic-continue-off), embora possa desativá-la. Execute `/config --help` para listar as chaves que aceita. Alias: `/settings` |78| `/config [key=value ...]` | Abra a interface de [Configurações](/docs/pt/settings) para ajustar tema, modelo, [estilo de saída](/docs/pt/output-styles) e outras preferências. Passe um ou mais pares `key=value` para definir uma configuração diretamente sem abrir a interface, por exemplo `/config thinking=false`, `/config theme=dark`, ou `/config model=sonnet`. O formulário `key=value` também funciona em modo não interativo (`-p`) e do aplicativo móvel Claude via [Remote Control](/docs/pt/remote-control). O formulário `key=value` não pode ativar uma configuração que precisa de sua confirmação no painel, como [`autoContinueAtUsageLimit`](/docs/pt/interactive-mode#turn-automatic-continue-off), embora possa desativá-la. Execute `/config --help` para listar as chaves que aceita. Alias: `/settings` |

79| `/context [all]` | Visualize o uso de contexto atual como uma grade colorida. Mostra sugestões de otimização para ferramentas pesadas em contexto, inchaço de memória e avisos de capacidade. Quando a conversa excede a janela de contexto, a saída inclui um [aviso](/docs/pt/errors#context-exceeds-the-token-limit) mostrando o quão longe você está do limite e qual comando libera espaço. Em [modo tela cheia](/docs/pt/fullscreen), `/context` recolhe o detalhamento por item para manter a grade visível. Passe `all` para expandi-lo |79| `/context [all]` | Visualize o uso de contexto atual como uma grade colorida. Mostra sugestões de otimização para ferramentas pesadas em contexto, inchaço de memória e avisos de capacidade. Quando a conversa excede a janela de contexto, a saída inclui um [aviso](/docs/pt/errors#context-exceeds-the-token-limit) mostrando o quão longe você está do limite e qual comando libera espaço. Em [modo tela cheia](/docs/pt/fullscreen), `/context` recolhe o detalhamento por item para manter a grade visível. Passe `all` para expandi-lo |

80| `/copy [N]` | Copie a última resposta do assistente para a área de transferência. Passe um número `N` para copiar a Nª-última resposta: `/copy 2` copia a segunda-última. Quando blocos de código estão presentes, mostra um seletor interativo para selecionar blocos individuais ou a resposta completa. Pressione `w` no seletor para escrever a seleção em um arquivo em vez da área de transferência, o que é útil sobre SSH |80| `/copy [N]` | Copie a última resposta do assistente para a área de transferência. Passe um número `N` para copiar a Nª-última resposta: `/copy 2` copia a segunda-última. Quando blocos de código ou citações em bloco estão presentes, mostra um seletor interativo para selecionar blocos individuais ou a resposta completa. Pressione `w` no seletor para escrever a seleção em um arquivo em vez da área de transferência, o que é útil sobre SSH |

81| `/cost` | Alias para `/usage` |81| `/cost` | Alias para `/usage` |

82| `/dataviz [request]` | **[Skill](/docs/pt/skills#bundled-skills).** Orientação de design para gráficos, gráficos e painéis. Claude escolhe a forma de gráfico para os dados, atribui cor por função, valida a paleta para segurança de daltonismo e contraste com um script incluído, e aplica regras de marca, interação e acessibilidade. Usa uma paleta de espaço reservado neutra da marca que você substitui pela sua própria |82| `/dataviz [request]` | **[Skill](/docs/pt/skills#bundled-skills).** Orientação de design para gráficos, gráficos e painéis. Claude escolhe a forma de gráfico para os dados, atribui cor por função, valida a paleta para segurança de daltonismo e contraste com um script incluído, e aplica regras de marca, interação e acessibilidade. Usa uma paleta de espaço reservado neutra da marca que você substitui pela sua própria |

83| `/debug [description]` | **[Skill](/docs/pt/skills#bundled-skills).** Ative o registro de debug para a sessão atual e solucione problemas lendo o log de debug da sessão. O registro de debug está desativado por padrão, a menos que você tenha iniciado com `claude --debug`, então executar `/debug` no meio da sessão começa a capturar logs a partir desse ponto. Opcionalmente descreva o problema para focar a análise |83| `/debug [description]` | **[Skill](/docs/pt/skills#bundled-skills).** Ative o registro de debug para a sessão atual e solucione problemas lendo o log de debug da sessão. O registro de debug está desativado por padrão, a menos que você tenha iniciado com `claude --debug`, então executar `/debug` no meio da sessão começa a capturar logs a partir desse ponto. Opcionalmente descreva o problema para focar a análise |

env-vars.md +3 −3

Details

285| `CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK` | Defina como `1` para desativar a [troca automática de modelo quando um classificador de segurança sinaliza uma requisição](/docs/pt/model-config#automatic-model-fallback), o comportamento que a configuração [`switchModelsOnFlag`](/docs/pt/settings-reference#switchmodelsonflag) controla |285| `CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK` | Defina como `1` para desativar a [troca automática de modelo quando um classificador de segurança sinaliza uma requisição](/docs/pt/model-config#automatic-model-fallback), o comportamento que a configuração [`switchModelsOnFlag`](/docs/pt/settings-reference#switchmodelsonflag) controla |

286| `CLAUDE_CODE_DISABLE_STRUCTURED_OUTPUTS` | Defina como `1` para impedir que o Claude Code envie o campo de saída estruturada `output_config.format` e o valor de `anthropic-beta` associado a ele, para um [gateway de LLM](/docs/pt/llm-gateway-protocol#feature-pass-through) cujo upstream os rejeita. Isso mantém ativados os outros recursos de pré-lançamento que [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS`](/docs/pt/llm-gateway-protocol#disable-pre-release-capabilities) desativa. Requer o Claude Code v2.1.288 ou posterior |286| `CLAUDE_CODE_DISABLE_STRUCTURED_OUTPUTS` | Defina como `1` para impedir que o Claude Code envie o campo de saída estruturada `output_config.format` e o valor de `anthropic-beta` associado a ele, para um [gateway de LLM](/docs/pt/llm-gateway-protocol#feature-pass-through) cujo upstream os rejeita. Isso mantém ativados os outros recursos de pré-lançamento que [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS`](/docs/pt/llm-gateway-protocol#disable-pre-release-capabilities) desativa. Requer o Claude Code v2.1.288 ou posterior |

287| `CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT` | Defina como `1` para desativar a verificação de [caminhos críticos](/docs/pt/permission-modes#critical-paths) para um `rm` recursivo cujo destino é inteiramente a saída de uma substituição de comando, como `rm -rf "$(pwd)"`. As outras verificações de caminhos críticos continuam sendo executadas. Defina-a no ambiente que inicia o Claude Code, pois o Claude Code ignora uma cópia entregue por meio de um bloco `env` de configurações. Requer o Claude Code v2.1.281 ou posterior |287| `CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT` | Defina como `1` para desativar a verificação de [caminhos críticos](/docs/pt/permission-modes#critical-paths) para um `rm` recursivo cujo destino é inteiramente a saída de uma substituição de comando, como `rm -rf "$(pwd)"`. As outras verificações de caminhos críticos continuam sendo executadas. Defina-a no ambiente que inicia o Claude Code, pois o Claude Code ignora uma cópia entregue por meio de um bloco `env` de configurações. Requer o Claude Code v2.1.281 ou posterior |

288| `CLAUDE_CODE_DISABLE_TERMINAL_TITLE` | Defina como `1` para desativar as atualizações automáticas do título do terminal com base no contexto da conversa. Isso também ignora a requisição em segundo plano ao modelo pequeno/rápido que [gera um título para a sessão](/docs/pt/sessions#name-your-sessions) |288| `CLAUDE_CODE_DISABLE_TERMINAL_TITLE` | Defina como `1` para desativar as atualizações automáticas do título do terminal com base no contexto da conversa. Isso também pula a requisição em segundo plano ao modelo pequeno/rápido que [gera um título de sessão](/docs/pt/sessions#name-your-sessions) e desativa os [relatórios de status para o seu terminal](/docs/pt/terminal-config#see-session-status-in-your-terminal) |

289| `CLAUDE_CODE_DISABLE_THINKING` | Defina como `1` para omitir completamente o parâmetro `thinking` das requisições de API. Esta é uma opção de compatibilidade para proxies e gateways que rejeitam o parâmetro. Em modelos que pensam por padrão, omitir o parâmetro significa que o modelo ainda pode pensar. Para desativar explicitamente o [pensamento estendido](https://platform.claude.com/docs/en/build-with-claude/extended-thinking) na API da Anthropic, use `MAX_THINKING_TOKENS=0`. Nenhuma das duas variáveis desativa o pensamento no Opus 5.5, no Sonnet 5.5, no Haiku 5.5 ou nos modelos Fable, nos quais o pensamento não pode ser desativado. Em [provedores de terceiros](/docs/pt/third-party-integrations), `MAX_THINKING_TOKENS=0` também omite o parâmetro, então as duas variáveis se comportam da mesma forma nesses casos |289| `CLAUDE_CODE_DISABLE_THINKING` | Defina como `1` para omitir completamente o parâmetro `thinking` das requisições de API. Esta é uma opção de compatibilidade para proxies e gateways que rejeitam o parâmetro. Em modelos que pensam por padrão, omitir o parâmetro significa que o modelo ainda pode pensar. Para desativar explicitamente o [pensamento estendido](https://platform.claude.com/docs/en/build-with-claude/extended-thinking) na API da Anthropic, use `MAX_THINKING_TOKENS=0`. Nenhuma das duas variáveis desativa o pensamento no Opus 5.5, no Sonnet 5.5, no Haiku 5.5 ou nos modelos Fable, nos quais o pensamento não pode ser desativado. Em [provedores de terceiros](/docs/pt/third-party-integrations), `MAX_THINKING_TOKENS=0` também omite o parâmetro, então as duas variáveis se comportam da mesma forma nesses casos |

290| `CLAUDE_CODE_DISABLE_UNKNOWN_MODEL_WINDOW_ENFORCEMENT` | Defina como `1` para ignorar a [compactação automática](/docs/pt/costs#reduce-token-usage) proativa quando o Claude Code não reconhece o ID do modelo, como um alias de [gateway de LLM](/docs/pt/llm-gateway). Sem esta variável, o Claude Code compacta na janela de contexto que presume para o ID. `CLAUDE_CODE_MAX_CONTEXT_TOKENS` pode corrigir a janela presumida; consulte [Corrigir a janela para um gateway ou ID de modelo personalizado](/docs/pt/model-config#correct-the-window-for-a-gateway-or-custom-model-id) para saber quando cada variável se aplica. Requer o Claude Code v2.1.223 ou posterior |290| `CLAUDE_CODE_DISABLE_UNKNOWN_MODEL_WINDOW_ENFORCEMENT` | Defina como `1` para ignorar a [compactação automática](/docs/pt/costs#reduce-token-usage) proativa quando o Claude Code não reconhece o ID do modelo, como um alias de [gateway de LLM](/docs/pt/llm-gateway). Sem esta variável, o Claude Code compacta na janela de contexto que presume para o ID. `CLAUDE_CODE_MAX_CONTEXT_TOKENS` pode corrigir a janela presumida; consulte [Corrigir a janela para um gateway ou ID de modelo personalizado](/docs/pt/model-config#correct-the-window-for-a-gateway-or-custom-model-id) para saber quando cada variável se aplica. Requer o Claude Code v2.1.223 ou posterior |

291| `CLAUDE_CODE_DISABLE_VIRTUAL_SCROLL` | Defina como `1` para desativar a rolagem virtual na [renderização em tela cheia](/docs/pt/fullscreen) e renderizar todas as mensagens da transcrição. Use se a rolagem no modo de tela cheia mostrar regiões em branco onde as mensagens deveriam aparecer |291| `CLAUDE_CODE_DISABLE_VIRTUAL_SCROLL` | Defina como `1` para desativar a rolagem virtual na [renderização em tela cheia](/docs/pt/fullscreen) e renderizar todas as mensagens da transcrição. Use se a rolagem no modo de tela cheia mostrar regiões em branco onde as mensagens deveriam aparecer |


309| `CLAUDE_CODE_EXIT_AFTER_STOP_DELAY` | Tempo em milissegundos a aguardar depois que o loop de consulta fica ocioso antes de sair automaticamente. Útil para fluxos de trabalho automatizados e scripts que usam o modo SDK |309| `CLAUDE_CODE_EXIT_AFTER_STOP_DELAY` | Tempo em milissegundos a aguardar depois que o loop de consulta fica ocioso antes de sair automaticamente. Útil para fluxos de trabalho automatizados e scripts que usam o modo SDK |

310| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | Defina como `1` para ativar as [equipes de agentes](/docs/pt/agent-teams). As equipes de agentes são experimentais e ficam desativadas por padrão |310| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | Defina como `1` para ativar as [equipes de agentes](/docs/pt/agent-teams). As equipes de agentes são experimentais e ficam desativadas por padrão |

311| `CLAUDE_CODE_EXTRA_BODY` | Objeto JSON a ser mesclado no nível superior do corpo de cada requisição à API. Útil para passar parâmetros específicos do provedor que o Claude Code não expõe diretamente. Um valor exportado no seu shell também se aplica às [sessões em segundo plano](/docs/pt/agent-view) que você despacha com `claude agents` ou `--bg`. Antes da v2.1.206, as sessões em segundo plano ignoravam um valor exportado no shell e usavam a cópia que o processo supervisor em segundo plano tivesse herdado |311| `CLAUDE_CODE_EXTRA_BODY` | Objeto JSON a ser mesclado no nível superior do corpo de cada requisição à API. Útil para passar parâmetros específicos do provedor que o Claude Code não expõe diretamente. Um valor exportado no seu shell também se aplica às [sessões em segundo plano](/docs/pt/agent-view) que você despacha com `claude agents` ou `--bg`. Antes da v2.1.206, as sessões em segundo plano ignoravam um valor exportado no shell e usavam a cópia que o processo supervisor em segundo plano tivesse herdado |

312| `CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS` | Sobrescreve o limite padrão de tokens para leituras de arquivos. Útil quando você precisa ler arquivos maiores por completo |312| `CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS` | Sobrescreve o limite padrão de tokens para [leituras de arquivos](/docs/pt/tools-reference#large-files), que é de 25.000 tokens. Útil quando você precisa ler arquivos maiores por inteiro. Uma leitura que o Claude faz com o parâmetro `allow_large` pode ultrapassar esse limite quando a janela de contexto tem espaço |

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

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

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


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 +67 −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) |


308| `Your disk quota is full on the filesystem with Claude Code's temp directory <dir> (EDQUOT)` | [Tool errors](#disk-quota-or-temp-filesystem-is-full) |309| `Your disk quota is full on the filesystem with Claude Code's temp directory <dir> (EDQUOT)` | [Tool errors](#disk-quota-or-temp-filesystem-is-full) |

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

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

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

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

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

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


334| `Session isn't responding` / `Press enter again to restart this session — it isn't responding` | [Background session errors](#session-isnt-responding) |336| `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) |337| `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) |338| `This session was running agent '<name>', which is no longer available` | [Background session errors](#session-agent-no-longer-available) |

339| `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) |340| `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) |341| `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) |342| `EACCES: permission denied, posix_spawn` | [Background session errors](#eacces-when-starting-a-background-session) |


439| :- | :- | :- |442| :- | :- | :- |

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. |443| [`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. |444| [`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. |

445| [`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. |446| [`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). |447| [`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. |448| [`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. |


1900 1904 

1901Claude Code pula essa verificação quando um [arquivo de configurações gerenciadas, política MDM ou policy helper](/docs/pt/managed-settings) define [`forceLoginMethod`](/docs/pt/settings-reference#forceloginmethod) como `"gateway"`, ou define [`forceLoginGatewayUrl`](/docs/pt/settings-reference#forcelogingatewayurl) sem `forceLoginMethod`. Com qualquer uma das configurações, Claude Code abre a etapa de login na tela **Cloud gateway** em vez de um método de login Anthropic. Claude Code também pula a verificação quando uma fonte de configurações gerenciadas na máquina existe mas não pode ser lida, já que essa fonte pode conter a configuração do gateway. Antes da v2.1.247, Claude Code executava a verificação sob essa configuração também, e saía com esse erro quando os endpoints da Anthropic eram inacessíveis.1905Claude Code pula essa verificação quando um [arquivo de configurações gerenciadas, política MDM ou policy helper](/docs/pt/managed-settings) define [`forceLoginMethod`](/docs/pt/settings-reference#forceloginmethod) como `"gateway"`, ou define [`forceLoginGatewayUrl`](/docs/pt/settings-reference#forcelogingatewayurl) sem `forceLoginMethod`. Com qualquer uma das configurações, Claude Code abre a etapa de login na tela **Cloud gateway** em vez de um método de login Anthropic. Claude Code também pula a verificação quando uma fonte de configurações gerenciadas na máquina existe mas não pode ser lida, já que essa fonte pode conter a configuração do gateway. Antes da v2.1.247, Claude Code executava a verificação sob essa configuração também, e saía com esse erro quando os endpoints da Anthropic eram inacessíveis.

1902 1906 

1907Claude Code também pula a verificação em uma máquina sem configurações gerenciadas quando seu próprio `~/.claude/settings.json` [nomeia um gateway](/docs/pt/claude-apps-gateway#set-the-gateway-url-in-user-settings) com `forceLoginMethod` e `forceLoginGatewayUrl`. Antes da v2.1.295, Claude Code executava a verificação nesse caso.

1908 

1903**O que fazer:**1909**O que fazer:**

1904 1910 

1905* Se a mensagem nomear uma variável de proxy, verifique se seu valor aponta para o proxy correto e peça ao seu time de rede para permitir conexões HTTPS através dele para o host na mensagem. Veja [Network configuration](/docs/pt/network-config).1911* Se a mensagem nomear uma variável de proxy, verifique se seu valor aponta para o proxy correto e peça ao seu time de rede para permitir conexões HTTPS através dele para o host na mensagem. Veja [Network configuration](/docs/pt/network-config).


3412 3418 

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:3419O 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 3420 

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`3421* `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)3422* ``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 3423 

3418**O que fazer:**3424**O que fazer:**


3562 3568 

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 acima3569* **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>`)``3570* **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`.3571* **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 3572 

3567**O que fazer:**3573**O que fazer:**

3568 3574 


3816 3822 

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) ali3823* 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 3824 

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

3826 Claude Code couldn't restart

3827</h3>

3828 

3829O 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:

3830 

3831```text theme={null}

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

3833```

3834 

3835Quando 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.`

3836 

3837**O que fazer:**

3838 

3839* 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

3840* 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)

3841 

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

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

3821</h3>3844</h3>


4593* Ou reinicie Claude Code com [`CLAUDE_CODE_TMPDIR`](/docs/pt/env-vars) definido para um diretório em um sistema de arquivos com espaço4616* Ou reinicie Claude Code com [`CLAUDE_CODE_TMPDIR`](/docs/pt/env-vars) definido para um diretório em um sistema de arquivos com espaço

4594* Então peça ao Claude para executar o comando novamente. A saída que ele imprimiu foi perdida, não truncada4617* Então peça ao Claude para executar o comando novamente. A saída que ele imprimiu foi perdida, não truncada

4595 4618 

4619<h3 id="file-is-not-valid-utf-8">

4620 File is not valid UTF-8

4621</h3>

4622 

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

4624 

4625```text wrap theme={null}

4626File is not valid UTF-8. It may use a legacy encoding such as Windows-1252, Shift-JIS or GBK, or be binary. This tool saves the whole file as UTF-8, which would replace every byte it cannot decode with U+FFFD. Nothing was written. Make the change with a shell command that reads and writes the file in its own encoding, or ask the user whether to convert the file to UTF-8 first.

4627```

4628 

4629Um arquivo que deveria ser UTF-8 também recebe essa mensagem quando contém até mesmo uma única sequência de bytes inválida, porque a verificação cobre os bytes do arquivo como um todo.

4630 

4631**O que fazer:**

4632 

4633* Para manter o arquivo em sua codificação atual, deixe Claude fazer a alteração com um comando de shell que lê e escreve o arquivo nessa codificação, como a mensagem diz a ele para fazer

4634* Para continuar editando o arquivo com a ferramenta Edit, converta-o para UTF-8, ou corrija os bytes inválidos em um arquivo que deveria ser UTF-8, e então peça ao Claude para fazer a edição novamente

4635 

4636Antes da v2.1.296, Edit e NotebookEdit aplicavam tal edição e salvavam cada byte que não conseguiam decodificar como `U+FFFD`. Nessas versões, atualize Claude Code.

4637 

4596<h3 id="the-source-file-is-not-valid-utf-8-text">4638<h3 id="the-source-file-is-not-valid-utf-8-text">

4597 O arquivo de origem não é texto UTF-8 válido4639 O arquivo de origem não é texto UTF-8 válido

4598</h3>4640</h3>


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

4753</h3>4795</h3>

4754 4796 

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:4797Claude 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 4798 

4757* O comando aponta git para o checkout principal.4799* 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.4800* Um comando Bash ou Monitor aponta git para o checkout principal.

4801* 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 4802 

4760O meio da mensagem nomeia o que não pôde ser verificado:4803A 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 4804 

4762```text wrap theme={null}4805```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.4806This 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 4808 

4766**O que fazer:**4809**O que fazer:**

4767 4810 

4768* Geralmente nada: Claude lê a mensagem e reescreve o comando da forma que sua sentença final pede4811* **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ão4812* Para agir no checkout principal propositalmente, execute o comando você mesmo em um terminal fora da sessão

4771 4813 

4772<h3 id="this-session-has-no-saved-transcript">4814<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 disso4988* 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 novamente4989* 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 4990 

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

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

4993</h3>

4994 

4995Um [`/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:

4996 

4997```text theme={null}

4998This 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.

4999```

5000 

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

5002 

5003**O que fazer:**

5004 

5005* 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

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

5007 

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

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

4951</h3>5010</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

22 22 

23| Atalho | Descrição | Contexto |23| Atalho | Descrição | Contexto |

24| :- | :- | :- |24| :- | :- | :- |

25| `Ctrl+C` | Interromper ou limpar entrada | Interrompe uma operação em execução. Se nada estiver em execução, o primeiro pressionamento limpa a entrada do prompt e um segundo pressionamento sai do Claude Code |25| `Ctrl+C` | Interromper ou limpar entrada | Interrompe uma operação em execução. Se nada estiver em execução, o primeiro pressionamento limpa a entrada do prompt e um segundo pressionamento sai do Claude Code. Pressione `Up` enquanto o prompt ainda estiver vazio para trazer de volta o rascunho limpo, o que requer Claude Code v2.1.288 ou posterior |

26| `Ctrl+X Ctrl+K` | Parar todos os [subagentes em segundo plano](/docs/pt/sub-agents#run-subagents-in-foreground-or-background) nesta sessão e desativar [respostas automáticas de artefatos](/docs/pt/artifacts#let-claude-reply-to-comments-on-its-own) para o resto dela. Pressione duas vezes em 3 segundos para confirmar. Você pode pressioná-lo enquanto o prompt de permissão de um subagente em segundo plano estiver aberto | Controle de subagente |26| `Ctrl+X Ctrl+K` | Parar todos os [subagentes em segundo plano](/docs/pt/sub-agents#run-subagents-in-foreground-or-background) nesta sessão e desativar [respostas automáticas de artefatos](/docs/pt/artifacts#let-claude-reply-to-comments-on-its-own) para o resto dela. Pressione duas vezes em 3 segundos para confirmar. Você pode pressioná-lo enquanto o prompt de permissão de um subagente em segundo plano estiver aberto | Controle de subagente |

27| `Ctrl+D` | Sair da sessão do Claude Code | O primeiro pressionamento mostra uma dica de confirmação e um segundo pressionamento em 800ms sai. Quando o prompt tem texto, `Ctrl+D` deleta o caractere após o cursor |27| `Ctrl+D` | Sair da sessão do Claude Code | O primeiro pressionamento mostra uma dica de confirmação e um segundo pressionamento em 800ms sai. Quando o prompt tem texto, `Ctrl+D` deleta o caractere após o cursor |

28| `Ctrl+G` ou `Ctrl+X Ctrl+E` | Abrir no editor de texto padrão | Edite seu prompt ou resposta personalizada no seu editor de texto padrão. `Ctrl+X Ctrl+E` é a vinculação nativa do readline. Ative **Mostrar última resposta no editor externo** em `/config` para adicionar a resposta anterior do Claude como contexto comentado com `#` acima do seu prompt; Claude Code remove o bloco de comentário quando você salva |28| `Ctrl+G` ou `Ctrl+X Ctrl+E` | Abrir no editor de texto padrão | Edite seu prompt ou resposta personalizada no seu editor de texto padrão. `Ctrl+X Ctrl+E` é a vinculação nativa do readline. Ative **Mostrar última resposta no editor externo** em `/config` para adicionar a resposta anterior do Claude como contexto comentado com `#` acima do seu prompt; Claude Code remove o bloco de comentário quando você salva |

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

175# privileges. -c commit.gpgsign=false also leaves these rescue commits211# privileges. -c commit.gpgsign=false also leaves these rescue commits

176# unsigned under --configure-git.212# unsigned under --configure-git.

177# Repo-local credential.helper and pushurl still apply, and on a runner213# Repo-local credential.helper and pushurl still apply, and on a runner

178# before v2.1.280 so does core.sshCommand; if the hook holds credentials214# before v2.1.280 so does core.sshCommand; see the note below the script

179# the session didn't, see the note below the script.215# before you give this push a credential.

180g() { git -c core.fsmonitor=false -c core.hooksPath=/dev/null \216g() { git -c core.fsmonitor=false -c core.hooksPath=/dev/null \

181 -c commit.gpgsign=false "$@"; }217 -c commit.gpgsign=false "$@"; }

182for ws in $CLAUDE_RUNNER_WORKSPACE_PATHS; do218for ws in $CLAUDE_RUNNER_WORKSPACE_PATHS; do


188done224done

189```225```

190 226 

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

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.

230 

231Trate qualquer credencial que seu hook fornece ao git como uma que uma sessão pode obter, e emita-a de modo que ela não possa fazer mais do que este push. O git em seu hook lê arquivos de configuração que uma sessão pode escrever, e um credential helper ou filter driver nomeado em um deles é executado com os privilégios do seu hook. Opções de configuração nesses arquivos também podem alterar para onde vai um push, qualquer que seja o remoto que você nomeie. Para as configurações git que o runner fixa em seu hook e as que ele deixa para esses arquivos, consulte [Configuração do Git dentro de lifecycle hooks](#git-configuration-inside-lifecycle-hooks).

192 232 

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

194 Hook timing when the runner releases a session234 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. |304| `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. |305| `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. |306| `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. |307| `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. |308| `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_...` |309| `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. |310| `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. |311| `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. |312| `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. |313| `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. |314| `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. |315| `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`. |316| `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.322* **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.323* **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 324 

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

286 326 

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.3271. **Seja idempotente em `CLAUDE_RUNNER_ORDER_ID`.** Reentrega da mesma solicitação deve gerar no máximo um runner. Derive um nome de recurso determinístico do ID de ordem e deixe sua plataforma rejeitar a duplicata. Não use `CLAUDE_RUNNER_SESSION_ID` como chave. Cada re-solicitação para uma sessão carrega o mesmo ID de sessão com um novo ID de ordem, 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`.3282. **Não tente novamente a carga de trabalho.** Um ID de ordem significa no máximo uma carga de trabalho criada. Se o runner nunca se registra, Anthropic re-solicita com um ID de ordem fresco após `--expected-spawn-seconds`.

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.3293. **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.330 

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

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

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

334 

335 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).

336 

337 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.

3384. **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 339 

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

293 341 

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.342Uma 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 343 

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

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

346</h4>

347 

348Em 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.

349 

350Uma 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.

351 

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

353 

354```bash theme={null}

355set -e

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

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

358```

359 

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

361 

362* **`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.

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

364* **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:

365 

366 ```bash theme={null}

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

368 ```

369* **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`.

370 

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

372 

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

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

298</h2>375</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:458Uma 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 459 

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.460* **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.

461* **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.462* **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.463* **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:

464 * **`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`.

465 * **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.466* **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).467* **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 468 


411 491 

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.492As 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 493 

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

495 

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

497 Aguardar os servidores MCP antes do primeiro turno

498</h3>

499 

500Uma 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:

501 

502* **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.

503* **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.

504 

505O `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:

506 

507```dockerfile theme={null}

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

509```

510 

511Se 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).

512 

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

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

416</h3>515</h3>


571 670 

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.671Defina `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 672 

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).673As sessões também leem estes arquivos de configurações:

674 

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

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

677 

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

575 679 

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.680Quando 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 681 


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.683* **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.684* **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 685 

686Quando 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.

687 

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.688Fora 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 689 

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.690O 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* **Credenciais somente para os repositórios da sessão**: a Anthropic fornece credenciais git para os repositórios que fazem parte da sessão, não para outros repositórios no mesmo host git. Um submódulo privado, uma dependência que seu gerenciador de pacotes busca com git ou um marketplace de plugins em outro repositório não recebe nenhuma credencial da Anthropic. Peça às pessoas que criam sessões que [adicionem todos os repositórios](/docs/pt/web-quickstart#start-a-task) de que uma sessão precisa ao criá-la.

214* **Somente pushes de branch**: um push que exclui um branch falha, assim como um push para qualquer outro tipo de ref, como uma tag. Para saber quais branches um push pode atualizar, consulte [Proxy do GitHub](/docs/pt/cloud-environments#github-proxy).

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

216* **`--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.

217* **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.

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

219* **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.

220 

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

222 

223<Warning>

224 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.

225</Warning>

226 

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

228 

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

230 Ative o proxy git da Anthropic

231</h4>

232 

233Antes 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 234 

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.235* **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.

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

237* **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 238 

193<Warning>239<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.240 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>241</Warning>

196 242 

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.243Para 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:

244 

245```bash theme={null}

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

247```

248 

249Na 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).

250 

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

252 Como a Anthropic serve git para uma sessão

253</h4>

254 

255Para 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:

256 

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

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

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

260 

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

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

263</h4>

264 

265Em 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/`.

266 

267Para 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:

268 

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

270* **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.

271 * **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.

272 * **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.

273* **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.

274* <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.

275 

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

277 

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

279 Desative o proxy git da Anthropic

280</h4>

281 

282Se 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.

283 

284<Steps>

285 <Step title="Remova a flag">

286 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:

287 

288 ```bash theme={null}

289 unset CLAUDE_RUNNER_USE_GIT_PROXY

290 ```

291 </Step>

292 

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

294 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).

295 </Step>

296 

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

298 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).

299 </Step>

300 

301 <Step title="Reinicie os runners">

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

303 </Step>

304</Steps>

198 305 

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

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


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

267FROM debian:bookworm-slim374FROM debian:bookworm-slim

268ARG CLAUDE_CODE_VERSION375ARG CLAUDE_CODE_VERSION

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

270 && rm -rf /var/lib/apt/lists/*377 && 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" \378RUN 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/claude379 -o /usr/local/bin/claude && chmod +x /usr/local/bin/claude


382kubectl create namespace claude-runners489kubectl create namespace claude-runners

383```490```

384 491 

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:492Crie 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 493 

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

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


500 Reuse a pre-warmed checkout607 Reuse a pre-warmed checkout

501</h2>608</h2>

502 609 

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:610Para 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:

611 

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

613* **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.

614 

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

504 616 

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.617* **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.618* **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:620O que o caminho de reutilização faz e não garante:

509 621 

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.622* **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.623* **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.624* **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 625 

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).626 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 634 

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.635Cada 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 636 

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.637Escolha qual versão suas sessões executam e quando ela muda:

526 638 

639* **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)640* **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 runners641* **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

642* **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 fixado643* **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 644 

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


580</h3>694</h3>

581 695 

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

698 * **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.699 * **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.700* **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.701* **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.721* **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.722* **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).723* **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.724* **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.

725* **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.726* **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.727* **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.728* **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 732 

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.733 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.734* **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.735* **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 736 

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.737 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 738 


637 753 

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.754* **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.755* **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.

756* **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 757 

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.758Configure 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 759 

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 

Details

638| [`claudeMdExcludes`](#claudemdexcludes) | Pule arquivos [CLAUDE.md](/docs/pt/memory#exclude-specific-claude-md-files) específicos quando a memória carrega | Memória e contexto | Any file |638| [`claudeMdExcludes`](#claudemdexcludes) | Pule arquivos [CLAUDE.md](/docs/pt/memory#exclude-specific-claude-md-files) específicos quando a memória carrega | Memória e contexto | Any file |

639| [`cleanupPeriodDays`](#cleanupperioddays) | Escolha quantos dias Claude Code mantém [transcrições](/docs/pt/data-usage#data-retention) antes de deletá-las | Privacidade e telemetria | Any file |639| [`cleanupPeriodDays`](#cleanupperioddays) | Escolha quantos dias Claude Code mantém [transcrições](/docs/pt/data-usage#data-retention) antes de deletá-las | Privacidade e telemetria | Any file |

640| [`companyAnnouncements`](#companyannouncements) | Mostre os anúncios de sua organização na inicialização | Interface e terminal | Any file |640| [`companyAnnouncements`](#companyannouncements) | Mostre os anúncios de sua organização na inicialização | Interface e terminal | Any file |

641| [`copyFullResponse`](#copyfullresponse) | Faça [`/copy`](/docs/pt/commands) copiar a resposta completa sem mostrar o seletor de bloco de código | Configurações de config global | Global config |641| [`copyFullResponse`](#copyfullresponse) | Faça [`/copy`](/docs/pt/commands) copiar a resposta completa sem mostrar o seletor | Configurações de config global | Global config |

642| [`copyOnSelect`](#copyonselect) | Desative a cópia automática de texto que você seleciona com o mouse na [renderização em tela cheia](/docs/pt/fullscreen#use-the-mouse) e visualização de agente | Configurações de config global | Global config |642| [`copyOnSelect`](#copyonselect) | Desative a cópia automática de texto que você seleciona com o mouse na [renderização em tela cheia](/docs/pt/fullscreen#use-the-mouse) e visualização de agente | Configurações de config global | Global config |

643| [`crossSessionInbound`](#crosssessioninbound) | Escolha se Claude Code entrega [mensagens de suas outras sessões](/docs/pt/cross-session-messaging#control-inbound-messages), mostra um aviso sem entregá-las, ou as recusa | Agentes, sessões e worktrees | Any file |643| [`crossSessionInbound`](#crosssessioninbound) | Escolha se Claude Code entrega [mensagens de suas outras sessões](/docs/pt/cross-session-messaging#control-inbound-messages), mostra um aviso sem entregá-las, ou as recusa | Agentes, sessões e worktrees | Any file |

644| [`defaultShell`](#defaultshell) | Escolha se Bash ou PowerShell executa os comandos shell que você digita com o prefixo [`!`](/docs/pt/interactive-mode#shell-mode-with-prefix) | Interface e terminal | Any file |644| [`defaultShell`](#defaultshell) | Escolha se Bash ou PowerShell executa os comandos shell que você digita com o prefixo [`!`](/docs/pt/interactive-mode#shell-mode-with-prefix) | Interface e terminal | Any file |


684| [`fileCheckpointingEnabled`](#filecheckpointingenabled) | Desative ou ative os snapshots de arquivo que [`/rewind`](/docs/pt/checkpointing) restaura | Memória e contexto | Any file |684| [`fileCheckpointingEnabled`](#filecheckpointingenabled) | Desative ou ative os snapshots de arquivo que [`/rewind`](/docs/pt/checkpointing) restaura | Memória e contexto | Any file |

685| [`fileSuggestion`](#filesuggestion) | Forneça o [preenchimento automático de arquivo `@`](/docs/pt/interactive-mode#quick-commands) a partir de seu próprio comando | Interface e terminal | Any file |685| [`fileSuggestion`](#filesuggestion) | Forneça o [preenchimento automático de arquivo `@`](/docs/pt/interactive-mode#quick-commands) a partir de seu próprio comando | Interface e terminal | Any file |

686| [`footerLinksRegexes`](#footerlinksregexes) | Transforme IDs de issue ou review na saída em [links clicáveis](/docs/pt/statusline#clickable-links) abaixo da caixa de entrada | Interface e terminal | User or managed |686| [`footerLinksRegexes`](#footerlinksregexes) | Transforme IDs de issue ou review na saída em [links clicáveis](/docs/pt/statusline#clickable-links) abaixo da caixa de entrada | Interface e terminal | User or managed |

687| [`forceLoginGatewayUrl`](#forcelogingatewayurl) | Defina a [URL do gateway](/docs/pt/claude-apps-gateway#set-the-gateway-url) à qual a tela de login se conecta | Autenticação e provedores | Managed |687| [`forceLoginGatewayUrl`](#forcelogingatewayurl) | Defina a [URL do gateway](/docs/pt/claude-apps-gateway#set-the-gateway-url) à qual a tela de login se conecta | Autenticação e provedores | User or managed |

688| [`forceLoginMethod`](#forceloginmethod) | [Restrinja o login](/docs/pt/authentication#restrict-login-to-your-organization) a claude.ai, Claude Console, ou um [gateway de nuvem](/docs/pt/claude-apps-gateway) | Autenticação e provedores | Any file |688| [`forceLoginMethod`](#forceloginmethod) | [Restrinja o login](/docs/pt/authentication#restrict-login-to-your-organization) a claude.ai, Claude Console, ou um [gateway de nuvem](/docs/pt/claude-apps-gateway) | Autenticação e provedores | Any file |

689| [`forceLoginOrgUUID`](#forceloginorguuid) | [Fixe os logins claude.ai à sua organização](/docs/pt/authentication#restrict-login-to-your-organization); apenas uma fonte gerenciada a impõe | Autenticação e provedores | Any file |689| [`forceLoginOrgUUID`](#forceloginorguuid) | [Fixe os logins claude.ai à sua organização](/docs/pt/authentication#restrict-login-to-your-organization); apenas uma fonte gerenciada a impõe | Autenticação e provedores | Any file |

690| [`forceRemoteSettingsRefresh`](#forceremotesettingsrefresh) | Bloqueie a inicialização até que as [configurações gerenciadas por servidor](/docs/pt/server-managed-settings) sejam buscadas recentemente | Configurações empresariais e gerenciadas | Managed |690| [`forceRemoteSettingsRefresh`](#forceremotesettingsrefresh) | Bloqueie a inicialização até que as [configurações gerenciadas por servidor](/docs/pt/server-managed-settings) sejam buscadas recentemente | Configurações empresariais e gerenciadas | Managed |


6085 6085 

6086Restrinja qual tipo de conta as pessoas podem usar para fazer login. Defina `"claudeai"` para permitir apenas contas claude.ai, `"console"` para permitir apenas contas Claude Console, ou `"gateway"` para enviar as pessoas para um [gateway na nuvem](/docs/pt/claude-apps-gateway) em vez de um login de primeira parte. Os administradores o definem em configurações gerenciadas e o emparelham com [`forceLoginOrgUUID`](#forceloginorguuid) para manter os logins claude.ai dos desenvolvedores dentro de uma organização. Se você o definir como `"claudeai"` ou `"console"` em qualquer arquivo de configurações, Claude Code também para de oferecer o [login Console sem chave](/docs/pt/authentication#sign-in-without-an-api-key) nas sessões às quais esse arquivo se aplica.6086Restrinja qual tipo de conta as pessoas podem usar para fazer login. Defina `"claudeai"` para permitir apenas contas claude.ai, `"console"` para permitir apenas contas Claude Console, ou `"gateway"` para enviar as pessoas para um [gateway na nuvem](/docs/pt/claude-apps-gateway) em vez de um login de primeira parte. Os administradores o definem em configurações gerenciadas e o emparelham com [`forceLoginOrgUUID`](#forceloginorguuid) para manter os logins claude.ai dos desenvolvedores dentro de uma organização. Se você o definir como `"claudeai"` ou `"console"` em qualquer arquivo de configurações, Claude Code também para de oferecer o [login Console sem chave](/docs/pt/authentication#sign-in-without-an-api-key) nas sessões às quais esse arquivo se aplica.

6087 6087 

6088* **Escopo**: [`Qualquer arquivo`](#scopes). Claude Code honra `"gateway"` apenas de uma fonte gerenciada na máquina: `managed-settings.json`, a plist do macOS ou registro HKLM do Windows, ou um auxiliar de política. Ele trata `"gateway"` como não definido em configurações de usuário, projeto, local, HKCU e gerenciadas por servidor, a mesma regra que [`forceLoginGatewayUrl`](#forcelogingatewayurl).6088* **Escopo**: [`Qualquer arquivo`](#scopes). Claude Code honra `"gateway"` das mesmas fontes que [`forceLoginGatewayUrl`](#forcelogingatewayurl) e o trata como não definido em todos os outros lugares.

6089* **Tipo**: string, um de:6089* **Tipo**: string, um de:

6090 * `"claudeai"`: apenas contas claude.ai podem fazer login6090 * `"claudeai"`: apenas contas claude.ai podem fazer login

6091 * `"console"`: apenas contas Claude Console podem fazer login6091 * `"console"`: apenas contas Claude Console podem fazer login


6108 6108 

6109Defina a URL do gateway à qual a tela `/login` Cloud gateway se conecta, para que as pessoas alcancem seu [gateway na nuvem](/docs/pt/claude-apps-gateway) sem digitar seu endereço. A tela não tem campo de URL: com esta chave definida, ela mostra a URL do seu gateway e se conecta quando a pessoa pressiona Enter; sem ela, diz a elas para entrar em contato com seu administrador de TI.6109Defina a URL do gateway à qual a tela `/login` Cloud gateway se conecta, para que as pessoas alcancem seu [gateway na nuvem](/docs/pt/claude-apps-gateway) sem digitar seu endereço. A tela não tem campo de URL: com esta chave definida, ela mostra a URL do seu gateway e se conecta quando a pessoa pressiona Enter; sem ela, diz a elas para entrar em contato com seu administrador de TI.

6110 6110 

6111Ou esta chave ou `forceLoginMethod: "gateway"` torna a máquina apenas gateway, exceto para sessões que selecionam um provedor de nuvem com `CLAUDE_CODE_USE_*`. `/login` então abre na tela Cloud gateway sem seletor de método de login. Veja [A política do administrador requer um login de gateway na nuvem](/docs/pt/errors#administrator-policy-requires-a-cloud-gateway-sign-in) para o que acontece com um login de primeira parte restante ou chave de API. Defina ambas as chaves para que a tela se conecte em vez de mostrar um erro.6111Em configurações gerenciadas, ou esta chave ou `forceLoginMethod: "gateway"` torna a máquina apenas gateway, exceto para sessões que selecionam um provedor de nuvem com `CLAUDE_CODE_USE_*`. `/login` então abre na tela Cloud gateway sem seletor de método de login. Veja [A política do administrador requer um login de gateway na nuvem](/docs/pt/errors#administrator-policy-requires-a-cloud-gateway-sign-in) para o que acontece com um login de primeira parte restante ou chave de API. Defina ambas as chaves para que a tela se conecte em vez de mostrar um erro.

6112 6112 

6113* **Escopo**: [`Gerenciado`](#scopes). Leia apenas de uma fonte na máquina: `managed-settings.json`, a plist do macOS ou registro HKLM do Windows, ou um auxiliar de política. Claude Code a ignora em configurações HKCU e gerenciadas por servidor.6113* **Escopo**: [`Usuário ou gerenciado`](#scopes). Lida de uma fonte gerenciada na máquina: `managed-settings.json`, a plist do macOS ou registro HKLM do Windows, ou um auxiliar de política. Em uma máquina sem nenhuma dessas, Claude Code v2.1.295 ou posterior também a lê das [configurações de usuário](/docs/pt/claude-apps-gateway#set-the-gateway-url-in-user-settings). Claude Code a ignora em configurações HKCU e gerenciadas por servidor.

6114* **Tipo**: string, uma URL completa incluindo o esquema6114* **Tipo**: string, uma URL completa incluindo o esquema

6115* **Padrão**: não definido, portanto a tela Cloud gateway mostra um erro dizendo às pessoas para entrar em contato com seu administrador de TI6115* **Padrão**: não definido, portanto a tela Cloud gateway mostra um erro dizendo às pessoas para entrar em contato com seu administrador de TI

6116 6116 


6806 `copyFullResponse`6806 `copyFullResponse`

6807</h3>6807</h3>

6808 6808 

6809Faça [`/copy`](/docs/pt/commands) copiar a resposta completa toda vez, sem o seletor que ele mostra quando a resposta contém blocos de código. Selecionar **Sempre copiar resposta completa** nesse seletor define essa chave como `true`. Aparece em `/config` como **Pular o seletor /copy**.6809Faça [`/copy`](/docs/pt/commands) copiar a resposta completa toda vez, sem mostrar o seletor. Selecionar **Sempre copiar resposta completa** nesse seletor define essa chave como `true`. Aparece em `/config` como **Pular o seletor /copy**.

6810 6810 

6811* **Escopo**: [`Global config`](#scopes)6811* **Escopo**: [`Global config`](#scopes)

6812* **Tipo**: Booleano6812* **Tipo**: Booleano

6813 * `true`: `/copy` copia a resposta completa sem mostrar o seletor6813 * `true`: `/copy` copia a resposta completa sem mostrar o seletor

6814 * `false`: quando a resposta contém blocos de código, `/copy` mostra um seletor onde você escolhe um bloco de código ou a resposta completa6814 * `false`: quando a resposta contém blocos de código ou citações em bloco, `/copy` mostra um seletor onde você escolhe um bloco ou a resposta completa

6815* **Padrão**: `false`6815* **Padrão**: `false`

6816 6816 

6817```json ~/.claude.json theme={null}6817```json ~/.claude.json theme={null}

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

Details

122}122}

123```123```

124 124 

125<h2 id="see-session-status-in-your-terminal">

126 Ver o status da sessão no seu terminal

127</h2>

128 

129Se o seu terminal implementa o OSC 7501 Program Status Protocol, ele pode mostrar se cada sessão interativa do Claude Code está trabalhando, aguardando você ou concluída, o que ajuda quando você executa tarefas longas ou várias sessões ao mesmo tempo. Não há nada para ativar no Claude Code. Para descobrir se o seu terminal implementa o protocolo e onde ele mostra o status, consulte a documentação dele.

130 

131Se ele implementa e você não vê nenhum status para uma sessão, verifique cada uma destas causas:

132 

133* **Versão do Claude Code**: o relato de status requer o Claude Code v2.1.295 ou posterior. Execute `claude --version` no seu shell para verificar.

134* **tmux**: dentro do tmux, o Claude Code verifica o suporte no tmux em vez de no seu terminal, e [`allow-passthrough`](#configure-tmux) não tem efeito sobre isso. Inicie a sessão fora do tmux.

135* **Sessão em segundo plano**: uma [sessão em segundo plano](/docs/pt/agent-view) não relata seu status ao seu terminal, mesmo enquanto você está conectado a ela. A visualização de agentes mostra o status dela em vez disso.

136* **[`CLAUDE_CODE_DISABLE_TERMINAL_TITLE`](/docs/pt/env-vars#variables)**: se você definir essa variável como `1`, o Claude Code não verifica o suporte nem relata o status. Remova a definição dela.

137 

125<h2 id="configure-tmux">138<h2 id="configure-tmux">

126 Configurar tmux139 Configurar tmux

127</h2>140</h2>

tools-reference.md +27 −10

Details

279 279 

280A ferramenta Edit realiza substituição exata de strings. Ela recebe uma `old_string` e uma `new_string` e substitui a primeira pela segunda. Ela não usa regex ou correspondência aproximada.280A ferramenta Edit realiza substituição exata de strings. Ela recebe uma `old_string` e uma `new_string` e substitui a primeira pela segunda. Ela não usa regex ou correspondência aproximada.

281 281 

282Três verificações devem passar para que uma edição seja aplicada. Antes de qualquer uma delas, um caminho correspondido por uma [regra de negação `Read`](/docs/pt/permissions#tool-specific-permission-rules) é recusado, incluindo a criação de um novo arquivo lá. A recusa requer Claude Code v2.1.208 ou posterior.282Estas verificações devem passar para que uma edição seja aplicada. Antes de qualquer uma delas, um caminho correspondido por uma [regra de negação `Read`](/docs/pt/permissions#tool-specific-permission-rules) é recusado, incluindo a criação de um novo arquivo lá. A recusa requer Claude Code v2.1.208 ou posterior.

283 283 

284* **Read-before-edit**: Claude lê o arquivo na conversa atual antes de editá-lo, e uma leitura interrompida com um aviso [`PARTIAL view`](#read-tool-behavior) não conta. Claude Opus 4.6, Claude Haiku 4.5 e modelos mais antigos sempre exigem a leitura. Modelos mais novos podem editar um arquivo não lido quando a leitura não precisaria de um prompt de permissão e a ferramenta Read está disponível.284* **Read-before-edit**: Claude lê o arquivo na conversa atual antes de editá-lo, e uma leitura interrompida com um aviso [`PARTIAL view`](#large-files) não conta. Claude Opus 4.6, Claude Haiku 4.5 e modelos mais antigos sempre exigem a leitura. Modelos mais novos podem editar um arquivo não lido quando a leitura não precisaria de um prompt de permissão e a ferramenta Read está disponível.

285* **Match**: `old_string` deve aparecer no arquivo exatamente como escrito. Uma única diferença de caractere de espaço em branco ou indentação é suficiente para não corresponder.285* **Match**: `old_string` deve aparecer no arquivo exatamente como escrito. Uma única diferença de caractere de espaço em branco ou indentação é suficiente para não corresponder.

286* **Uniqueness**: `old_string` deve aparecer exatamente uma vez. Quando aparece mais de uma vez, Claude fornece uma string mais longa com contexto circundante suficiente para identificar uma ocorrência, ou define `replace_all: true` para substituir todas elas.286* **Uniqueness**: `old_string` deve aparecer exatamente uma vez. Quando aparece mais de uma vez, Claude fornece uma string mais longa com contexto circundante suficiente para identificar uma ocorrência, ou define `replace_all: true` para substituir todas elas.

287 287 

288Um arquivo que mudou no disco depois que Claude o leu pela última vez ainda pode ser editado quando `old_string` corresponde ao conteúdo atual exatamente e sem ambiguidade e Claude Code pode ler o arquivo sem solicitar. Corresponder contra o conteúdo atual do arquivo mantém isso seguro, e o resultado observa que o arquivo contém outras alterações para que Claude o releia antes de edições que dependem do conteúdo circundante. Em qualquer outro caso, como uma `old_string` desatualizada ou uma que corresponde mais de uma vez sem `replace_all`, Claude lê o arquivo novamente antes de editar. O tratamento relaxado de arquivos não lidos e alterados requer Claude Code v2.1.208 ou posterior; antes disso, Claude Code recusava qualquer edição em um arquivo que não havia lido na conversa ou que mudou no disco após a leitura.288Um arquivo que mudou no disco depois que Claude o leu pela última vez ainda pode ser editado quando `old_string` corresponde ao conteúdo atual exatamente e sem ambiguidade e Claude Code pode ler o arquivo sem solicitar. Corresponder contra o conteúdo atual do arquivo mantém isso seguro, e o resultado observa que o arquivo contém outras alterações para que Claude o releia antes de edições que dependem do conteúdo circundante. Em qualquer outro caso, como uma `old_string` desatualizada ou uma que corresponde mais de uma vez sem `replace_all`, Claude lê o arquivo novamente antes de editar. O tratamento relaxado de arquivos não lidos e alterados requer Claude Code v2.1.208 ou posterior; antes disso, Claude Code recusava qualquer edição em um arquivo que não havia lido na conversa ou que mudou no disco após a leitura.

289 289 

290Visualizar um arquivo com Bash também satisfaz o requisito read-before-edit quando o comando é `cat`, `nl`, `bat`, `batcat`, `head`, `tail`, `sed -n 'X,Yp'`, `grep`, `egrep`, `fgrep`, ou `rg` em um único arquivo sem pipes ou redirecionamentos. Saída com pipe e outros comandos Bash não contam para a verificação read-before-edit.290Visualizar um arquivo com Bash também satisfaz o requisito read-before-edit quando o comando é `cat`, `nl`, `bat`, `batcat`, `head`, `tail`, `sed -n 'X,Yp'`, `grep`, `egrep`, `fgrep`, ou `rg` em um único arquivo sem pipes ou redirecionamentos. Uma busca que não encontra nenhuma correspondência deixa o arquivo como não lido. Saída com pipe e outros comandos Bash não contam para a verificação read-before-edit.

291 291 

292Quando Claude visualiza um arquivo dessa forma, Claude Code também carrega qualquer [`CLAUDE.md` de subdiretório](/docs/pt/memory#how-claude-md-files-load) e [regras com escopo de caminho](/docs/pt/memory#path-specific-rules) que se aplicam a esse arquivo. Consulte [Regras de permissão Read e Edit](/docs/pt/permissions#read-and-edit) para saber quais comandos Bash suas regras de negação `Read` e `Edit` cobrem.292Quando Claude visualiza um arquivo dessa forma, Claude Code também carrega qualquer [`CLAUDE.md` de subdiretório](/docs/pt/memory#how-claude-md-files-load) e [regras com escopo de caminho](/docs/pt/memory#path-specific-rules) que se aplicam a esse arquivo. Consulte [Regras de permissão Read e Edit](/docs/pt/permissions#read-and-edit) para saber quais comandos Bash suas regras de negação `Read` e `Edit` cobrem.

293 293 

294<h3 id="non-utf-8-files">

295 Arquivos não UTF-8

296</h3>

297 

298Edit e [NotebookEdit](#notebookedit-tool-behavior) se recusam a alterar um arquivo cujos bytes não decodificam como UTF-8, e não gravam nada, porque salvá-lo de volta como UTF-8 transformaria cada byte que não conseguiram decodificar no caractere de substituição `U+FFFD`. Isso abrange, por exemplo, um arquivo com texto não ASCII em uma codificação legada como Windows-1252 ou Shift-JIS, um arquivo binário e um arquivo UTF-8 com uma sequência de bytes inválida. O [erro que Claude recebe](/docs/pt/errors#file-is-not-valid-utf-8) instrui a fazer a alteração com um comando de shell que lê e grava o arquivo em sua própria codificação, ou a perguntar a você se deve converter o arquivo para UTF-8 primeiro. Edit lê um arquivo que começa com uma marca de ordem de bytes UTF-16 little-endian como UTF-16, de modo que esse arquivo permanece editável.

299 

300Write não compartilha essa recusa. Em um arquivo que Edit recusaria, Write substitui o arquivo inteiro pelo novo conteúdo e o salva como UTF-8, de modo que a codificação original do arquivo é perdida. Write se recusa, e não grava nada, quando o arquivo no disco não decodifica e o novo conteúdo contém `U+FFFD`, o caractere que Read mostra para bytes que não consegue decodificar.

301 

294<h2 id="endconversation-tool-behavior">302<h2 id="endconversation-tool-behavior">

295 Comportamento da ferramenta EndConversation303 Comportamento da ferramenta EndConversation

296</h2>304</h2>


455* `insert`: adiciona uma nova célula após a alvo. Sem `cell_id`, a nova célula vai no início do notebook. Requer `cell_type` definido como `code` ou `markdown`.463* `insert`: adiciona uma nova célula após a alvo. Sem `cell_id`, a nova célula vai no início do notebook. Requer `cell_type` definido como `code` ou `markdown`.

456* `delete`: remove a célula alvo.464* `delete`: remove a célula alvo.

457 465 

466NotebookEdit recusa um arquivo de notebook que não seja decodificado como UTF-8, sob a [mesma regra que Edit](#non-utf-8-files), e não grava nada.

467 

458Regras de permissão usam o formato de caminho `Edit(...)`. Uma regra como `Edit(notebooks/**)` cobre chamadas NotebookEdit em arquivos nesse diretório.468Regras de permissão usam o formato de caminho `Edit(...)`. Uma regra como `Edit(notebooks/**)` cobre chamadas NotebookEdit em arquivos nesse diretório.

459 469 

460<h2 id="powershell-tool">470<h2 id="powershell-tool">


547 557 

548A ferramenta Read recebe um caminho de arquivo e retorna o conteúdo com números de linha. Claude é instruído a sempre passar caminhos absolutos.558A ferramenta Read recebe um caminho de arquivo e retorna o conteúdo com números de linha. Claude é instruído a sempre passar caminhos absolutos.

549 559 

550Por padrão, Read retorna o arquivo desde o início. Quando uma leitura de arquivo inteiro excede o limite de tokens, Read retorna a primeira página com um aviso de `PARTIAL view` que informa a Claude quanto do arquivo foi recebido e como ler mais com `offset` e `limit`. Uma leitura que passa um `offset` ou `limit` explícito e ainda assim excede o limite de tokens retorna um erro.

551 

552Uma leitura com um `limit` explícito para assim que as linhas selecionadas excedem o que o limite de tokens poderia caber e retorna um erro sem carregar o resto do intervalo. O erro informa a Claude para usar um `limit` menor, ou para procurar conteúdo específico com [Grep](#grep-tool-behavior) em vez disso quando uma única linha é tão grande. Antes da v2.1.208, Claude Code carregava todo o intervalo na memória antes de rejeitá-lo, então ler um arquivo com uma única linha extremamente longa poderia fazer com que ficasse sem memória.

553 

554Ler um arquivo vazio retorna um aviso de que o arquivo existe mas seu conteúdo está vazio, e um `offset` além da última linha retorna um aviso informando a contagem de linhas do arquivo. Antes da v2.1.208, ler um arquivo vazio retornava o aviso past-the-end em vez disso.560Ler um arquivo vazio retorna um aviso de que o arquivo existe mas seu conteúdo está vazio, e um `offset` além da última linha retorna um aviso informando a contagem de linhas do arquivo. Antes da v2.1.208, ler um arquivo vazio retornava o aviso past-the-end em vez disso.

555 561 

556Read lida com vários tipos de arquivo além de texto simples:562Read lida com vários tipos de arquivo além de texto simples:

557 563 

558* **Imagens**: PNG, JPG e outros formatos de imagem são retornados como conteúdo visual que Claude pode ver, não como bytes brutos. Claude Code redimensiona e recompacta imagens grandes para se adequarem aos limites de tamanho de imagem do modelo antes de enviá-las, então Claude pode ver uma versão reduzida de uma captura de tela grande. Uma imagem que ainda é maior que 500KB após esse redimensionamento é re-codificada como JPEG com qualidade reduzida com suas dimensões de pixel inalteradas. Se Claude perder detalhes de nível de pixel fino em uma imagem grande, peça-lhe para cortar a região de interesse primeiro, por exemplo com ImageMagick via Bash.564* **Imagens**: PNG, JPG e outros formatos de imagem são retornados como conteúdo visual que Claude pode ver, não como bytes brutos. Claude Code redimensiona e recompacta imagens grandes para se adequarem aos limites de tamanho de imagem do modelo antes de enviá-las, então Claude pode ver uma versão reduzida de uma captura de tela grande. Uma imagem que ainda é maior que 500KB após esse redimensionamento é re-codificada como JPEG com qualidade reduzida com suas dimensões de pixel inalteradas. Se Claude perder detalhes de nível de pixel fino em uma imagem grande, peça-lhe para cortar a região de interesse primeiro, por exemplo com ImageMagick via Bash.

559* **PDFs**: Claude lê arquivos `.pdf` curtos por inteiro. Para PDFs com mais de 10 páginas, ele lê em intervalos com um parâmetro `pages`, como `"1-5"`, até 20 páginas por vez. Leituras de intervalo de páginas renderizam páginas com `pdftoppm` do poppler-utils, então instale-o com `brew install poppler` no macOS ou `apt-get install poppler-utils` no Debian e Ubuntu. No Windows e outras plataformas, instale uma compilação do poppler que coloque `pdftoppm` no seu `PATH`. Sem ele, uma leitura de intervalo de páginas falha com `pdftoppm is not installed`.565* **PDFs**: Claude lê arquivos `.pdf` curtos por inteiro. Para PDFs com mais de 10 páginas, ele lê em intervalos com um parâmetro `pages`, como `"1-5"`, até 20 páginas por vez. Leituras de intervalo de páginas renderizam páginas com `pdftoppm` do poppler-utils, então instale-o com `brew install poppler` no macOS ou `apt-get install poppler-utils` no Debian e Ubuntu. No Windows e outras plataformas, instale uma compilação do poppler que coloque `pdftoppm` no seu `PATH`. Sem ele, uma leitura de intervalo de páginas falha com `pdftoppm is not installed`.

560* **Notebooks Jupyter**: arquivos `.ipynb` retornam todas as células com suas saídas, incluindo código, markdown e visualizações. Claude Code recusa-se a ler um arquivo de notebook com mais de 100 MB; o erro informa a Claude como ler uma porção do notebook em vez disso, como uma fatia de células, com um comando shell.566* **Notebooks Jupyter**: arquivos `.ipynb` retornam todas as células com suas saídas, incluindo código, markdown e visualizações. Um notebook cujas células somam mais de 256 KB, ou mais do que o [limite de tokens](#large-files), retorna um erro em vez disso. Claude Code recusa-se a ler um arquivo de notebook com mais de 100 MB; o erro informa a Claude como ler uma porção do notebook em vez disso, como uma fatia de células, com um comando shell.

561 567 

562Read apenas lê arquivos, não diretórios. Claude lista o conteúdo do diretório com um comando shell como `ls`.568Read apenas lê arquivos, não diretórios. Claude lista o conteúdo do diretório com um comando shell como `ls`.

563 569 

570<h3 id="large-files">

571 Arquivos grandes

572</h3>

573 

574Claude pode ler um arquivo de texto maior do que uma única chamada de Read retorna. Por padrão, uma chamada retorna no máximo 25.000 tokens, ou o valor que você definir em [`CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS`](/docs/pt/env-vars), e recusa um arquivo inteiro com mais de 256 KB, então Claude lê um arquivo maior em páginas com `offset` e `limit`. No Claude Code v2.1.296 ou posterior, ele pode, em vez disso, ler o arquivo inteiro, ou um intervalo longo de linhas, em uma única chamada definindo `allow_large: true` quando precisar, por exemplo porque você pediu o arquivo inteiro. Essa leitura é dimensionada de acordo com o espaço restante na [janela de contexto](/docs/pt/context-window) da sessão em vez dos limites padrão. Imagens, PDFs e notebooks mantêm seus limites.

575 

576O que Claude recebe quando uma leitura ultrapassa os limites padrão:

577 

578* **Arquivo inteiro acima do limite de tokens**: a primeira página do arquivo, com um aviso de `PARTIAL view` informando quanto do arquivo foi recebido e como ler mais com `offset` e `limit`

579* **Arquivo inteiro acima de 256 KB, ou uma leitura com `offset` ou `limit` acima do limite de tokens**: um erro informando para ler uma porção com `offset` e `limit`, ou para procurar conteúdo específico com [Grep](#grep-tool-behavior) em vez disso

580 

564<h2 id="sendfeedback-tool-behavior">581<h2 id="sendfeedback-tool-behavior">

565 Comportamento da ferramenta SendFeedback582 Comportamento da ferramenta SendFeedback

566</h2>583</h2>


734 Comportamento da ferramenta Write751 Comportamento da ferramenta Write

735</h2>752</h2>

736 753 

737A ferramenta Write cria um novo arquivo ou sobrescreve um existente com o conteúdo completo fornecido. Ela não anexa ou mescla.754A ferramenta Write cria um novo arquivo ou sobrescreve um existente com o conteúdo completo fornecido. Ela não anexa ou mescla. A Write também sobrescreve um arquivo existente cujos bytes não podem ser decodificados e salva o novo conteúdo como UTF-8, conforme descrito em [arquivos não UTF-8](#non-utf-8-files).

738 755 

739Se Claude deve ler um arquivo existente na conversa atual antes de sobrescrevê-lo depende do modelo e do arquivo:756Se Claude deve ler um arquivo existente na conversa atual antes de sobrescrevê-lo depende do modelo e do arquivo:

740 757 

741* Claude Opus 4.6, Claude Haiku 4.5 e modelos mais antigos sempre exigem a leitura, portanto uma Write para um arquivo existente não lido falha com um erro.758* Claude Opus 4.6, Claude Haiku 4.5 e modelos mais antigos sempre exigem a leitura, portanto uma Write para um arquivo existente não lido falha com um erro.

742* Modelos mais novos podem sobrescrever um arquivo que nunca leram nesta sessão sob as mesmas condições que [read-before-edit](#edit-tool-behavior): lê-lo não precisaria de um prompt de permissão e a ferramenta Read está disponível.759* Modelos mais novos podem sobrescrever um arquivo que nunca leram nesta sessão sob as mesmas condições que [read-before-edit](#edit-tool-behavior): lê-lo não precisaria de um prompt de permissão e a ferramenta Read está disponível.

743* Notebooks Jupyter e arquivos que Claude leu apenas parcialmente com um aviso [`PARTIAL view`](#read-tool-behavior) exigem a leitura em todos os modelos.760* Notebooks Jupyter e arquivos que Claude leu apenas parcialmente com um [aviso `PARTIAL view`](#large-files) exigem a leitura em todos os modelos.

744 761 

745Esta restrição não se aplica a novos arquivos. Antes da v2.1.228, todos os modelos exigiam a leitura antes de sobrescrever um arquivo existente.762Esta restrição não se aplica a novos arquivos. Antes da v2.1.228, todos os modelos exigiam a leitura antes de sobrescrever um arquivo existente.

746 763 

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