Skip to main content
Um plugin é um diretório de skills, agents, hooks e servidores MCP, mais um arquivo plugin.json, chamado de manifest, que nomeia o plugin. Claude Code carrega o diretório como uma unidade, para que você possa compartilhá-lo com colegas de equipe, instalá-lo em vários projetos ou publicá-lo em um marketplace. Esta página é para pessoas que escrevem seus próprios plugins.
Estes casos são cobertos em outras páginas:
Comece pela seção que corresponde ao que você já tem:

Decidir quando usar um plugin

Skills, agents, hooks e servidores MCP funcionam todos de forma independente em seu projeto ou diretório inicial. Mantenha essa configuração independente enquanto ela serve um projeto ou apenas você. Crie um plugin quando quiser compartilhar a configuração com colegas de equipe, instalá-la em vários projetos ou publicar versões lançadas. Quando você move skills, agents, hooks e configuração MCP independentes para um plugin, sua localização e nomes mudam:
  • Onde os arquivos vão: sob o diretório próprio do plugin, chamado de raiz do plugin, como skills/, agents/, hooks/hooks.json e .mcp.json.
  • Como são nomeados: skills e agents do plugin recebem o nome do plugin como prefixo, como /my-plugin:hello, para que dois plugins possam cada um fornecer uma skill hello sem colidir.
Para mover uma configuração existente para um plugin, veja Converter uma configuração .claude/ existente.

Criar seu primeiro plugin

Neste passo a passo, você cria um plugin cujo único componente é uma skill, uma saudação, e a executa com --plugin-dir, que carrega um plugin para uma sessão sem instalá-lo. Um plugin pode conter qualquer mistura de componentes, como skills, agents, hooks e servidores MCP, e nenhum é obrigatório; uma skill é o exemplo menor que mostra o layout. Você precisa ter Claude Code instalado e conectado. Abra um terminal no diretório onde você deseja manter o plugin, como ~/projects, e execute os comandos nessas etapas a partir dele. Você pode manter um plugin em qualquer lugar, porque você passa seu caminho para Claude Code quando inicia uma sessão.
1

Criar o diretório do plugin

Crie o diretório do plugin, com uma pasta .claude-plugin/ dentro dele para conter o manifest:
2

Escrever o manifest

O manifest é um arquivo JSON chamado plugin.json que diz ao Claude Code o nome do plugin e o descreve. Salve este em my-first-plugin/.claude-plugin/plugin.json:
my-first-plugin/.claude-plugin/plugin.json
Os quatro campos fazem isto:
  • name: obrigatório. Identifica o plugin e se torna o prefixo em cada skill e agent que o plugin fornece. Não coloque espaços nele.
  • description: o texto que os usuários veem para o plugin em /plugin.
  • version: opcional. Configurá-lo mantém os usuários nessa versão até que você a altere; Lançar uma nova versão diz quando configurá-la ou omiti-la.
  • author: quem creditar. name é obrigatório dentro dele; email e url são opcionais.
Todos os outros campos estão na referência do manifest.Apenas plugin.json vai dentro de .claude-plugin/. A skill que você adiciona a seguir vai diretamente sob my-first-plugin/, ao lado dessa pasta.
3

Adicionar uma skill

O único componente deste plugin é uma skill. Cada skill é um diretório sob skills/ que contém um arquivo SKILL.md. Crie o diretório da skill:
Depois crie my-first-plugin/skills/hello/SKILL.md com este conteúdo:
my-first-plugin/skills/hello/SKILL.md
A linha disable-model-invocation: true significa que Claude não executa a skill por conta própria, então apenas você a dispara. Remova essa linha de uma skill que você quer que Claude execute por conta própria. O comando da skill combina o nome do plugin e o nome da skill, então você executa este como /my-first-plugin:hello. Para os outros campos do frontmatter, veja a referência do frontmatter da skill.
4

Validar o plugin

Verifique o manifest e o frontmatter da skill antes de executar qualquer coisa:
O comando imprime o caminho do manifest que verificou e ✔ Validation passed. Se imprimir ✘ Validation failed em vez disso, cada linha acima dessa linha de resultado nomeia o campo a corrigir. Procure cada mensagem em claude plugin validate relata erros.
5

Executar Claude Code com o plugin

Inicie uma sessão com o plugin carregado:
Assim que Claude Code iniciar, execute a skill:
Claude responde com uma saudação.
O plugin carrega apenas em sessões que você inicia com --plugin-dir. Para continuar trabalhando nele sem a flag, ou para testar uma compilação .zip, veja Desenvolver sem um marketplace.

