"Scaffold a new Claude Code plugin inside a marketplace repo. Use when the user asks to criar um plugin, scaffoldar um plugin novo, adicionar um plugin ao marketplace, ou transformar skills soltas em plugin distribuível."
Resources
1Install
npx skillscat add sallzzbr/hefesto-publico/criar-plugin Install via the SkillsCat registry.
SKILL.md
Criar Plugin
Scaffolda um plugin novo dentro de um repo-marketplace, com manifesto válido e registro no marketplace.json. Segue o layout canônico descrito em ${CLAUDE_PLUGIN_ROOT}/skills/criar-plugin/references/layout-canonico.md — leia antes de gerar qualquer arquivo.
Input
Pergunte ao usuário (o que ainda não tiver sido dito):
- Nome do plugin — kebab-case, PT quando fizer sentido (ex.:
bragir,hestia). - Descrição curta — uma frase; vai para
plugin.jsone para a entrada nomarketplace.json. - Categoria e tags — ex.:
writing,productivity; tags em PT/EN conforme o público. - Primeira skill — todo plugin nasce com pelo menos uma skill planejada (pode ser só o nome; o scaffold dela é da skill
criar-skill).
Before scaffolding
- Localize a raiz do marketplace: suba a partir do cwd até achar
.claude-plugin/marketplace.json.- Se não existir marketplace: ofereça scaffoldar o repo-marketplace mínimo primeiro (raiz com
.claude-plugin/marketplace.json,README.md,LICENSE,.gitignore) e o plugin dentro deplugins/<nome>/. Confirme com o usuário antes.
- Se não existir marketplace: ofereça scaffoldar o repo-marketplace mínimo primeiro (raiz com
- Verifique colisão:
plugins/<nome>/não pode existir, nem entrada homônima emmarketplace.json.plugins[].
Output
plugins/<nome>/.claude-plugin/plugin.json:
{
"name": "<nome>",
"version": "0.1.0",
"description": "<descrição>",
"author": { "name": "<owner do marketplace>", "url": "<url do owner>" },
"homepage": "<repository do marketplace>",
"repository": "<repository do marketplace>",
"license": "MIT",
"keywords": ["<tag1>", "<tag2>"]
}plugins/<nome>/README.md— stub com nome, propósito e tabela de skills (vazia ou com a primeira skill planejada).- Entrada em
marketplace.json.plugins[]comsourcestring relativa"./plugins/<nome>",versionalinhada aoplugin.json,description,categoryetags. - Bump minor em
marketplace.json.metadata.version(plugin novo = minor do marketplace). - Se o plugin já nasce com agentes fixos ou harness multi-agente, scaffold junto
agents/,tests/eskills/<skill>/harness/no primeiro pacote de arquivos. Não deixe o contrato do harness só em prosa. Se não houver harness, não crie diretórios vazios à toa.
After
- Se o pedido inclui a primeira skill, invoque
criar-skille conclua sua autochecagem obrigatória. Toda skill criada precisa denameigual ao diretório; não encerre com apenas a descrição no frontmatter. - Execute `node "${CLAUDE_PLUGIN_ROOT}/skills/validar-plugin/scripts/validar.mjs" "" --plugin "" e corrija todos os erros antes de anunciar pronto. Use o arquivo desta cópia, não uma instalação global.
- Atualize a tabela de plugins/skills do
README.mdda raiz do marketplace. - Sugira commit:
feat: novo plugin <nome>.
Important
sourcenomarketplace.jsoné sempre path relativo string;"source": "."não é spec-válido.plugin.jsonfica emplugins/<nome>/.claude-plugin/, nunca na raiz do plugin nem do repo.- Nunca use paths absolutos de SO em nenhum arquivo gerado; recursos internos do plugin são referenciados via
${CLAUDE_PLUGIN_ROOT}. - Se o plugin novo depende de skills de outro plugin (ex.:
bragir:escrever-como-antonio), documente a dependência no README do plugin. - Se houver harness, o contrato fica em
skills/<skill>/harness/e os agentes fixos emagents/; a forja não deve deixar esse padrão implícito.