SpyBara
Go Premium

plugins/mods/reference.md 2026-10-01 23:59 UTC to 2026-10-02 13:00 UTC

This page contains 326 additions and 0 deletions.

2026
Fri 2 13:00

Referência de mods

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.

Consulte qualquer evento que um mod pode tratar, método da API de mods que ele pode chamar ou ponto de renderização em que ele pode desenhar, para a CLI do Claude Code e o aplicativo Desktop a partir da v2.1.287. 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.

Arquivos

Um mod é um diretório de plugin com estes arquivos:

Arquivo Obrigatório Conteúdo
.claude-plugin/plugin.json Sim O manifesto do plugin. Mods não adicionam campos obrigatórios.
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 em hooks.
O módulo de hooks, como hooks/register.js 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.
types/index.d.ts, 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
Arquivos cujos nomes terminam em .test.ts ou .test.tsx Não Testes que o claude plugin test executa

register recebe on e options. options contém os valores dos campos userConfig que o manifesto declara, com os valores padrão preenchidos.

A função de hook

Um 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 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 do hook.

Argumento O que é
$ A API de mods: todos os métodos em métodos da API de mods. Escreva cada chamada por completo, namespace e depois método, como em $.fs.read('notes.md').
e A entrada do evento, como dados simples profundamente congelados. Para alterá-la, passe uma cópia para next.
next(e) 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.
next.signal Um AbortSignal que é abortado quando o evento é abandonado
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: prepend, user, append ou builtin.
next.budget O limite de tempo do hook em milissegundos: next.budget.ms é o limite inteiro e next.budget.remainingMs é o que resta agora
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.
next.error, next.called Somente em um manipulador .catch. next.error.kind é throw ou timeout, next.error.message é o texto do erro e next.called é true quando o hook que falhou havia chamado next.

Eventos

Os eventos estão agrupados pelo assunto de que tratam, cada um com quando é disparado e o que um hook nele pode retornar. Hooks em turn.step e process.spawn são geradores assíncronos, e os outros hooks são funções assíncronas.

A última coluna de cada tabela usa uma notação abreviada. next(e) repassa o evento sem alterações. next({ ...e, text }) repassa uma cópia com o campo indicado alterado, como em next({ ...e, text: e.text.trim() }). Um objeto responde ao evento sem chamar next, e uma palavra como reason representa uma string que você escreve, como em { deny: 'Use the file tools.' }.

Ferramentas

Eventos de ferramenta são disparados em torno de cada chamada de ferramenta que o Claude faz, desde a descrição que o Claude lê até a decisão sobre se a chamada é executada:

Evento Dispara quando Um hook pode retornar
tool.call Uma ferramenta está prestes a ser executada next(e), { deny: reason } ou { result }
tool.check 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. { decision }, que é allow, ask ou deny
tool.describe Uma vez para cada ferramenta, quando sua descrição é enviada pela primeira vez ao Claude { description }

Prompts e o que o Claude lê

Eventos de prompt abrangem o texto que o usuário digita e o texto que o Claude Code envia ao Claude por conta própria, como o system prompt e lembretes:

Evento Dispara quando Um hook pode retornar
prompt.submit Um prompt é enviado next({ ...e, text }), next({ ...e, context }) ou { drop: reason }
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
prompt.edit O usuário edita a caixa de prompt next(e)
prompt.compose O Claude Code renderiza um system prompt { sections }, uma lista de { id, text, scope } na ordem em que são enviadas
prompt.section 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
prompt.context Uma vez para cada conversa, para o contexto enviado com a primeira mensagem { blocks }
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
skill.prompt O texto de uma skill é expandido para o Claude { text }
attribution.text O Claude Code compõe o texto de atribuição de um commit ou pull request { text }

Comandos e configuração

Eventos de comando e de configuração são disparados quando um comando é executado ou listado, e quando uma linha de /config é exibida ou alterada:

Evento Dispara quando Um hook pode retornar
command.run Um comando está prestes a ser executado { text }, {} ou next(e)
command.describe Uma vez para cada comando, para a lista de comandos { description, argumentHint, isHidden }
config.set Uma linha de /config está prestes a mudar next({ ...e, value }) ou { deny: reason }
config.describe Uma vez para cada linha de /config { label, description, isHidden }

Turnos

Eventos de turno acompanham uma resposta do início ao fim, incluindo cada requisição ao modelo dentro dela:

Evento Dispara quando Um hook pode retornar
turn.start Um turno começa next(e)
turn.step Uma requisição está prestes a ir para o modelo yield* next(e), ou next({ ...e, model }), next({ ...e, effort })
turn.complete Um turno terminou next(e), ou { text } para mostrar uma linha abaixo da resposta

Sessão

Eventos de sessão marcam o início, o fim e a compactação da sessão, e a troca de mensagens com outras sessões:

