From design-skills
Use whenever the user wants to record an architecture decision, create an ADR (Architecture Decision Record), capture WHY a specific technical choice was made, document a single architecturally-significant decision such as "documenta a decisão de usar Postgres em vez de MongoDB", "ADR pra escolha de message broker", "registra que escolhemos X em vez de Y", "capture this decision as an ADR", or any one-decision-per-document scenario in the Nygard/adr-tools tradition. Produces a numbered Markdown file (NNNN-kebab-slug.md) with 5 sections (Title, Date, Status, Context, Decision, Consequences) following Nygard canonical format. 1-2 pages, prose not bullets, active voice. Do NOT use for project-level design docs spanning multiple decisions (use design-doc skill), README files, postmortems, or specs.
How this skill is triggered — by the user, by Claude, or both
Slash command
/design-skills:adrThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Produz ADRs em Markdown seguindo o formato canônico do [Michael Nygard](https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions) e do [adr-tools](https://github.com/npryce/adr-tools) do Nat Pryce. Foco: registrar **uma decisão por documento**, com contexto, decisão e consequências, em prosa curta que sobrevive ao tempo.
Produz ADRs em Markdown seguindo o formato canônico do Michael Nygard e do adr-tools do Nat Pryce. Foco: registrar uma decisão por documento, com contexto, decisão e consequências, em prosa curta que sobrevive ao tempo.
Princípio do Nygard: "One of the hardest things to track during the life of a project is the motivation behind certain decisions." ADRs resolvem isso documentando por que uma escolha foi feita, não como implementá-la.
Antes de escrever, alinhe uma coisa: qual é a decisão exata?
ADR é uma decisão por documento. Se o usuário trouxer algo amplo demais ("vou redesenhar o serviço X", "documenta a arquitetura nova"), não é caso de ADR — é caso de design doc. Defira para a skill design-doc e diga isso explicitamente.
Critério rápido:
Se o pedido for vago, faça uma pergunta: qual é a escolha exata e quais alternativas estavam na mesa? Não invente alternativas que o usuário não mencionou.
Trabalhe as 5 seções na ordem canônica. Use a linguagem do usuário (PT/EN/ES) — Nygard escreveu em inglês mas o formato é language-agnostic.
Use references/template.md se quiser começar do esqueleto vazio. Use references/example.md se quiser ver o ADR canônico (recursivo — o primeiro ADR adota ADRs).
Princípios de escrita (Nygard):
design-doc).(a) Validação mecânica. Rode contra o draft:
python3 scripts/validate.py < 0042-some-decision.md
Pega: title sem # N. numerado, Date faltando ou fora de ISO 8601, seção required ausente (Status/Context/Decision/Consequences), Status fora dos 4 canônicos (Proposed/Accepted/Deprecated/Superseded by). Avisa: ADR > 100 linhas, Decision sem voz ativa.
(b) Self-review semantic. Carregue references/checklist.md. Pontos críticos que o validator NÃO pega:
Entregue como um único arquivo Markdown. Sugira:
NNNN-kebab-slug.md (4 dígitos zero-padded). Slug deve refletir a essência do título.doc/adr/ por padrão. Se o projeto já tem outra convenção (docs/adr/, architecture/decisions/, rfcs/), use a existente. Pergunte se incerto.python3 scripts/next_number.py {dir} pra obter o próximo número, ou python3 scripts/next_number.py {dir} {slug} pra receber direto o filename completo NNNN-slug.md. Se não tiver acesso ao filesystem, proponha um número e peça pro usuário rodar o script e ajustar.Ordem fixa (não troque):
# N. Short noun phraseDate: YYYY-MM-DDProposed · Accepted · Deprecated · Superseded by [link]Frase nominal curta. Comece com substantivo ou gerúndio, não com verbo no infinitivo.
ISO 8601 (YYYY-MM-DD). Data em que o ADR foi escrito/aceito, não a data em que a decisão original foi tomada.
Date: 2026-05-08
Exatamente um valor canônico:
| Status | Quando usar |
|---|---|
Proposed | ADR em discussão, decisão ainda não tomada |
Accepted | Decisão em vigor (default para a maioria dos ADRs commitados) |
Deprecated | Não é mais a recomendação, mas não há substituto formal |
Superseded by [NNNN-link] | Substituído por outro ADR; coloque o link relativo ([0042](0042-new-decision.md)) |
Lifecycle: quando um ADR supersede outro, o ADR antigo recebe Superseded by [NNNN] no Status. Não edite outros arquivos automaticamente — peça permissão e mostre o diff.
Fatos e forças que motivam a decisão — técnicas, sociais, políticas, econômicas. Voz neutra: não introduza a decisão aqui, não argumente a favor da solução escolhida.
Exemplo (Nygard, slightly adapted): "Our service is approaching 10k requests/second peak load. The current SQLite-backed cache is hitting write contention; on Tuesdays we see 5–10s of degradation between 14h and 16h UTC. The team has experience with both Postgres and MongoDB."
Cobre o suficiente pra que um dev futuro entenda por que a decisão fazia sentido naquele momento (mesmo que hoje não faça mais).
Voz ativa, futuro: "We will...". Uma decisão por documento.
Exemplo: "We will replace the SQLite cache with PostgreSQL, using the existing primary database cluster. Reads use a dedicated read replica; writes go to the primary."
Específica o suficiente pra ser implementável, mas sem entrar em código ou comandos. "Use Postgres" é vago demais; "Use Postgres como cache, com leituras numa read replica e escritas no primário" é específico sem ser implementação.
O que fica mais fácil, o que fica mais difícil, riscos. Cubra positivos e negativos. Não é seção pra agradecimentos — é o balanço honesto da decisão.
Exemplo:
- Easier: aproveita backups e monitoramento já configurados pro Postgres; remove uma dependência do stack.
- Harder: TTL de cache passa a ser nossa responsabilidade (SQLite tinha vacuum automático adequado); precisamos rodar
pg_repackmensalmente.- Risk: aumento de ~15% na carga do cluster Postgres; coordenado com o time de Plataforma.
Format: NNNN-kebab-case-slug.md (4 dígitos, zero-padded).
Slug: frase do title em kebab-case, sem palavras supérfluas (use-postgres-as-primary-database, não decision-to-use-postgres-as-our-primary-database).
Number: sequencial no diretório alvo. Use o script bundled scripts/next_number.py em vez de contar à mão:
python3 scripts/next_number.py {dir} # imprime NNNN
python3 scripts/next_number.py {dir} {slug} # imprime NNNN-slug.md
O script lê o diretório, encontra o maior NNNN existente que bate com ^[0-9]{4}-.+\.md$ e devolve max+1 (ou 0001 se vazio). Não preenche buracos — 0001, 0007 retorna 0008. Falha com exit não-zero se o diretório não existir.
Diretório default: doc/adr/. Outras convenções comuns: docs/adr/, decisions/, architecture/decisions/, adr/. Use a do projeto se já existir.
Exemplos:
doc/adr/0001-record-architecture-decisions.md
doc/adr/0017-use-postgres-as-primary-database.md
doc/adr/0023-adopt-grpc-for-internal-communication.md
design-doc).Se o usuário trouxer algo que cabe em "não escreva", diga isso antes de escrever. Sugira a alternativa apropriada.
design-doc skill (mesmo repo): design-doc tem seção Alternativas Consideradas para decisões dentro do projeto. ADR é para decisões avulsas que merecem documento próprio. Um design doc grande pode referenciar vários ADRs (see ADR-0017 for the database choice). ADR não chama design-doc; design-doc pode citar ADRs.sequence-diagram skill: ADRs raramente precisam de sequência (são focados em decisão, não em fluxo). Mas se a decisão envolve protocolo de comunicação ("adotar SAGA pra transações distribuídas"), pode usar a mesma convenção do design-doc — bloco ```mermaid inline, que renderiza direto no Markdown.design-doc. ADR documenta a decisão e suas consequências, não como implementar. Se está com kubectl, decoradores ou snippets — não é ADR, é manual de implementação.| Quando | Carregue | Por quê |
|---|---|---|
| Usuário pediu "me dá um esqueleto" | references/template.md | Template do Pryce com convenções de preenchimento |
| Usuário pediu "me mostra um exemplo" | references/example.md | ADR 0001 (recursivo, canônico) |
| Sempre antes do Step 4 | references/checklist.md | Self-review |
Os três são opcionais durante a composição; o checklist não é opcional antes de entregar.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub cassiobotaro/skills --plugin structurizr