Compartilhar seu plugin

Um plugin que você construiu com Criar seu primeiro plugin existe apenas em sua máquina. Quando estiver pronto para outras pessoas, há três maneiras de entregá-lo a elas:

Layout do plugin

Cada tipo de componente, como skills, agents, hooks e servidores MCP, vai em um diretório fixo sob a raiz do plugin, que é o diretório que você passa para --plugin-dir. Adicione apenas os diretórios que você usa. Para clicar através de um diretório de plugin completo e ler o que cada arquivo faz, abra o explorador de plugin. A tabela lista os diretórios com os quais a maioria dos plugins começa, e o layout completo lista o resto.
Apenas plugin.json vai dentro de .claude-plugin/. Componentes salvos lá não carregam.A raiz do plugin é o diretório próprio do plugin, não ~/.claude/ em si. Um .mcp.json salvo em ~/.claude/.mcp.json não carrega.

Desenvolver sem um marketplace

Você não precisa de um marketplace para executar um plugin que está escrevendo. Carregue-o diretamente do disco ou de uma URL em vez disso:
  • --plugin-dir: carrega um diretório ou arquivo .zip para uma sessão.
  • --plugin-url: busca um arquivo .zip de uma URL para uma sessão.
  • claude plugin init: estrutura um plugin sob ~/.claude/skills/ que carrega a cada sessão.
Se dois plugins carregados de maneiras diferentes compartilharem um nome, veja Conflitos de nome para saber qual Claude Code mantém.

Carregar um plugin para uma sessão

Você pode carregar um plugin para uma única sessão de três maneiras: de um diretório ou arquivo .zip no disco com --plugin-dir, de uma URL com --plugin-url, ou de uma variável de ambiente quando você não pode adicionar uma flag. Cada plugin carrega apenas para essa sessão, e nada é escrito em suas configurações para ele. Quando você edita os arquivos do plugin durante a sessão, execute /reload-plugins para carregar as alterações.

De um diretório ou .zip

Quando você inicia claude a partir de seu shell, passe --plugin-dir com o diretório raiz do plugin ou um arquivo .zip dele. Repita a flag para carregar vários plugins:

De uma pasta de plugins

Para carregar vários plugins de um lugar, passe uma pasta que os contenha, como --plugin-dir ./plugins. Carregar uma pasta de plugins requer Claude Code v2.1.265 ou posterior. Se a pasta não tiver um diretório .claude-plugin/ e nenhum componente de plugin em seu nível superior, Claude Code a trata como uma pasta de plugins. Cada subpasta imediata que tenha um manifest .claude-plugin/plugin.json então carrega como um plugin separado. Tudo mais na pasta é ignorado sem um erro, incluindo uma subpasta que não tenha um manifest. Se um plugin na pasta não carregar, verifique se sua subpasta tem um .claude-plugin/plugin.json. Em uma sessão interativa, você também pode adicionar e remover plugins na pasta após a inicialização:
  • Uma subpasta que você adiciona carrega como um novo plugin assim que seu manifest existe.
  • Quando você remove uma subpasta, seu plugin descarrega.
Uma mensagem aparece na sessão para cada uma dessas alterações. Se carregar ou descarregar um plugin no meio da conversa invalidaria o cache de prompt, a alteração é mantida em vez disso, e a mensagem diz a você para executar /reload-plugins para aplicá-la.

De uma URL

Quando você inicia claude a partir de seu shell, passe --plugin-url com o endereço de um arquivo .zip, como um artefato de compilação que seu CI publica:
Claude Code baixa o arquivo na inicialização. Para carregar vários, repita a flag ou passe as URLs separadas por espaço em um argumento entre aspas. Aponte a flag apenas para arquivos que você controla ou confia. Se Claude Code não conseguir buscar o arquivo, ou o arquivo for inválido, ele inicia sem o plugin e registra um erro de carregamento de plugin que você pode revisar na aba Errors do gerenciador /plugin.

De uma variável de ambiente