Evento Dispara quando Um hook pode retornar
session.start 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)
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)
session.compact A conversa está prestes a ser compactada { skip: reason }
session.receive, session.send Uma mensagem chega de, ou está prestes a ir para, outro agente ou sessão. Consulte Enviar e receber mensagens entre sessões. { consumed: reason } para receive, { isDelivered: false, reason } para send
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 }) para reescrever o content da linha
session.attach, session.detach Outro aplicativo se conecta à sessão ou se desconecta dela next(e)
session.measure Após cada turno e quando o percentual usado de um limite do plano muda next(e)

Subagentes

Eventos de subagente são disparados quando um tipo de subagente é oferecido ao Claude e quando um está prestes a iniciar:

Evento Dispara quando Um hook pode retornar
agent.offer Um tipo de subagente é oferecido ao Claude { isOffered: false } para retê-lo
agent.spawn Um subagente está prestes a iniciar { model } ou { deny: reason }

Interface

Eventos 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 mostra o que um hook ui.render retorna:

Evento Dispara quando
ui.render Um ponto de renderização está prestes a ser desenhado
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ê.
ui.press, ui.input, ui.select Um Button, Input ou Select que um mod desenhou é usado
ui.focus, ui.scroll O controle em foco ou a posição de rolagem de um painel ou da faixa está prestes a mudar
ui.close Um painel está prestes a fechar. e.id é o painel e e.origin.kind é plugin, person ou unload.
ui.message Um elemento Client envia dados para o seu mod

Outros mods

Estes eventos permitem que um mod atue sobre outros mods à medida que são carregados, para recusar um deles ou alterar a API de mods que ele recebe:

Evento Dispara quando Um hook pode retornar
plugin.register 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 }
engine.create A API de mods está sendo construída para este mod Uma API de mods alterada, para adicionar um namespace ou reter um

Telemetria

Eventos de telemetria são disparados para os registros de uso que o Claude Code registra em log:

Evento Dispara quando Um hook pode retornar
telemetry.log, telemetry.mark Um registro de telemetria está prestes a ser registrado em log, ou um uso de um recurso é marcado. Em um mod que você instala, dê a um hook de telemetria o filtro { to: 'collector' }, como em on('telemetry.log', { to: 'collector' }, hook). Sem o filtro, o mod falha no claude plugin validate. * não corresponde a esses eventos. next(e) ou { deny: reason }

Eventos de hooks de configuração

Cada evento de hook de configuração é um evento chamado classic.<Event>, como classic.Stop ou classic.PostToolUse. e é o JSON de stdin do hook.

Chamadas à API de mods

Cada método da API de mods também é um evento, nomeado pelo seu namespace e método, como fs.read, model.complete ou ui.open. Um hook em um deles intercepta chamadas dos mods executados depois dele e pode retornar next(e), { deny: reason } ou { value }.

Métodos da API de mods

A 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 documentam cada método com um exemplo.

Namespace Métodos
$.plugin name, root: o nome e o diretório deste plugin
$.ui resolve, invalidate, open, close, panes, focus, scroll, toast, status, log, notice, ask, copy, blit
$.command register, run, list
$.tool register, call, check, list
$.agent register, spawn, list
$.model complete, fork, classify
$.prompt 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.
$.turn abort
$.session 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 }.
$.config list, set
$.settings read
$.env get, set
$.fs 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.
$.store 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.
$.state Estado reativo: get, set, com os auxiliares atom, read, update, derive e memberOf importados de claude-code
$.clock now, sleep, after, every
$.http fetch
$.process run, spawn
$.mcp call, connect. connect(server) conecta um servidor MCP que o manifesto do seu próprio plugin lista.
$.audio play, speak
$.telemetry log, mark. Um registro só é enviado quando o Claude Code ou um mod integrado faz a chamada.

Pontos de renderização

Um 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 é terminal ou desktop. Alterar o que o Claude Code já desenha mostra o que um hook pode fazer em um ponto, com um exemplo de cada opção.

Ponto e.props e.requestId Renderizado em
Pane title, isFocused, bodyColumns, placement, scroll, view O id do painel Terminal, Desktop
AbovePrompt hasSurvey, isWorking, maxRows, bodyColumns, scroll, view Uma instância Terminal, Desktop
UserMessage text, origin, isExpanded e task ou from conforme a origem O id da mensagem Terminal, Desktop
AssistantMessage O texto da resposta O id da mensagem Terminal, Desktop
ToolUse, ToolResult, ToolGroup O nome, a entrada e o resultado da ferramenta O id da chamada de ferramenta Terminal, Desktop
CommandOutput command, text O id da mensagem Terminal, Desktop
AskUserQuestion A pergunta e as opções O id da chamada de ferramenta Terminal, Desktop
ToolProgress kind O id da chamada de ferramenta Terminal
Spinner word, message, suffix, mode O id do agente Terminal, Desktop
TurnDuration word, durationMs O id da mensagem Terminal
InfoNotice text, command O id da mensagem Terminal
SessionMode modes Uma instância Terminal, Desktop
PromptHint isDraft, isWorking, hint Uma instância Terminal, Desktop

e.viewport contém columns, rows e isFullscreen. Ele está ausente até que o aplicativo tenha medido sua janela. Seu rows é a altura da janela inteira, não do seu painel.

