Um projeto que nasceu fora ganha o harness.
De dentro de uma sessão no projeto, o /arch-adopt instala este .claude/ num projeto que nunca foi gerado pelo Nerviz, ou traz uma versão nova para um atrasado. Recusa worktree suja, carimba o hash de cada arquivo que escreve e deixa o diff para você revisar.
Uma operação, dois estados de partida
Não são dois comandos. O que os distingue é o stamp de proveniência; o resto do procedimento é o mesmo. A skill decide: qual fonte, qual blueprint, se é seguro escrever. Quase todo byte é escrito depois pelo modo determinístico export, a partir de um manifesto de dados.
| Estado de partida | O que acontece | Como a skill sabe |
|---|---|---|
Projeto nunca gerado pelo /init-project, sem .claude/ deste formato | Instalação | não há .claude/.arch-provenance.json |
Projeto que já tem este .claude/ e está atrasado | Atualização | o stamp existe e cita um ref anterior |
# the example in docs/en/10-arch-adopt.md; the ref, counts and file names are illustrative › /arch-adopt --ref latest-tag --blueprint hexagonal ✅ updated — blueprint hexagonal, ref v0.9.3 (a1b2c3d) Source ....... codeload.github.com, fetched at 14:22 Files ........ 136 written · 118 unchanged · 4 overwritten Warnings ..... none Schema ....... exit 0 Provenance ... ⚠️ 2 files edited locally since the stamp: .claude/rules/persistence.md .claude/settings.json Bounded ctx .. already declared Migrations ... 1 below, to paste when you choose Review: git diff · Undo: git checkout -- .claude Next: /arch-doctor for the full diagnosis
A saída é o exemplo dos docs do nerviz. O ref, as contagens e os nomes de arquivo são ilustrativos.
O que o procedimento promete
- Recusa worktree suja. Não é repositório git, ou o
git status --porcelainveio não vazio: para. Uma atualização sobrescreve, então ogit diffé como você revisa e ogit checkoutcomo desfaz. Ela diz o que rodar e não faz commit por você. - Nenhum dos quatro valores de
sourceé escrito de memória.base_url,git_url,auth_envedefault_refsão dados noextensions.json. Oauth_envnomeia uma variável de ambiente e nunca carrega o valor; um repositório público não precisa de credencial. - Proveniência é escrita, não prometida. O stamp registra ref, sha, blueprint e o hash de cada arquivo escrito. O
/arch-doctorcompara esses hashes com o disco e nomeia os arquivos que você editou à mão antes de a próxima atualização sobrescrevê-los.
O que entra no projeto e o que fica de fora
Tudo isso é o bloco export do extensions.json: dado, não prosa. O ArchHook.java schema confere o manifesto contra o disco, então uma skill ou um agente que não está nem em include nem em exclude falha pelo nome.
| Grupo | O quê |
|---|---|
| Hook e dados | ArchHook.java, ArchHook.jar (copiado como bytes) e extensions.json |
settings.json | sobrescrito inteiro, a partir do template do project-bootstrap: os hooks e as permissions do próprio projeto somem e aparecem no git diff |
| Rules | cada norma, com os paths reescritos para os pacotes do blueprint ativo |
| Skills e agentes | as skills de desenvolvimento e os agentes executores. init-project, project-bootstrap e project-initializer ficam de fora: só servem antes de o projeto existir |
| Blueprint | só o ativo, nunca o catálogo; sem ele, a próxima atualização não resolveria o id que o stamp registra |
| Trilha de auditoria | o .claude/audit-usage/ é criado, o que liga a trilha, e versionado com o projeto; o docs/lessons-learned/ é local e não é versionado |
Um projeto que já tem o próprio .claude/ mantém o que tem caminho diferente do manifesto. Rode --dry-run antes: ele lista o que seria sobrescrito e não escreve nada.
Quatro situações, e o piso é uma delas
O /arch-adopt não avalia o código do projeto. Ele só decide se é seguro escrever em .claude/.
| Situação | Passo | Efeito |
|---|---|---|
Não é repositório git, ou o git status --porcelain não estava vazio | 1 | para; nada é escrito |
| Busca sem credencial, ou erro HTTP | 3 | para; o --fail transforma o 404 em erro em vez de um tarball quebrado |
Spring Boot abaixo de doctor.platform.min_line (hoje 4.0) | 5 | o export sai com 2 antes de escrever um byte; não existe --force. O caminho para cima é o /platform-upgrade |
O schema não sai com 0 depois do export | 6 | os arquivos já foram escritos; o relatório mostra a falha primeiro e os passos 7 a 9 não rodam |
O piso é só um piso: não há teto. O Spring Boot 5.x passa, e as normas escritas para a linha 4 podem divergir dela sem aviso. Um build que esconde a versão, como um parent corporativo ou um BOM externo, também passa.
Um prompt para colar, nunca uma edição
Quando as normas mudam de um jeito que deixa para trás o código gerado antes, a mudança chega como uma entrada no bloco migrations do extensions.json. Numa atualização, a skill mostra cada entrada que o projeto ainda não viu e que vale para o blueprint dele: uma nota e um prompt para colar no Claude Code, no projeto. Ela nunca o executa. A cópia do extensions.json do próprio projeto é o registro do que foi mostrado, então um projeto gerado depois de uma entrada nunca a vê.
Revisar, desfazer, diagnosticar
Ela deixa a árvore com o diff pronto para revisão e diz como desfazer. Depois, o /arch-doctor faz o diagnóstico completo. O que ele encontra vira uma linha de relatório; só as linhas de doctor.gate.labels quebram o CI.
- Gerar um projeto. Sem
pom.xmlnembuild.gradle, o que você quer é o/init-project. - Escrever código de negócio, ou tocar em
src/. - Fazer commit.
- Pedir o blueprint de novo quando o stamp já registra um: numa atualização, ele é um fato do projeto.
# review git diff # undo git checkout -- .claude && git clean -fd .claude # then the full diagnosis › /arch-doctor
- A skill
O contrato, o território de escrita e o que o guard faz com ela.
arch-adopt · página da skill → - O doc completo
No repositório do nerviz.
10-arch-adopt.md →