Skip to main content
Procurando instalar plugins? Veja Descobrir e instalar plugins. Para criar plugins, veja Plugins. Para distribuir plugins, veja Marketplaces de plugins.
Esta referência fornece especificações técnicas completas para o sistema de plugins do Claude Code, incluindo esquemas de componentes, comandos CLI e ferramentas de desenvolvimento. Um plugin é um diretório independente de componentes que estende o Claude Code com funcionalidade personalizada. Os componentes do plugin incluem skills, agents, hooks, servidores MCP, servidores LSP e monitors.

Referência de componentes de plugin

Skills

Os plugins adicionam skills ao Claude Code, criando atalhos /name que você ou Claude podem invocar. Localização: Diretório skills/ ou commands/ na raiz do plugin, ou um único arquivo SKILL.md na raiz do plugin Formato de arquivo: Skills são diretórios com SKILL.md; comandos são arquivos markdown simples Estrutura de skill:
Comportamento de integração:
  • Skills e comandos são descobertos automaticamente quando o plugin é instalado
  • Claude pode invocá-los automaticamente com base no contexto da tarefa
  • Skills podem incluir arquivos de suporte ao lado de SKILL.md
Se um plugin não tem diretório skills/ e nenhum campo manifest skills, um SKILL.md na raiz do plugin é carregado como uma única skill. Defina o campo frontmatter name para controlar o nome de invocação da skill. Sem ele, Claude Code volta para o nome do diretório de instalação, que para plugins instalados do marketplace é uma string de versão que muda a cada atualização. Para plugins que fornecem mais de uma skill, use o layout de diretório skills/ mostrado acima. Para detalhes completos, veja Skills.

Agents

Os plugins podem fornecer subagents especializados para tarefas específicas que Claude pode invocar automaticamente quando apropriado. Localização: Diretório agents/ na raiz do plugin Formato de arquivo: Arquivos markdown descrevendo capacidades do agent Estrutura de agent:
Os agents de plugin suportam campos frontmatter name, description, model, effort, maxTurns, tools, disallowedTools, skills, memory, background e isolation. O único valor válido de isolation é "worktree". Por razões de segurança, hooks, mcpServers e permissionMode não são suportados para agents fornecidos por plugin. Pontos de integração:
  • Agents aparecem na typeahead @-mention sob seu nome com escopo, como my-plugin:code-reviewer, uma vez que o plugin está habilitado
  • Claude pode invocar agents automaticamente com base no contexto da tarefa
  • Agents podem ser invocados manualmente por usuários
  • Agents de plugin funcionam ao lado de agents Claude integrados
Para detalhes completos, veja Subagents.

Hooks

Os plugins podem fornecer manipuladores de eventos que respondem a eventos do Claude Code automaticamente. Localização: hooks/hooks.json na raiz do plugin, ou inline em plugin.json Formato: Configuração JSON com matchers de eventos e ações Configuração de hook:
Os hooks de plugin respondem aos mesmos eventos de ciclo de vida que hooks definidos pelo usuário: Tipos de hook:
  • command: executar comandos shell ou scripts
  • http: enviar o JSON do evento como uma solicitação POST para uma URL
  • mcp_tool: chamar uma ferramenta em um servidor MCP configurado
  • prompt: avaliar um prompt com um LLM (usa placeholder $ARGUMENTS para contexto)
  • agent: executar um verificador agentic com ferramentas para tarefas de verificação complexas
Os hooks que visam o próprio servidor MCP agrupado do plugin devem usar seus nomes com escopo. Os matchers de ferramenta e campos if usam o nome de ferramenta com escopo mcp__plugin_<plugin-name>_<server-name>__<tool>, e o campo server de um hook mcp_tool usa plugin:<plugin-name>:<server-name>. Um matcher escrito contra a chave de servidor simples nunca dispara. Veja Match MCP tools e Plugin-provided MCP servers.

MCP servers

Os plugins podem agrupar servidores Model Context Protocol (MCP) para conectar Claude Code com ferramentas e serviços externos. Localização: .mcp.json na raiz do plugin, ou inline em plugin.json Formato: Configuração padrão de servidor MCP Configuração de servidor MCP:
Comportamento de integração:
  • Servidores MCP de plugin iniciam automaticamente quando o plugin é habilitado
  • Servidores aparecem como ferramentas MCP padrão no kit de ferramentas de Claude
  • Capacidades do servidor se integram perfeitamente com as ferramentas existentes de Claude
  • Servidores de plugin podem ser configurados independentemente de servidores MCP do usuário

