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:
- Instalando o plugin de alguém: veja Instalar plugins
- Não tem certeza se precisa de um plugin: veja Decidir se você precisa de um plugin na visão geral
- Os usuários do seu plugin estão em claude.ai ou em Cowork: a mesma pasta instala lá com um subconjunto diferente de componentes. Veja Plugins em claude.ai e em Cowork
- Nada ainda: siga Criar seu primeiro plugin, depois Desenvolver sem um marketplace e Testar e depurar.
- Arquivos sob
.claude/já existem: faça o passo a passo do primeiro plugin uma vez para aprender o layout, depois siga Converter uma configuração.claude/existente.
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.jsone.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 skillhellosem colidir.
.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 Os quatro campos fazem isto:
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
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;emaileurlsão opcionais.
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 Depois crie A linha
skills/ que contém um arquivo SKILL.md. Crie o diretório da skill:my-first-plugin/skills/hello/SKILL.md com este conteúdo:my-first-plugin/skills/hello/SKILL.md
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.
--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:- Envie-o para algumas pessoas diretamente: dê a elas o diretório do plugin ou um
.zipdele, e nada precisa ser publicado. Veja Compartilhar um plugin sem um marketplace. - Liste-o em seu próprio marketplace: colegas de equipe adicionam seu marketplace uma vez e instalam o plugin por nome, e recebem suas atualizações. Veja Publicar através de seu próprio marketplace.
- Envie-o para o marketplace da comunidade da Anthropic: uma vez listado, qualquer pessoa que adicione esse marketplace pode instalá-lo. Veja Enviar para o marketplace da comunidade.
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.
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.zippara uma sessão.--plugin-url: busca um arquivo.zipde uma URL para uma sessão.claude plugin init: estrutura um plugin sob~/.claude/skills/que carrega a cada sessão.
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.
/reload-plugins para aplicá-la.
De uma URL
Quando você iniciaclaude 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:
/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:
~/.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 executeclaude 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:- Em seu shell, execute
claude plugin validate <path>. Verifica o manifest e o frontmatter de cada arquivo de skill, agent e command, e sai com0emValidation passed. Adicione--strictpara 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. - Na sessão em execução, execute
/reload-pluginspara aplicar edições que você fez no disco. Imprime uma linhaReloaded:com contagens. Depois confirme que uma skill carregou digitando seu comando/plugin-name:skill, ou encontrando o plugin na aba Installed de/plugin. - 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. - 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 comStatus: ✔ loadedou o erro de carregamento. Para incluir o plugin que você está desenvolvendo, passe--plugin-dircom seu caminho antes deplugin list.
/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órioskills/ 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 Crie
.claude-plugin/ ao lado de .claude/. Você pode mover o plugin para qualquer lugar depois.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 Crie
.claude/settings.json ou .claude/settings.local.json, crie um diretório de hooks: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:deploypara uma skill que era/deploy. - Subagents: peça a Claude para usar o agent
my-plugin:reviewerpara um agent que erareviewer. - Hooks: dispare o evento que cada hook corresponde.
.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:./deploye/my-plugin:deployfuncionam ambos, e Claude vêrevieweremy-plugin:reviewercomo 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.jsonexecuta duas vezes cada vez que seu evento dispara.
.claude/ e remova o objeto hooks de seu arquivo de configurações.
Próximos passos
- Componentes de plugin: adicione agents, hooks, servidores MCP, servidores LSP e configuração de usuário ao seu plugin
- Testar plugins com evals: escreva casos de eval e execute-os com
claude plugin evalpara verificar com que confiabilidade o plugin orienta o comportamento de Claude - Publicar um plugin: versione-o, coloque-o em um marketplace e envie-o para o marketplace da comunidade
- Plugins em claude.ai e em Cowork: a mesma pasta de plugin instala em claude.ai e em Cowork. Alguns componentes são apenas Claude Code
- Referência do manifest do plugin: cada campo
plugin.json, regra de caminho e diretório - Skills: escreva as skills que seu plugin fornece
- Plugins da Anthropic no repositório claude-code: exemplos completos trabalhados do layout nesta página, como
feature-devecode-review