Skills e subagentes de Claude Code para o portfólio de SaaS solo dev (Laravel 13 + Nuxt 4, VPS self-hosted).
cd /mnt/Variados/ClaudeSkills && ./install.shCria symlinks ~/.claude/{skills,agents,CLAUDE.md} → este repositório e libera a memória compartilhada
em additionalDirectories. Como é symlink, editar aqui vale na próxima sessão — não precisa reinstalar.
Valide numa sessão nova:
/ceo
Se ele carregar o contexto do projeto, está tudo no lugar.
| O quê | Onde |
|---|---|
| Este pacote | /mnt/Variados/ClaudeSkills |
Memória compartilhada ($MEM) |
/mnt/Variados/InovaStack/memoria |
| Repositórios | /mnt/Variados/InovaStack/develop/ |
Esses caminhos não são hardcoded — quem manda é o install.sh. Ele se localiza sozinho
(PACOTE = pasta do próprio script, memória e repos deduzidos da pasta-mãe) e reescreve os literais
em todo .md/.sh/.yml do pacote quando algo diverge da tabela acima.
Por que literal e não variável: SKILL.md e agente são prompt, não script — Read/Glob/Grep
não expandem $MEM. O caminho tem que estar escrito por extenso; o que fica dinâmico é quem escreve.
mv /mnt/Variados/ClaudeSkills /outro/lugar/ClaudeSkills
cd /outro/lugar/ClaudeSkills && ./install.sh # re-aponta os 22 arquivos, symlinks e hooksMemória fora do padrão (não irmã do pacote): INOVA_MEM=/caminho/memoria ./install.sh.
Repositórios fora do padrão: INOVA_DEV=/caminho/develop ./install.sh.
Antes de mexer no install.sh ou nos hooks, rode o smoke test — é código que reescreve
40+ arquivos com sed -i e mexe no seu settings.json global:
./tests/install-smoke.sh # install.sh + os dois hooks
./tests/backup-env.sh # scripts/backup-env.shRodam inteiros em sandbox descartável (HOME falso, cópia do pacote, memória falsa) — não tocam no ambiente real.
/ceo é o ponto de entrada único. Detecta a stack, casa a pasta atual com um projeto em $MEM,
carrega só contexto.md + a última sessão, e roteia por intenção. As demais skills carregam sob demanda —
não invoque skill por reflexo, a descrição dispara sozinha.
Fluxo canônico de feature:
PRD/ideia → /spec → clarifica → /spec plan → [spec-analyze se G]
→ /sprint → /tdd → reviewer → git-commit → /memoria salvar
| Grupo | Skills |
|---|---|
| Orquestração | ceo · memoria · usage |
| Processo | spec · sprint · tdd · revisor · git · scaffold · deploy · arquiteto |
| Stack | laravel-api · laravel-nuxt · laravel-vue3 · laravel-livewire · nuxt |
| Domínio técnico | multi-tenant · payments · jobs · ai-pipeline · performance · observability · debug · backup-dr · e2e · api-docs |
| Produto & negócio | design · growth · metrics · support · lgpd |
| Modelo | Agentes | Por quê |
|---|---|---|
opus |
code-reviewer-critico |
erro caro de reverter |
sonnet |
code-reviewer · debug-triagem · performance-profiling · scaffold-gen · spec-analyze · lgpd-audit · design-audit · memoria-busca · metrics-report |
julgamento com contexto |
haiku |
api-docs-gen · git-commit · changelog · dependency-audit · deploy-check |
mecânico, só o resumo volta |
Skill ou agente? Agente quando entra volume e sai resumo, sem precisar do fio da conversa
(metrics-report, deploy-check, os reviewers). Skill quando a qualidade depende do vaivém com você —
foi por isso que arquiteto deixou de ser agente: um ADR escrito sem o contexto que motivou a decisão
sai genérico, e o porquê é justamente o que se relê seis meses depois.
Subagentes independentes vão na mesma mensagem — lgpd-audit, design-audit e dependency-audit
não dependem um do outro nem do reviewer, então rodam em paralelo. Serialize só quando a saída de um
alimenta o outro (debug-triagem → fix, spec-analyze → /sprint).
Ferramenta que você roda direto no terminal, não via skill. Cada uma tem suíte em tests/.
| Script | Pra quê | Documentado em |
|---|---|---|
backup-env.sh |
salva/confere/restaura os .env do disco de desenvolvimento antes de formatar |
skills/backup-dr/SKILL.md |
Todo .sh do pacote entra no git com o bit de execução (git add --chmod=+x). O disco está montado
com core.fileMode=false, então o git add normal grava 644 calado e o clone novo não roda o script.
O install.sh refaz o chmod +x como rede, mas contar com ele quebra quem só clonou.
Cada regra mora em um arquivo. Duplicar é como os dois reviewers divergiram antes.
| Regra | Único lugar onde vive |
|---|---|
| Cobertura de testes, regras globais de código | CLAUDE.md |
| Os 7 blocos de review | skills/revisor/checklist-7-blocos.md |
| Superfícies de duplicação e o que torna cada uma segura | skills/revisor/idempotencia.md |
| Padrão de PHPDoc/response/API.md | skills/api-docs/SKILL.md |
| Templates de código | skills/*/templates/ (lidos sob demanda, nunca inline no SKILL.md) |
| Decisões e padrões por projeto | $MEM/Projetos/[Projeto]/{decisoes,padroes}.md |
| Padrões que valem pro portfólio | $MEM/Projetos/_global/padroes-gerais.md |
- Frontmatter mínimo. Skill:
name+description. Agente:name,description,tools,model. Adescriptioné o que faz a skill disparar sozinha — escreva os gatilhos reais que você digita. - Corpo enxuto. SKILL.md é índice, não manual: código longo vai pra
templates/e é lido sob demanda. - Subagente devolve só o relatório final — nunca narração do que leu. É o ponto do subagente.
- Caminho absoluto em toda referência que um agente vá abrir.
~não expande emRead/Glob/Grep.