LSP servers

Procurando usar plugins LSP? Instale-os do marketplace oficial: procure por “lsp” na aba Discover do /plugin. Esta seção documenta como criar plugins LSP para linguagens não cobertas pelo marketplace oficial.
Os plugins podem fornecer servidores Language Server Protocol (LSP) para dar a Claude inteligência de código em tempo real enquanto trabalha em seu codebase. A integração LSP fornece:
  • Diagnósticos instantâneos: Claude vê erros e avisos imediatamente após cada edição
  • Navegação de código: ir para definição, encontrar referências e informações de hover
  • Consciência de linguagem: informações de tipo e documentação para símbolos de código
Localização: .lsp.json na raiz do plugin, ou inline em plugin.json Formato: Configuração JSON mapeando nomes de servidores de linguagem para suas configurações Formato de arquivo .lsp.json:
Inline em plugin.json:
Campos obrigatórios: Campos opcionais: restartOnCrash e shutdownTimeout requerem Claude Code v2.1.205 ou posterior. Antes de v2.1.205, o schema de configuração aceitava ambas as opções, mas definir qualquer uma delas fazia Claude Code pular esse servidor LSP inteiramente na inicialização, com o motivo visível apenas na saída claude --debug. Múltiplos servidores para a mesma extensão: quando mais de um servidor LSP habilitado declara a mesma extensão de arquivo em extensionToLanguage, quer os servidores venham de um plugin ou de plugins diferentes, o primeiro servidor registrado manipula arquivos com essa extensão e os outros nunca iniciam. A interface /plugin mostra um aviso nomeando o plugin cujo servidor está ativo. Servidores que falham ao inicializar: Claude Code pula um servidor cuja configuração é inválida, por exemplo um que falta command ou extensionToLanguage, e os outros servidores configurados ainda iniciam. Execute claude --debug para ver por que um servidor foi pulado. Um servidor pulado não reclama suas extensões de arquivo, então outro servidor válido que declara a mesma extensão, do mesmo plugin ou de um plugin diferente, ainda manipula esses arquivos. Antes de v2.1.205, um servidor que falhou ao inicializar ainda reivindicava suas extensões e bloqueava outro servidor válido para a mesma extensão.
Você deve instalar o binário do servidor de linguagem separadamente. Plugins LSP configuram como Claude Code se conecta a um servidor de linguagem, mas não incluem o servidor em si. Se você vir Executable not found in $PATH na aba Errors do /plugin, instale o binário necessário para sua linguagem.
Plugins LSP disponíveis: Instale o servidor de linguagem primeiro, depois instale o plugin do marketplace.

Monitors

Os plugins podem declarar monitors de fundo que Claude Code inicia automaticamente quando o plugin está ativo. Cada monitor executa um comando shell pela duração da sessão e entrega cada linha stdout a Claude como uma notificação, para que Claude possa reagir a entradas de log, mudanças de status ou eventos pesquisados sem ser solicitado a iniciar o watch em si. Os monitors de plugin usam o mesmo mecanismo que a ferramenta Monitor e compartilham suas restrições de disponibilidade. Eles são executados apenas em sessões CLI interativas, executados sem sandbox no mesmo nível de confiança que hooks, e são ignorados em hosts onde a ferramenta Monitor não está disponível. Localização: monitors/monitors.json na raiz do plugin, ou inline em plugin.json Formato: Array JSON de entradas de monitor O seguinte monitors/monitors.json monitora um endpoint de status de implantação e um log de erro local:
Para declarar monitors inline, defina experimental.monitors em plugin.json para o mesmo array. Para carregar de um caminho não padrão, defina experimental.monitors para uma string de caminho relativo como "./config/monitors.json". Monitors são um componente experimental. Campos obrigatórios: Campos opcionais: O valor command suporta as substituições de caminho ${CLAUDE_PLUGIN_ROOT}, ${CLAUDE_PLUGIN_DATA} e ${CLAUDE_PROJECT_DIR}, mais qualquer ${ENV_VAR} do ambiente. Prefixe o comando com cd "${CLAUDE_PLUGIN_ROOT}" && se o script precisa ser executado do próprio diretório do plugin. Um comando command de monitor não pode referenciar valores ${user_config.*}. O comando é executado através de um shell, então Claude Code rejeita o monitor com um erro em vez de substituir o valor. Processos de monitor não recebem variáveis de ambiente CLAUDE_PLUGIN_OPTION_<KEY>, então faça o script de monitor ler o valor de um arquivo de configuração que ele possui. Antes de v2.1.207, comandos de monitor substituíam valores ${user_config.*}. Desabilitar um plugin no meio da sessão não para monitors que já estão em execução. Eles param quando a sessão termina.