Para ajustar uma árvore ao seu ponto, leia estas props no hook:

  • Largura de um Pane ou da faixa: desenhe até e.props.bodyColumns
  • 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
  • Altura de um Pane acima do prompt: quando e.props.placement é 'inline', o painel cresce com a sua árvore até um limite, e bodyRows conta apenas as linhas exibidas no momento. O campo rows de $.ui.open solicita um limite diferente.

Uma árvore mais alta que o painel rola como um todo.

Elementos

Elementos 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 mostra os mais comuns com a forma como o terminal os desenha, e a galeria da interface tem capturas de tela da maioria. Uma marca de seleção significa que o aplicativo pode desenhar o elemento.

Elemento Props principais Terminal Desktop
Box key, layout flex, gap, padding, margin, width, height, borderStyle, backgroundColor, position, hover ✓ ✓
Text color, backgroundColor, bold, italic, underline, dimColor, inverse, wrap ✓ ✓
Button key, label, onPress, hotkey, plain, dimColor, autoFocus, action ✓ ✓
Link href, label ✓ ✓
Code O código, até 10.000 caracteres ✓ ✓
Markdown text, até 10.000 caracteres, key, dimColor, onLinkPress, pressableLinks ✓ ✓
Input key, label, placeholder, value, submitLabel, onSubmit, onInput, autoFocus ✓ ✓
Select key, label, options, value, onSelect, autoFocus ✓ ✓
Svg Um documento SVG, até 131.072 caracteres ✓
Client module, key ✓ ✓
Raster key, columns até 512, rows até 256, cells. Consulte Desenhar uma grade de células coloridas. ✓
Image Bytes PNG ou RGBA até 2 MiB, ou um caminho de arquivo ✓

Mais regras de Button: action indica uma das próprias ações de atalho de teclado 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.

Limites

Hooks e chamadas à API de mods são executados sob limites de tempo e de tamanho. O Claude Code ignora um hook que excede um limite de tempo e rejeita uma chamada que excede um limite de tamanho.

Limite Valor
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
O tempo de execução de um manipulador .catch 1 segundo
Todos os hooks session.end juntos 1,5 segundo
Timeout de $.process.run 30 segundos por padrão, no máximo 10 minutos
maxTokens de $.model.complete 1024 por padrão, até 64.000 ou o limite de saída do modelo
$.fs.read e $.fs.write 4 MiB para um arquivo
Um filho string de um Text 10.000 caracteres
$.store 4 MiB de JSON no total
$.session.messages() As 4.096 entradas mais recentes
Redesenhos de $.ui.invalidate('ui.render') Limitados a 10 por segundo, ou 30 no terminal para o painel visível, a faixa expandida e a linha de dica abaixo do prompt. Chamadas que chegam antes disso são agrupadas.
$.ui.toast Exibido por 4 segundos, a menos que você passe { timeoutMs }
Um painel aberto sem que o usuário tenha pedido Posicionado a partir de 144 colunas do terminal, 110 depois que o usuário o tiver aberto uma vez
Nomes de comandos, ferramentas, tipos de subagente e painéis Letras, dígitos, _ e -, até 64 caracteres
Um teste do claude plugin test 5 segundos, a menos que o teste defina timeoutMs

Configurações e variáveis de ambiente

Estas são as configurações e variáveis de ambiente que afetam os mods. A coluna Onde indica de qual arquivo de configurações ou ambiente cada uma é lida:

Nome Onde O que faz
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.
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
prependPlugins, appendPlugins Configurações gerenciadas. Configurações do usuário somente em uma máquina sem configurações gerenciadas, para um usuário que não está conectado com um plano 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.
allowManagedModsOnly Configurações gerenciadas, como uma opção da guarda integrada Somente mods que contam como da sua organização, e mods integrados ao Claude Code, são carregados. Os hooks de configuração dos usuários continuam em execução.
allowModsToOverrideDenyRules Configurações gerenciadas, como uma opção da guarda integrada Permite que um mod instalado por um usuário aprove uma chamada de ferramenta que uma regra deny recusa
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.
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.
disableSideloadFlags Configurações gerenciadas Rejeita --plugin-dir e --plugin-url na inicialização
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

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 para um usuário conectado com um plano Team ou Enterprise. Se prependPlugins gerenciado estiver definido, a guarda só é carregada quando essa lista a indica, na posição listada. Seu código-fonte está no diretório mods/sec-default do repositório do Claude Code.

Comandos

Estes comandos e flags carregam, inspecionam e testam um mod. Os comandos claude são executados no seu shell e os comandos / no prompt do Claude Code. Na tabela, <directory> representa um caminho que você digita, como em claude plugin validate ./first-mod. Colchetes marcam um argumento opcional.

Comando O que faz
/plugin Mostra uma linha como 1 mod active · first-mod abaixo de suas abas quando um mod que não é integrado foi carregado
claude plugin validate <directory> 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.
claude plugin test [directory] 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.
claude --plugin-dir <directory> 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.
/reload-plugins Recarrega os plugins quando você o executa