Para carregar plugins em uma sessão onde você não pode adicionar a flag --plugin-dir, liste seus caminhos absolutos na variável de ambiente CLAUDE_CODE_PLUGIN_DIRS em vez disso. Claude Code carrega cada caminho como carrega um caminho --plugin-dir. Esses plugins carregam além de qualquer um que você passe com --plugin-dir. As configurações de projeto e local não podem definir essa variável. CLAUDE_CODE_PLUGIN_DIRS requer Claude Code v2.1.280 ou posterior. As configurações gerenciadas podem desativar --plugin-dir e CLAUDE_CODE_PLUGIN_DIRS. Veja Flags que carregam um plugin para uma sessão. Para testar um plugin junto com um plugin do qual depende, veja Testar um plugin e sua dependência localmente.

Fazer um plugin carregar em cada sessão

Seu diretório de skills pessoal é ~/.claude/skills/. Claude Code carrega qualquer pasta lá que contenha um .claude-plugin/plugin.json como um plugin em cada sessão, sem flag e sem etapa de instalação. claude plugin init estrutura um desses plugins para você.

Estruturar o plugin com claude plugin init

claude plugin init escreve um plugin inicial sob ~/.claude/skills/. Requer Claude Code v2.1.157 ou posterior. Estruture um a partir de seu shell:
O comando cria ~/.claude/skills/my-tool/ com um .claude-plugin/plugin.json e um SKILL.md raiz. Ele imprime ✔ Created plugin "my-tool" at ~/.claude/skills/my-tool seguido por It will auto-load next session as my-tool@skills-dir. Run /reload-plugins to load it now. Passe --with skills para ter claude plugin init estruturar uma skill sob skills/ para você. Os outros valores --with estão na referência de comandos de plugin.

Nomear as skills do plugin

A skill raiz em ~/.claude/skills/my-tool/SKILL.md também é uma skill pessoal, então você a invoca como /my-tool, não /my-tool:my-tool. Skills que você adiciona sob skills/ dentro do plugin recebem o prefixo do nome do plugin, como /my-tool:example.

Parar de carregar o plugin

Para parar de carregar um plugin estruturado, delete seu diretório, ou execute claude plugin disable my-tool@skills-dir em seu shell com o nome my-tool@skills-dir que claude plugin init imprimiu. No ID my-tool@skills-dir, skills-dir fica no lugar onde um nome de marketplace estaria, porque o plugin carrega de seu diretório de skills em vez de um marketplace.

Compartilhar o plugin através de um repositório

claude plugin init escreve o plugin em seu diretório de skills pessoal em ~/.claude/skills/, para que carregue para você em cada projeto. Para fazer um plugin carregar para todos em um repositório, crie o mesmo layout você mesmo em <project>/.claude/skills/<name>/, incluindo seu .claude-plugin/plugin.json. Veja Plugins compartilhados através de um repositório para as condições sob as quais Claude Code o carrega.

Testar e depurar

Quando uma alteração em seu plugin não aparece, trabalhe através dessas verificações em ordem. Cada uma diz a você o que Claude Code fez com o plugin:
  1. Em seu shell, execute claude plugin validate <path>. Verifica o manifest e o frontmatter de cada arquivo de skill, agent e command, e sai com 0 em Validation passed. Adicione --strict para falhar em avisos também. Códigos de saída e manipulação de diretório estão na referência de comandos de plugin.
  2. Na sessão em execução, execute /reload-plugins para aplicar edições que você fez no disco. Imprime uma linha Reloaded: com contagens. Depois confirme que uma skill carregou digitando seu comando /plugin-name:skill, ou encontrando o plugin na aba Installed de /plugin.
  3. Na mesma sessão, execute /plugin. A aba Installed lista seu plugin e, nos detalhes do plugin, os componentes que Claude Code encontrou. A aba Errors lista o que falhou ao carregar e por quê, como um caminho em seu manifest que não existe.
  4. De volta em seu shell, execute claude plugin list. Imprime plugins de sessão única e diretório de skills em suas próprias seções com Status: ✔ loaded ou o erro de carregamento. Para incluir o plugin que você está desenvolvendo, passe --plugin-dir com seu caminho antes de plugin list.
Para verificar um servidor MCP, execute /mcp na sessão para ver o status do servidor. Quando o servidor está saudável, /mcp o lista como conectado. Se não estiver, veja Servidores MCP que não iniciam. Para verificar um hook, dispare o evento que ele corresponde. Por exemplo, peça a Claude para editar um arquivo para disparar um hook PostToolUse. Depois leia o log de depuração, que mostra quais hooks corresponderam, seus códigos de saída e sua saída. As próximas seções cobrem as falhas que você provavelmente encontrará ao desenvolver, e a página de troubleshooting tem a entrada completa para cada uma.