Themes

Os plugins podem fornecer temas de cor que aparecem em /theme ao lado das predefinições integradas e dos temas locais do usuário. Um tema é um arquivo JSON em themes/ com uma predefinição base e um mapa esparso overrides de tokens de cor. Themes são um componente experimental.
Selecionar um tema de plugin persiste custom:<plugin-name>:<slug> na configuração do usuário. Temas de plugin são somente leitura; pressionar Ctrl+E em um em /theme o copia para ~/.claude/themes/ para que o usuário possa editar a cópia.

Escopos de instalação de plugin

Quando você instala um plugin, você escolhe um escopo que determina onde o plugin está disponível e quem mais pode usá-lo: Os plugins usam o mesmo sistema de escopo que outras configurações do Claude Code. Para instruções de instalação e flags de escopo, veja Instalar plugins. Para uma explicação completa de escopos, veja Escopos de configuração.

Plugins de diretório de skills

Qualquer pasta sob um diretório de skills que contenha um manifesto .claude-plugin/plugin.json é carregada como um plugin nomeado <name>@skills-dir na próxima sessão, sem marketplace e sem etapa de instalação. Crie um com plugin init. Ao contrário de uma instalação do marketplace, o plugin é descoberto no local em vez de ser copiado para o cache de plugin. Uma árvore de diretório de skills suporta três coisas distintas:

Escolha de onde o plugin carrega

Um plugin de escopo de projeto é verificado no repositório e alcança cada colaborador que o clona. Como esse conteúdo vem do repositório em vez de você, ele carrega apenas após o mesmo portão de confiança que governa .claude/settings.json, e componentes que executam código são ainda mais restritos: Plugins de escopo pessoal não têm nenhuma dessas restrições.
Plugins @skills-dir de escopo de projeto carregam apenas de .claude/skills/ do diretório onde você inicia Claude Code. Eles não caminham até a raiz do repositório da maneira que skills e comandos simples fazem, então iniciar de um subdiretório perde um plugin que vive na raiz do repo. Inicie da raiz do repositório, ou execute /reload-plugins após mudar de diretório.

Editar, recarregar e desabilitar um plugin de diretório de skills

As alterações que você faz no SKILL.md de uma skill têm efeito imediatamente na sessão atual. Alterações em outros componentes do plugin, como hooks/, .mcp.json, agents/ e output-styles/, não têm. Execute /reload-plugins ou reinicie Claude Code para pegá-las. Veja Detecção de mudança ao vivo. Para parar de carregar um plugin de diretório de skills, delete sua pasta ou desabilite-o por nome. Não há etapa de uninstall porque nada foi instalado de um marketplace.

Esquema de manifesto de plugin

O arquivo .claude-plugin/plugin.json define os metadados e configuração do seu plugin. Esta seção documenta todos os campos e opções suportados. O manifesto é opcional. Se omitido, Claude Code descobre automaticamente componentes em localizações padrão e deriva o nome do plugin do nome do diretório. Use um manifesto quando você precisar fornecer metadados ou caminhos de componentes personalizados.

Esquema completo

Campos obrigatórios

Se você incluir um manifesto, name é o único campo obrigatório. Este nome é usado para namespacing de componentes. Por exemplo, na UI, o agent agent-creator para o plugin com nome plugin-dev aparecerá como plugin-dev:agent-creator.

Campos não reconhecidos

Claude Code ignora campos de nível superior que não reconhece. Você pode manter metadados de outro ecossistema em plugin.json e o plugin ainda carrega. Isso torna prático manter um manifesto que funciona como um manifesto de extensão VS Code ou Cursor, um package.json npm, ou um manifesto de pacote MCPB/DXT. claude plugin validate relata campos não reconhecidos como avisos, não erros. Se um campo está um ou dois caracteres diferente de um reconhecido, o aviso sugere o nome provavelmente pretendido. Um plugin com apenas avisos de campo não reconhecido ainda passa na validação e carrega em tempo de execução. Campos com o tipo errado ainda falham. Por exemplo, um valor keywords que é uma string em vez de um array é um erro de carregamento, e claude plugin validate o relata como tal. Passe --strict para tratar avisos como erros. Use-o em CI para detectar um nome de campo digitado incorretamente ou um campo deixado de outro manifesto de ferramenta antes de publicar, mesmo que o plugin carregasse em tempo de execução.

