Carregue com --plugin-dir
O --plugin-dir é o jeito de desenvolver. Ele carrega o mod direto da pasta, só nesta sessão. Nada fica instalado: fechou a sessão, o mod some.
Para vários mods, repita a flag, uma vez por pasta. O scripts/try.sh do Starter Kit faz exatamente isso: monta uma lista de --plugin-dir, uma por mod escolhido, e abre o claude numa pasta de demonstração temporária.
🆕 Novo aqui? Pasta vigiada
Numa sessão interativa, o Claude Code fica de olho na pasta passada em --plugin-dir. Salvou um arquivo dela, o módulo recarrega sozinho. É o hot-reload do próximo tópico.
Na raiz do kit:
claude --plugin-dir templates/starter-mod
Para experimentar um mod pronto do kit numa pasta descartável:
bash scripts/try.sh terminal-pet
/read no prompt, o /readcount aparece na lista de comandos. E surge a pasta templates/starter-mod/.claude-plugin/types/, com claude-code/, claude-code-tools/, claude-code-mcp/ e tsconfig.json: o Claude Code escreve os tipos ali a cada carga.✓ --plugin-dir serve para
- ✓ escrever e testar o seu mod
- ✓ experimentar um mod de terceiro sem instalar
- ✓ juntar vários:
--plugin-dir a --plugin-dir b
✗ Não serve para
- ✗ deixar o mod ligado em toda sessão
- ✗ chegar a uma conversa do app desktop já aberta
- ✗ uma lista de pastas numa flag só
Veja o hot-reload acontecer
Quando a pasta muda, o módulo recarrega: register roda de novo num ambiente novo, e os timers do ambiente anterior caem. Variáveis de módulo também recomeçam do zero.
O momento depende de quem salvou. Se foi o próprio Claude, no meio do turno, recarrega uma vez quando o turno acaba (ou antes, quando uma ferramenta ou comando do mod está para rodar). Se foi você, no editor, recarrega quando a pasta fica quieta.
Como ler o desenho: os pontos azuis são gravações; os verdes, recargas. Em cima, uma gravação solta recarrega logo. Embaixo, três gravações do Claude viram uma recarga só, no fim do turno, para o turno poder experimentar o que escreveu.
⚠️ O contador do starter-mod pode voltar a zero
O próprio README do starter-mod avisa: recarregar pode zerar o contador, que é uma variável de módulo. Dado que precisa sobreviver vai para $.state ou $.store (módulo 2.3). Se um hook parece não rodar depois de uma recarga, abra com claude --debug e leia o motivo no log.
| Tipo de sessão | Vigia a pasta? |
|---|---|
| interativa no terminal | sim |
claude -p | não precisa: carrega do zero a cada execução |
| headless longa (SDK, desktop) | só com CLAUDE_CODE_PLUGIN_DIR_WATCH=1 |
a pasta muda
roda de novo
caem
se foi o Claude
Use CLAUDE_CODE_PLUGIN_DIRS no desktop
No app desktop, ou numa sessão aberta por SDK, não há onde digitar uma flag. Para esses casos existe CLAUDE_CODE_PLUGIN_DIRS: cada pasta listada carrega exatamente como um --plugin-dir.
Use caminhos absolutos (o ~ é aceito), separados pelo separador de listas do sistema: : no Linux e no macOS, ; no Windows. O valor vem do ambiente do processo ou do bloco env do ~/.claude/settings.json. Nunca do settings de um projeto.
Acrescente ao ~/.claude/settings.json (troque o caminho pelo da sua pasta; se o arquivo já tem env, junte a linha a ele):
{
"env": {
"CLAUDE_CODE_PLUGIN_DIRS": "/home/rafa/mods/meu-contador"
}
}
💡 Desktop é outra sessão
O guia do Starter Kit insiste nisso: um claude --plugin-dir no terminal não acrescenta nada a uma conversa do desktop já aberta. E um teste de interface simulado não prova o resultado no desktop. Para ver de verdade, sessão nova.
✓ Certo
- ✓
/home/rafa/mods/meu-contador - ✓
~/mods/a:~/mods/b(Linux, macOS) - ✓ no
envdo~/.claude/settings.json
✗ Ignorado
- ✗ caminho relativo, como
./meu-contador - ✗ no
.claude/settings.jsondo projeto - ✗ esperar que a conversa aberta perceba
Instale por marketplace
Instalar é para o mod ficar ligado em toda sessão. Primeiro você adiciona um marketplace, depois instala um plugin dele pelo nome plugin@marketplace.
O que muda tudo é de onde o marketplace vem. Se é uma pasta e a entrada do plugin é um caminho relativo, o mod é lido da própria pasta. Se vem de um repositório, roda a cópia feita na instalação.
🆕 Novo aqui? Marketplace
É uma lista de plugins num arquivo .claude-plugin/marketplace.json. O do Starter Kit se chama claude-mods-kit e aponta cada plugin com "source": "./plugins/<nome>". Por isso o mod se instala como terminal-pet@claude-mods-kit.
Na raiz do kit (uma linha de cada vez):
claude plugin marketplace add . --scope user claude plugin install terminal-pet@claude-mods-kit --scope user claude plugin list
claude plugin list mostra o terminal-pet com uma linha Read from: apontando para a pasta do kit. Abra uma sessão nova e o mod já está lá, sem flag. Mantenha a pasta do kit no mesmo lugar enquanto usar esse marketplace.Como ler o desenho: a linha de cima tem dois passos; a de baixo, quatro. Quem desenvolve quer a de cima. Quem distribui para outras pessoas vive na de baixo (módulo 4.4). Para adicionar um marketplace de repositório, o comando é o mesmo, com <dono/repo> no lugar do ..
Edite o mod na pasta do marketplace
Sem versão nova e sem reinstalar.
Rode /reload-plugins na sessão
Vale no terminal e numa sessão do app desktop nesta máquina.
Leia a confirmação
Se a pasta mudou desde a última leitura, a recarga cita o plugin e a pasta de onde foi relido.
pasta ou repo
plugin@marketplace
relê a origem
mostra Read from:
Escolha o escopo certo
O --scope diz onde a instalação fica gravada e, portanto, quem recebe o mod. São três opções: user, project e local.
O conselho do Starter Kit é simples: escolha o escopo que você quer de fato. Não instale nos três "por garantia". Depois, para desligar, você vai ter de lembrar de cada um.
| Escopo | Vale para | Exemplo do Rafa |
|---|---|---|
user | todos os seus projetos | o medidor de contexto, que ele quer sempre |
project | o projeto, e quem clonar o repositório | o recibo de mudanças no repo de um cliente, para a equipe toda |
local | só você, só neste projeto | o mapa de calor, que só ele usa naquele repo |
O que olhar na tabela: project é o único que sai da sua máquina. As configurações do projeto podem ir para o repositório com o próximo commit. Revise antes de commitar.
No terminal, dentro da pasta do projeto (troque o caminho do kit pelo seu):
claude plugin marketplace add <pasta-do-kit> --scope project claude plugin install changes-receipt@claude-mods-kit --scope project
Para uma escolha só sua neste projeto, troque project por local nas duas linhas.
você, em tudo
a equipe
você, aqui
nada de "por garantia"
Desligue e desinstale sem sobras
Desligar (disable) tira o mod das próximas sessões e mantém a instalação. Desinstalar (uninstall) remove a instalação no escopo escolhido. Os dois valem por escopo: repita em cada um onde instalou.
O scripts/manage.sh do Starter Kit faz isso para os dez mods de uma vez. Ele aceita install, enable, disable e uninstall, e no uninstall passa --keep-data para não apagar preferências sem avisar.
| Como o mod chegou | Como tirar |
|---|---|
--plugin-dir | feche a sessão; nada foi instalado |
CLAUDE_CODE_PLUGIN_DIRS | apague a linha do env e reabra o app |
| marketplace | disable ou uninstall, em cada escopo usado |
comando do próprio mod (/pet off) | esconde a função; o mod continua carregado |
O que olhar na tabela: a última linha engana. Esconder um painel não para o mod de observar. Para parar de vez, use uma das três primeiras.
Um mod só:
claude plugin disable terminal-pet@claude-mods-kit --scope user
Os dez mods do kit, a partir da raiz do kit:
bash scripts/manage.sh disable user all
Commands succeeded. Close old sessions and start a fresh Claude Code session. Feche as sessões antigas, inclusive as abertas com --plugin-dir, e abra uma nova: o mod não aparece.⚠️ O que fica para trás
- • A pasta
.claude-plugin/types/que o Claude Code escreveu dentro do mod (o starter-mod a ignora no git). - • As escolhas do
/configempluginConfigs, nosettings.json. - • O que o mod gravou em
$.storeou em arquivos. O guia do kit INEMA lembra: um comando que grava on/off persiste de verdade; depois de testar ao vivo, volte ao padrão.
Teste rápido (opcional): o Rafa instalou um mod de um marketplace de repositório. Editou a cópia de trabalho, rodou /reload-plugins e nada mudou. Por quê?
mantém instalado
remove no escopo
os dez de uma vez
tipos, config, store
🎓 Resumo do módulo
Próximo módulo:
1.4 — Seu primeiro mod: comando e contador