6 6
7> Referência completa para mods do Claude Code: estrutura do módulo de hooks, eventos, métodos da API de mods, pontos de renderização, elementos por superfície, limites e configurações.7> Referência completa para mods do Claude Code: estrutura do módulo de hooks, eventos, métodos da API de mods, pontos de renderização, elementos por superfície, limites e configurações.
8 8
9Consulte qualquer evento que um [mod](/docs/pt/plugins/mods/overview.md) pode tratar, método da API de mods que ele pode chamar ou ponto de renderização em que ele pode desenhar. As entradas abrangem a CLI do Claude Code e o aplicativo Desktop a partir da v2.1.290, e a extensão do VS Code a partir da v2.1.299. Cada entrada fornece o nome e uma descrição de uma linha, e aponta para a seção do guia que a explica, quando houver.9Consulte qualquer evento que um [mod](https://code.claude.com/docs/pt/plugins/mods/overview.md) pode tratar, método da API de mods que ele pode chamar ou ponto de renderização em que ele pode desenhar. As entradas abrangem a CLI do Claude Code e o aplicativo Desktop a partir da v2.1.290, e a extensão do VS Code a partir da v2.1.299. Cada entrada fornece o nome e uma descrição de uma linha, e aponta para a seção do guia que a explica, quando houver.
10 10
11> [!NOTE]11> [!NOTE]
12>12>
13> A referência completa são as [declarações TypeScript para mods](https://github.com/anthropics/claude-code/blob/main/mods/types/claude-code.d.ts) do Claude Code, que descrevem cada evento, método e elemento, com exemplos. A cópia no GitHub pode ser mais antiga que a versão do Claude Code que você tem instalada. Quando as duas divergirem, confie [na cópia que o Claude Code grava para a sua versão](/docs/pt/plugins/mods/create.md#get-the-types-for-your-build).13> A referência completa são as [declarações TypeScript para mods](https://github.com/anthropics/claude-code/blob/main/mods/types/claude-code.d.ts) do Claude Code, que descrevem cada evento, método e elemento, com exemplos. A cópia no GitHub pode ser mais antiga que a versão do Claude Code que você tem instalada. Quando as duas divergirem, confie [na cópia que o Claude Code grava para a sua versão](https://code.claude.com/docs/pt/plugins/mods/create.md#get-the-types-for-your-build).
14 14
15## Arquivos15## Arquivos
16 16
18 18
19| Arquivo | Obrigatório | Conteúdo |19| Arquivo | Obrigatório | Conteúdo |
20| :- | :- | :- |20| :- | :- | :- |
21| `.claude-plugin/plugin.json` | Sim | O [manifesto](/docs/pt/plugins/manifest-reference.md) do plugin. Mods não adicionam campos obrigatórios. |21| `.claude-plugin/plugin.json` | Sim | O [manifesto](https://code.claude.com/docs/pt/plugins/manifest-reference.md) do plugin. Mods não adicionam campos obrigatórios. |
22| `hooks/hooks.json` | Sim | `modules`: um array com um caminho, relativo a este arquivo, para o módulo de hooks, como em `"modules": ["./register.js"]`. Também pode conter [hooks de configuração](/docs/pt/hooks.md) em `hooks`. |22| `hooks/hooks.json` | Sim | `modules`: um array com um caminho, relativo a este arquivo, para o módulo de hooks, como em `"modules": ["./register.js"]`. Também pode conter [hooks de configuração](https://code.claude.com/docs/pt/hooks.md) em `hooks`. |
23| O módulo de hooks, como [`hooks/register.js`](/docs/pt/plugins/mods/create#write-a-mod-yourself) | Sim | O ponto de entrada do mod. Exporta `register(on, options)`. Nomeado `.js`, `.mjs`, `.cjs`, `.jsx`, `.ts`, `.mts`, `.cts` ou `.tsx`. Um módulo ES. |23| O módulo de hooks, como [`hooks/register.js`](https://code.claude.com/docs/pt/plugins/mods/create#write-a-mod-yourself) | Sim | O ponto de entrada do mod. Exporta `register(on, options)`. Nomeado `.js`, `.mjs`, `.cjs`, `.jsx`, `.ts`, `.mts`, `.cts` ou `.tsx`. Um módulo ES. |
24| [`types/index.d.ts`](/docs/pt/plugins/mods/interface#declare-the-values), indicado por `types` no manifesto | Quando o mod usa `$.state` ou adiciona um namespace à API de mods | Declara os valores de `PluginState` e qualquer namespace que o mod adiciona |24| [`types/index.d.ts`](https://code.claude.com/docs/pt/plugins/mods/interface#declare-the-values), indicado por `types` no manifesto | Quando o mod usa `$.state` ou adiciona um namespace à API de mods | Declara os valores de `PluginState` e qualquer namespace que o mod adiciona |
25| Arquivos cujos nomes terminam em `.test.ts` ou `.test.tsx` | Não | Testes que o [`claude plugin test`](/docs/pt/plugins/mods/test#write-a-test) executa |25| Arquivos cujos nomes terminam em `.test.ts` ou `.test.tsx` | Não | Testes que o [`claude plugin test`](https://code.claude.com/docs/pt/plugins/mods/test#write-a-test) executa |
26 26
27`register` recebe `on` e `options`. `options` contém os valores dos campos [`userConfig`](/docs/pt/plugins/components#user-configuration) que o manifesto declara, com os valores padrão preenchidos.27`register` recebe `on` e `options`. `options` contém os valores dos campos [`userConfig`](https://code.claude.com/docs/pt/plugins/components#user-configuration) que o manifesto declara, com os valores padrão preenchidos.
28 28
29## A função de hook29## A função de hook
30 30
31Um mod registra cada um de seus hooks, que são manipuladores de eventos, chamando `on` dentro de `register`. `on` recebe o nome do evento, um [matcher](/docs/pt/plugins/mods/events.md#filter-which-events-a-hook-handles) opcional, que é um filtro sobre os campos do evento, e o hook, como em `on('tool.call', { tool: 'Bash' }, async ($, e, next) => next(e))`. `on` retorna um registro com um método, `.catch(handler)`, que define o [manipulador de erros](/docs/pt/plugins/mods/events.md#handle-a-hook-that-fails) do hook.31Um mod registra cada um de seus hooks, que são manipuladores de eventos, chamando `on` dentro de `register`. `on` recebe o nome do evento, um [matcher](https://code.claude.com/docs/pt/plugins/mods/events.md#filter-which-events-a-hook-handles) opcional, que é um filtro sobre os campos do evento, e o hook, como em `on('tool.call', { tool: 'Bash' }, async ($, e, next) => next(e))`. `on` retorna um registro com um método, `.catch(handler)`, que define o [manipulador de erros](https://code.claude.com/docs/pt/plugins/mods/events.md#handle-a-hook-that-fails) do hook.
32 32
33| Argumento | O que é |33| Argumento | O que é |
34| :- | :- |34| :- | :- |
35| [`$`](/docs/pt/plugins/mods/events#how-a-hook-handles-an-event) | A API de mods: todos os métodos em [métodos da API de mods](#mods-api-methods). Escreva cada chamada por completo, namespace e depois método, como em `$.fs.read('notes.md')`. |35| [`$`](https://code.claude.com/docs/pt/plugins/mods/events#how-a-hook-handles-an-event) | A API de mods: todos os métodos em [métodos da API de mods](#mods-api-methods). Escreva cada chamada por completo, namespace e depois método, como em `$.fs.read('notes.md')`. |
36| [`e`](/docs/pt/plugins/mods/events#how-a-hook-handles-an-event) | A entrada do evento, como dados simples profundamente congelados. Para alterá-la, passe uma cópia para `next`. |36| [`e`](https://code.claude.com/docs/pt/plugins/mods/events#how-a-hook-handles-an-event) | A entrada do evento, como dados simples profundamente congelados. Para alterá-la, passe uma cópia para `next`. |
37| [`next(e)`](/docs/pt/plugins/mods/events#how-a-hook-handles-an-event) | O próximo manipulador, como em um middleware. Executa os hooks depois deste e, em seguida, o comportamento do Claude Code. Resolve para o resultado do evento. |37| [`next(e)`](https://code.claude.com/docs/pt/plugins/mods/events#how-a-hook-handles-an-event) | O próximo manipulador, como em um middleware. Executa os hooks depois deste e, em seguida, o comportamento do Claude Code. Resolve para o resultado do evento. |
38| [`next.signal`](/docs/pt/plugins/mods/api#stop-background-work) | Um `AbortSignal` que é abortado quando o evento é abandonado |38| [`next.signal`](https://code.claude.com/docs/pt/plugins/mods/api#stop-background-work) | Um `AbortSignal` que é abortado quando o evento é abandonado |
39| `next.origin` | `{ plugin, tier }` de quem disparou o evento. O próprio Claude Code é `{ plugin: 'engine', tier: 'core' }`. O `tier` de um mod é seu grupo de prioridade na [ordem em que os mods são executados](/docs/pt/plugins/mods/events.md#the-order-mods-run-in): `prepend`, `user`, `append` ou `builtin`. |39| `next.origin` | `{ plugin, tier }` de quem disparou o evento. O próprio Claude Code é `{ plugin: 'engine', tier: 'core' }`. O `tier` de um mod é seu grupo de prioridade na [ordem em que os mods são executados](https://code.claude.com/docs/pt/plugins/mods/events.md#the-order-mods-run-in): `prepend`, `user`, `append` ou `builtin`. |
40| `next.budget` | O limite de tempo do hook em milissegundos: `next.budget.ms` é o limite inteiro e `next.budget.remainingMs` é o que resta agora |40| `next.budget` | O limite de tempo do hook em milissegundos: `next.budget.ms` é o limite inteiro e `next.budget.remainingMs` é o que resta agora |
41| `next.to(e, tier)` | Pula para um tier posterior, que é `append`, `builtin` ou `core`. `next.to(e, 'append')` pula os mods que um usuário instalou. Somente um mod em `prependPlugins` ou `appendPlugins` pode chamá-lo. |41| `next.to(e, tier)` | Pula para um tier posterior, que é `append`, `builtin` ou `core`. `next.to(e, 'append')` pula os mods que um usuário instalou. Somente um mod em `prependPlugins` ou `appendPlugins` pode chamá-lo. |
42| `next.error` | Somente em um manipulador `.catch`. `kind` é `throw` ou `timeout` quando o hook falhou, e `message` é o texto do erro. `kind` é `re-entry` quando o hook foi ignorado porque o evento veio de dentro de uma chamada à API de mods feita por esse hook ou pelo código do seu mod fora de seus hooks. `re-entry` exige o Claude Code v2.1.292 ou posterior. |42| `next.error` | Somente em um manipulador `.catch`. `kind` é `throw` ou `timeout` quando o hook falhou, e `message` é o texto do erro. `kind` é `re-entry` quando o hook foi ignorado porque o evento veio de dentro de uma chamada à API de mods feita por esse hook ou pelo código do seu mod fora de seus hooks. `re-entry` exige o Claude Code v2.1.292 ou posterior. |
43| `next.error.cause` | Definido somente quando `kind` é `re-entry`. `rewritten` se um hook `tool.call` ou [`PreToolUse`](/docs/pt/hooks#pretooluse) alterou a chamada à API de mods da qual o evento veio, ou se um hook `agent.spawn` alterou um agente iniciado por essa chamada. `lent` quando um método que outro mod adiciona à API de mods disparou esse evento, a menos que `rewritten` também se aplique. `lent` exige o Claude Code v2.1.292 ou posterior e `rewritten`, v2.1.300 ou posterior. |43| `next.error.cause` | Definido somente quando `kind` é `re-entry`. `rewritten` se um hook `tool.call` ou [`PreToolUse`](https://code.claude.com/docs/pt/hooks#pretooluse) alterou a chamada à API de mods da qual o evento veio, ou se um hook `agent.spawn` alterou um agente iniciado por essa chamada. `lent` quando um método que outro mod adiciona à API de mods disparou esse evento, a menos que `rewritten` também se aplique. `lent` exige o Claude Code v2.1.292 ou posterior e `rewritten`, v2.1.300 ou posterior. |
44| `next.called` | Somente em um manipulador `.catch`. `true` quando o hook havia chamado `next`. |44| `next.called` | Somente em um manipulador `.catch`. `true` quando o hook havia chamado `next`. |
45 45
46## Eventos46## Eventos
55 55
56| Evento | Dispara quando | Um hook pode retornar |56| Evento | Dispara quando | Um hook pode retornar |
57| :- | :- | :- |57| :- | :- | :- |
58| [`tool.call`](/docs/pt/plugins/mods/events#guard-or-change-a-tool-call) | Uma ferramenta está prestes a ser executada | `next(e)`, `{ deny: reason }` ou `{ result }` |58| [`tool.call`](https://code.claude.com/docs/pt/plugins/mods/events#guard-or-change-a-tool-call) | Uma ferramenta está prestes a ser executada | `next(e)`, `{ deny: reason }` ou `{ result }` |
59| [`tool.check`](/docs/pt/plugins/mods/events#where-settings-hooks-run-in-the-order) | O Claude Code decide se uma chamada de ferramenta pode ser executada, após os hooks `tool.call` e `PreToolUse`. `next(e)` resolve para a decisão a que chegaram as regras, o modo de permissão e esses hooks. | `next(e)` ou `{ decision }`, com `decision` definido como `allow`, `ask` ou `deny` e um `reason` opcional |59| [`tool.check`](https://code.claude.com/docs/pt/plugins/mods/events#where-settings-hooks-run-in-the-order) | O Claude Code decide se uma chamada de ferramenta pode ser executada, após os hooks `tool.call` e `PreToolUse`. `next(e)` resolve para a decisão a que chegaram as regras, o modo de permissão e esses hooks. | `next(e)` ou `{ decision }`, com `decision` definido como `allow`, `ask` ou `deny` e um `reason` opcional |
60| `tool.describe` | Uma vez para cada ferramenta, quando sua descrição é enviada pela primeira vez ao Claude. Uma segunda vez para uma ferramenta MCP quando o Claude a carrega por meio da [busca de ferramentas](/docs/pt/mcp.md#scale-with-mcp-tool-search), com `e.description` definido como o texto que o Claude lê para a ferramenta carregada. | `{ description }`, opcionalmente com `isDeferred` definido como `true` para colocar a ferramenta por trás da busca de ferramentas ou `false` para carregá-la antecipadamente |60| `tool.describe` | Uma vez para cada ferramenta, quando sua descrição é enviada pela primeira vez ao Claude. Uma segunda vez para uma ferramenta MCP quando o Claude a carrega por meio da [busca de ferramentas](https://code.claude.com/docs/pt/mcp.md#scale-with-mcp-tool-search), com `e.description` definido como o texto que o Claude lê para a ferramenta carregada. | `{ description }`, opcionalmente com `isDeferred` definido como `true` para colocar a ferramenta por trás da busca de ferramentas ou `false` para carregá-la antecipadamente |
61 61
62#### Campos de agente e de organização em `tool.check`62#### Campos de agente e de organização em `tool.check`
63 63
64Em um hook `tool.check`, leia estes campos para distinguir a chamada de um subagente da chamada da conversa principal, e para ver se sua organização exige aprovação para uma ferramenta de conector:64Em um hook `tool.check`, leia estes campos para distinguir a chamada de um subagente da chamada da conversa principal, e para ver se sua organização exige aprovação para uma ferramenta de conector:
65 65
66* **`e.agentId`**: definido quando um [subagente](/docs/pt/sub-agents.md) ou um [colega de equipe em processo](/docs/pt/agent-teams.md#choose-a-display-mode) faz a chamada, e ausente quando é a conversa principal que a faz66* **`e.agentId`**: definido quando um [subagente](https://code.claude.com/docs/pt/sub-agents.md) ou um [colega de equipe em processo](https://code.claude.com/docs/pt/agent-teams.md#choose-a-display-mode) faz a chamada, e ausente quando é a conversa principal que a faz
67* **`e.ceiling`**: `ask` para uma ferramenta de conector que sua organização definiu como `ask`, em [sessões nas quais essa configuração chega ao Claude Code](/docs/pt/mcp.md#organization-controls-on-connector-tools)67* **`e.ceiling`**: `ask` para uma ferramenta de conector que sua organização definiu como `ask`, em [sessões nas quais essa configuração chega ao Claude Code](https://code.claude.com/docs/pt/mcp.md#organization-controls-on-connector-tools)
68 68
69Em `tool.check`, `e.agentId` e `e.ceiling` exigem o Claude Code v2.1.290 ou posterior.69Em `tool.check`, `e.agentId` e `e.ceiling` exigem o Claude Code v2.1.290 ou posterior.
70 70
71#### O campo `e.isReadOnly` em `tool.check`71#### O campo `e.isReadOnly` em `tool.check`
72 72
73Em um hook `tool.check`, `e.isReadOnly` é `true` quando a ferramenta informa esta chamada como somente leitura. Caso contrário, o campo fica ausente, e não `false`. O valor é o próprio relato da ferramenta, então leia [Verificar se uma chamada de ferramenta é somente leitura](/docs/pt/plugins/mods/events.md#check-whether-a-tool-call-is-read-only) antes de aprovar uma chamada com base apenas neste campo.73Em um hook `tool.check`, `e.isReadOnly` é `true` quando a ferramenta informa esta chamada como somente leitura. Caso contrário, o campo fica ausente, e não `false`. O valor é o próprio relato da ferramenta, então leia [Verificar se uma chamada de ferramenta é somente leitura](https://code.claude.com/docs/pt/plugins/mods/events.md#check-whether-a-tool-call-is-read-only) antes de aprovar uma chamada com base apenas neste campo.
74 74
75Em `tool.check`, `e.isReadOnly` exige o Claude Code v2.1.304 ou posterior.75Em `tool.check`, `e.isReadOnly` exige o Claude Code v2.1.304 ou posterior.
76 76
80 80
81| Evento | Dispara quando | Um hook pode retornar |81| Evento | Dispara quando | Um hook pode retornar |
82| :- | :- | :- |82| :- | :- | :- |
83| [`prompt.submit`](/docs/pt/plugins/mods/events#rewrite-or-add-to-a-prompt) | Um prompt é enviado | `next({ ...e, text })`, `next({ ...e, context })` ou `{ drop: reason }` |83| [`prompt.submit`](https://code.claude.com/docs/pt/plugins/mods/events#rewrite-or-add-to-a-prompt) | Um prompt é enviado | `next({ ...e, text })`, `next({ ...e, context })` ou `{ drop: reason }` |
84| `prompt.fill`, `prompt.suggest` | Um texto está prestes a entrar na caixa de prompt como rascunho ou como uma sugestão esmaecida | `next(e)` com o texto alterado |84| `prompt.fill`, `prompt.suggest` | Um texto está prestes a entrar na caixa de prompt como rascunho ou como uma sugestão esmaecida | `next(e)` com o texto alterado |
85| `prompt.edit` | O usuário edita a caixa de prompt | `next(e)` |85| `prompt.edit` | O usuário edita a caixa de prompt | `next(e)` |
86| `prompt.autocomplete` | O usuário digita na caixa de prompt e uma palavra termina no cursor. `e.token` é essa palavra. O Claude Code não espera pelo hook: suas próprias linhas de preenchimento automático aparecem primeiro. | `{ suggestions }`, uma lista de linhas `{ text, label, description }` exibidas abaixo das do próprio Claude Code. Escolher uma linha escreve seu `text` sobre a palavra. |86| `prompt.autocomplete` | O usuário digita na caixa de prompt e uma palavra termina no cursor. `e.token` é essa palavra. O Claude Code não espera pelo hook: suas próprias linhas de preenchimento automático aparecem primeiro. | `{ suggestions }`, uma lista de linhas `{ text, label, description }` exibidas abaixo das do próprio Claude Code. Escolher uma linha escreve seu `text` sobre a palavra. |
87| `prompt.compose` | O Claude Code renderiza um system prompt | `{ sections }`, uma lista de `{ id, text, scope }` na ordem em que são enviadas |87| `prompt.compose` | O Claude Code renderiza um system prompt | `{ sections }`, uma lista de `{ id, text, scope }` na ordem em que são enviadas |
88| [`prompt.section`](/docs/pt/plugins/mods/events#rewrite-or-add-to-a-prompt) | Uma vez para cada seção nomeada do system prompt. `e.name` é o `id` da seção em `prompt.compose`. | `{ text }`, ou `{ text: null }` para omitir a seção |88| [`prompt.section`](https://code.claude.com/docs/pt/plugins/mods/events#rewrite-or-add-to-a-prompt) | Uma vez para cada seção nomeada do system prompt. `e.name` é o `id` da seção em `prompt.compose`. | `{ text }`, ou `{ text: null }` para omitir a seção |
89| [`prompt.context`](/docs/pt/plugins/mods/events#rewrite-or-add-to-a-prompt) | Uma vez para cada conversa, para o contexto enviado com a primeira mensagem | `{ blocks }` |89| [`prompt.context`](https://code.claude.com/docs/pt/plugins/mods/events#rewrite-or-add-to-a-prompt) | Uma vez para cada conversa, para o contexto enviado com a primeira mensagem | `{ blocks }` |
90| `prompt.attachment` | O Claude Code adiciona uma mensagem própria para o Claude, como um lembrete. `e.type` indica o tipo e, para os tipos que as declarações de tipos declaram, `e.detail` contém os fatos a partir dos quais o texto foi escrito. | `{ text }`, ou `{ text: null }` para omiti-la |90| `prompt.attachment` | O Claude Code adiciona uma mensagem própria para o Claude, como um lembrete. `e.type` indica o tipo e, para os tipos que as declarações de tipos declaram, `e.detail` contém os fatos a partir dos quais o texto foi escrito. | `{ text }`, ou `{ text: null }` para omiti-la |
91| `prompt.mention` | O Claude Code está prestes a ler um arquivo que um prompt menciona com @. Requer o Claude Code v2.1.290 ou posterior. | `next({ ...e, path })` para ler um arquivo diferente, ou `{ deny: reason }` |91| `prompt.mention` | O Claude Code está prestes a ler um arquivo que um prompt menciona com @. Requer o Claude Code v2.1.290 ou posterior. | `next({ ...e, path })` para ler um arquivo diferente, ou `{ deny: reason }` |
92| [`skill.prompt`](/docs/pt/plugins/mods/events#rewrite-or-add-to-a-prompt) | O texto de uma skill é expandido para o Claude | `{ text }` |92| [`skill.prompt`](https://code.claude.com/docs/pt/plugins/mods/events#rewrite-or-add-to-a-prompt) | O texto de uma skill é expandido para o Claude | `{ text }` |
93| `attribution.text` | O Claude Code compõe o texto de atribuição de um commit ou pull request | `{ text }` |93| `attribution.text` | O Claude Code compõe o texto de atribuição de um commit ou pull request | `{ text }` |
94 94
95#### Campos de origem e de frontmatter em `skill.prompt`95#### Campos de origem e de frontmatter em `skill.prompt`
98 98
99| Campo | Tipo | O que contém |99| Campo | Tipo | O que contém |
100| :- | :- | :- |100| :- | :- | :- |
101| `e.source` | string | Quem fornece a skill: `policySettings`, `userSettings` ou `projectSettings` para uma skill no [local](/docs/pt/skills.md#where-skills-live) corporativo, pessoal ou de projeto, respectivamente. Outras origens fornecem uma palavra como `plugin`, `mcp`, `syncedSkills` ou `built-in`. |101| `e.source` | string | Quem fornece a skill: `policySettings`, `userSettings` ou `projectSettings` para uma skill no [local](https://code.claude.com/docs/pt/skills.md#where-skills-live) corporativo, pessoal ou de projeto, respectivamente. Outras origens fornecem uma palavra como `plugin`, `mcp`, `syncedSkills` ou `built-in`. |
102| `e.pluginName` | string | O nome do plugin, para uma skill cujo `e.source` é `plugin` |102| `e.pluginName` | string | O nome do plugin, para uma skill cujo `e.source` é `plugin` |
103| `e.path` | string | O caminho absoluto do arquivo `SKILL.md` da skill, ou do seu arquivo `.md` para uma skill escrita como um [arquivo de comando](/docs/pt/skills.md#where-skills-live). Ausente quando a skill não tem arquivo nesta máquina, como no caso de uma skill integrada. |103| `e.path` | string | O caminho absoluto do arquivo `SKILL.md` da skill, ou do seu arquivo `.md` para uma skill escrita como um [arquivo de comando](https://code.claude.com/docs/pt/skills.md#where-skills-live). Ausente quando a skill não tem arquivo nesta máquina, como no caso de uma skill integrada. |
104| `e.frontmatter` | object | O frontmatter do arquivo da skill, como dados simples |104| `e.frontmatter` | object | O frontmatter do arquivo da skill, como dados simples |
105| `e.frontmatterProblem` | string | O motivo pelo qual `e.frontmatter` não contém o frontmatter do arquivo ou uma de suas chaves, como em `is a list or a single value, not a table`. Ausente quando `e.frontmatter` contém o frontmatter inteiro ou a skill não tem nenhum. |105| `e.frontmatterProblem` | string | O motivo pelo qual `e.frontmatter` não contém o frontmatter do arquivo ou uma de suas chaves, como em `is a list or a single value, not a table`. Ausente quando `e.frontmatter` contém o frontmatter inteiro ou a skill não tem nenhum. |
106 106
107Um hook pode passar um `text` ou um `frontmatter` alterado para `next`: os hooks depois dele leem ambos, e o Claude lê o `text` final. Um hook que altera qualquer outro campo [falha](/docs/pt/plugins/mods/events.md#handle-a-hook-that-fails).107Um hook pode passar um `text` ou um `frontmatter` alterado para `next`: os hooks depois dele leem ambos, e o Claude lê o `text` final. Um hook que altera qualquer outro campo [falha](https://code.claude.com/docs/pt/plugins/mods/events.md#handle-a-hook-that-fails).
108 108
109Em `skill.prompt`, `e.source`, `e.pluginName`, `e.path`, `e.frontmatter` e `e.frontmatterProblem` exigem o Claude Code v2.1.299 ou posterior.109Em `skill.prompt`, `e.source`, `e.pluginName`, `e.path`, `e.frontmatter` e `e.frontmatterProblem` exigem o Claude Code v2.1.299 ou posterior.
110 110
114 114
115| Evento | Dispara quando | Um hook pode retornar |115| Evento | Dispara quando | Um hook pode retornar |
116| :- | :- | :- |116| :- | :- | :- |
117| [`command.run`](/docs/pt/plugins/mods/api#add-a-command) | Um comando está prestes a ser executado | `{ text }`, `{}` ou `next(e)` |117| [`command.run`](https://code.claude.com/docs/pt/plugins/mods/api#add-a-command) | Um comando está prestes a ser executado | `{ text }`, `{}` ou `next(e)` |
118| `command.describe` | Uma vez para cada comando, para a lista de comandos | `{ description, argumentHint, isHidden }` |118| `command.describe` | Uma vez para cada comando, para a lista de comandos | `{ description, argumentHint, isHidden }` |
119| `config.set` | Uma linha de `/config` está prestes a mudar | `next({ ...e, value })` ou `{ deny: reason }` |119| `config.set` | Uma linha de `/config` está prestes a mudar | `next({ ...e, value })` ou `{ deny: reason }` |
120| `config.describe` | Uma vez para cada linha de `/config` | `{ label, description, isHidden }` |120| `config.describe` | Uma vez para cada linha de `/config` | `{ label, description, isHidden }` |
125 125
126| Evento | Dispara quando | Um hook pode retornar |126| Evento | Dispara quando | Um hook pode retornar |
127| :- | :- | :- |127| :- | :- | :- |
128| [`turn.start`](/docs/pt/plugins/mods/events#follow-a-turn) | Um turno começa | `next(e)` |128| [`turn.start`](https://code.claude.com/docs/pt/plugins/mods/events#follow-a-turn) | Um turno começa | `next(e)` |
129| [`turn.step`](/docs/pt/plugins/mods/events#follow-a-turn) | Uma requisição está prestes a ir para o modelo | `yield* next(e)`, ou `next({ ...e, model })`, `next({ ...e, effort })` |129| [`turn.step`](https://code.claude.com/docs/pt/plugins/mods/events#follow-a-turn) | Uma requisição está prestes a ir para o modelo | `yield* next(e)`, ou `next({ ...e, model })`, `next({ ...e, effort })` |
130| [`turn.complete`](/docs/pt/plugins/mods/events#follow-a-turn) | Um turno terminou | `next(e)`, ou `{ text }` para mostrar uma linha abaixo da resposta |130| [`turn.complete`](https://code.claude.com/docs/pt/plugins/mods/events#follow-a-turn) | Um turno terminou | `next(e)`, ou `{ text }` para mostrar uma linha abaixo da resposta |
131 131
132### Sessão132### Sessão
133 133
135 135
136| Evento | Dispara quando | Um hook pode retornar |136| Evento | Dispara quando | Um hook pode retornar |
137| :- | :- | :- |137| :- | :- | :- |
138| [`session.start`](/docs/pt/plugins/mods/api#add-a-command-or-a-tool) | Uma vez para cada mod carregado, antes do primeiro prompt, e novamente após um recarregamento desse mod. Não após `/clear`, `/resume` ou `/branch`. | `next(e)` |138| [`session.start`](https://code.claude.com/docs/pt/plugins/mods/api#add-a-command-or-a-tool) | Uma vez para cada mod carregado, antes do primeiro prompt, e novamente após um recarregamento desse mod. Não após `/clear`, `/resume` ou `/branch`. | `next(e)` |
139| `session.end` | A sessão termina, ou `/clear`, `/resume` ou `/branch` é executado. `e.reason` é `clear`, `resume`, `logout`, `prompt_input_exit` ou `other`. `/branch` informa `resume`. | `next(e)` |139| `session.end` | A sessão termina, ou `/clear`, `/resume` ou `/branch` é executado. `e.reason` é `clear`, `resume`, `logout`, `prompt_input_exit` ou `other`. `/branch` informa `resume`. | `next(e)` |
140| `session.compact` | A conversa está prestes a ser compactada | `{ skip: reason }` |140| `session.compact` | A conversa está prestes a ser compactada | `{ skip: reason }` |
141| [`session.receive`](/docs/pt/plugins/mods/api#send-and-receive-messages-between-sessions), [`session.send`](/docs/pt/plugins/mods/api#send-and-receive-messages-between-sessions) | Uma mensagem chega de, ou está prestes a ir para, outro agente ou sessão. Consulte [Enviar e receber mensagens entre sessões](/docs/pt/plugins/mods/api.md#send-and-receive-messages-between-sessions). | `{ consumed: reason }` para `receive`, `{ isDelivered: false, reason }` para `send` |141| [`session.receive`](https://code.claude.com/docs/pt/plugins/mods/api#send-and-receive-messages-between-sessions), [`session.send`](https://code.claude.com/docs/pt/plugins/mods/api#send-and-receive-messages-between-sessions) | Uma mensagem chega de, ou está prestes a ir para, outro agente ou sessão. Consulte [Enviar e receber mensagens entre sessões](https://code.claude.com/docs/pt/plugins/mods/api.md#send-and-receive-messages-between-sessions). | `{ consumed: reason }` para `receive`, `{ isDelivered: false, reason }` para `send` |
142| `session.append` | Uma vez para cada linha que a conversa mantém, como um prompt, um bloco de resposta, um resultado de ferramenta ou um aviso, antes de ser armazenada | `next({ ...e, message })` com um `message.content` alterado, para reescrever os blocos de texto da linha ou o `content` de um bloco `tool_result` nela |142| `session.append` | Uma vez para cada linha que a conversa mantém, como um prompt, um bloco de resposta, um resultado de ferramenta ou um aviso, antes de ser armazenada | `next({ ...e, message })` com um `message.content` alterado, para reescrever os blocos de texto da linha ou o `content` de um bloco `tool_result` nela |
143| `session.attach`, `session.detach` | Outro aplicativo se conecta à sessão ou se desconecta dela | `next(e)` |143| `session.attach`, `session.detach` | Outro aplicativo se conecta à sessão ou se desconecta dela | `next(e)` |
144| `session.measure` | Após cada turno e quando o percentual usado de um limite do plano muda | `next(e)` |144| `session.measure` | Após cada turno e quando o percentual usado de um limite do plano muda | `next(e)` |
150| Evento | Dispara quando | Um hook pode retornar |150| Evento | Dispara quando | Um hook pode retornar |
151| :- | :- | :- |151| :- | :- | :- |
152| `agent.offer` | Um tipo de subagente é oferecido ao Claude | `{ isOffered: false }` para retê-lo |152| `agent.offer` | Um tipo de subagente é oferecido ao Claude | `{ isOffered: false }` para retê-lo |
153| `agent.spawn` | Um subagente ou um colega de uma [equipe de agentes](/docs/pt/agent-teams.md) está prestes a iniciar. Para um colega de equipe, `e.isTeammate` é `true`. | `next({ ...e, model })` para escolher seu modelo, ou `{ deny: reason }` |153| `agent.spawn` | Um subagente ou um colega de uma [equipe de agentes](https://code.claude.com/docs/pt/agent-teams.md) está prestes a iniciar. Para um colega de equipe, `e.isTeammate` é `true`. | `next({ ...e, model })` para escolher seu modelo, ou `{ deny: reason }` |
154 154
155Quando o Claude retoma um subagente com a ferramenta [`SendMessage`](/docs/pt/sub-agents#resume-subagents), seu hook `agent.spawn` não é executado novamente. Para recusar as chamadas de `SendMessage` que retomam um subagente, faça a correspondência dessa ferramenta em um hook [`tool.call`](/docs/pt/plugins/mods/events#guard-or-change-a-tool-call).155Quando o Claude retoma um subagente com a ferramenta [`SendMessage`](https://code.claude.com/docs/pt/sub-agents#resume-subagents), seu hook `agent.spawn` não é executado novamente. Para recusar as chamadas de `SendMessage` que retomam um subagente, faça a correspondência dessa ferramenta em um hook [`tool.call`](https://code.claude.com/docs/pt/plugins/mods/events#guard-or-change-a-tool-call).
156 156
157### Interface157### Interface
158 158
159Eventos de interface são disparados quando o Claude Code desenha um ponto de renderização e quando o usuário usa um controle que um mod desenhou. [Desenhar na interface](/docs/pt/plugins/mods/interface.md) mostra o que um hook `ui.render` retorna:159Eventos de interface são disparados quando o Claude Code desenha um ponto de renderização e quando o usuário usa um controle que um mod desenhou. [Desenhar na interface](https://code.claude.com/docs/pt/plugins/mods/interface.md) mostra o que um hook `ui.render` retorna:
160 160
161| Evento | Dispara quando |161| Evento | Dispara quando |
162| :- | :- |162| :- | :- |
163| [`ui.render`](/docs/pt/plugins/mods/interface#pick-where-to-draw) | Um [ponto de renderização](#render-sites) está prestes a ser desenhado |163| [`ui.render`](https://code.claude.com/docs/pt/plugins/mods/interface#pick-where-to-draw) | Um [ponto de renderização](#render-sites) está prestes a ser desenhado |
164| `ui.resolve` | Os mods são carregados, uma vez para cada aplicativo, ponto de renderização e mod. O resultado é a tabela de elementos que `$.ui.resolve(e)` lê. |164| `ui.resolve` | Os mods são carregados, uma vez para cada aplicativo, ponto de renderização e mod. O resultado é a tabela de elementos que `$.ui.resolve(e)` lê. |
165| [`ui.press`](/docs/pt/plugins/mods/interface#respond-to-presses-and-typing), [`ui.input`](/docs/pt/plugins/mods/interface#respond-to-presses-and-typing), [`ui.select`](/docs/pt/plugins/mods/interface#respond-to-presses-and-typing) | Um `Button`, `Input` ou `Select` que um mod desenhou é usado |165| [`ui.press`](https://code.claude.com/docs/pt/plugins/mods/interface#respond-to-presses-and-typing), [`ui.input`](https://code.claude.com/docs/pt/plugins/mods/interface#respond-to-presses-and-typing), [`ui.select`](https://code.claude.com/docs/pt/plugins/mods/interface#respond-to-presses-and-typing) | Um `Button`, `Input` ou `Select` que um mod desenhou é usado |
166| `ui.focus`, `ui.scroll` | O controle em foco ou a posição de rolagem de um painel ou da faixa está prestes a mudar |166| `ui.focus`, `ui.scroll` | O controle em foco ou a posição de rolagem de um painel ou da faixa está prestes a mudar |
167| `ui.close` | Um painel está prestes a fechar. `e.id` é o painel e `e.origin.kind` é `plugin`, `person` ou `unload`. |167| `ui.close` | Um painel está prestes a fechar. `e.id` é o painel e `e.origin.kind` é `plugin`, `person` ou `unload`. |
168| [`ui.message`](/docs/pt/plugins/mods/interface#build-a-tree-from-elements) | Um elemento `Client` envia dados para o seu mod |168| [`ui.message`](https://code.claude.com/docs/pt/plugins/mods/interface#build-a-tree-from-elements) | Um elemento `Client` envia dados para o seu mod |
169| [`ui.fault`](/docs/pt/plugins/mods/interface#redraw-when-something-changes) | Um elemento `Client` que seu mod desenhou falhou ao carregar, desenhar ou executar. `e.phase` é `load`, `render` ou `run`, e `e.reason` é a mensagem de erro. Requer o Claude Code v2.1.289 ou posterior. |169| [`ui.fault`](https://code.claude.com/docs/pt/plugins/mods/interface#redraw-when-something-changes) | Um elemento `Client` que seu mod desenhou falhou ao carregar, desenhar ou executar. `e.phase` é `load`, `render` ou `run`, e `e.reason` é a mensagem de erro. Requer o Claude Code v2.1.289 ou posterior. |
170 170
171### Outros mods171### Outros mods
172 172
174 174
175| Evento | Dispara quando | Um hook pode retornar |175| Evento | Dispara quando | Um hook pode retornar |
176| :- | :- | :- |176| :- | :- | :- |
177| [`plugin.register`](/docs/pt/plugins/mods/admin#enforce-a-policy-with-a-mod-of-your-own) | Um módulo de hooks está prestes a ser carregado. `e.uses` lista seus eventos, chamadas à API de mods, variáveis de ambiente e estado, como o `claude plugin validate` os imprime. Cada chamada é escrita sem o prefixo `$.`, como `fs.read`. | `{ refuse: reason }` |177| [`plugin.register`](https://code.claude.com/docs/pt/plugins/mods/admin#enforce-a-policy-with-a-mod-of-your-own) | Um módulo de hooks está prestes a ser carregado. `e.uses` lista seus eventos, chamadas à API de mods, variáveis de ambiente e estado, como o `claude plugin validate` os imprime. Cada chamada é escrita sem o prefixo `$.`, como `fs.read`. | `{ refuse: reason }` |
178| `engine.create` | A API de mods está sendo construída para este mod | Uma API de mods alterada, para adicionar um namespace. Um mod fora do [nível](#the-hook-function) `user` também pode reter um. |178| `engine.create` | A API de mods está sendo construída para este mod | Uma API de mods alterada, para adicionar um namespace. Um mod fora do [nível](#the-hook-function) `user` também pode reter um. |
179 179
180Quando o hook de outro mod chama um método em um namespace que você adicionou em `engine.create`, as chamadas `$` do seu método são executadas no contexto desse hook até que todos os hooks nesse evento retornem. Por exemplo, um caminho relativo é resolvido em relação ao diretório de trabalho desse hook, e `$.prompt.submit` é rejeitado enquanto o turno está aguardando esse hook. As chamadas que seu método faz depois disso são executadas no próprio contexto do seu mod.180Quando o hook de outro mod chama um método em um namespace que você adicionou em `engine.create`, as chamadas `$` do seu método são executadas no contexto desse hook até que todos os hooks nesse evento retornem. Por exemplo, um caminho relativo é resolvido em relação ao diretório de trabalho desse hook, e `$.prompt.submit` é rejeitado enquanto o turno está aguardando esse hook. As chamadas que seu método faz depois disso são executadas no próprio contexto do seu mod.
189 189
190### Eventos de hooks de configuração190### Eventos de hooks de configuração
191 191
192Cada [evento de hook de configuração](/docs/pt/hooks.md#hook-events) é um evento chamado `classic.<Event>`, como `classic.Stop` ou `classic.PostToolUse`. `e` é o JSON de stdin do hook.192Cada [evento de hook de configuração](https://code.claude.com/docs/pt/hooks.md#hook-events) é um evento chamado `classic.<Event>`, como `classic.Stop` ou `classic.PostToolUse`. `e` é o JSON de stdin do hook.
193 193
194### Chamadas à API de mods194### Chamadas à API de mods
195 195
197 197
198## Métodos da API de mods198## Métodos da API de mods
199 199
200A API de mods é o argumento `$` que todo hook recebe. Seus métodos estão agrupados em namespaces, como `$.ui`. Esta tabela lista os métodos de cada namespace pelo nome, então `open` na linha de `$.ui` é a chamada `$.ui.open(...)`. Os guias mostram os mais comuns em uso, e [os tipos para o seu build](/docs/pt/plugins/mods/create.md#get-the-types-for-your-build) documentam cada método com um exemplo.200A API de mods é o argumento `$` que todo hook recebe. Seus métodos estão agrupados em namespaces, como `$.ui`. Esta tabela lista os métodos de cada namespace pelo nome, então `open` na linha de `$.ui` é a chamada `$.ui.open(...)`. Os guias mostram os mais comuns em uso, e [os tipos para o seu build](https://code.claude.com/docs/pt/plugins/mods/create.md#get-the-types-for-your-build) documentam cada método com um exemplo.
201 201
202| Namespace | Métodos |202| Namespace | Métodos |
203| :- | :- |203| :- | :- |
204| `$.plugin` | `name`, `root`: o nome e o diretório deste plugin |204| `$.plugin` | `name`, `root`: o nome e o diretório deste plugin |
205| [`$.ui`](/docs/pt/plugins/mods/interface#pick-where-to-draw) | `resolve`, `invalidate`, `open`, `close`, `panes`, `focus`, `scroll`, `toast`, `notify`, `status`, `log`, `notice`, `ask`, `copy`, `selection`, `blit` |205| [`$.ui`](https://code.claude.com/docs/pt/plugins/mods/interface#pick-where-to-draw) | `resolve`, `invalidate`, `open`, `close`, `panes`, `focus`, `scroll`, `toast`, `notify`, `status`, `log`, `notice`, `ask`, `copy`, `selection`, `blit` |
206| [`$.command`](/docs/pt/plugins/mods/api#add-a-command) | `register`, `run`, `list` |206| [`$.command`](https://code.claude.com/docs/pt/plugins/mods/api#add-a-command) | `register`, `run`, `list` |
207| [`$.tool`](/docs/pt/plugins/mods/api#add-a-tool) | `register`, `call`, `check`, `list` |207| [`$.tool`](https://code.claude.com/docs/pt/plugins/mods/api#add-a-tool) | `register`, `call`, `check`, `list` |
208| `$.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. |208| `$.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. |
209| [`$.model`](/docs/pt/plugins/mods/api#call-a-model) | `complete`, `fork`, `classify` |209| [`$.model`](https://code.claude.com/docs/pt/plugins/mods/api#call-a-model) | `complete`, `fork`, `classify` |
210| [`$.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. |210| [`$.prompt`](https://code.claude.com/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. |
211| `$.turn` | `abort` |211| `$.turn` | `abort` |
212| [`$.session`](/docs/pt/plugins/mods/api#send-and-receive-messages-between-sessions) | `messages`, `cwd`, `root`, `model`, `turns`, `id`, `repo`, `surfaces`, `usage`, `version`, `compact`, `send`, `append`, `authorize`. `usage()` retorna `{ startedAt, context, rateLimits, cost }`: `context` tem `tokens`, `window` e `percent`, e `rateLimits` é uma lista de `{ kind, percentUsed, resetsAt }`. |212| [`$.session`](https://code.claude.com/docs/pt/plugins/mods/api#send-and-receive-messages-between-sessions) | `messages`, `cwd`, `root`, `model`, `turns`, `id`, `repo`, `surfaces`, `usage`, `version`, `compact`, `send`, `append`, `authorize`. `usage()` retorna `{ startedAt, context, rateLimits, cost }`: `context` tem `tokens`, `window` e `percent`, e `rateLimits` é uma lista de `{ kind, percentUsed, resetsAt }`. |
213| `$.config` | `list`, `set` |213| `$.config` | `list`, `set` |
214| [`$.settings`](/docs/pt/plugins/mods/api#reach-files-processes-and-the-network) | `read` |214| [`$.settings`](https://code.claude.com/docs/pt/plugins/mods/api#reach-files-processes-and-the-network) | `read` |
215| [`$.env`](/docs/pt/plugins/mods/api#reach-files-processes-and-the-network) | `get`, `set` |215| [`$.env`](https://code.claude.com/docs/pt/plugins/mods/api#reach-files-processes-and-the-network) | `get`, `set` |
216| [`$.fs`](/docs/pt/plugins/mods/api#reach-files-processes-and-the-network) | `read`, `write`, `list`, `exists`, `stat`, `ancestors`. `write` não é atômico: ele substitui o conteúdo do arquivo no local, então outro processo pode ler um arquivo parcialmente gravado. Mantenha dados que várias sessões alteram em `$.store`. |216| [`$.fs`](https://code.claude.com/docs/pt/plugins/mods/api#reach-files-processes-and-the-network) | `read`, `write`, `list`, `exists`, `stat`, `ancestors`. `write` não é atômico: ele substitui o conteúdo do arquivo no local, então outro processo pode ler um arquivo parcialmente gravado. Mantenha dados que várias sessões alteram em `$.store`. |
217| [`$.store`](/docs/pt/plugins/mods/interface#keep-state) | `get`, `set`, `delete`, `keys`. Um armazenamento de chave-valor compartilhado por todas as sessões na máquina. Consulte [Salvar a partir de mais de uma sessão](/docs/pt/plugins/mods/interface.md#save-from-more-than-one-session). |217| [`$.store`](https://code.claude.com/docs/pt/plugins/mods/interface#keep-state) | `get`, `set`, `delete`, `keys`. Um armazenamento de chave-valor compartilhado por todas as sessões na máquina. Consulte [Salvar a partir de mais de uma sessão](https://code.claude.com/docs/pt/plugins/mods/interface.md#save-from-more-than-one-session). |
218| [`$.state`](/docs/pt/plugins/mods/interface#keep-a-value-in-\$-state) | Estado reativo: `get`, `set`, com os auxiliares `atom`, `read`, `update`, `derive` e `memberOf` importados de `claude-code` |218| [`$.state`](https://code.claude.com/docs/pt/plugins/mods/interface#keep-a-value-in-\$-state) | Estado reativo: `get`, `set`, com os auxiliares `atom`, `read`, `update`, `derive` e `memberOf` importados de `claude-code` |
219| [`$.clock`](/docs/pt/plugins/mods/api#run-work-in-the-background) | `now`, `sleep`, `after`, `every` |219| [`$.clock`](https://code.claude.com/docs/pt/plugins/mods/api#run-work-in-the-background) | `now`, `sleep`, `after`, `every` |
220| [`$.http`](/docs/pt/plugins/mods/api#reach-files-processes-and-the-network) | `fetch` |220| [`$.http`](https://code.claude.com/docs/pt/plugins/mods/api#reach-files-processes-and-the-network) | `fetch` |
221| [`$.process`](/docs/pt/plugins/mods/api#reach-files-processes-and-the-network) | `run`, `spawn` |221| [`$.process`](https://code.claude.com/docs/pt/plugins/mods/api#reach-files-processes-and-the-network) | `run`, `spawn` |
222| [`$.mcp`](/docs/pt/plugins/mods/api#reach-files-processes-and-the-network) | `call`, `connect`. `connect(server)` conecta um servidor MCP que o manifesto do seu próprio plugin lista. |222| [`$.mcp`](https://code.claude.com/docs/pt/plugins/mods/api#reach-files-processes-and-the-network) | `call`, `connect`. `connect(server)` conecta um servidor MCP que o manifesto do seu próprio plugin lista. |
223| `$.audio` | `play`, `speak` |223| `$.audio` | `play`, `speak` |
224| `$.telemetry` | `log`, `mark`. Um registro só é enviado quando o Claude Code ou um mod integrado faz a chamada. |224| `$.telemetry` | `log`, `mark`. Um registro só é enviado quando o Claude Code ou um mod integrado faz a chamada. |
225 225
226## Pontos de renderização226## Pontos de renderização
227 227
228Um ponto de renderização é um ponto de extensão na interface do Claude Code. Cada linha é um valor de `e.component` em um hook `ui.render`, com os campos de `e.props` e os aplicativos que o renderizam. `e.surface` indica o aplicativo que está desenhando, como `terminal`, `desktop` ou `vscode`. [Alterar o que o Claude Code já desenha](/docs/pt/plugins/mods/interface.md#change-what-claude-code-already-draws) mostra o que um hook pode fazer em um ponto, com um exemplo de cada opção.228Um ponto de renderização é um ponto de extensão na interface do Claude Code. Cada linha é um valor de `e.component` em um hook `ui.render`, com os campos de `e.props` e os aplicativos que o renderizam. `e.surface` indica o aplicativo que está desenhando, como `terminal`, `desktop` ou `vscode`. [Alterar o que o Claude Code já desenha](https://code.claude.com/docs/pt/plugins/mods/interface.md#change-what-claude-code-already-draws) mostra o que um hook pode fazer em um ponto, com um exemplo de cada opção.
229 229
230A renderização na extensão do VS Code requer a versão 2.1.299 ou posterior da extensão. Uma sessão que [não busca feature flags](/docs/pt/env-vars.md#features-that-need-feature-flag-fetching) precisa da versão 2.1.304 ou posterior. [Desenhar na extensão do VS Code](/docs/pt/plugins/mods/interface.md#draw-in-the-vs-code-extension) lista o que a extensão desenha de forma diferente.230A renderização na extensão do VS Code requer a versão 2.1.299 ou posterior da extensão. Uma sessão que [não busca feature flags](https://code.claude.com/docs/pt/env-vars.md#features-that-need-feature-flag-fetching) precisa da versão 2.1.304 ou posterior. [Desenhar na extensão do VS Code](https://code.claude.com/docs/pt/plugins/mods/interface.md#draw-in-the-vs-code-extension) lista o que a extensão desenha de forma diferente.
231 231
232| Ponto | `e.props` | `e.requestId` | Renderizado em |232| Ponto | `e.props` | `e.requestId` | Renderizado em |
233| :- | :- | :- | :- |233| :- | :- | :- | :- |
234| [`Pane`](/docs/pt/plugins/mods/interface#pick-where-to-draw) | `title`, `isFocused`, `bodyColumns`, `placement`, `scroll`, `view` | O `id` do painel | Terminal, Desktop, VS Code |234| [`Pane`](https://code.claude.com/docs/pt/plugins/mods/interface#pick-where-to-draw) | `title`, `isFocused`, `bodyColumns`, `placement`, `scroll`, `view` | O `id` do painel | Terminal, Desktop, VS Code |
235| [`AbovePrompt`](/docs/pt/plugins/mods/interface#pick-where-to-draw) | `hasSurvey`, `isWorking`, `maxRows`, `bodyColumns`, `scroll`, `view` | Uma instância | Terminal, Desktop |235| [`AbovePrompt`](https://code.claude.com/docs/pt/plugins/mods/interface#pick-where-to-draw) | `hasSurvey`, `isWorking`, `maxRows`, `bodyColumns`, `scroll`, `view` | Uma instância | Terminal, Desktop |
236| `UserMessage` | `text`, `origin`, `isExpanded` e `task` ou `from` conforme a origem | O id da mensagem | Terminal, Desktop, VS Code |236| `UserMessage` | `text`, `origin`, `isExpanded` e `task` ou `from` conforme a origem | O id da mensagem | Terminal, Desktop, VS Code |
237| `AssistantMessage` | O texto da resposta | O id da mensagem | Terminal, Desktop, VS Code |237| `AssistantMessage` | O texto da resposta | O id da mensagem | Terminal, Desktop, VS Code |
238| `ToolUse`, `ToolResult`, `ToolGroup` | O nome, a entrada e o resultado da ferramenta | O id da chamada de ferramenta | Terminal, Desktop, VS Code |238| `ToolUse`, `ToolResult`, `ToolGroup` | O nome, a entrada e o resultado da ferramenta | O id da chamada de ferramenta | Terminal, Desktop, VS Code |
239| `CommandOutput` | `command`, `text` | O id da mensagem | Terminal, Desktop |239| `CommandOutput` | `command`, `text` | O id da mensagem | Terminal, Desktop |
240| [`AskUserQuestion`](/docs/pt/plugins/mods/interface#change-what-claude-code-already-draws) | A pergunta e as opções | O id da chamada de ferramenta | Terminal, Desktop, VS Code |240| [`AskUserQuestion`](https://code.claude.com/docs/pt/plugins/mods/interface#change-what-claude-code-already-draws) | A pergunta e as opções | O id da chamada de ferramenta | Terminal, Desktop, VS Code |
241| `ToolProgress` | `kind` | O id da chamada de ferramenta | Terminal |241| `ToolProgress` | `kind` | O id da chamada de ferramenta | Terminal |
242| [`Spinner`](/docs/pt/plugins/mods/interface#change-what-claude-code-already-draws) | `word`, `message`, `suffix`, `mode` | O id do agente | Terminal, Desktop, VS Code |242| [`Spinner`](https://code.claude.com/docs/pt/plugins/mods/interface#change-what-claude-code-already-draws) | `word`, `message`, `suffix`, `mode` | O id do agente | Terminal, Desktop, VS Code |
243| `TurnDuration` | `word`, `durationMs` | O id da mensagem | Terminal |243| `TurnDuration` | `word`, `durationMs` | O id da mensagem | Terminal |
244| `InfoNotice` | `text`, `command` | O id da mensagem | Terminal |244| `InfoNotice` | `text`, `command` | O id da mensagem | Terminal |
245| `SessionMode` | `modes` | Uma instância | Terminal, Desktop |245| `SessionMode` | `modes` | Uma instância | Terminal, Desktop |
251 251
252* **Largura de um `Pane` ou da faixa**: desenhe até `e.props.bodyColumns`252* **Largura de um `Pane` ou da faixa**: desenhe até `e.props.bodyColumns`
253* **Altura de um `Pane` ao lado da transcrição**: quando `e.props.placement` é `'dock'`, `e.props.scroll.bodyRows` é o número de linhas que o painel tem para a sua árvore253* **Altura de um `Pane` ao lado da transcrição**: quando `e.props.placement` é `'dock'`, `e.props.scroll.bodyRows` é o número de linhas que o painel tem para a sua árvore
254* **Altura de um `Pane` acima do prompt**: quando `e.props.placement` é `'inline'`, o painel cresce com a sua árvore até um limite, e `bodyRows` é esse limite. Para solicitar um limite diferente, consulte o [campo `rows` de `$.ui.open`](/docs/pt/plugins/mods/interface#open-a-pane-at-the-right-time).254* **Altura de um `Pane` acima do prompt**: quando `e.props.placement` é `'inline'`, o painel cresce com a sua árvore até um limite, e `bodyRows` é esse limite. Para solicitar um limite diferente, consulte o [campo `rows` de `$.ui.open`](https://code.claude.com/docs/pt/plugins/mods/interface#open-a-pane-at-the-right-time).
255 255
256Uma árvore mais alta que o painel rola como um todo.256Uma árvore mais alta que o painel rola como um todo.
257 257
258## Elementos258## Elementos
259 259
260Elementos são os blocos de construção de uma árvore que um hook `ui.render` retorna, e você os obtém de `$.ui.resolve(e)`. [Construir uma árvore a partir de elementos](/docs/pt/plugins/mods/interface.md#build-a-tree-from-elements) mostra os mais comuns com a forma como o terminal os desenha, e a [galeria da interface](/docs/pt/plugins/mods/gallery.md) tem capturas de tela da maioria. Uma marca de seleção significa que o aplicativo pode desenhar o elemento.260Elementos são os blocos de construção de uma árvore que um hook `ui.render` retorna, e você os obtém de `$.ui.resolve(e)`. [Construir uma árvore a partir de elementos](https://code.claude.com/docs/pt/plugins/mods/interface.md#build-a-tree-from-elements) mostra os mais comuns com a forma como o terminal os desenha, e a [galeria da interface](https://code.claude.com/docs/pt/plugins/mods/gallery.md) tem capturas de tela da maioria. Uma marca de seleção significa que o aplicativo pode desenhar o elemento.
261 261
262| Elemento | Props principais | Terminal | Desktop | VS Code |262| Elemento | Props principais | Terminal | Desktop | VS Code |
263| :- | :- | :-: | :-: | :-: |263| :- | :- | :-: | :-: | :-: |
264| [`Box`](/docs/pt/plugins/mods/interface#build-a-tree-from-elements) | `key`, layout flex, [`gap`, `padding`, `margin`](#box-spacing-steps), `width`, `height`, [`borderStyle`](#box-border-styles), `backgroundColor`, `position`, `hover` | ✓ | ✓ | ✓ |264| [`Box`](https://code.claude.com/docs/pt/plugins/mods/interface#build-a-tree-from-elements) | `key`, layout flex, [`gap`, `padding`, `margin`](#box-spacing-steps), `width`, `height`, `minWidth`, `minHeight`, [`borderStyle`](#box-border-styles), `borderColor`, `borderDimColor`, `backgroundColor`, `position`, `top`, `left`, `right`, `bottom`, `overflow`, `display`, `hover` | ✓ | ✓ | ✓ |
265| [`Text`](/docs/pt/plugins/mods/interface#build-a-tree-from-elements) | `color`, `backgroundColor`, [`bold`](#text-bold), `italic`, `underline`, `dimColor`, `inverse`, `wrap`, [`size`, `weight`, `mono`, `tabular`](#text-typography) | ✓ | ✓ | ✓ |265| [`Text`](https://code.claude.com/docs/pt/plugins/mods/interface#build-a-tree-from-elements) | `color`, `backgroundColor`, [`bold`](#text-bold), `italic`, `underline`, `strikethrough`, `dimColor`, `inverse`, `wrap`, [`size`, `weight`, `mono`, `tabular`](#text-typography), `hover` | ✓ | ✓ | ✓ |
266| [`Button`](/docs/pt/plugins/mods/interface#respond-to-presses-and-typing) | `key`, `label`, `onPress`, `hotkey`, `plain`, `dimColor`, `autoFocus`, `action` | ✓ | ✓ | ✓ |266| [`Button`](https://code.claude.com/docs/pt/plugins/mods/interface#respond-to-presses-and-typing) | `key`, `label`, `onPress`, `hotkey`, `plain`, `dimColor`, `autoFocus`, `action`, `hover` | ✓ | ✓ | ✓ |
267| [`Link`](/docs/pt/plugins/mods/interface#link-in-the-desktop-app) | `href`, `label`. Consulte [Limites](#limits). | ✓ | ✓ | ✓ |267| [`Link`](https://code.claude.com/docs/pt/plugins/mods/interface#link-in-the-desktop-app) | `href`, `label`. Consulte [Limites](#limits). | ✓ | ✓ | ✓ |
268| [`Code`](/docs/pt/plugins/mods/gallery#show-code-and-changes) | `source`, `language`, `path`, `startLine`, `format`, `wrap` | ✓ | ✓ | ✓ |268| [`Code`](https://code.claude.com/docs/pt/plugins/mods/gallery#show-code-and-changes) | `source`, `language`, `path`, `startLine`, `format`, `wrap` | ✓ | ✓ | ✓ |
269| `Markdown` | `text`, `key`, `dimColor`, `onLinkPress`, `pressableLinks` | ✓ | ✓ | ✓ |269| `Markdown` | `text`, `key`, `dimColor`, `onLinkPress`, `pressableLinks` | ✓ | ✓ | ✓ |
270| [`Input`](/docs/pt/plugins/mods/interface#take-typed-input-and-draw-a-row-for-each-item) | `key`, `label`, `placeholder`, `value`, `submitLabel`, `onSubmit`, `onInput`, `autoFocus` | ✓ | ✓ | ✓ |270| [`Input`](https://code.claude.com/docs/pt/plugins/mods/interface#take-typed-input-and-draw-a-row-for-each-item) | `key`, `label`, `placeholder`, `value`, `submitLabel`, `onSubmit`, `onInput`, `autoFocus` | ✓ | ✓ | ✓ |
271| `Select` | `key`, `label`, `options`, `value`, `onSelect`, `autoFocus` | ✓ | ✓ | ✓ |271| `Select` | `key`, `label`, `options`, `value`, `onSelect`, `autoFocus` | ✓ | ✓ | ✓ |
272| `Svg` | Um documento SVG, até 131.072 caracteres | | ✓ | ✓ |272| `Svg` | um `source` de marcação SVG de até 131.072 caracteres, texto `alt`, `width`, `height` e `isInteractive` | | ✓ | ✓ |
273| [`Client`](/docs/pt/plugins/mods/interface#build-a-tree-from-elements) | `module`, `key` | ✓ | ✓ | |273| [`Client`](https://code.claude.com/docs/pt/plugins/mods/interface#build-a-tree-from-elements) | `module`, `key`, `props`, `width`, `height`, `flexGrow` | ✓ | ✓ | |
274| [`Raster`](/docs/pt/plugins/mods/interface#draw-a-grid-of-colored-cells) | `key`, `columns` até 512, `rows` até 256, `cells`. Consulte [Desenhar uma grade de células coloridas](/docs/pt/plugins/mods/interface.md#draw-a-grid-of-colored-cells). | ✓ | | |274| [`Raster`](https://code.claude.com/docs/pt/plugins/mods/interface#draw-a-grid-of-colored-cells) | `key`, `columns` até 512, `rows` até 256, `cells`. Consulte [Desenhar uma grade de células coloridas](https://code.claude.com/docs/pt/plugins/mods/interface.md#draw-a-grid-of-colored-cells). | ✓ | | |
275| `Image` | Bytes PNG ou RGBA até 2 MiB, ou um caminho de arquivo, `columns` e `rows` até 255, e texto `alt`. Consulte [quais terminais o desenham](/docs/pt/plugins/mods/gallery.md#image-and-client). | ✓ | | |275| `Image` | `key`, um `source` como bytes PNG ou RGBA de até 2 MiB, ou um caminho de arquivo, `columns` e `rows` até 255, e texto `alt`. Consulte [quais terminais o desenham](https://code.claude.com/docs/pt/plugins/mods/gallery.md#image-and-client). | ✓ | | |
276 276
277Mais regras de `Button`: `action` indica uma das próprias [ações de atalho de teclado](/docs/pt/keybindings.md) do Claude Code, e o atalho do usuário para ela pressiona o botão quando esse atalho é um acorde ou uma tecla com modificador. Um `hotkey` numérico em um botão na faixa também é acionado quando o usuário digita apenas esse dígito em um prompt vazio e faz uma pausa. Quando dois botões em um mesmo desenho indicam o mesmo `hotkey`, o posterior fica com ele. `autoFocus` aceita apenas `true` em qualquer controle, então omita a prop para deixá-lo desativado.277Mais regras de `Button`:
278
279* **`action`**: indica uma das próprias [ações de atalho de teclado](https://code.claude.com/docs/pt/keybindings.md) do Claude Code, e o atalho do usuário para ela pressiona o botão quando esse atalho é um acorde ou uma tecla com modificador
280* **Hotkeys numéricos na faixa**: um `hotkey` numérico em um botão na faixa também é acionado quando o usuário digita apenas esse dígito em um prompt vazio e faz uma pausa
281* **Uma faixa recolhida**: enquanto a faixa está [recolhida](https://code.claude.com/docs/pt/plugins/mods/interface.md#when-the-user-collapses-the-band), nem um atalho de `action` nem um hotkey pressiona um botão nela
282* **Dois botões com o mesmo hotkey**: quando dois botões em um mesmo desenho indicam o mesmo `hotkey`, o posterior fica com ele
283
284`autoFocus` aceita apenas `true` em qualquer controle, então omita a prop para deixá-lo desativado.
278 285
279A extensão do VS Code ignora algumas props de elementos e desenha o elemento como se você as tivesse omitido:286A extensão do VS Code ignora algumas props de elementos e desenha o elemento como se você as tivesse omitido:
280 287
281* **`Box`**: `position` e `hover`288* **`Box`**: `position` com seus `top`, `left`, `right` e `bottom`, `alignSelf`, `borderDimColor` e `hover`
282* **`Text`**: `size`, `mono` e `tabular`289* **`Text`**: `size`, `mono`, `tabular` e `hover`
283* **`Button`**: `hotkey`, `plain`, `autoFocus` e `action`, então o usuário pressiona um botão ali com um clique, ou com Enter quando ele estiver com o foco290* **`Button`**: `hotkey`, `plain`, `autoFocus`, `action` e `hover`, então o usuário pressiona um botão ali com um clique, ou com Enter quando ele estiver com o foco
284* **`Code`**: `language`, `path`, `startLine`, `format` e `wrap`, então o código é desenhado sem cores nem números de linha, e um bloco `format: 'diff'` mostra o texto bruto do diff291* **`Code`**: `language`, `path`, `startLine`, `format` e `wrap`, então o código é desenhado sem cores nem números de linha, e um bloco `format: 'diff'` mostra o texto bruto do diff
285* **`Input` e `Select`**: `autoFocus`292* **`Input` e `Select`**: `autoFocus`
293* **`Svg`**: `isInteractive`
286 294
287### Estilos de borda de `Box`295### Estilos de borda de `Box`
288 296
317 325
318Se você definir `gap`, `padding` ou `margin` como um passo, o passo se aplica na horizontal e na vertical ao mesmo tempo. Por exemplo, no terminal e na extensão do VS Code, `padding: 'md'` equivale a duas células de cada lado e uma linha acima e abaixo.326Se você definir `gap`, `padding` ou `margin` como um passo, o passo se aplica na horizontal e na vertical ao mesmo tempo. Por exemplo, no terminal e na extensão do VS Code, `padding: 'md'` equivale a duas células de cada lado e uma linha acima e abaixo.
319 327
320Nomes de passos exigem o Claude Code v2.1.299 ou posterior. Em uma versão anterior, o Claude Code [desenha sua própria versão do site](/docs/pt/plugins/mods/interface.md#build-a-tree-from-elements) no lugar de uma árvore que usa um nome de passo.328Nomes de passos exigem o Claude Code v2.1.299 ou posterior. Em uma versão anterior, o Claude Code [desenha sua própria versão do site](https://code.claude.com/docs/pt/plugins/mods/interface.md#build-a-tree-from-elements) no lugar de uma árvore que usa um nome de passo.
321 329
322### Props de tipografia de `Text`330### Props de tipografia de `Text`
323 331
330| `mono` | `true` para pedir a fonte monoespaçada do aplicativo | Ignorada: o terminal é sempre monoespaçado | Ignorada, então o texto mantém a fonte própria da extensão |338| `mono` | `true` para pedir a fonte monoespaçada do aplicativo | Ignorada: o terminal é sempre monoespaçado | Ignorada, então o texto mantém a fonte própria da extensão |
331| `tabular` | `true` para pedir dígitos de largura igual, para que um número que é atualizado no lugar ou uma coluna de números permaneça alinhado | Ignorada: os dígitos do terminal já têm uma célula de largura | Ignorada |339| `tabular` | `true` para pedir dígitos de largura igual, para que um número que é atualizado no lugar ou uma coluna de números permaneça alinhado | Ignorada: os dígitos do terminal já têm uma célula de largura | Ignorada |
332 340
333Essas quatro props exigem o Claude Code v2.1.299 ou posterior. Em uma versão anterior, o Claude Code [desenha sua própria versão do site](/docs/pt/plugins/mods/interface.md#build-a-tree-from-elements) no lugar de uma árvore que define `size`, `weight`, `mono` ou `tabular`.341Essas quatro props exigem o Claude Code v2.1.299 ou posterior. Em uma versão anterior, o Claude Code [desenha sua própria versão do site](https://code.claude.com/docs/pt/plugins/mods/interface.md#build-a-tree-from-elements) no lugar de uma árvore que define `size`, `weight`, `mono` ou `tabular`.
334 342
335#### Substituir `bold` por `weight`343#### Substituir `bold` por `weight`
336 344
337`bold` em um `Text` foi descontinuado em favor de `weight` e ainda funciona. Para substituí-lo em um `Text` sem `weight`, altere `bold: true` para `weight: 'semibold'` para obter o mesmo resultado no Claude Code v2.1.299 ou posterior.345`bold` em um `Text` foi descontinuado em favor de `weight` e ainda funciona. Para substituí-lo em um `Text` sem `weight`, altere `bold: true` para `weight: 'semibold'` para obter o mesmo resultado no Claude Code v2.1.299 ou posterior.
338 346
339Em uma versão anterior à v2.1.299, uma árvore que define `weight` não é desenhada, e o Claude Code [desenha sua própria versão do site](/docs/pt/plugins/mods/interface.md#build-a-tree-from-elements) em vez dela. Se você definir tanto `bold` quanto `weight` em um `Text`, `bold` não tem efeito.347Em uma versão anterior à v2.1.299, uma árvore que define `weight` não é desenhada, e o Claude Code [desenha sua própria versão do site](https://code.claude.com/docs/pt/plugins/mods/interface.md#build-a-tree-from-elements) em vez dela. Se você definir tanto `bold` quanto `weight` em um `Text`, `bold` não tem efeito.
340 348
341## Limites349## Limites
342 350
346| :- | :- |354| :- | :- |
347| O tempo de execução próprio de um hook para um evento, sem contar o tempo dentro de `next` ou de uma chamada à API de mods que não seja `$.clock.sleep` | 10 segundos, ou 50 milissegundos para um hook `prompt.edit` |355| O tempo de execução próprio de um hook para um evento, sem contar o tempo dentro de `next` ou de uma chamada à API de mods que não seja `$.clock.sleep` | 10 segundos, ou 50 milissegundos para um hook `prompt.edit` |
348| O tempo de execução de um manipulador `.catch` | 1 segundo |356| O tempo de execução de um manipulador `.catch` | 1 segundo |
349| Todos os hooks `session.end` juntos | O mesmo que o [orçamento do hook SessionEnd](/docs/pt/hooks.md#sessionend-input), 1,5 segundo a menos que você o altere, contado a partir do momento em que os hooks `SessionEnd` das suas configurações terminam |357| Todos os hooks `session.end` juntos | O mesmo que o [orçamento do hook SessionEnd](https://code.claude.com/docs/pt/hooks.md#sessionend-input), 1,5 segundo a menos que você o altere, contado a partir do momento em que os hooks `SessionEnd` das suas configurações terminam |
350| Timeout de `$.process.run` | 30 segundos por padrão, no máximo 10 minutos |358| Timeout de `$.process.run` | 30 segundos por padrão, no máximo 10 minutos |
351| `maxTokens` de `$.model.complete` | 1024 por padrão, até 64.000 ou o limite de saída do modelo |359| `maxTokens` de `$.model.complete` | 1024 por padrão, até 64.000 ou o limite de saída do modelo |
352| `$.fs.read` e `$.fs.write` | 4 MiB para um arquivo |360| `$.fs.read` e `$.fs.write` | 4 MiB para um arquivo |
354| O corpo de uma resposta de `$.http.fetch` | 4 MiB. `text` contém os primeiros 4 MiB e o restante não é lido. Quando o cabeçalho `Content-Length` declara mais, a chamada é rejeitada em vez disso, com um motivo que termina em `is over the 4194304-byte limit`, exceto quando a última requisição após quaisquer redirecionamentos usa o método `HEAD`. A isenção para `HEAD` requer o Claude Code v2.1.296 ou posterior. |362| O corpo de uma resposta de `$.http.fetch` | 4 MiB. `text` contém os primeiros 4 MiB e o restante não é lido. Quando o cabeçalho `Content-Length` declara mais, a chamada é rejeitada em vez disso, com um motivo que termina em `is over the 4194304-byte limit`, exceto quando a última requisição após quaisquer redirecionamentos usa o método `HEAD`. A isenção para `HEAD` requer o Claude Code v2.1.296 ou posterior. |
355| Uma chamada de `$.http.fetch`, incluindo redirecionamentos e corpo | 30 segundos |363| Uma chamada de `$.http.fetch`, incluindo redirecionamentos e corpo | 30 segundos |
356| Redirecionamentos que uma chamada de `$.http.fetch` segue | 5 |364| Redirecionamentos que uma chamada de `$.http.fetch` segue | 5 |
357| 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.md#handle-a-hook-that-fails) em vez disso. |365| 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](https://code.claude.com/docs/pt/plugins/mods/events.md#handle-a-hook-that-fails) em vez disso. |
358| Texto em uma árvore | Os primeiros 100.000 caracteres são desenhados |366| Texto em uma árvore | Os primeiros 100.000 caracteres são desenhados |
359| 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.md#build-a-tree-from-elements). |367| 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](https://code.claude.com/docs/pt/plugins/mods/interface.md#build-a-tree-from-elements). |
360| O `href` de um `Link` | 2.048 caracteres. Um `href` mais longo impede que a árvore inteira seja desenhada. |368| O `href` de um `Link` | 2.048 caracteres. Um `href` mais longo impede que a árvore inteira seja desenhada. |
361| `$.store` | 4 MiB de JSON no total |369| `$.store` | 4 MiB de JSON no total |
362| `$.session.messages()` | As 4.096 entradas mais recentes |370| `$.session.messages()` | As 4.096 entradas mais recentes |
375| :- | :- | :- |383| :- | :- | :- |
376| `CLAUDE_CODE_PLUGIN_DIRS` | Ambiente, ou `env` em `~/.claude/settings.json` | Diretórios de plugin a carregar como `--plugin-dir` faz, para aplicativos aos quais você não pode passar uma flag. Caminhos absolutos separados por `:`, ou `;` no Windows. |384| `CLAUDE_CODE_PLUGIN_DIRS` | Ambiente, ou `env` em `~/.claude/settings.json` | Diretórios de plugin a carregar como `--plugin-dir` faz, para aplicativos aos quais você não pode passar uma flag. Caminhos absolutos separados por `:`, ou `;` no Windows. |
377| `CLAUDE_CODE_PLUGIN_DIR_WATCH` | Ambiente | `1` faz com que uma sessão não interativa de longa duração recarregue os mods de `--plugin-dir` ao salvar |385| `CLAUDE_CODE_PLUGIN_DIR_WATCH` | Ambiente | `1` faz com que uma sessão não interativa de longa duração recarregue os mods de `--plugin-dir` ao salvar |
378| `prependPlugins`, `appendPlugins` | Configurações gerenciadas. Configurações do usuário somente em uma máquina sem configurações gerenciadas, em uma sessão cuja credencial não é um `/login` Team ou Enterprise. | Listas de ids de plugin, como `acme-guard@acme-tools`. Mods em `prependPlugins` são executados antes de todo mod que um usuário instala, e mods em `appendPlugins` são executados depois, na ordem listada. Consulte [A ordem em que os mods são executados](/docs/pt/plugins/mods/events.md#the-order-mods-run-in). |386| `prependPlugins`, `appendPlugins` | Configurações gerenciadas. Configurações do usuário somente em uma máquina sem configurações gerenciadas, em uma sessão cuja credencial não é um `/login` Team ou Enterprise. | Listas de ids de plugin, como `acme-guard@acme-tools`. Mods em `prependPlugins` são executados antes de todo mod que um usuário instala, e mods em `appendPlugins` são executados depois, na ordem listada. Consulte [A ordem em que os mods são executados](https://code.claude.com/docs/pt/plugins/mods/events.md#the-order-mods-run-in). |
379| `allowManagedModsOnly` | Configurações gerenciadas, como uma [opção da guarda integrada](/docs/pt/plugins/mods/admin.md#set-options-on-the-built-in-guard) | Somente mods que [contam como da sua organização](/docs/pt/plugins/mods/admin.md#install-your-organizations-mods), e mods integrados ao Claude Code, executam seus hooks. Os hooks de configuração dos usuários continuam em execução. |387| `allowManagedModsOnly` | Configurações gerenciadas, como uma [opção da guarda integrada](https://code.claude.com/docs/pt/plugins/mods/admin.md#set-options-on-the-built-in-guard) | Somente mods que [contam como da sua organização](https://code.claude.com/docs/pt/plugins/mods/admin.md#install-your-organizations-mods), e mods integrados ao Claude Code, executam seus hooks. Os hooks de configuração dos usuários continuam em execução. |
380| `allowModsToOverrideDenyRules` | Configurações gerenciadas, como uma [opção da guarda integrada](/docs/pt/plugins/mods/admin.md#set-options-on-the-built-in-guard) | Permite que um mod instalado por um usuário aprove uma chamada de ferramenta que uma regra `deny` recusa |388| `allowModsToOverrideDenyRules` | Configurações gerenciadas, como uma [opção da guarda integrada](https://code.claude.com/docs/pt/plugins/mods/admin.md#set-options-on-the-built-in-guard) | Permite que um mod instalado por um usuário aprove uma chamada de ferramenta que uma regra `deny` recusa |
381| `allowManagedHooksOnly` | Configurações gerenciadas | Bloqueia hooks e mods instalados que não são da sua organização. Consulte [o que continua em execução](/docs/pt/settings-reference.md#what-runs-under-allowmanagedhooksonly). |389| `allowManagedHooksOnly` | Configurações gerenciadas | Bloqueia hooks e mods instalados que não são da sua organização. Consulte [o que continua em execução](https://code.claude.com/docs/pt/settings-reference.md#what-runs-under-allowmanagedhooksonly). |
382| `disableAllHooks` | Qualquer arquivo de configurações | Nas configurações gerenciadas, nenhum mod ou hook de um plugin instalado é executado. Nas suas próprias configurações, o que a sua organização gerencia continua em execução. Consulte [`disableAllHooks`](/docs/pt/settings-reference#disableallhooks). |390| `disableAllHooks` | Qualquer arquivo de configurações | Nas configurações gerenciadas, nenhum mod ou hook de um plugin instalado é executado. Nas suas próprias configurações, o que a sua organização gerencia continua em execução. Consulte [`disableAllHooks`](https://code.claude.com/docs/pt/settings-reference#disableallhooks). |
383| `disableSideloadFlags` | Configurações gerenciadas | Rejeita `--plugin-dir` e `--plugin-url` na inicialização |391| `disableSideloadFlags` | Configurações gerenciadas | Rejeita `--plugin-dir` e `--plugin-url` na inicialização |
384| `pluginConfigs` | Configurações do usuário ou gerenciadas | Contém valores de `userConfig` para um mod, indexados pelo id do plugin, como `acme-guard@acme-tools`, ou pelo seu nome e `@inline`, como `first-mod@inline`, para um carregado com `--plugin-dir` |392| `pluginConfigs` | Configurações do usuário ou gerenciadas | Contém valores de `userConfig` para um mod, indexados pelo id do plugin, como `acme-guard@acme-tools`, ou pelo seu nome e `@inline`, como `first-mod@inline`, para um carregado com `--plugin-dir` |
385 393
386`sec-default@builtin` é uma guarda integrada ao Claude Code, listada como `cc-plugin-sec-default` em `/plugin` e no log de depuração. Ela é carregada antes de todo mod que uma pessoa instala em uma máquina com configurações gerenciadas, ou em uma sessão cuja credencial é um [`/login`](/docs/pt/authentication#authentication-precedence) Team ou Enterprise. Se `prependPlugins` gerenciado estiver definido, a guarda só é carregada quando essa lista a indica, na posição listada.394`sec-default@builtin` é uma guarda integrada ao Claude Code, listada como `cc-plugin-sec-default` em `/plugin` e no log de depuração. Ela é carregada antes de todo mod que uma pessoa instala em uma máquina com configurações gerenciadas, ou em uma sessão cuja credencial é um [`/login`](https://code.claude.com/docs/pt/authentication#authentication-precedence) Team ou Enterprise. Se `prependPlugins` gerenciado estiver definido, a guarda só é carregada quando essa lista a indica, na posição listada.
387 395
388Seu código-fonte está no [diretório `mods/sec-default` do repositório do Claude Code](https://github.com/anthropics/claude-code/tree/main/mods/sec-default).396Seu código-fonte está no [diretório `mods/sec-default` do repositório do Claude Code](https://github.com/anthropics/claude-code/tree/main/mods/sec-default).
389 397
393 401
394| Comando | O que faz |402| Comando | O que faz |
395| :- | :- |403| :- | :- |
396| [`/plugin`](/docs/pt/plugins/mods/overview#see-which-mods-a-session-loaded) | Mostra uma linha como `1 mod active · first-mod` abaixo de suas abas quando um mod que não é integrado foi carregado |404| [`/plugin`](https://code.claude.com/docs/pt/plugins/mods/overview#see-which-mods-a-session-loaded) | Mostra uma linha como `1 mod active · first-mod` abaixo de suas abas quando um mod que não é integrado foi carregado |
397| [`claude plugin validate <directory>`](/docs/pt/plugins/mods/create#check-what-claude-code-reads-from-your-mod) | Lê o manifesto e o módulo de hooks de um plugin e informa erros, os eventos que ele trata e as chamadas à API de mods que ele faz. `--strict` trata avisos como erros e `--json` imprime um relatório legível por máquina. |405| [`claude plugin validate <directory>`](https://code.claude.com/docs/pt/plugins/mods/create#check-what-claude-code-reads-from-your-mod) | Lê o manifesto e o módulo de hooks de um plugin e informa erros, os eventos que ele trata e as chamadas à API de mods que ele faz. `--strict` trata avisos como erros e `--json` imprime um relatório legível por máquina. |
398| [`claude plugin test [directory]`](/docs/pt/plugins/mods/test#write-a-test) | Executa todos os arquivos no diretório, ou no diretório atual quando nenhum é informado, cujo nome termina em `.test.ts` ou `.test.tsx`. Sai com status 1 quando um teste falha. |406| [`claude plugin test [directory]`](https://code.claude.com/docs/pt/plugins/mods/test#write-a-test) | Executa todos os arquivos no diretório, ou no diretório atual quando nenhum é informado, cujo nome termina em `.test.ts` ou `.test.tsx`. Sai com status 1 quando um teste falha. |
399| [`claude --plugin-dir <directory>`](/docs/pt/plugins/mods/create#write-a-mod-yourself) | Carrega um diretório de plugin para uma sessão e recarrega seu módulo de hooks quando você salva. Repita a flag para carregar vários. |407| [`claude --plugin-dir <directory>`](https://code.claude.com/docs/pt/plugins/mods/create#write-a-mod-yourself) | Carrega um diretório de plugin para uma sessão e recarrega seu módulo de hooks quando você salva. Repita a flag para carregar vários. |
400| `/reload-plugins` | Recarrega os plugins quando você o executa |408| `/reload-plugins` | Recarrega os plugins quando você o executa |