Campos de metadados

Habilitação padrão

Defina defaultEnabled: false em plugin.json para enviar um plugin que instala desabilitado. O usuário o ativa com claude plugin enable <plugin> ou a interface /plugin. Use isso para plugins que adicionam custo ou escopo que um usuário deve optar por usar, como um que se conecta a um serviço externo. Isso requer Claude Code v2.1.154 ou posterior. Versões anteriores ignoram o campo e habilitam o plugin na instalação. defaultEnabled é o fallback quando nada mais decidiu o estado do plugin. Duas coisas têm precedência sobre ele:
  • A configuração do usuário: uma entrada para o plugin em enabledPlugins em qualquer escopo de configurações. Uma vez escrita, persiste entre atualizações e reinstalações de plugin, então mudar defaultEnabled em uma versão posterior não inverte um usuário existente.
  • Um requisito de dependência: quando um plugin é necessário por outro que está ativo, Claude Code escreve true para ele no momento da instalação ou habilitação. Isso lhe dá uma configuração explícita, então seu próprio padrão não se aplica mais. Veja Habilitar ou desabilitar um plugin com dependências.
O mesmo campo pode aparecer na entrada do marketplace de um plugin, onde tem precedência sobre o valor em plugin.json. Veja Campos de plugin opcionais.

Campos de caminho de componente

Componentes experimentais

Componentes sob a chave experimental, themes e monitors, têm um esquema de manifesto que pode mudar entre versões enquanto se estabilizam. Onde você os declara é uma migração separada: o nível superior ainda funciona, claude plugin validate avisa, e uma versão futura exigirá experimental.*.

Configuração do usuário

O campo userConfig declara valores que Claude Code solicita ao usuário quando o plugin é habilitado. Use isso em vez de exigir que os usuários editem manualmente settings.json.
As chaves devem ser identificadores válidos. Cada opção suporta estes campos: Cada valor está disponível para substituição como ${user_config.KEY} em configurações de servidor MCP e LSP e comandos de hook. Valores não sensíveis também podem ser substituídos em conteúdo de skill e agent. Todos os valores são exportados para processos de hook como variáveis de ambiente CLAUDE_PLUGIN_OPTION_<KEY>, onde <KEY> é a chave de opção em maiúsculas. Campos que executam em um shell rejeitam ${user_config.*}: substituir um valor configurado em um comando shell deixaria o shell executar o que quer que esse valor contenha, então o componente falha com um erro em vez disso. Cada campo rejeitado tem uma forma alternativa de passar o valor: Antes de v2.1.207, esses campos substituíam valores ${user_config.KEY}; atualize plugins que dependiam disso. Valores não sensíveis são armazenados sob a chave pluginConfigs em settings.json como pluginConfigs[<plugin-id>].options. Claude Code escreve a chave para configurações do usuário e a lê de volta de configurações do usuário, a flag --settings e configurações gerenciadas apenas; entradas em .claude/settings.json ou .claude/settings.local.json de um projeto são ignoradas. Antes de v2.1.207, Claude Code também lia configurações de projeto e local. Valores sensíveis vão para o Keychain do macOS, ou para ~/.claude/.credentials.json em plataformas onde nenhum keychain suportado está disponível. O armazenamento em keychain é compartilhado com tokens OAuth e tem um limite total aproximado de 2 KB, então mantenha valores sensíveis pequenos.

Canais

O campo channels permite que um plugin declare um ou mais canais de mensagem que injetam conteúdo na conversa. Cada canal se vincula a um servidor MCP que o plugin fornece.
O campo server é obrigatório e deve corresponder a uma chave em mcpServers do plugin. O userConfig opcional por canal usa o mesmo esquema que o campo de nível superior, permitindo que o plugin solicite tokens de bot ou IDs de proprietário quando o plugin é habilitado.

Regras de comportamento de caminho