Um caminho de componente não é encontrado

A aba Errors de /plugin mostra <component> path not found: <path>, por exemplo commands path not found. Um caminho de componente em seu manifest, como commands, skills, agents ou hooks, aponta para nada. Corrija o caminho ou crie o diretório, depois execute /reload-plugins na sessão. Veja commands path not found.

--plugin-dir em uma raiz de marketplace não carrega os plugins sob plugins/

--plugin-dir leva o diretório raiz do plugin, aquele que contém .claude-plugin/plugin.json e os diretórios de componentes como skills/. Se você apontá-lo para uma raiz de marketplace em vez disso, Claude Code não lê marketplace.json, então um plugin sob plugins/ não carrega, e você não vê nenhum erro. Aponte a flag para a pasta de um plugin, ou adicione o marketplace. Veja a entrada de troubleshooting.

O plugin carrega mas suas skills estão faltando

O diretório skills/ está dentro de .claude-plugin/, ou uma entrada skills no manifest aponta para um arquivo. Mova skills/ para a raiz do plugin, aponte cada entrada skills para um diretório que contenha SKILL.md, e execute /reload-plugins na sessão. Veja Plugin carrega mas suas skills estão faltando.

O diálogo userConfig nunca aparece

O diálogo para as opções userConfig do seu plugin faz parte da instalação através de /plugin em uma sessão. Carregar com --plugin-dir não o mostra, e nem claude plugin install no shell. Com o plugin carregado, execute /plugin configure <plugin-name> na sessão para abri-lo. Veja O diálogo userConfig nunca aparece.

Verificar que o plugin muda o comportamento de Claude

Um plugin que carrega sem erros ainda pode falhar em orientar Claude da maneira que você pretende. claude plugin eval, que você executa em seu shell, executa seus casos de teste com e sem o plugin e pontua a diferença. Veja Testar plugins com evals, começando com Criar seu primeiro conjunto de eval.

Converter uma configuração .claude/ existente

Se você já tem skills, agents ou hooks sob um diretório .claude/ de um projeto, você pode movê-los para um plugin sem reescrevê-los. Execute os comandos nessas etapas a partir da raiz do projeto, que é o diretório que contém .claude/, porque os caminhos cp são relativos a ele.
1

Criar a estrutura do plugin

Crie o diretório do plugin e sua pasta .claude-plugin/ ao lado de .claude/. Você pode mover o plugin para qualquer lugar depois.
Crie my-plugin/.claude-plugin/plugin.json:
my-plugin/.claude-plugin/plugin.json
2

Copiar seus arquivos existentes

Copie cada diretório de configuração que você tem para a raiz do plugin, e pule o comando para qualquer diretório que você não tenha.
Execute ls -a my-plugin para confirmar que cada diretório que você copiou aparece ao lado de .claude-plugin.
3

Mover seus hooks

Se você tem hooks em .claude/settings.json ou .claude/settings.local.json, crie um diretório de hooks:
Crie my-plugin/hooks/hooks.json e copie o objeto hooks de seu arquivo de configurações para ele. O formato é o mesmo.Este exemplo mostra a forma com um hook que executa um linter em cada arquivo que Claude escreve ou edita. Substitua o exemplo pelo seu próprio objeto hooks.
my-plugin/hooks/hooks.json
4

Testar o plugin migrado

Carregue o plugin para uma sessão:
Verifique cada componente sob seu novo nome:
  • Skills: execute /my-plugin:deploy para uma skill que era /deploy.
  • Subagents: peça a Claude para usar o agent my-plugin:reviewer para um agent que era reviewer.
  • Hooks: dispare o evento que cada hook corresponde.
Se algo está faltando, trabalhe através de Testar e depurar.
Enquanto os originais ainda estão sob .claude/, eles permanecem carregados ao lado das cópias do plugin:
  • Skills e agents: os dois conjuntos não colidem, porque as skills e agents do plugin carregam o prefixo my-plugin:. /deploy e /my-plugin:deploy funcionam ambos, e Claude vê reviewer e my-plugin:reviewer como dois subagents.
  • Hooks: hooks não têm prefixo, então um hook que está em seu arquivo de configurações e em hooks/hooks.json executa duas vezes cada vez que seu evento dispara.
Depois que você confirmou que o plugin funciona, delete os originais de .claude/ e remova o objeto hooks de seu arquivo de configurações.

Próximos passos