Pular para o conteúdo
MÓDULO 4.4

📦 Distribuir e projeto final

O mod funciona, passa nos testes e responde no claude -p. Falta outra pessoa conseguir instalar. Este módulo mostra o marketplace, a publicação num repositório, como atualizar sem quebrar quem usa e o que revisar antes de abrir o código. No fim, o projeto final do curso.

6
Tópicos
~35
Minutos
Avançado
Nível
Prático
Tipo
0 de 60%
Versão conferida: os arquivos mostrados aqui são os reais dos kits em 05/10/2026, com o Claude Code 2.1.289. Os comandos de instalação vêm da documentação do kit; mostramos o que se espera deles, sem saída inventada.
1

Monte o marketplace.json

Para outra pessoa instalar, o mod precisa estar num marketplace: um catálogo que diz quais plugins existem e onde está cada um. É um arquivo só, .claude-plugin/marketplace.json, na raiz do repositório.

O kit da Prompt Advisers (MIT) é um bom modelo: um repositório, um marketplace, dez plugins em plugins/.

🆕 Novo aqui? Marketplace

O marketplace é a lista de plugins que o Claude Code sabe instalar. Você o adiciona uma vez (de uma pasta ou de um repositório) e depois instala plugins dele pelo nome <plugin>@<marketplace>. O nome depois do @ é o name do marketplace.json, não o nome do repositório.