Se um caminho personalizado substitui ou estende o diretório padrão do plugin depende do campo:
  • Substitui o padrão: commands, agents, outputStyles, experimental.themes, experimental.monitors. Por exemplo, quando o manifesto especifica commands, o diretório padrão commands/ não é verificado. Para manter o padrão e adicionar mais, liste-o explicitamente: "commands": ["./commands/", "./extras/"]
  • Adiciona ao padrão: skills. O diretório padrão skills/ é sempre verificado, e diretórios listados em skills são carregados junto com ele. Exceção: para uma entrada do marketplace cuja source resolve para a raiz do marketplace, declarar subdiretórios específicos substitui a verificação padrão skills/
  • Regras de mesclagem próprias: hooks, MCP servers e LSP servers. Veja cada seção para como múltiplas fontes se combinam
Quando um plugin tem tanto uma pasta padrão quanto a chave de manifesto correspondente, Claude Code v2.1.140 e posterior sinaliza a pasta ignorada em claude plugin list e a visualização de detalhes /plugin. O plugin ainda carrega usando os caminhos do manifesto. Claude Code não avisa quando a chave de manifesto aponta para a pasta padrão, por exemplo "commands": ["./commands/deploy.md"], porque esse caminho nomeia a pasta explicitamente. Para todos os campos de caminho:
  • Todos os caminhos devem ser relativos à raiz do plugin e começar com ./
  • Componentes de caminhos personalizados usam as mesmas regras de nomenclatura e namespacing
  • Múltiplos caminhos podem ser especificados como arrays
  • Quando um caminho de skill aponta para um diretório que contém um SKILL.md diretamente, por exemplo "skills": ["./"] apontando para a raiz do plugin, o campo frontmatter name em SKILL.md determina o nome de invocação da skill. Isso fornece um nome estável independentemente do diretório de instalação. Se name não estiver definido no frontmatter, o nome base do diretório é usado como fallback.
Um plugin que tem um SKILL.md em sua raiz, nenhum subdiretório skills/, e nenhum campo de manifesto skills é carregado automaticamente como um plugin de skill único em Claude Code v2.1.142 e posterior. Você não precisa definir "skills": ["./"] em plugin.json para este layout. O nome de invocação da skill segue a mesma regra acima: o campo frontmatter name, ou o nome base do diretório como fallback. Exemplos de caminho:

Variáveis de ambiente

Claude Code fornece três variáveis para referenciar caminhos: Todos os três são exportados como variáveis de ambiente para processos de hook e para subprocessos de servidor MCP e LSP. Quais campos substituem-nos inline depende do componente do plugin: Em comandos de hook, use forma exec com args para que cada caminho seja passado como um argumento sem citação. Em hooks de forma shell e comandos de monitor, envolva as variáveis em aspas duplas, como em "${CLAUDE_PROJECT_DIR}/scripts/server.sh". Este hook de forma shell executa um script agrupado com um plugin:
${CLAUDE_PLUGIN_ROOT} muda quando o plugin é atualizado. O diretório da versão anterior permanece no disco por aproximadamente sete dias após uma atualização antes da limpeza, mas trate-o como efêmero e não escreva estado lá. Quando um plugin é atualizado no meio de uma sessão, comandos de hook, monitors, servidores MCP e servidores LSP continuam usando o caminho da versão anterior. Execute /reload-plugins para alternar hooks, servidores MCP e servidores LSP para o novo caminho; monitors requerem uma reinicialização de sessão. Servidores MCP também podem chamar a solicitação roots/list para ler os diretórios de trabalho da sessão em tempo de execução. Veja o que roots/list retorna e quando Claude Code notifica o servidor de mudanças.

Diretório de dados persistente

O diretório ${CLAUDE_PLUGIN_DATA} resolve para ~/.claude/plugins/data/{id}/, onde {id} é o identificador do plugin com caracteres fora de a-z, A-Z, 0-9, _ e - substituídos por -. Para um plugin instalado como formatter@my-marketplace, o diretório é ~/.claude/plugins/data/formatter-my-marketplace/. Um uso comum é instalar dependências de linguagem uma vez e reutilizá-las em sessões e atualizações de plugin. Como o diretório de dados sobrevive a qualquer versão única de plugin, uma verificação de existência de diretório sozinha não pode detectar quando uma atualização muda o manifesto de dependência do plugin. O padrão recomendado compara o manifesto agrupado contra uma cópia no diretório de dados e reinstala quando diferem. Este hook SessionStart instala node_modules na primeira execução e novamente sempre que uma atualização de plugin inclui um package.json alterado:
O diff sai com código diferente de zero quando a cópia armazenada está faltando ou difere da agrupada, cobrindo tanto a primeira execução quanto atualizações que mudam dependências. Se npm install falhar, o rm final remove o manifesto copiado para que a próxima sessão tente novamente. Scripts agrupados em ${CLAUDE_PLUGIN_ROOT} podem então executar contra o node_modules persistido:
O diretório de dados é deletado automaticamente quando você desinstala o plugin do último escopo onde está instalado. A interface /plugin mostra o tamanho do diretório e solicita confirmação antes de deletar. O CLI deleta por padrão; passe --keep-data para preservá-lo.

