SpyBara
Go Premium

Documentation 2026-10-08 22:58 UTC to 2026-10-09 01:00 UTC

16 files changed +103 −31. View all changes and history on the product overview
2026
Fri 9 02:00 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

146| `auto` | Aprovações classificadas pelo modelo | Um classificador de modelo revisa ações como comandos shell e solicitações de rede, permitindo ou bloqueando cada uma que revisa. Consulte [Modo Auto](/docs/pt/permission-modes#eliminate-prompts-with-auto-mode) para disponibilidade e a ordem de decisão |146| `auto` | Aprovações classificadas pelo modelo | Um classificador de modelo revisa ações como comandos shell e solicitações de rede, permitindo ou bloqueando cada uma que revisa. Consulte [Modo Auto](/docs/pt/permission-modes#eliminate-prompts-with-auto-mode) para disponibilidade e a ordem de decisão |

147 147 

148<Warning>148<Warning>

149 **Herança de subagente:** Um subagente é executado no modo de permissão da sessão pai, a menos que você defina `permissionMode` em sua [`AgentDefinition`](/docs/pt/agent-sdk/typescript#agentdefinition) e a sessão pai esteja em modo `default`, `dontAsk` ou `plan`. Mesmo assim, Claude Code nunca aplica um valor `"bypassPermissions"`. Um subagente é executado em modo `bypassPermissions` apenas quando a sessão pai também está. A exceção `bypassPermissions` requer Claude Code v2.1.267 ou posterior.149 **Herança de subagente:** Um subagente é executado no modo de permissão da sessão pai, a menos que você defina `permissionMode` em sua [`AgentDefinition`](/docs/pt/agent-sdk/typescript#agentdefinition) e a sessão pai esteja em modo `default`, `dontAsk` ou `plan`. Mesmo assim, Claude Code nunca aplica um valor `"bypassPermissions"` e aplica um valor `"auto"` somente quando o [modo auto está disponível](/docs/pt/permission-modes#eliminate-prompts-with-auto-mode) para esse subagente. Um subagente é executado em modo `bypassPermissions` apenas quando a sessão pai também está. A exceção `bypassPermissions` requer Claude Code v2.1.267 ou posterior.

150 150 

151 Subagentes podem ter prompts de sistema diferentes e comportamento menos restrito do que seu agente principal, portanto herdar `bypassPermissions` concede a eles acesso completo e autônomo ao sistema. As [ações que nenhum modo aprova automaticamente](/docs/pt/permission-modes#actions-no-mode-auto-approves) ainda se aplicam.151 Subagentes podem ter prompts de sistema diferentes e comportamento menos restrito do que seu agente principal, portanto herdar `bypassPermissions` concede a eles acesso completo e autônomo ao sistema. As [ações que nenhum modo aprova automaticamente](/docs/pt/permission-modes#actions-no-mode-auto-approves) ainda se aplicam.

152</Warning>152</Warning>

Details

323 Detectar invocação de subagente323 Detectar invocação de subagente

324</h2>324</h2>

325 325 

326Claude invoca subagentes através da ferramenta Agent. Para detectar quando um subagente é invocado, procure por blocos `tool_use` onde `name` é `"Agent"`. Mensagens de dentro do contexto de um subagente incluem um campo `parent_tool_use_id`.326Claude invoca subagentes através da ferramenta Agent. Para detectar quando um subagente é invocado, procure por blocos `tool_use` onde `name` é `"Agent"`.

327 

328Mensagens de dentro do contexto de um subagente incluem um campo `parent_tool_use_id`. Em TypeScript, cada mensagem de assistente e de usuário que um subagente produz também carrega [`agent_id`](/docs/pt/agent-sdk/typescript#sdkassistantmessage): o `task_id` dos [eventos de tarefa](/docs/pt/agent-sdk/typescript#sdktaskstartedmessage) desse subagente. `agent_id` requer o TypeScript Agent SDK v0.3.292 ou posterior.

327 329 

328<Note>330<Note>

329 A ferramenta aparece como `"Agent"` em blocos `tool_use`, mas como `"Task"` na lista de ferramentas `system:init`. Antes do Claude Code v2.1.63, blocos `tool_use` também a nomeavam como `"Task"`. Para manter a detecção funcionando em diferentes versões do SDK, corresponda ambos os valores em `block.name`.331 A ferramenta aparece como `"Agent"` em blocos `tool_use`, mas como `"Task"` na lista de ferramentas `system:init`. Antes do Claude Code v2.1.63, blocos `tool_use` também a nomeavam como `"Task"`. Para manter a detecção funcionando em diferentes versões do SDK, corresponda ambos os valores em `block.name`.


331 333 

332A estrutura da mensagem difere entre SDKs. Em Python, você acessa blocos de conteúdo diretamente via `message.content`. Em TypeScript, `SDKAssistantMessage` envolve a mensagem da API Claude, então você acessa o conteúdo via `message.message.content`.334A estrutura da mensagem difere entre SDKs. Em Python, você acessa blocos de conteúdo diretamente via `message.content`. Em TypeScript, `SDKAssistantMessage` envolve a mensagem da API Claude, então você acessa o conteúdo via `message.message.content`.

333 335 

334Este exemplo itera através de mensagens transmitidas, registrando quando um subagente é invocado e quando mensagens subsequentes originam-se de dentro do contexto de execução desse subagente.336Este exemplo itera através de mensagens transmitidas, registrando quando um subagente é invocado e quando mensagens subsequentes originam-se de dentro do contexto de execução desse subagente. A versão em TypeScript também registra o `agent_id` de cada mensagem de subagente que o contém.

335 337 

336<CodeGroup>338<CodeGroup>

337 ```python Python theme={null}339 ```python Python theme={null}


403 // Check if this message is from within a subagent's context405 // Check if this message is from within a subagent's context

404 if (msg.parent_tool_use_id) {406 if (msg.parent_tool_use_id) {

405 console.log(" (running inside subagent)");407 console.log(" (running inside subagent)");

408 // On assistant and user messages, agent_id matches the task_id

409 // on that subagent's task_started and other task events

410 if (msg.agent_id) {

411 console.log(` agent_id: ${msg.agent_id}`);

412 }

406 }413 }

407 414 

408 if ("result" in message) {415 if ("result" in message) {

Details

1561 parent_tool_use_id: string | null;1561 parent_tool_use_id: string | null;

1562 error?: SDKAssistantMessageError;1562 error?: SDKAssistantMessageError;

1563 aborted?: true;1563 aborted?: true;

1564 agent_id?: string;

1564 timestamp?: string;1565 timestamp?: string;

1565 context_usage?: SDKContextUsage;1566 context_usage?: SDKContextUsage;

1566 user_message_uuid?: string;1567 user_message_uuid?: string;


1580 1581 

1581`aborted` é `true` quando uma interrupção ou cancelamento truncou a mensagem do assistente antes da conclusão do stream: a mensagem não tem `stop_reason` e o conteúdo pode terminar no meio de uma palavra. O campo está ausente em mensagens normalmente concluídas. Requer Agent SDK v0.3.214 ou posterior.1582`aborted` é `true` quando uma interrupção ou cancelamento truncou a mensagem do assistente antes da conclusão do stream: a mensagem não tem `stop_reason` e o conteúdo pode terminar no meio de uma palavra. O campo está ausente em mensagens normalmente concluídas. Requer Agent SDK v0.3.214 ou posterior.

1582 1583 

1584`agent_id` identifica o subagente que produziu a mensagem e está ausente em mensagens da thread principal. O valor é igual ao `task_id` no [`task_started`](#sdktaskstartedmessage) desse subagente e em outros eventos de tarefa, e permanece inalterado quando o subagente é [retomado](/docs/pt/agent-sdk/subagents#resume-subagents). O campo requer o Agent SDK v0.3.292 ou posterior.

1585 

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

1587 

1583Claude 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).1588Claude 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).

1584 1589 

1585`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.1590`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.


1597 type: "user";1602 type: "user";

1598 uuid?: UUID;1603 uuid?: UUID;

1599 session_id?: string;1604 session_id?: string;

1605 agent_id?: string;

1600 message: MessageParam; // From Anthropic SDK1606 message: MessageParam; // From Anthropic SDK

1601 pasted_content?: MessageParam["content"][];1607 pasted_content?: MessageParam["content"][];

1602 parent_tool_use_id: string | null;1608 parent_tool_use_id: string | null;


1636};1642};

1637```1643```

1638 1644 

1645Uma mensagem de usuário que um subagente produz, como o `tool_result` de uma de suas próprias chamadas de ferramenta, carrega `agent_id`. Consulte [`SDKAssistantMessage`](#sdkassistantmessage), que define o campo e seu requisito de versão.

1646 

1639Em uma mensagem que carrega um bloco `tool_result`, `tool_use_result` é o objeto de saída estruturada da ferramenta, e não o texto enviado ao modelo. Seu formato depende da ferramenta nomeada pelo bloco `tool_use` correspondente, por isso o campo é tipado como `unknown`; os formatos integrados estão listados em [Tipos de saída de ferramentas](#tool-output-types). Estes resultados exigem tratamento além do formato listado:1647Em uma mensagem que carrega um bloco `tool_result`, `tool_use_result` é o objeto de saída estruturada da ferramenta, e não o texto enviado ao modelo. Seu formato depende da ferramenta nomeada pelo bloco `tool_use` correspondente, por isso o campo é tipado como `unknown`; os formatos integrados estão listados em [Tipos de saída de ferramentas](#tool-output-types). Estes resultados exigem tratamento além do formato listado:

1640 1648 

1641* A ferramenta `Agent`: `tool_use_result` é [`AgentOutput`](#agent-2). Renderize a partir dele em vez de analisar o texto de `tool_result`. O `content` de um resultado `completed` contém o relatório do subagente ou, no caso de um subagente cujo relatório passa por uma chamada de ferramenta `SubagentHandback`, uma breve nota sobre essa devolução no lugar do relatório. No [modo auto](/docs/pt/permission-modes#eliminate-prompts-with-auto-mode) no Claude Code v2.1.271 ou posterior, todo subagente que produz um resultado `completed` reporta dessa forma, a menos que seja um [fork](/docs/pt/sub-agents#fork-the-current-conversation), e o Claude recebe o relatório como uma mensagem separada do subagente.1649* A ferramenta `Agent`: `tool_use_result` é [`AgentOutput`](#agent-2). Renderize a partir dele em vez de analisar o texto de `tool_result`. O `content` de um resultado `completed` contém o relatório do subagente ou, no caso de um subagente cujo relatório passa por uma chamada de ferramenta `SubagentHandback`, uma breve nota sobre essa devolução no lugar do relatório. No [modo auto](/docs/pt/permission-modes#eliminate-prompts-with-auto-mode) no Claude Code v2.1.271 ou posterior, todo subagente que produz um resultado `completed` reporta dessa forma, a menos que seja um [fork](/docs/pt/sub-agents#fork-the-current-conversation), e o Claude recebe o relatório como uma mensagem separada do subagente.


1992 `SDKPartialAssistantMessage`2000 `SDKPartialAssistantMessage`

1993</h3>2001</h3>

1994 2002 

1995Mensagem parcial de streaming (apenas quando `includePartialMessages` é true). O campo `parent_tool_use_id` é sempre `null`: eventos de stream são emitidos apenas para a sessão principal. Para atribuição de subagente, use mensagens completas, que carregam `parent_tool_use_id`, ou ative [`forwardSubagentText`](#options) para receber texto e pensamento de subagente como mensagens completas.2003Mensagem parcial de streaming (apenas quando `includePartialMessages` é true).

2004 

2005O campo `parent_tool_use_id` é sempre `null`: eventos de stream são emitidos apenas para a sessão principal. Para atribuição a subagentes, use mensagens completas, que carregam [`agent_id`](#sdkassistantmessage) e `parent_tool_use_id`, ou ative [`forwardSubagentText`](#options) para receber o texto e o pensamento dos subagentes como mensagens completas.

1996 2006 

1997```typescript theme={null}2007```typescript theme={null}

1998type SDKPartialAssistantMessage = {2008type SDKPartialAssistantMessage = {


5777 task_type?: string;5787 task_type?: string;

5778 is_backgrounded?: boolean;5788 is_backgrounded?: boolean;

5779 spawn_depth?: number;5789 spawn_depth?: number;

5790 parent_task_id?: string;

5780 ambient?: boolean;5791 ambient?: boolean;

5781 uuid: UUID;5792 uuid: UUID;

5782 session_id: string;5793 session_id: string;


5794 5805 

5795Um [subagente retomado](/docs/pt/agent-sdk/subagents#resume-subagents) sempre relata `is_backgrounded: true`, porque Claude Code executa cada subagente retomado em segundo plano. Quando uma tarefa em primeiro plano se move para segundo plano depois, Claude Code relata o novo valor `is_backgrounded` em uma mensagem [`task_updated`](#sdktaskupdatedmessage) em vez de enviar um segundo `task_started`.5806Um [subagente retomado](/docs/pt/agent-sdk/subagents#resume-subagents) sempre relata `is_backgrounded: true`, porque Claude Code executa cada subagente retomado em segundo plano. Quando uma tarefa em primeiro plano se move para segundo plano depois, Claude Code relata o novo valor `is_backgrounded` em uma mensagem [`task_updated`](#sdktaskupdatedmessage) em vez de enviar um segundo `task_started`.

5796 5807 

5808`parent_task_id` contém o `task_id` do subagente que iniciou esta tarefa. Use-o para agrupar cada tarefa sob o subagente que a iniciou. Claude Code o define em tarefas de subagente, Bash e [Monitor](#monitor). O campo requer Agent SDK v0.3.292 ou posterior. Ele está ausente quando:

5809 

5810* A thread principal iniciou a tarefa

5811* Claude Code não rastreia mais a tarefa pai

5812* Um [colega de equipe](/docs/pt/agent-teams) ou um agente dentro de um fluxo de trabalho iniciou a tarefa

5813 

5814O pai pode ser uma tarefa em primeiro plano ou uma que já terminou, então trate um ID que você não reconheça como ausência de pai.

5815 

5797<h3 id="sdktaskprogressmessage">5816<h3 id="sdktaskprogressmessage">

5798 `SDKTaskProgressMessage`5817 `SDKTaskProgressMessage`

5799</h3>5818</h3>


5850 `SDKBackgroundTasksChangedMessage`5869 `SDKBackgroundTasksChangedMessage`

5851</h3>5870</h3>

5852 5871 

5853Emitido sempre que o conjunto de tarefas em segundo plano ativas muda: uma tarefa inicia, é concluída, é eliminada, um agente em primeiro plano é colocado em segundo plano, ou o campo `description` ou `ambient` de uma tarefa muda.5872Emitido sempre que o conjunto de tarefas em segundo plano ativas muda: uma tarefa inicia, é concluída ou é eliminada; um agente em primeiro plano é colocado em segundo plano; ou o campo `description`, `ambient` ou `parent_task_id` de uma tarefa muda. Para o campo `parent_task_id` em cada entrada, veja [`SDKTaskStartedMessage`](#sdktaskstartedmessage), que o define e seu requisito de versão.

5854 5873 

5855O array `tasks` é o conjunto completo ativo. Substitua qualquer conjunto em cache por cada payload em vez de emparelhar eventos `task_started` e `task_notification`, para que a próxima mudança de associação corrija qualquer evento que você tenha perdido.5874O array `tasks` é o conjunto completo ativo. Substitua qualquer conjunto em cache por cada payload em vez de emparelhar eventos `task_started` e `task_notification`, para que a próxima mudança de associação corrija qualquer evento que você tenha perdido.

5856 5875 

5857A ordenação relativa a esses eventos por tarefa é não especificada, então não correlacione os dois fluxos.5876Quando uma tarefa termina, seus [`task_updated`](#sdktaskupdatedmessage) e [`task_notification`](#sdktasknotificationmessage) chegam antes do `background_tasks_changed` que a remove da lista. Fora isso, a ordenação relativa aos eventos por tarefa é não especificada.

5858 5877 

5859Nada é emitido na inicialização. Redefina para um conjunto vazio sempre que o processo CLI da sessão inicia ou reinicia e deixe a próxima mudança de associação repopulá-lo.5878Nada é emitido na inicialização. Redefina para um conjunto vazio sempre que o processo CLI da sessão inicia ou reinicia e deixe a próxima mudança de associação repopulá-lo.

5860 5879 


5871 task_type: string;5890 task_type: string;

5872 subagent_type?: string;5891 subagent_type?: string;

5873 description: string;5892 description: string;

5893 parent_task_id?: string;

5874 ambient?: boolean;5894 ambient?: boolean;

5875 }[];5895 }[];

5876 uuid: UUID;5896 uuid: UUID;

env-vars.md +1 −0

Details

378| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN_MAX_AGE_MS` | Idade máxima, em milissegundos, da última mensagem da transcrição para que uma sessão que terminou no meio de um turno continue automaticamente ao ser retomada. Quando a última mensagem é mais antiga que esse limite, o Claude Code pula a retomada automática de `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` e sua mensagem de continuação `CLAUDE_CODE_RESUME_PROMPT`, e a sessão começa ociosa para que você continue explicitamente. Não definida ou `0` significa sem limite, exceto que um turno cuja última requisição falhou com um erro de API só é retomado enquanto esse erro tiver menos de seis horas. Um valor positivo limita todos os turnos, incluindo esses; um valor negativo ou não numérico aplica um limite de uma hora. Scripts de inicialização para agentes de longa duração podem defini-la para que uma reinicialização com uma transcrição antiga não execute novamente um prompt obsoleto. O próprio Claude Code define um limite de uma hora quando reinicia uma sessão do [agent view](/docs/pt/agent-view) que travou e que herdou sua conversa de uma sessão interativa. Requer Claude Code v2.1.211 ou posterior |378| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN_MAX_AGE_MS` | Idade máxima, em milissegundos, da última mensagem da transcrição para que uma sessão que terminou no meio de um turno continue automaticamente ao ser retomada. Quando a última mensagem é mais antiga que esse limite, o Claude Code pula a retomada automática de `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` e sua mensagem de continuação `CLAUDE_CODE_RESUME_PROMPT`, e a sessão começa ociosa para que você continue explicitamente. Não definida ou `0` significa sem limite, exceto que um turno cuja última requisição falhou com um erro de API só é retomado enquanto esse erro tiver menos de seis horas. Um valor positivo limita todos os turnos, incluindo esses; um valor negativo ou não numérico aplica um limite de uma hora. Scripts de inicialização para agentes de longa duração podem defini-la para que uma reinicialização com uma transcrição antiga não execute novamente um prompt obsoleto. O próprio Claude Code define um limite de uma hora quando reinicia uma sessão do [agent view](/docs/pt/agent-view) que travou e que herdou sua conversa de uma sessão interativa. Requer Claude Code v2.1.211 ou posterior |

379| `CLAUDE_CODE_RESUME_PROMPT` | Sobrescreve a mensagem de continuação que o Claude Code envia a Claude quando `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` continua um turno interrompido em vez de reenviar seu prompt, ou quando você retoma uma [chamada de ferramenta adiada](/docs/pt/hooks#defer-a-tool-call-for-later) com `-p`. O padrão é `Continue from where you left off.`. Uma string vazia usa o padrão |379| `CLAUDE_CODE_RESUME_PROMPT` | Sobrescreve a mensagem de continuação que o Claude Code envia a Claude quando `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` continua um turno interrompido em vez de reenviar seu prompt, ou quando você retoma uma [chamada de ferramenta adiada](/docs/pt/hooks#defer-a-tool-call-for-later) com `-p`. O padrão é `Continue from where you left off.`. Uma string vazia usa o padrão |

380| `CLAUDE_CODE_RETRY_WATCHDOG` | Defina como `1` para sessões não supervisionadas, como harnesses de avaliação, jobs de CI ou workers remotos. Tenta novamente erros de capacidade `429` e `529` indefinidamente em vez de falhar após `CLAUDE_CODE_MAX_RETRIES` tentativas. O Claude Code falha imediatamente quando uma requisição de velocidade padrão recebe um `429` que informa um limite de gastos ou créditos de uso esgotados, mesmo um vindo de um [limite de gastos do gateway](/docs/pt/errors#spend-limit-reached) que é redefinido segundo uma programação. Antes da v2.1.239, o watchdog tentava novamente esses erros indefinidamente. Para requisições no modo rápido, consulte [Lidar com rate limits](/docs/pt/fast-mode#handle-rate-limits). O watchdog aguarda até 5 minutos entre as tentativas, ou até que o limite seja redefinido quando a resposta traz um horário de redefinição do rate limit, para que uma sessão que atinge um limite de uso aguarde o restante da janela. Na v2.1.199 ou posterior, ele também aumenta a contagem padrão de novas tentativas para outros erros transitórios, como erros de servidor, timeouts e conexões interrompidas, 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. Requer Claude Code v2.1.186 ou posterior |380| `CLAUDE_CODE_RETRY_WATCHDOG` | Defina como `1` para sessões não supervisionadas, como harnesses de avaliação, jobs de CI ou workers remotos. Tenta novamente erros de capacidade `429` e `529` indefinidamente em vez de falhar após `CLAUDE_CODE_MAX_RETRIES` tentativas. O Claude Code falha imediatamente quando uma requisição de velocidade padrão recebe um `429` que informa um limite de gastos ou créditos de uso esgotados, mesmo um vindo de um [limite de gastos do gateway](/docs/pt/errors#spend-limit-reached) que é redefinido segundo uma programação. Antes da v2.1.239, o watchdog tentava novamente esses erros indefinidamente. Para requisições no modo rápido, consulte [Lidar com rate limits](/docs/pt/fast-mode#handle-rate-limits). O watchdog aguarda até 5 minutos entre as tentativas, ou até que o limite seja redefinido quando a resposta traz um horário de redefinição do rate limit, para que uma sessão que atinge um limite de uso aguarde o restante da janela. Na v2.1.199 ou posterior, ele também aumenta a contagem padrão de novas tentativas para outros erros transitórios, como erros de servidor, timeouts e conexões interrompidas, 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. Requer Claude Code v2.1.186 ou posterior |

381| `CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS` | Tempo máximo, em milissegundos, que cada requisição à API passa aguardando erros `429` e `529` quando `CLAUDE_CODE_RETRY_WATCHDOG` está definida. Depois que esse tempo se esgota, o próximo erro desse tipo encerra a requisição. Informe um número inteiro positivo em dígitos simples, como `1800000` para 30 minutos. Quando não definida, a espera não tem limite. Requer o Claude Code v2.1.295 ou posterior |

381| `CLAUDE_CODE_SAFE_MODE` | Defina como `1` para iniciar no modo de segurança: CLAUDE.md, skills, plugins, hooks, servidores MCP, comandos e agentes personalizados, estilos de saída, workflows, temas personalizados, atalhos de teclado personalizados, comandos da linha de status e de sugestão de arquivos, servidores LSP e memória automática não são carregados, para solucionar problemas de uma configuração quebrada. A política de configurações gerenciadas ainda se aplica, incluindo hooks, linha de status e comandos de sugestão de arquivos configurados por política; plugins gerenciados, skills gerenciadas, CLAUDE.md gerenciado e servidores MCP configurados por política não. Equivalente a passar [`--safe-mode`](/docs/pt/cli-reference#cli-flags). Processos filhos iniciados diretamente herdam a variável |382| `CLAUDE_CODE_SAFE_MODE` | Defina como `1` para iniciar no modo de segurança: CLAUDE.md, skills, plugins, hooks, servidores MCP, comandos e agentes personalizados, estilos de saída, workflows, temas personalizados, atalhos de teclado personalizados, comandos da linha de status e de sugestão de arquivos, servidores LSP e memória automática não são carregados, para solucionar problemas de uma configuração quebrada. A política de configurações gerenciadas ainda se aplica, incluindo hooks, linha de status e comandos de sugestão de arquivos configurados por política; plugins gerenciados, skills gerenciadas, CLAUDE.md gerenciado e servidores MCP configurados por política não. Equivalente a passar [`--safe-mode`](/docs/pt/cli-reference#cli-flags). Processos filhos iniciados diretamente herdam a variável |

382| `CLAUDE_CODE_SCRIPT_CAPS` | Objeto JSON que limita quantas vezes scripts específicos podem ser invocados por sessão quando `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB` está definida. As chaves são substrings comparadas com o texto do comando; os valores são limites inteiros de chamadas. Por exemplo, `{"deploy.sh": 2}` permite que `deploy.sh` seja chamado no máximo duas vezes. A correspondência é baseada em substrings, então truques de expansão do shell como `./scripts/deploy.sh $(evil)` ainda contam para o limite. A multiplicação em tempo de execução via `xargs` ou `find -exec` não é detectada; este é um controle de defesa em profundidade |383| `CLAUDE_CODE_SCRIPT_CAPS` | Objeto JSON que limita quantas vezes scripts específicos podem ser invocados por sessão quando `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB` está definida. As chaves são substrings comparadas com o texto do comando; os valores são limites inteiros de chamadas. Por exemplo, `{"deploy.sh": 2}` permite que `deploy.sh` seja chamado no máximo duas vezes. A correspondência é baseada em substrings, então truques de expansão do shell como `./scripts/deploy.sh $(evil)` ainda contam para o limite. A multiplicação em tempo de execução via `xargs` ou `find -exec` não é detectada; este é um controle de defesa em profundidade |

383| `CLAUDE_CODE_SCROLL_SPEED` | Define o multiplicador de rolagem da roda do mouse na [renderização em tela cheia](/docs/pt/fullscreen#mouse-wheel-scrolling). Aceita qualquer valor positivo até 20, incluindo valores fracionários abaixo de 1, como `0.5`, para desacelerar a rolagem acelerada do trackpad e da roda em terminais que já amplificam eventos da roda. Defina como `3` para corresponder ao `vim` se o seu terminal envia um evento da roda por entalhe sem amplificação. Ignorada no terminal do IDE JetBrains, onde o Claude Code usa seu próprio tratamento de rolagem |384| `CLAUDE_CODE_SCROLL_SPEED` | Define o multiplicador de rolagem da roda do mouse na [renderização em tela cheia](/docs/pt/fullscreen#mouse-wheel-scrolling). Aceita qualquer valor positivo até 20, incluindo valores fracionários abaixo de 1, como `0.5`, para desacelerar a rolagem acelerada do trackpad e da roda em terminais que já amplificam eventos da roda. Defina como `3` para corresponder ao `vim` se o seu terminal envia um evento da roda por entalhe sem amplificação. Ignorada no terminal do IDE JetBrains, onde o Claude Code usa seu próprio tratamento de rolagem |

errors.md +3 −5

Details

4064 Marketplace is already added from a different source4064 Marketplace is already added from a different source

4065</h3>4065</h3>

4066 4066 

4067Você confirmou adicionar um marketplace através de [`/plugin install <plugin> --marketplace <source>`](/docs/pt/plugins/install#add-a-marketplace-and-install-in-one-command), e o catálogo que Claude Code buscou dessa fonte nomeia a si mesmo igual a um marketplace que você já adicionou de uma fonte diferente. Claude Code mantém o marketplace existente em vez de substituí-lo, e o plugin não é instalado.4067Você indicou uma nova fonte de marketplace com [`--marketplace <source>` no comando de instalação](/docs/pt/plugins/install#add-a-marketplace-and-install-in-one-command), em uma sessão ou a partir do seu shell. O catálogo que Claude Code buscou dessa fonte tem o mesmo nome de um marketplace que você já adicionou de uma fonte diferente. Claude Code mantém o marketplace existente em vez de substituí-lo, e o plugin não é instalado.

4068 4068 

4069```text theme={null}4069```text theme={null}

4070Marketplace "acme-tools" is already added from a different source (github:acme/plugins). To use this source instead, remove that marketplace first with /plugin marketplace remove acme-tools.4070Marketplace "acme-tools" is already added from a different source (github:acme/plugins). To use this source instead, remove that marketplace first with /plugin marketplace remove acme-tools.


4079 Plugin command references user\_config in a shell command4079 Plugin command references user\_config in a shell command

4080</h3>4080</h3>

4081 4081 

4082Um hook de plugin, [monitor](/docs/pt/plugins/components#monitors), ou comando MCP [`headersHelper`](/docs/pt/mcp#use-dynamic-headers-for-custom-authentication) referencia uma opção de plugin `${user_config.KEY}` [plugin option](/docs/pt/plugins/manifest-reference#user-configuration), e a string substituída seria passada para um shell. Um valor configurado contendo `$(...)`, backticks, ou `;` seria executado como código lá, então Claude Code recusa iniciar o componente em vez de substituir o valor. A verificação é executada no modelo de comando, então o erro aparece mesmo quando nenhum valor está configurado ainda. Antes da v2.1.207, o valor era substituído no comando shell.4082Um hook de plugin, [monitor](/docs/pt/plugins/components#monitors), ou comando MCP [`headersHelper`](/docs/pt/mcp#use-dynamic-headers-for-custom-authentication) referencia uma `${user_config.KEY}` [opção de plugin](/docs/pt/plugins/manifest-reference#user-configuration), e a string substituída seria passada para um shell. Um valor configurado contendo `$(...)`, backticks, ou `;` seria executado como código lá, então Claude Code recusa iniciar o componente em vez de substituir o valor. A verificação é executada no modelo de comando, então o erro aparece mesmo quando nenhum valor está configurado ainda. Antes da v2.1.207, o valor era substituído no comando shell.

4083 4083 

4084A redação depende de qual superfície referenciou a opção. Um hook de forma shell relata:4084A redação depende de qual superfície referenciou a opção. Um hook de forma shell relata:

4085 4085 


4226 4226 

4227Claude Code mantém os marketplaces de plugin que você adicionou em um arquivo de registro em `~/.claude/plugins/known_marketplaces.json`. Um comando de plugin que precisa do registro, como `claude plugin install`, falha com uma de duas mensagens quando Claude Code não consegue usar o arquivo:4227Claude Code mantém os marketplaces de plugin que você adicionou em um arquivo de registro em `~/.claude/plugins/known_marketplaces.json`. Um comando de plugin que precisa do registro, como `claude plugin install`, falha com uma de duas mensagens quando Claude Code não consegue usar o arquivo:

4228 4228 

4229* `Failed to load marketplace configuration`: o arquivo não é JSON válido, ou não pode ser lido. Um arquivo vazio falha dessa forma também.4229* `Failed to load marketplace configuration`: o arquivo existe, mas não é JSON válido ou não pode ser lido. Um arquivo vazio falha dessa forma também.

4230* `Marketplace configuration file is corrupted`: o arquivo é JSON válido mas seu conteúdo não corresponde ao esquema do registro.4230* `Marketplace configuration file is corrupted`: o arquivo é JSON válido mas seu conteúdo não corresponde ao esquema do registro.

4231 4231 

4232Um arquivo ausente não é uma falha: Claude Code o trata como um registro sem marketplaces.

4233 

4234Com um arquivo vazio, `claude plugin install` relata:4232Com um arquivo vazio, `claude plugin install` relata:

4235 4233 

4236```text theme={null}4234```text theme={null}

hooks.md +18 −8

Details

1237 Controle de decisão do SessionStart1237 Controle de decisão do SessionStart

1238</h4>1238</h4>

1239 1239 

1240O Claude Code adiciona ao contexto do Claude o stdout que ele [trata como texto simples](#exit-code-0). Além dos [campos de saída JSON](#json-output) disponíveis para todos os hooks, você pode retornar estes campos específicos do evento:1240Um hook SessionStart pode adicionar contexto para o Claude, fornecer a primeira mensagem do usuário, definir o título da sessão, observar arquivos e recarregar skills. Retorne o campo correspondente a cada um, além dos [campos de saída JSON](#json-output) disponíveis para todos os hooks:

1241 1241 

1242| Campo | Descrição |1242| Campo | Descrição |

1243| :- | :- |1243| :- | :- |

1244| `additionalContext` | String adicionada ao contexto do Claude no início da conversa, antes do primeiro prompt. Consulte [Adicionar contexto para o Claude](#add-context-for-claude) para saber como o texto é entregue e o que colocar nele |1244| `additionalContext` | String adicionada ao contexto do Claude no início da conversa, antes do primeiro prompt. Consulte [Adicionar contexto para o Claude](#add-context-for-claude) para saber como o texto é entregue e o que colocar nele |

1245| `initialUserMessage` | String usada como a primeira mensagem do usuário da sessão. Aplica-se no [modo não interativo](/docs/pt/headless) com a flag `-p`, onde se torna o primeiro turno mesmo que nenhum prompt seja fornecido. Se um prompt for fornecido, ele vem como o próximo turno. Ao contrário de `additionalContext`, que se anexa a um turno existente, isto cria o turno |1245| `initialUserMessage` | String usada como a primeira mensagem do usuário da sessão, no [modo não interativo](/docs/pt/headless) com a flag `-p`. Ela se torna o primeiro turno mesmo que você não passe nenhum prompt. Um prompt que você passar vem em seguida como o próximo turno |

1246| `sessionTitle` | Define o título da sessão, com o mesmo efeito de `/rename`. Use para nomear sessões automaticamente a partir da pasta de inicialização, do branch do git ou do nome do worktree. Aplica-se quando `source` é `"startup"`, `"resume"` ou `"fork"`; ignorado em `"clear"` e `"compact"` |1246| `sessionTitle` | Define o título da sessão, com o mesmo efeito de `/rename`. Aplica-se quando `source` é `"startup"`, `"resume"` ou `"fork"` |

1247| `watchPaths` | Array de caminhos absolutos a observar para eventos [FileChanged](#filechanged) durante esta sessão |1247| `watchPaths` | Array de caminhos absolutos a observar para eventos [FileChanged](#filechanged) durante esta sessão |

1248| `reloadSkills` | Booleano. Quando `true`, o Claude Code examina novamente os diretórios de [skills](/docs/pt/skills) e comandos após a conclusão dos hooks SessionStart, para que as skills instaladas pelo hook fiquem disponíveis na mesma sessão, a partir do primeiro prompt |1248| `reloadSkills` | Booleano. Quando `true`, o Claude Code verifica novamente os diretórios de [skills](/docs/pt/skills) e comandos após a conclusão dos hooks SessionStart. Consulte [Recarregar skills que um hook instala](#reload-skills-that-a-hook-installs) |

1249 

1250Esta saída adiciona contexto e nomeia a sessão:

1249 1251 

1250```json theme={null}1252```json theme={null}

1251{1253{


1257}1259}

1258```1260```

1259 1261 

1260Como o stdout simples já chega ao Claude neste evento, um hook que apenas carrega contexto pode imprimir diretamente no stdout sem montar JSON. Use o formato JSON quando precisar combinar contexto com outros campos, como `sessionTitle`.1262Um hook que apenas adiciona contexto pode imprimi-lo sem construir JSON, porque o Claude Code adiciona o [stdout em texto simples](#exit-code-0) de um hook SessionStart ao contexto do Claude.

1263 

1264Se o hook SessionStart do seu plugin fornecer `initialUserMessage` ou `sessionTitle`, instale o plugin antes de a sessão começar. O Claude Code ignora ambos os campos de um plugin cuja instalação termina depois que os hooks SessionStart já foram executados.

1265 

1266<h4 id="reload-skills-that-a-hook-installs">

1267 Recarregar skills que um hook instala

1268</h4>

1269 

1270Para disponibilizar na mesma sessão as skills que um hook SessionStart instala, retorne `reloadSkills`. A descoberta de skills normalmente é executada antes de os hooks SessionStart terminarem, então, sem isso, arquivos que um hook grava em `~/.claude/skills/` ou `.claude/skills/` podem estar ausentes quando o primeiro prompt for executado.

1261 1271 

1262Use `reloadSkills` quando um hook SessionStart instalar ou atualizar skills. A descoberta de skills normalmente é executada antes de os hooks SessionStart terminarem, então arquivos que o hook grava em `~/.claude/skills/` ou `.claude/skills/` só apareceriam na próxima sessão. Este exemplo sincroniza um repositório de skills compartilhado e solicita a nova varredura:1272Este exemplo sincroniza um repositório compartilhado de skills e solicita a nova verificação:

1263 1273 

1264```bash theme={null}1274```bash theme={null}

1265#!/bin/bash1275#!/bin/bash


1270echo '{"hookSpecificOutput": {"hookEventName": "SessionStart", "reloadSkills": true}}'1280echo '{"hookSpecificOutput": {"hookEventName": "SessionStart", "reloadSkills": true}}'

1271```1281```

1272 1282 

1273A URL do repositório é um espaço reservado; substitua-a pelo seu próprio repositório de skills. Com o espaço reservado, o clone falha e imprime uma mensagem `fatal:` no stderr. O stderr de um hook SessionStart que sai com 0 é apenas informativo, portanto a solicitação de `reloadSkills` ainda se aplica.1283A URL do repositório é um espaço reservado. Substitua-a pelo seu próprio repositório de skills.

1274 1284 

1275<h4 id="persist-environment-variables">1285<h4 id="persist-environment-variables">

1276 Persistir variáveis de ambiente1286 Persistir variáveis de ambiente


4279Hooks assíncronos têm restrições adicionais comparados a hooks síncronos:4289Hooks assíncronos têm restrições adicionais comparados a hooks síncronos:

4280 4290 

4281* Saída de hook é entregue no próximo turno de conversa. Se a sessão está ociosa, a resposta espera até a próxima interação do usuário. Exceção: um hook `asyncRewake` que sai com código 2 acorda Claude imediatamente mesmo quando a sessão está ociosa.4291* Saída de hook é entregue no próximo turno de conversa. Se a sessão está ociosa, a resposta espera até a próxima interação do usuário. Exceção: um hook `asyncRewake` que sai com código 2 acorda Claude imediatamente mesmo quando a sessão está ociosa.

4282* Cada execução cria um processo em background separado. Não há desduplicação através de múltiplos disparos do mesmo hook assíncrono.4292* Cada execução cria um processo em background separado.

4283 4293 

4284<h2 id="security-considerations">4294<h2 id="security-considerations">

4285 Considerações de segurança4295 Considerações de segurança

Details

91| `-y, --yes` | Aceite o comando de instalação exibido sem o prompt `Run this command now?`. Ignorado quando o comando é executado dentro de uma sessão Claude Code, como da ferramenta Bash ou um hook. Requer Claude Code v2.1.229 ou posterior |91| `-y, --yes` | Aceite o comando de instalação exibido sem o prompt `Run this command now?`. Ignorado quando o comando é executado dentro de uma sessão Claude Code, como da ferramenta Bash ou um hook. Requer Claude Code v2.1.229 ou posterior |

92| `--accept-command <sha256>` | Aceite o comando de instalação exibido cujo `sha256` uma execução anterior [`--json`](#plugin-json-result) relatou em `shownCommand`, no lugar de `-y`. Não pode ser combinado com `-y`. Veja [Aceitar um comando de instalação exibido](#accept-a-displayed-install-command). Requer Claude Code v2.1.271 ou posterior |92| `--accept-command <sha256>` | Aceite o comando de instalação exibido cujo `sha256` uma execução anterior [`--json`](#plugin-json-result) relatou em `shownCommand`, no lugar de `-y`. Não pode ser combinado com `-y`. Veja [Aceitar um comando de instalação exibido](#accept-a-displayed-install-command). Requer Claude Code v2.1.271 ou posterior |

93| `--json` | Imprima o resultado como um objeto JSON na última linha de stdout em vez da mensagem legível por humanos, para uso em scripts. Veja [Formato de resultado JSON](#plugin-json-result). Requer Claude Code v2.1.268 ou posterior |93| `--json` | Imprima o resultado como um objeto JSON na última linha de stdout em vez da mensagem legível por humanos, para uso em scripts. Veja [Formato de resultado JSON](#plugin-json-result). Requer Claude Code v2.1.268 ou posterior |

94| `--marketplace <source>` | Instale `<plugin>`, dado por seu nome simples, a partir do marketplace em `<source>`, adicionando o marketplace primeiro se você ainda não o adicionou. Veja [Adicionar um marketplace e instalar em um único comando](/docs/pt/plugins/install#add-a-marketplace-and-install-in-one-command). Requer Claude Code v2.1.292 ou posterior |

94 95 

95Execute `claude plugin install --help` em seu shell para ver todas as opções que sua versão suporta.96Execute `claude plugin install --help` em seu shell para ver todas as opções que sua versão suporta.

96 97 

Details

189 189 

190* **Scope**: escopo de usuário por padrão. Passe `--scope project` ou `--scope local` para alterá-lo.190* **Scope**: escopo de usuário por padrão. Passe `--scope project` ou `--scope local` para alterá-lo.

191* **Quando os plugins carregam**: plugins que ele instala carregam na próxima vez que você inicia o Claude Code, ou quando você executa `/reload-plugins` em uma sessão que já está aberta.191* **Quando os plugins carregam**: plugins que ele instala carregam na próxima vez que você inicia o Claude Code, ou quando você executa `/reload-plugins` em uma sessão que já está aberta.

192* **O marketplace deve ser adicionado primeiro**: em uma máquina onde ninguém abriu uma sessão interativa do Claude Code ainda, o marketplace oficial não está registrado, então um script que instala a partir dele executa `claude plugin marketplace add anthropics/claude-plugins-official` antes da instalação.192* **O marketplace em uma máquina nova**: em uma máquina onde ninguém abriu uma sessão interativa do Claude Code ainda, o marketplace oficial não está registrado, então um script que instala a partir dele executa `claude plugin marketplace add anthropics/claude-plugins-official` antes da instalação. Veja [Adicionar e instalar do seu shell](#add-and-install-from-your-shell).

193 193 

194```bash theme={null}194```bash theme={null}

195claude plugin install formatter@your-org --scope project195claude plugin install formatter@your-org --scope project


232 Adicionar um marketplace e instalar em um comando232 Adicionar um marketplace e instalar em um comando

233</h3>233</h3>

234 234 

235Para instalar um plugin de um marketplace que você ainda não adicionou, execute `/plugin install` em uma sessão do Claude Code e nomeie a fonte do marketplace com `--marketplace`. Requer Claude Code v2.1.275 ou posterior.235Para instalar um plugin de um marketplace que você ainda não adicionou, nomeie a fonte do marketplace com `--marketplace` no comando de instalação, em uma sessão ou no seu shell. A fonte aceita [as mesmas formas que `/plugin marketplace add`](#add-a-marketplace), como GitHub `owner/repo`, uma URL git ou um caminho local. Dê o nome do plugin por si só, sem um sufixo `@marketplace`.

236 

237<h4 id="add-and-install-in-a-session">

238 Adicionar e instalar em uma sessão

239</h4>

240 

241Execute `/plugin install` em uma sessão do Claude Code com o plugin e a fonte. Requer Claude Code v2.1.275 ou posterior. Em uma sessão, a fonte não pode conter espaços.

236 242 

237```text theme={null}243```text theme={null}

238/plugin install deploy-helper --marketplace your-org/plugins244/plugin install deploy-helper --marketplace your-org/plugins

239```245```

240 246 

241A fonte aceita [as mesmas formas que `/plugin marketplace add`](#add-a-marketplace), como GitHub `owner/repo`, uma URL git ou um caminho local, exceto que não pode conter espaços. Dê o nome do plugin por si só, sem um sufixo `@marketplace`.

242 

243Se você ainda não adicionou esse marketplace, o Claude Code mostra a fonte que resolveu e pede que você confirme antes de adicioná-lo. Uma vez que o marketplace é adicionado, os detalhes do plugin abrem e você escolhe um [escopo de instalação](#install-a-plugin). Se a fonte corresponder a um marketplace que você já adicionou, o Claude Code pula a confirmação e abre os detalhes do plugin nesse marketplace.247Se você ainda não adicionou esse marketplace, o Claude Code mostra a fonte que resolveu e pede que você confirme antes de adicioná-lo. Uma vez que o marketplace é adicionado, os detalhes do plugin abrem e você escolhe um [escopo de instalação](#install-a-plugin). Se a fonte corresponder a um marketplace que você já adicionou, o Claude Code pula a confirmação e abre os detalhes do plugin nesse marketplace.

244 248 

249<h4 id="add-and-install-from-your-shell">

250 Adicionar e instalar no seu shell

251</h4>

252 

253No seu shell, sem iniciar uma sessão, execute `claude plugin install` com o plugin e a fonte. Requer Claude Code v2.1.292 ou posterior.

254 

255```bash theme={null}

256claude plugin install deploy-helper --marketplace your-org/plugins

257```

258 

259O comando do shell adiciona o marketplace sem uma etapa de confirmação. Um marketplace que você já adicionou a partir dessa fonte é reutilizado. Um novo é adicionado sob as mesmas [verificações de política da organização](/docs/pt/plugins/org#restrict-what-users-can-install) que `claude plugin marketplace add`, e é declarado nas suas configurações de usuário mesmo quando você passa `--scope project`.

260 

245<h3 id="add-a-private-marketplace">261<h3 id="add-a-private-marketplace">

246 Adicionar um marketplace privado262 Adicionar um marketplace privado

247</h3>263</h3>

Details

138| `$.mcp.call` | Chama uma ferramenta em um servidor MCP conectado, sob as regras de permissão da sessão |138| `$.mcp.call` | Chama uma ferramenta em um servidor MCP conectado, sob as regras de permissão da sessão |

139| `$.model.complete` | Usa o plano ou chave de API do usuário para chamadas de modelo |139| `$.model.complete` | Usa o plano ou chave de API do usuário para chamadas de modelo |

140| `$.prompt.submit` | Envia um prompt e pode enviá-lo como as próprias palavras do usuário |140| `$.prompt.submit` | Envia um prompt e pode enviá-lo como as próprias palavras do usuário |

141| `$.session.send` | Envia uma mensagem que outra sessão ou subagente do Claude lê |141| `$.session.send` | Envia uma mensagem que o Claude de outra sessão, de um subagente ou de um [colega de equipe](/docs/pt/agent-teams) lê |

142 142 

143Na linha `hooks:`, [`tool.call`](/docs/pt/plugins/mods/reference#tools) e [`prompt.submit`](/docs/pt/plugins/mods/reference#prompts-and-what-claude-reads) significam que o mod vê cada chamada de ferramenta e cada prompt, e pode mudá-los. [`session.append`](/docs/pt/plugins/mods/reference#session) significa que o mod pode reescrever cada linha da conversa antes de ser armazenada. [`ui.render{component=AskUserQuestion}`](/docs/pt/plugins/mods/interface#change-what-claude-code-already-draws) significa que o mod pode redesenhar o diálogo que Claude usa para fazer uma pergunta ao usuário. `tool.check` significa que o mod pode aprovar ou negar uma chamada de ferramenta antes de um prompt de permissão aparecer. [Saiba o que acontece por padrão](#know-what-happens-by-default) lista quais de suas regras e hooks têm precedência sobre sua resposta.143Na linha `hooks:`, [`tool.call`](/docs/pt/plugins/mods/reference#tools) e [`prompt.submit`](/docs/pt/plugins/mods/reference#prompts-and-what-claude-reads) significam que o mod vê cada chamada de ferramenta e cada prompt, e pode mudá-los. [`session.append`](/docs/pt/plugins/mods/reference#session) significa que o mod pode reescrever cada linha da conversa antes de ser armazenada. [`ui.render{component=AskUserQuestion}`](/docs/pt/plugins/mods/interface#change-what-claude-code-already-draws) significa que o mod pode redesenhar o diálogo que Claude usa para fazer uma pergunta ao usuário. `tool.check` significa que o mod pode aprovar ou negar uma chamada de ferramenta antes de um prompt de permissão aparecer. [Saiba o que acontece por padrão](#know-what-happens-by-default) lista quais de suas regras e hooks têm precedência sobre sua resposta.

144 144 

Details

159 Envie e receba mensagens entre sessões159 Envie e receba mensagens entre sessões

160</h2>160</h2>

161 161 

162Um mod pode enviar uma mensagem em texto simples para outra de suas sessões ou para um dos subagentes desta sessão e observar as mensagens que chegam e saem. `$.session.send({ to, text })` envia uma, a mesma entrega que a ferramenta SendMessage faz. `to` é `{ sessionId }` para uma sessão, `{ agentId }` para um subagente de `$.agent.list()` ou o endereço de string de onde uma mensagem recebida veio. A chamada resolve uma vez que a mensagem é enfileirada, com `{ isDelivered: true }`. Quando nada foi entregue, ela resolve com `{ isDelivered: false, reason }`, e `reason` diz por quê.162Um mod pode enviar uma mensagem em texto simples para outra de suas sessões, para um dos subagentes desta sessão ou para um colega de equipe em sua [equipe de agentes](/docs/pt/agent-teams). Ele também pode observar as mensagens que chegam e saem.

163 

164Para enviar uma, chame `$.session.send({ to, text })`, que faz a mesma entrega que a ferramenta SendMessage faz. Defina `to` de acordo com quem recebe a mensagem:

165 

166* **Outra de suas sessões**: `{ sessionId }`

167* **Um subagente ou colega de equipe**: `{ agentId }`, com um id de `$.agent.list()`

168* **O remetente de uma mensagem que você recebeu**: o endereço de string de onde essa mensagem veio

169 

170A chamada resolve uma vez que a mensagem é enfileirada, com `{ isDelivered: true }`. Quando nada foi entregue, ela resolve com `{ isDelivered: false, reason }`, e `reason` diz por quê.

163 171 

164Este hook responde a um comando `/ping`, [registrado como um comando](#add-a-command), pedindo à sessão cujo id você digita após ele um status:172Este hook responde a um comando `/ping`, [registrado como um comando](#add-a-command), pedindo à sessão cujo id você digita após ele um status:

165 173 

Details

281 281 

282`result.usage` contém as contagens de tokens que a API do Claude informa para uma requisição, mais o `model` que respondeu: `input_tokens`, `output_tokens`, `cache_read_input_tokens` e `cache_creation_input_tokens`. O hook também é executado para as requisições de subagentes, então verifique `e.agentId` quando quiser apenas a conversa principal.282`result.usage` contém as contagens de tokens que a API do Claude informa para uma requisição, mais o `model` que respondeu: `input_tokens`, `output_tokens`, `cache_read_input_tokens` e `cache_creation_input_tokens`. O hook também é executado para as requisições de subagentes, então verifique `e.agentId` quando quiser apenas a conversa principal.

283 283 

284Para ver as chamadas de ferramenta que a própria API executou durante a requisição, como chamadas à [ferramenta advisor](/docs/pt/advisor), leia `result.serverToolUses`. O Claude Code não executa essas chamadas, então nenhum hook `tool.call` ou `tool.check` é disparado para elas. O campo está ausente quando a resposta não tem chamadas desse tipo, e requer o Claude Code v2.1.290 ou posterior.

285 

284<h3 id="hook-the-settings-hook-events">286<h3 id="hook-the-settings-hook-events">

285 Tratar os eventos de hooks de configuração287 Tratar os eventos de hooks de configuração

286</h3>288</h3>

Details

209| [`$.ui`](/docs/pt/plugins/mods/interface#pick-where-to-draw) | `resolve`, `invalidate`, `open`, `close`, `panes`, `focus`, `scroll`, `toast`, `status`, `log`, `notice`, `ask`, `copy`, `selection`, `blit` |209| [`$.ui`](/docs/pt/plugins/mods/interface#pick-where-to-draw) | `resolve`, `invalidate`, `open`, `close`, `panes`, `focus`, `scroll`, `toast`, `status`, `log`, `notice`, `ask`, `copy`, `selection`, `blit` |

210| [`$.command`](/docs/pt/plugins/mods/api#add-a-command) | `register`, `run`, `list` |210| [`$.command`](/docs/pt/plugins/mods/api#add-a-command) | `register`, `run`, `list` |

211| [`$.tool`](/docs/pt/plugins/mods/api#add-a-tool) | `register`, `call`, `check`, `list` |211| [`$.tool`](/docs/pt/plugins/mods/api#add-a-tool) | `register`, `call`, `check`, `list` |

212| `$.agent` | `register`, `spawn`, `list` |212| `$.agent` | `register`, `spawn`, `list`. `list()` retorna os subagentes e colegas de equipe desta sessão, cada um com um `status` de `pending`, `running`, `waiting`, `idle`, `completed`, `failed` ou `killed`, sendo que `idle` e `waiting` exigem o Claude Code v2.1.289 ou posterior. |

213| [`$.model`](/docs/pt/plugins/mods/api#call-a-model) | `complete`, `fork`, `classify` |213| [`$.model`](/docs/pt/plugins/mods/api#call-a-model) | `complete`, `fork`, `classify` |

214| [`$.prompt`](/docs/pt/plugins/mods/api#start-a-turn-from-a-background-job) | `submit`, `read`, `fill`, `suggest`, `compose`. O Claude lê o texto de `submit({ text })` após uma frase que indica o seu mod como remetente. `submit({ text, asUser: true })` envia o texto como se fossem palavras do próprio usuário, sem essa frase. |214| [`$.prompt`](/docs/pt/plugins/mods/api#start-a-turn-from-a-background-job) | `submit`, `read`, `fill`, `suggest`, `compose`. O Claude lê o texto de `submit({ text })` após uma frase que indica o seu mod como remetente. `submit({ text, asUser: true })` envia o texto como se fossem palavras do próprio usuário, sem essa frase. |

215| `$.turn` | `abort` |215| `$.turn` | `abort` |


317| Timeout de `$.process.run` | 30 segundos por padrão, no máximo 10 minutos |317| Timeout de `$.process.run` | 30 segundos por padrão, no máximo 10 minutos |

318| `maxTokens` de `$.model.complete` | 1024 por padrão, até 64.000 ou o limite de saída do modelo |318| `maxTokens` de `$.model.complete` | 1024 por padrão, até 64.000 ou o limite de saída do modelo |

319| `$.fs.read` e `$.fs.write` | 4 MiB para um arquivo |319| `$.fs.read` e `$.fs.write` | 4 MiB para um arquivo |

320| O motivo de `drop` de um hook ou o motivo de `deny` de `config.set` | 4.096 caracteres. O final de um motivo mais longo é cortado, e o drop ou deny ainda se aplica. O corte requer o Claude Code v2.1.292 ou posterior e, em versões anteriores, o hook [falha](/docs/pt/plugins/mods/events#handle-a-hook-that-fails) em vez disso. |

320| Texto em uma árvore | Os primeiros 100.000 caracteres são desenhados |321| Texto em uma árvore | Os primeiros 100.000 caracteres são desenhados |

321| O `language` ou `path` de um `Code`, o `value` de uma opção de `Select` ou o `module` de um `Client` | 10.000 caracteres. Se algum for mais longo, o Claude Code [desenha sua própria versão do site](/docs/pt/plugins/mods/interface#build-a-tree-from-elements). |322| O `language` ou `path` de um `Code`, o `value` de uma opção de `Select` ou o `module` de um `Client` | 10.000 caracteres. Se algum for mais longo, o Claude Code [desenha sua própria versão do site](/docs/pt/plugins/mods/interface#build-a-tree-from-elements). |

322| O `href` de um `Link` | 2.048 caracteres. Um `href` mais longo impede que a árvore inteira seja desenhada. |323| O `href` de um `Link` | 2.048 caracteres. Um `href` mais longo impede que a árvore inteira seja desenhada. |

Details

110* `returned neither { value } nor { deny }`: um stub para uma chamada de mods API retornou um valor simples, o que faz o teste falhar110* `returned neither { value } nor { deny }`: um stub para uma chamada de mods API retornou um valor simples, o que faz o teste falhar

111* `no implementation for` seguido por um nome: seu mod fez essa chamada e nenhum stub a responde111* `no implementation for` seguido por um nome: seu mod fez essa chamada e nenhum stub a responde

112 112 

113O kit também exporta mocks em memória que respondem um namespace inteiro para você. `mock.clock(on)` responde [`$.clock`](/docs/pt/plugins/mods/api#run-work-in-the-background), `mock.store(on, { count: 7 })` responde `$.store` de um armazenamento que começa com essas entradas, e `mock.env(on, { CI: 'true' })` responde `$.env.get` dessas variáveis. `mock.clock` retorna um relógio simulado que seu teste avança, então um teste de um temporizador não espera. `mock.store` não retorna nada, então para verificar o que seu mod salvou, escreva os dois stubs `store` você mesmo como o [drawing test](#test-a-drawing) faz.113O kit também exporta mocks prontos para o relógio, o armazenamento, as variáveis de ambiente e as linhas anexadas à conversa:

114 

115* **`mock.clock(on)`**: responde [`$.clock`](/docs/pt/plugins/mods/api#run-work-in-the-background) e retorna um relógio simulado que seu teste avança, então um teste de um temporizador não espera.

116* **`mock.store(on, { count: 7 })`**: responde `$.store` de um armazenamento que começa com essas entradas. Não retorna nada, então para verificar o que seu mod salvou, escreva os dois stubs `store` você mesmo como o [drawing test](#test-a-drawing) faz.

117* **`mock.env(on, { CI: 'true' })`**: responde `$.env.get` dessas variáveis.

118* **`mock.session(on)`**: retorna uma sessão simulada cujo método `appended()` lista as linhas que seu mod adicionou com [`$.session.append`](/docs/pt/plugins/mods/reference#session), da mais antiga para a mais recente; requer Claude Code v2.1.293 ou posterior.

114 119 

115<h3 id="follow-the-test-kit’s-rules">120<h3 id="follow-the-test-kit’s-rules">

116 Seguir as regras do test kit121 Seguir as regras do test kit


168 Procurar o que um stub retorna173 Procurar o que um stub retorna

169</h3>174</h3>

170 175 

171Cada chamada de mods API que seu mod faz em um teste precisa de um stub que responda no lugar do Claude Code, exceto as poucas que o kit responde por si: chamadas [`$.ui.invalidate`](/docs/pt/plugins/mods/interface#redraw-when-something-changes) e [`$.state`](/docs/pt/plugins/mods/interface#keep-state). Para chamadas `$.clock`, use `mock.clock(on)`, ou seu `$.clock.now()` do mod falha com `no implementation for clock.now`.176Cada chamada de mods API que seu mod faz em um teste precisa de um stub que responda no lugar do Claude Code, exceto as poucas que o kit responde por si: chamadas [`$.ui.invalidate`](/docs/pt/plugins/mods/interface#redraw-when-something-changes), [`$.state`](/docs/pt/plugins/mods/interface#keep-state) e `$.session.append`. Para chamadas `$.clock`, use `mock.clock(on)`, ou seu `$.clock.now()` do mod falha com `no implementation for clock.now`.

172 177 

173Esta tabela lista as que mods usam mais. A primeira coluna é a chamada que seu mod faz ou o evento que passa com `next(e)`. A segunda é a função para passar para `on` sob esse nome, então a linha `$.store.get` se torna `on('store.get', ($, e) => ({ value: saved.get(e.key) }))`. Um `'...'` em um stub marca texto para você preencher:178Esta tabela lista as que mods usam mais. A primeira coluna é a chamada que seu mod faz ou o evento que passa com `next(e)`. A segunda é a função para passar para `on` sob esse nome, então a linha `$.store.get` se torna `on('store.get', ($, e) => ({ value: saved.get(e.key) }))`. Um `'...'` em um stub marca texto para você preencher:

174 179 

Details

129* Adicione o marketplace uma vez: `claude plugin marketplace add your-org/your-marketplace`, onde o argumento é um atalho GitHub `owner/repo`, uma URL ou um caminho129* Adicione o marketplace uma vez: `claude plugin marketplace add your-org/your-marketplace`, onde o argumento é um atalho GitHub `owner/repo`, uma URL ou um caminho

130* Instale o plugin: `claude plugin install deploy-helper@your-marketplace`130* Instale o plugin: `claude plugin install deploy-helper@your-marketplace`

131* Ou faça ambos de dentro de uma sessão: `/plugin install deploy-helper --marketplace your-org/your-marketplace`. Requer Claude Code v2.1.275 ou posterior. Veja [Adicione um marketplace e instale em um comando](/docs/pt/plugins/install#add-a-marketplace-and-install-in-one-command)131* Ou faça ambos de dentro de uma sessão: `/plugin install deploy-helper --marketplace your-org/your-marketplace`. Requer Claude Code v2.1.275 ou posterior. Veja [Adicione um marketplace e instale em um comando](/docs/pt/plugins/install#add-a-marketplace-and-install-in-one-command)

132* Ou faça ambos a partir do shell em um único comando: `claude plugin install deploy-helper --marketplace your-org/your-marketplace`. Requer Claude Code v2.1.292 ou posterior

132 133 

133<h3 id="ship-updates-to-users">134<h3 id="ship-updates-to-users">

134 Envie atualizações aos usuários135 Envie atualizações aos usuários

Details

163 `Invalid marketplace source format`163 `Invalid marketplace source format`

164</h3>164</h3>

165 165 

166Você executou `/plugin marketplace add <source>` ou `claude plugin marketplace add <source>`, e Claude Code respondeu `Invalid marketplace source format. Try: owner/repo, https://..., or ./path`.166Você executou `/plugin marketplace add <source>`, `claude plugin marketplace add <source>` ou `claude plugin install <plugin> --marketplace <source>`, e Claude Code respondeu `Invalid marketplace source format. Try: owner/repo, https://..., or ./path`.

167 167 

168Claude Code aceita uma fonte em uma destas formas:168Claude Code aceita uma fonte em uma destas formas:

169 169 


568 `Marketplace "<name>" is already added from a different source`568 `Marketplace "<name>" is already added from a different source`

569</h3>569</h3>

570 570 

571Você confirmou adicionar um marketplace através de [`/plugin install <plugin> --marketplace <source>`](/docs/pt/plugins/install#add-a-marketplace-and-install-in-one-command), e o catálogo que Claude Code buscou dessa fonte tem o mesmo nome que um marketplace que você já adicionou a partir de uma fonte diferente. Claude Code mantém o marketplace existente em vez de substituí-lo, e o plugin não é instalado.571Você nomeou uma nova fonte de marketplace com [`--marketplace <source>` no comando de instalação](/docs/pt/plugins/install#add-a-marketplace-and-install-in-one-command), em uma sessão ou a partir do seu shell. O catálogo que Claude Code buscou dessa fonte tem o mesmo nome que um marketplace que você já adicionou a partir de uma fonte diferente. Claude Code mantém o marketplace existente em vez de substituí-lo, e o plugin não é instalado.

572 572 

573A mensagem completa se parece com isto:573A mensagem completa se parece com isto:

574 574 

sub-agents.md +3 −1

Details

609O modo de permissão da conversa principal decide se o Claude Code usa o valor que você definiu:609O modo de permissão da conversa principal decide se o Claude Code usa o valor que você definiu:

610 610 

611* Quando a conversa principal está em `bypassPermissions`, `acceptEdits` ou no [modo auto](/docs/pt/permission-modes#eliminate-prompts-with-auto-mode), o subagente é executado nesse mesmo modo e o Claude Code ignora o `permissionMode` que você definiu. No modo auto, o classificador avalia as chamadas de ferramenta do subagente com as regras de bloqueio e de permissão da conversa principal. Quando o subagente termina, o classificador também revisa seu trabalho e seu relatório final antes que o relatório seja entregue, conforme descrito em [Como o modo auto lida com subagentes](/docs/pt/permission-modes#eliminate-prompts-with-auto-mode).611* Quando a conversa principal está em `bypassPermissions`, `acceptEdits` ou no [modo auto](/docs/pt/permission-modes#eliminate-prompts-with-auto-mode), o subagente é executado nesse mesmo modo e o Claude Code ignora o `permissionMode` que você definiu. No modo auto, o classificador avalia as chamadas de ferramenta do subagente com as regras de bloqueio e de permissão da conversa principal. Quando o subagente termina, o classificador também revisa seu trabalho e seu relatório final antes que o relatório seja entregue, conforme descrito em [Como o modo auto lida com subagentes](/docs/pt/permission-modes#eliminate-prompts-with-auto-mode).

612* Quando a conversa principal está no modo `default`, `dontAsk` ou `plan`, o subagente é executado no modo de permissão que você definiu, exceto `bypassPermissions`. Um subagente que declara `bypassPermissions` mantém, em vez disso, o modo da conversa principal. A exceção de `bypassPermissions` requer o Claude Code v2.1.267 ou posterior.612* Quando a conversa principal está no modo `default`, `dontAsk` ou `plan`, o subagente é executado no modo de permissão que você definiu. Em vez disso, ele mantém o modo de permissão da conversa principal nestes casos:

613 * Você define `bypassPermissions`. A exceção de `bypassPermissions` requer o Claude Code v2.1.267 ou posterior.

614 * Você define `auto` e o [modo auto não está disponível](/docs/pt/permission-modes#eliminate-prompts-with-auto-mode) para o subagente, como quando um arquivo de configurações define [`disableAutoMode`](/docs/pt/settings-reference#disableautomode) ou o modelo do subagente não suporta o modo auto.

613 615 

614`permissionMode` aceita estes valores, e `manual` como alias para `default`:616`permissionMode` aceita estes valores, e `manual` como alias para `default`:

615 617