De um diretório vazio a um build verde.
O /init-project transforma um diretório novo, ao lado do clone do Nerviz, num projeto Spring Boot com arquitetura declarada, fronteiras executáveis e build verde, sem código de negócio. A primeira feature vem do /new-feature.
Ao lado do clone, com o próprio .claude/
A sessão roda numa cópia do repositório: um clone, ou a árvore que o /nerviz:new-project do plugin busca sem clone. O projeto é gerado ao lado dela, em ../<artifactId>. O /init-project, o project-bootstrap e o catálogo de blueprints ficam na cópia; o projeto recebe só o próprio .claude/, escrito pelo ArchHook.java export, que se recusa a escrever dentro do clone.
- O Claude Code pergunta antes de escrever fora do diretório em que a sessão começou. Para aprovar a geração uma vez, rode
mkdir ../my-apie/add-dir ../my-apiantes. Um diretório vazio é aceito. - O desenvolvimento começa numa sessão nova, aberta no projeto gerado: só ela carrega o
settings.jsone os hooks do projeto.
# with the plugin, no clone: in the directory that will hold the projects claude plugin marketplace add nerviz-ai/marketplace claude plugin install nerviz@nerviz cd ~/dev && claude › /nerviz:new-project # or with a clone git clone --depth 1 https://github.com/nerviz-ai/nerviz # approve the generation once, before /init-project mkdir ../my-api › /add-dir ../my-api
Só o que a linha de comando não disse
A entrevista inteira acontece na sessão principal, antes de delegar qualquer coisa: blueprint, build, features, coordenadas, TLS e Sonar, no máximo quatro perguntas por chamada. O que --blueprint, --groupId, --name ou --bounded-context já dizem não é perguntado de novo. As features só são perguntadas onde o blueprint as deixa false: o hexagonal já liga REST, JPA com Flyway, OpenAPI, Testcontainers e Actuator, então a única pergunta oferece Kafka, como sim ou não. O bounded context é uma pergunta própria, com o artifactId como padrão: é o primeiro segmento do nome de todo tópico Kafka.
› /arch-doctor › /init-project --blueprint hexagonal --build maven --name my-api
Uma skill, um agente, um procedimento
O init-project é um ritual manual: o modelo nunca o dispara sozinho. Ele não faz o trabalho, delega; e o project-initializer não reimplementa o procedimento, segue-o.
- skill
init-projectEntrevista você e entrega cada resposta ao agente. No fim, preenche o registro de gênese e encadeia o
git-publish. - agent
project-initializerRoda num contexto isolado, com ferramentas restritas, no
sonnetcom esforço alto, e não pergunta nada. - skill
project-bootstrapO procedimento, passo a passo. O agente o segue; não o reimplementa.
- A base vem do
start.spring.iona hora. Versão nunca é escrita de memória. - Ele reestrutura por módulo ou por pacote, depois escreve o Checkstyle, o
lombok.config, ologback-spring.xml, o Dockerfile e o compose, o mapa de fronteiras.claude/forbidden-imports.txt, oCLAUDE.mdda raiz e o workflow de CI. - Escreve o
.claude/do projeto num só comando, oArchHook.java export, guiado pelo manifesto doextensions.json. Segurança de transporte e SonarQube são skills encadeadas,transport-security-setupesonarqube-setup; as perguntas delas fazem parte da entrevista. - A verificação é o único portão de qualidade:
clean verify, depois os testes de fronteira, delombok.confige de autonomia. Build vermelho é corrigido antes do relatório.
Um relatório em formato fixo
Com o build verde, o /init-project preenche o registro do run no GENESIS.md e só então encadeia o git-publish, que pergunta duas vezes: uma para rodar git init e fazer o primeiro commit, outra para criar o repositório no GitHub e dar push. Nada é commitado nem enviado sem esses dois portões.
# excerpt of the example report in docs/en/02-init-project.md, a fictional project ✅ Project pedidos-api created — blueprint hexagonal Modules: domain → depends on [] application → depends on [domain] adapters/adapter-in-rest → depends on [application, domain] adapters/adapter-out-persistence → depends on [application, domain] bootstrap → depends on [*] # … Business code: none — by design. 9 package-info.java written Boundaries: 9 rules in .claude/forbidden-imports.txt — blocking verified ✓ # … Build: PASSED # … Next steps: 1. /use-case-design <first-use-case-name>
Um trecho do relatório de exemplo dos docs do nerviz, um projeto fictício. Nomes, versões e contagens são ilustrativos.
Abra uma sessão nova dentro do projeto
O projeto gerado é autocontido: quem o clona não precisa do Nerviz na máquina. As skills de criação, o agente project-initializer e o catálogo de blueprints ficam para trás de propósito, e o blueprint ativo viaja com o projeto para o /arch-adopt resolvê-lo na próxima atualização.
- O
settings.jsoné lido uma vez, na partida da sessão. A sessão aberta no clone roda com os hooks do clone, não os do projeto: tudo parece funcionar e nada é imposto. - Aceite o primeiro portão do
git-publish: o hook de testes usagit diff HEAD, e num repositório sem commits ele sai sem rodar um teste.
# a new session, inside the generated project cd ../my-api claude › /new-feature <what the first use case should do>
- A skill
O contrato, o território de escrita e o que o guard faz com ela.
init-project · página da skill → - O doc completo
No repositório do nerviz.
02-init-project.md →