Cache de plugin e resolução de arquivo

Os plugins são especificados de uma de duas maneiras:
  • Através de claude --plugin-dir ou claude --plugin-url, pela duração de uma sessão.
  • Através de um marketplace, instalado para sessões futuras.
Para fins de segurança e verificação, Claude Code copia plugins do marketplace para o cache de plugin local do usuário (~/.claude/plugins/cache) em vez de usá-los no local. Entender esse comportamento é importante ao desenvolver plugins que referenciam arquivos externos. Cada versão instalada é um diretório separado no cache. Quando você atualiza ou desinstala um plugin, o diretório de versão anterior é marcado como órfão e removido automaticamente 7 dias depois. O período de carência permite que sessões Claude Code concorrentes que já carregaram a versão antiga continuem funcionando sem erros. As ferramentas Glob e Grep de Claude pulam diretórios de versão órfã durante buscas, então resultados de arquivo não incluem código de plugin desatualizado.

Limitações de travessia de caminho

Plugins instalados não podem referenciar arquivos fora de seu diretório. Caminhos que atravessam fora da raiz do plugin (como ../shared-utils) não funcionarão após a instalação porque esses arquivos externos não são copiados para o cache. Se seu plugin precisa compartilhar arquivos com outras partes do mesmo marketplace, você pode criar links simbólicos dentro de seu diretório de plugin. Como um symlink é tratado quando o plugin é copiado para o cache depende de onde seu alvo é resolvido:
  • Dentro do próprio diretório do plugin: o symlink é preservado como um symlink relativo no cache, então ele continua resolvendo para o alvo copiado em tempo de execução.
  • Em outro lugar dentro do mesmo marketplace: o symlink é desreferenciado. O conteúdo do alvo é copiado para o cache em seu lugar. Isso permite que o diretório skills/ de um meta-plugin seja vinculado a skills definidas por outros plugins no marketplace.
  • Fora do marketplace: o symlink é ignorado por segurança. Isso impede que plugins puxem arquivos arbitrários do host, como caminhos do sistema, para o cache.
Para plugins instalados com --plugin-dir ou de um caminho local, apenas symlinks que são resolvidos dentro do próprio diretório do plugin são preservados. Todos os outros são ignorados. O seguinte comando cria um link de dentro de um plugin do marketplace para uma skill compartilhada definida por um plugin irmão. No Windows, use mklink /D de um Prompt de Comando elevado ou ative o Modo de Desenvolvedor:
Isso fornece flexibilidade enquanto mantém os benefícios de segurança do sistema de cache.

Estrutura de diretório de plugin

Layout de plugin padrão

Um plugin completo segue esta estrutura:
O diretório .claude-plugin/ contém o arquivo plugin.json. Todos os outros diretórios (commands/, agents/, skills/, output-styles/, themes/, monitors/, hooks/) devem estar na raiz do plugin, não dentro de .claude-plugin/.
Um arquivo CLAUDE.md na raiz do plugin não é carregado como contexto do projeto. Os plugins contribuem contexto através de skills, agents e hooks em vez de CLAUDE.md. Para enviar instruções que sejam carregadas no contexto do Claude, coloque-as em uma skill.

Referência de localizações de arquivo


Referência de comandos CLI

Claude Code fornece comandos CLI para gerenciamento de plugin não interativo, útil para scripting e automação.

plugin init

Crie um novo plugin em ~/.claude/skills/<name>/. Na próxima sessão do Claude Code, ele carrega automaticamente como <name>@skills-dir e aparece em /plugin e claude plugin list sem etapa de instalação. Veja Plugins de diretório de skills para requisitos de escopo e confiança.
Argumentos:
  • <name>: Nome do plugin. Torna-se o namespace de skill e o nome do diretório sob ~/.claude/skills/, então não pode conter espaços ou separadores de caminho.