📄 claude-mods-starter-kit/.claude-plugin/marketplace.json (começo)
{
  "name": "claude-mods-kit",
  "owner": {
    "name": "Prompt Advisers"
  },
  "plugins": [
    {
      "name": "terminal-pet",
      "source": "./plugins/terminal-pet",
      "description": "A pixel-art crab above the prompt that reacts live to what Claude is doing. /pet for commands."
    },
    {
      "name": "coral-skin",
      "source": "./plugins/coral-skin",
      "description": "Coral, ink and cream reskin of Claude Code with risk-coded tool rows. Toggle with /skin."
    },
O que olhar: source é um caminho relativo à raiz do repositório, sempre começando por ./. O name de cada entrada é o mesmo do plugin.json daquele plugin.
CampoNo kitNo mod do Rafa
nameclaude-mods-kitrafa-mods
owner.namePrompt Adviserso nome dele ou da agência
plugins[].source./plugins/<nome>./mods/<nome>
plugins[].descriptionuma frase, com o comandoidem, em português
2

Publique num repositório

Com o marketplace.json na raiz, o repositório inteiro vira o marketplace. Quem quer instalar faz duas coisas: adiciona o marketplace pelo dono/repo e instala o plugin pelo nome.

O --scope diz onde a instalação vale: user (todos os seus projetos), project (o projeto, e quem clonar o repositório) ou local (só você, só neste projeto). O módulo 1.3 detalha cada um.

repositóriomarketplace.jsonmods/<nome>/ marketplace addregistra o catálogo installplugin@marketplace sessão novao mod carrega o --scope escolhe onde vale: user, project ou local

Como ler o desenho: só a caixa âmbar é trabalho seu. As duas azuis são os comandos de quem instala. A caixa cinza lembra que a instalação vale para a próxima sessão, não para a que já está aberta.

🎯 Objetivo: instalar um mod do kit pelo marketplace

No terminal, em qualquer pasta (o espelho INEMA do kit):

claude plugin marketplace add inematds/claude-mods-starter-kit --scope user
claude plugin install terminal-pet@claude-mods-kit --scope user

Resultado esperado (pela documentação do kit):

o marketplace claude-mods-kit fica registrado e o terminal-pet aparece em claude plugin list. Abra uma sessão nova para o caranguejo aparecer acima do prompt.

Como verificar: rode claude plugin list e procure terminal-pet. Para desfazer: claude plugin disable terminal-pet@claude-mods-kit --scope user.

✓ Repositório pronto

  • ✓ .claude-plugin/marketplace.json na raiz
  • ✓ Uma pasta por mod, cada uma com o seu plugin.json
  • ✓ claude plugin validate ok na raiz e em cada mod

✗ Erros comuns

  • ✗ Instalar com o nome do repositório depois do @
  • ✗ source sem ./ ou apontando para fora do repositório
  • ✗ Esperar o mod na sessão que já estava aberta
3

Atualize sem quebrar quem usa

A referência oficial separa dois casos. Um marketplace que é uma pasta sua, com source relativo, é lido da própria pasta: edite, rode /reload-plugins e pronto, sem versão nova nem reinstalar.

Todo o resto (marketplace vindo de repositório, URL, git, npm) roda a cópia feita na instalação. Uma mudança sua só chega a quem usa como versão ou commit novo, por claude plugin update e depois /reload-plugins.

1

Suba a versão no plugin.json

De "version": "0.1.0" para "0.1.1" numa correção. O model-router do kit, por exemplo, está em 0.1.1.

2

Rode o checar antes do commit

validate, tsc e test, como no módulo 4.3. Quem instala recebe exatamente o que você publicou.

3

Publique no repositório

Commit e push. O marketplace é o próprio repositório.

4

Quem usa atualiza

claude plugin update, depois /reload-plugins na sessão. claude plugin list mostra em Read from: de onde cada plugin é lido.

✓ Muda sem quebrar

  • ✓ Campo novo no userConfig, com default
  • ✓ Argumento novo num comando que já existe
  • ✓ Texto de mensagem mais claro

✗ Quebra quem usa

  • ✗ Renomear o comando (e colidir com outro)
  • ✗ Trocar a chave de um valor salvo em $.store
  • ✗ Mudar o name do plugin

💡 Desenvolva pela pasta, publique pelo repositório

Enquanto mexe, use --plugin-dir (hot-reload) ou um marketplace de pasta (/reload-plugins). Só quando passar no checar, suba a versão e publique. Assim quem instalou pelo repositório nunca recebe um meio-termo.

4

Revise antes de compartilhar

O guia guides/BUILD-YOUR-OWN.md do kit tem uma seção "Review before sharing" que resume o cuidado: um plugin público é código que outras pessoas vão rodar, com as permissões do Claude Code delas. As ações dele precisam ser fáceis de inspecionar.

Na prática, o Rafa revisa a pasta do mod duas vezes: uma procurando o que tirar, outra conferindo o que precisa estar.

✗ Tire do repositório

  • ✗ Arquivos de settings
  • ✗ Transcrições de conversa, handoffs, marcadores
  • ✗ Caminhos pessoais (/home/rafa/...)
  • ✗ Chaves e tokens
  • ✗ Prints com dados pessoais e caches gerados

✓ Deixe no repositório

  • ✓ O código-fonte e os testes
  • ✓ Instruções de instalar, ligar e desligar
  • ✓ Uma data clara de compatibilidade (a versão do Claude Code)
  • ✓ A licença preservada

⚠️ O .claude-plugin/types/ é gerado

Quando o mod carrega por --plugin-dir, o Claude Code escreve os tipos da sua versão em .claude-plugin/types/. Eles são da sua instalação, não do mod: quem instalar recebe os da versão dela. Confira se a pasta entra ou não no commit, de propósito.

🎯 Objetivo: uma revisão de vazamento antes do push

Abra claude na raiz do seu repositório de mods e cole:

Leia todos os arquivos de mods/ e .claude-plugin/marketplace.json. Liste qualquer caminho pessoal, chave, token, e-mail, transcrição de conversa ou arquivo de settings que encontrar, com o arquivo e a linha. Não altere nada.
Como verificar: a resposta lista arquivo e linha de cada achado, ou diz que não achou nada. Corrija você mesmo cada item e peça a revisão de novo até a lista vir vazia.
5

Faça o projeto final

O projeto final junta as quatro trilhas num mod seu. O exemplo é o do Rafa: ver o que o Claude toca no repositório e não perder trabalho entre sessões. Escolha a sua ideia, mas cumpra os sete itens.

seu modprojeto final /comando faixa ou painel $.state desligar testes validate ok README prova: 0 fail · claude -p "/comando" responde

Como ler o desenho: as sete caixas azuis são os requisitos; cada uma vem de um módulo do curso. A linha âmbar embaixo é a prova: sem ela, o projeto não está pronto.

RequisitoOnde você aprendeu
Comando /x que responde sem modelo1.4 e 3.4
Faixa ou painel3.2 e 3.3
Estado em $.state (com contrato)2.3
Teste com claude plugin test, mocks antes do $4.2
claude plugin validate ok1.2 e 4.3
Botão ou comando de desligar3.3 e 4.1
README: o que faz, como ligar e desligar, opções, limiteseste módulo
🎯 Objetivo: provar que o projeto final está pronto

No terminal, troque <pasta> pela pasta do seu mod e <comando> pelo nome do seu comando:

claude plugin validate <pasta>
claude plugin test <pasta>
claude -p "/<comando>" --plugin-dir <pasta>
Como verificar: o validate termina em ✔ Validation passed; o test mostra 0 fail; e o claude -p devolve a resposta do seu comando prefixada com o nome do plugin, como o recibo-sessao: do módulo 4.3. Os três juntos são a prova do projeto.
6

Siga para os próximos passos

Você terminou o curso técnico. Daqui, três direções: mais fundo nos hooks clássicos e nos plugins de produção, mais perto da guarda com o agent runtime, ou de volta ao código dos dois kits, agora lendo como autor.

E lembre a regra do começo: a API está em acesso antecipado. A cada versão nova do Claude Code, rode o checar nos seus mods e leia o arquivo de tipos antes de culpar o código.

🪝

Automação & Hooks no Claude Code

Os hooks clássicos do settings.json, que o mod enxerga como classic.<Nome>.

inematds.github.io/cchooks

🏭

Plugins de produção

O passo seguinte ao mod: plugins do Claude Code pensados para uso em produção.

inematds.github.io/makeclaudex

🛡️

Curso INEMA Agent Runtime

A trilha 4 trata de guarda e painel para agentes, o mesmo terreno do módulo 4.1.

inematds.github.io/curso-agent-runtime

🌱

Curso básico de mods

A versão para quem não programa.

Em breve

💡 Os dois kits continuam sendo o melhor material

Leia os mods que você ainda não abriu: github.com/inematds/inema-mods (18 mods em português) e github.com/inematds/claude-mods-starter-kit (o Claude Mods Starter Kit, da Prompt Advisers, licença MIT). Cada um tem testes: eles mostram o comportamento melhor que qualquer README.

Teste rápido (opcional): o Rafa publicou uma correção no repositório do marketplace dele. Um colega que instalou pelo repositório ainda vê o comportamento antigo. O que falta?

🎓 Resumo do módulo

✓
marketplace.json na raiz — name, owner e plugins[].source.
✓
marketplace add + install — plugin@marketplace, com --scope.
✓
Repositório chega por versão nova — update e /reload-plugins.
✓
Revise antes do push — sem settings, transcrições, caminhos, chaves.
✓
Projeto final com prova — 0 fail e o comando no claude -p.

Fim do curso:

Você completou as quatro trilhas de Mods do Claude Code — o curso técnico.