Opções: Aliases: new Cada valor --with adiciona um arquivo inicial para esse componente, pronto para editar: O plugin criado usa a fonte @skills-dir em vez de um marketplace. Administradores podem bloquear essa fonte com strictKnownMarketplaces ou adicionando {"source": "skills-dir"} a blockedMarketplaces em configurações gerenciadas. Quando bloqueado, plugin init falha antes de escrever. Exemplos:

plugin install

Instale um plugin dos marketplaces disponíveis.
Argumentos:
  • <plugin>: Nome do plugin ou plugin-name@marketplace-name para um marketplace específico
Opções: O escopo determina qual arquivo de configurações o plugin instalado é adicionado. Por exemplo, --scope project escreve em enabledPlugins em .claude/settings.json, tornando o plugin disponível para todos que clonam o repositório do projeto. Exemplos:

plugin uninstall

Remova um plugin instalado.
Argumentos:
  • <plugin>: Nome do plugin ou plugin-name@marketplace-name
Opções: Aliases: remove, rm Por padrão, desinstalar do último escopo restante também deleta o diretório ${CLAUDE_PLUGIN_DATA} do plugin. Use --keep-data para preservá-lo, por exemplo ao reinstalar após testar uma nova versão.

plugin prune

Remova dependências de plugin auto-instaladas que não são mais necessárias por nenhum plugin instalado. Dependências que Claude Code puxou para satisfazer o campo dependencies de outro plugin são removidas; plugins que você instalou diretamente nunca são tocados.
Opções: Aliases: autoremove O comando lista dependências órfãs e pede confirmação antes de removê-las. Para remover um plugin e limpar suas dependências em uma etapa, execute claude plugin uninstall <plugin> --prune.
claude plugin prune requer Claude Code v2.1.121 ou posterior.

plugin enable

Habilite um plugin desabilitado. Se o plugin declara dependências, Claude Code as habilita transitivamente no mesmo escopo, e o comando falha quando uma dependência não está instalada.
Argumentos:
  • <plugin>: Nome do plugin ou plugin-name@marketplace-name
Opções:

plugin disable

Desabilite um plugin sem desinstalá-lo. Falha quando outro plugin habilitado depende de o alvo. A mensagem de erro inclui um comando encadeado que desabilita cada dependente primeiro.
Argumentos:
  • <plugin>: Nome do plugin ou plugin-name@marketplace-name
Opções:

plugin update

Atualize um plugin para a versão mais recente.
Argumentos:
  • <plugin>: Nome do plugin ou plugin-name@marketplace-name
Opções:

plugin list

Liste plugins instalados com sua versão, marketplace de origem e status de habilitação.
Opções: Dentro de uma sessão interativa, /plugin list imprime a mesma listagem inline. O formulário interativo aceita --enabled ou --disabled para mostrar apenas plugins nesse estado, e ls como abreviação para list.

plugin details

Mostre o inventário de componentes de um plugin e o custo de token projetado. A saída lista todos os componentes que o plugin contribui, agrupados como Skills, Agents, Hooks, servidores MCP e servidores LSP, juntamente com uma estimativa de quantos tokens ele adiciona a cada sessão. O grupo Skills inclui entradas tanto de skills/ quanto de commands/.
Argumentos:
  • <name>: Nome do plugin ou plugin-name@marketplace-name
Opções: A saída mostra dois valores de custo para cada componente:
  • Always-on: tokens adicionados a cada sessão pelo texto de listagem do plugin, como descrições de skill, descrições de agent e nomes de comando, independentemente de qualquer componente disparar.
  • On-invoke: tokens que um componente custa quando dispara. Mostrado por componente, não como total do plugin, porque uma sessão típica invoca apenas um subconjunto de componentes.
Este exemplo mostra como a saída se parece para um plugin com duas skills:
O total always-on é calculado via API count_tokens para seu modelo ativo. Os números por componente são dimensionados proporcionalmente a partir desse total. Se a API estiver inacessível, o comando volta para uma estimativa baseada em caracteres.

plugin tag

Crie uma tag git de lançamento para o plugin no diretório atual. Execute de dentro da pasta do plugin. Veja Tag plugin releases.
Opções:

Ferramentas de depuração e desenvolvimento

Comandos de depuração

Use claude --debug para ver detalhes de carregamento de plugin: Isso mostra:
  • Quais plugins estão sendo carregados
  • Quaisquer erros em manifestos de plugin
  • Registro de skill, agent e hook
  • Inicialização de servidor MCP

Problemas comuns

Exemplos de mensagens de erro

Erros de validação de manifesto:
  • Invalid JSON syntax: Unexpected token } in JSON at position 142: verificar vírgulas ausentes, vírgulas extras ou strings não citadas
  • Plugin has an invalid manifest file at .claude-plugin/plugin.json. Validation errors: name: Required: um campo obrigatório está faltando
  • Plugin has a corrupt manifest file at .claude-plugin/plugin.json. JSON parse error: ...: erro de sintaxe JSON
Erros de carregamento de plugin:
  • Warning: No commands found in plugin my-plugin custom directory: ./cmds. Expected .md files or SKILL.md in subdirectories.: caminho de comando existe mas não contém arquivos de comando válidos
  • Plugin directory not found at path: ./plugins/my-plugin. Check that the marketplace entry has the correct path.: o caminho source em marketplace.json aponta para um diretório inexistente
  • Plugin my-plugin has conflicting manifests: both plugin.json and marketplace entry specify components.: remover definições de componentes duplicadas ou remover strict: false na entrada do marketplace

Solução de problemas de hook

Script de hook não executando:
  1. Verificar se o script é executável: chmod +x ./scripts/your-script.sh
  2. Verificar a linha shebang: Primeira linha deve ser #!/bin/bash ou #!/usr/bin/env bash
  3. Verificar se o caminho usa ${CLAUDE_PLUGIN_ROOT}: "command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/your-script.sh"
  4. Testar o script manualmente: ./scripts/your-script.sh
Hook não disparando em eventos esperados:
  1. Verificar se o nome do evento está correto (sensível a maiúsculas): PostToolUse, não postToolUse
  2. Verificar se o padrão de matcher corresponde às suas ferramentas: "matcher": "Write|Edit" para operações de arquivo
  3. Confirmar se o tipo de hook é válido: command, http, mcp_tool, prompt, ou agent

Solução de problemas de servidor MCP

Servidor não iniciando:
  1. Verificar se o comando existe e é executável
  2. Verificar se todos os caminhos usam variável ${CLAUDE_PLUGIN_ROOT}
  3. Verificar os logs do servidor MCP: claude --debug mostra erros de inicialização
  4. Testar o servidor manualmente fora do Claude Code
Ferramentas do servidor não aparecendo:
  1. Garantir que o servidor está adequadamente configurado em .mcp.json ou plugin.json
  2. Verificar se o servidor implementa o protocolo MCP corretamente
  3. Verificar timeouts de conexão na saída de depuração

Erros de estrutura de diretório

Sintomas: Plugin carrega mas componentes (skills, agents, hooks) estão faltando. Estrutura correta: Componentes devem estar na raiz do plugin, não dentro de .claude-plugin/. Apenas plugin.json pertence em .claude-plugin/.
Se seus componentes estão dentro de .claude-plugin/, mova-os para a raiz do plugin. Checklist de depuração:
  1. Executar claude --debug e procurar por mensagens “loading plugin”
  2. Verificar se cada diretório de componente está listado na saída de depuração
  3. Verificar se as permissões de arquivo permitem ler os arquivos de plugin

Referência de distribuição e versionamento

Gerenciamento de versão

Claude Code usa a versão do plugin como a chave de cache que determina se uma atualização está disponível. Quando você executa /plugin update ou a atualização automática é acionada, Claude Code calcula a versão atual e ignora a atualização se ela corresponder ao que já está instalado. A versão é resolvida a partir do primeiro destes que está definido:
  1. O campo version no plugin.json do plugin
  2. O campo version na entrada do marketplace do plugin em marketplace.json
  3. O SHA do commit git do plugin, para fontes github, url, git-subdir e relative-path em um marketplace hospedado em git
  4. unknown, para fontes npm ou diretórios locais não dentro de um repositório git
Isso oferece duas maneiras de versionar um plugin:
Se você definir version em plugin.json, você deve aumentá-lo toda vez que quiser que os usuários recebam alterações. Enviar novos commits sozinho não é suficiente, porque Claude Code vê a mesma string de versão e mantém a cópia em cache. Se você está iterando rapidamente, deixe version indefinido para que o SHA do commit git seja usado em vez disso.
Se você usar versões explícitas, siga versionamento semântico (MAJOR.MINOR.PATCH): aumente MAJOR para mudanças de quebra, MINOR para novos recursos, PATCH para correções de bugs. Documente as alterações em um CHANGELOG.md.

Veja também