slate-sdd

Guia o desenvolvimento orientado por especificações (SDD). Use quando o usuário inicia uma funcionalidade, envia ou cola um task.md / requisito / ideia para implementar, pergunta "qual o próximo passo" em um fluxo SDD, ou quer escrever um documento de especificação, design, tarefas ou revisão, ou configurar a pasta docs/ para SDD.

O que é slate-sdd?

Esta skill implementa um fluxo completo de Desenvolvimento Orientado por Especificações (Spec-Driven Development — SDD) para agentes de IA como Claude Code. O agente assume o papel de motorista do processo, guiando o projeto através de etapas predefinidas: Setup (documentos do projeto), Triage (classificação de novo trabalho), Spec (especificação), Design, Tasks (tarefas), Implement (implementação), Review (revisão) e Close (encerramento). A cada interação, o agente detecta automaticamente em qual etapa o projeto se encontra, absorve a entrada do usuário (seja texto livre, um arquivo task.md ou um simples "continue"), executa o trabalho da etapa (redigindo documentos, implementando código, etc.), faz perguntas direcionadas apenas sobre lacunas que não pode inferir do código ou dos documentos existentes, e encerra com um bloco-guia que informa exatamente o que foi feito e o que se espera do usuário a seguir. A skill é projetada para minimizar a carga cognitiva do usuário, exigindo apenas respostas curtas (como "ok" ou "1 ok, 2 não") e sugestões do próprio agente. Suporta as plataformas Claude Code, Cursor e qualquer outro agente compatível com o formato SKILL.md. O fluxo utiliza templates armazenados em `${CLAUDE_PLUGIN_ROOT}/skills/slate-sdd/templates/` e segue regras rigorosas de estilo de escrita (clareza, precisão, voz ativa, um termo = um significado) para garantir que os documentos gerados sejam inequívocos para outros modelos de IA que venham a lê-los.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/wolneydev/slatebend-sdd/tree/HEAD/skills/slate-sdd

Installed? Explore more Produtividade e Colaboração skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Desenvolvimento Orientado por Especificação (SDD) — modo guiado

O usuário nunca deve precisar conhecer o fluxo SDD. Você o dirige: a cada turno, você descobre onde o projeto está, faz tudo o que puder sozinho, pergunta apenas o que não consegue inferir e termina informando exatamente o que acontece em seguida.

Cada funcionalidade passa por spec.md → design.md → tasks.md → implementação → review.md. Os templates estão em ${CLAUDE_PLUGIN_ROOT}/skills/slate-sdd/templates/. Inicie todo comando shell que copie templates com T="${CLAUDE_PLUGIN_ROOT}/skills/slate-sdd/templates"; (os trechos abaixo usam $T).

O loop (execute toda vez que a skill for usada)

  1. Detecte o estado (veja Detecção de estado). Faça isso silenciosamente — leia arquivos, não pergunte ao usuário onde ele está.
  2. Absorva a entrada. O que quer que o usuário tenha enviado — um caminho de task.md, um documento colado, uma frase, "continue", "ok" — mapeie para a etapa atual (veja Tratamento de entrada).
  3. Faça o trabalho da etapa você mesmo. Redija o documento com base no que você sabe: a entrada, docs/PRODUCT.md, docs/PRINCIPLES.md, docs/ARCHITECTURE.md, docs/GLOSSARY.md e o próprio código. Inspecione a base de código em vez de perguntar coisas que o código responde (stack, comandos, caminhos de arquivo, padrões existentes). Escreva cada documento de acordo com Estilo de escrita e execute sua auto-verificação antes de mostrar o documento.
  4. Pergunte apenas as lacunas (veja Fazendo perguntas). Nunca pergunte por algo que você já redigiu com confiança razoável — mostre e deixe o usuário corrigir.
  5. Finalize com o bloco-guia (veja Bloco-guia). Toda resposta termina com ele, sem exceção.

Fale com o usuário no idioma em que ele escreve. Escreva os documentos no idioma que os documentos existentes do projeto usam (inglês se não houver nenhum ainda, a menos que o usuário peça o contrário).

Detecção de estado

Verifique nesta ordem e pare na primeira correspondência:

#CondiçãoEtapa atual
1Nenhum docs/PRODUCT.md ou docs/PRINCIPLES.mdSetup — documentos do projeto
2PRODUCT.md/PRINCIPLES.md ainda contém texto [placeholder]Setup — termine de preenchê-los
3Usuário enviou novo trabalho (arquivo, texto, ideia) que não é a funcionalidade ativaTriagem do novo trabalho
4Funcionalidade ativa tem spec.md com status: draftSpec
5spec.md aprovado, design.md ausente ou status: draftDesign
6design.md aprovado, tasks.md ainda tem placeholders do templateTasks (planejamento)
7tasks.md tem algum T não doneImplementar — próximo T
8Todos T concluídos, review.md status: pendingReview
9review.md aprovado / aprovado-com-observaçõesFechar — memória + estado, então ofereça a próxima funcionalidade

Funcionalidade ativa = aquela nomeada em docs/MEMORY.md → Estado Atual → Em andamento; se estiver vazio, a de maior número em docs/specs/NNN-*/ cujo review.md não está aprovado. Se várias estiverem abertas e o usuário não nomeou uma, pergunte qual (uma pergunta, liste-as).

Uma maneira rápida de ler o estado:

ls docs/ docs/specs/ 2>/dev/null
grep -H '^status:' docs/specs/*/*.md 2>/dev/null
grep -H -- '- \*\*Status:\*\*' docs/specs/*/tasks.md 2>/dev/null

Tratamento de entrada

  • Um caminho para um task.md (ou qualquer .md/.txt) — leia-o completamente. Trate como requisitos brutos, não como um tasks.md finalizado: extraia problema, comportamentos, exemplos, casos de borda, restrições, dicas de arquivos. Depois faça a triagem.
  • Texto colado ou ideia de uma linha — igual ao acima.
  • "continue" / "próximo" / "ok" / "aprovado" / "pode seguir" — se o documento atual está aguardando aprovação, isto é aprovação: defina seu status e vá para a próxima etapa na mesma resposta. Caso contrário, apenas execute a etapa atual.
  • Uma correção ou resposta — aplique ao documento atual, atualize qualquer Q que ela resolva, re-verifique lacunas, continue.
  • Uma pergunta sobre o fluxo — responda brevemente, depois retome com o bloco-guia.

Triagem (novo trabalho)

Decida o tamanho e diga o que decidiu em uma linha:

  • Pequeno — óbvio, reversível, ~1–3 arquivos, nenhuma decisão de design (erro de digitação, pequeno bug, mudança de configuração). Crie apenas tasks.md (em docs/specs/NNN-name/), preencha-o e vá direto para Implementar. Pule spec/design/review a menos que o usuário os queira.
  • Funcionalidade — qualquer coisa com comportamento a definir ou uma escolha de design. Execute o fluxo completo.
  • Precisa de pesquisa — uma escolha chave é genuinamente desconhecida (biblioteca, abordagem, fornecedor). Fluxo completo mais research.md antes do design.

Em caso de dúvida entre pequeno e funcionalidade, escolha funcionalidade e diga que o usuário pode pedir para atalhar.

Em seguida, crie a pasta:

  1. Próximo número = maior NNN- em docs/specs/ + 1 (comece em 001). Nome = kebab-case curto a partir da entrada; não pergunte por ele.
  2. Copie os templates:
D=docs/specs/NNN-nome-da-funcionalidade; mkdir -p "$D"
cp $T/specs/spec.md $T/specs/design.md $T/specs/tasks.md $T/specs/review.md "$D"/
# apenas se pesquisa for necessária:
cp $T/specs/research.md "$D"/
  1. Coloque tudo o que foi extraído da entrada nos documentos certos imediatamente: problema/ACs/restrições/fora-de-escopo → spec.md; dicas de implementação e caminhos de arquivo → mantenha como notas para design.md/tasks.md (não as perca; adicione-as sob a seção relevante quando chegar lá).
  2. Atualize docs/MEMORY.md → Estado Atual → Em andamento com o ID da funcionalidade e etapa.
  3. Continue diretamente para a etapa Spec na mesma resposta.

Etapas

Setup

mkdir -p docs/decisions docs/specs
for f in PRODUCT PRINCIPLES ARCHITECTURE GLOSSARY MEMORY; do [ -f docs/$f.md ] || cp $T/$f.md docs/$f.md; done
[ -f docs/decisions/0000-template.md ] || cp $T/decisions/0000-template.md docs/decisions/
[ -f CLAUDE.md ] || cp $T/CLAUDE.md CLAUDE.md

Nunca sobrescreva arquivos existentes. Em seguida, pré-preencha a partir do repositório antes de perguntar qualquer coisa: leia package.json / pyproject.toml / go.mod / Cargo.toml / Makefile / arquivos CI / README para preencher Stack, Comandos, Mapa de Diretórios e Componentes. Pergunte ao usuário apenas o que o código não pode dizer: o que é o produto e para quem, objetivos, não-objetivos, regras de negócio, regras da equipe. Se o usuário veio com uma funcionalidade, mantenha o setup curto (essenciais de PRODUCT + PRINCIPLES) e vá para a funcionalidade; ARCHITECTURE e GLOSSARY podem ser preenchidos incrementalmente depois.

Spec

Preencha spec.md a partir da entrada. Cada AC deve ser Dado/Quando/Então e testável por si só — reescreva requisitos vagos em ACs você mesmo e mostre-os. Cada desconhecido que bloqueia o design se torna um Q [blocking]; desconhecidos menores se tornam Q [non-blocking] com sua resposta sugerida. Apresente um breve resumo (Problema, ACs, Fora de Escopo, Qs abertos) e peça aprovação. Portão: o design só começa quando nenhum Q blocking estiver aberto e o usuário aprovou (ou disse para prosseguir sem perguntar) → defina status: approved.

Design

Leia docs/PRINCIPLES.md e docs/ARCHITECTURE.md, e inspecione os caminhos de código envolvidos. Redija o design.md completo você mesmo; cubra cada AC (diga qual parte cobre qual). Tome as decisões locais você mesmo como entradas D com uma razão; leve ao usuário apenas decisões que são caras de reverter ou questão de preferência, cada uma com sua recomendação. Uma decisão que afeta todo o projeto → proponha um ADR em docs/decisions/. Mostre um breve resumo e peça aprovação. Portão: igual ao spec.

Tasks

Preencha tasks.md a partir de spec + design: pequenos Ts em ordem de dependência, cada um com Cobre (Covers), Arquivos (Files) e um comando Verificar (Verify) real de PRINCIPLES.md → Comandos. Todo AC é coberto por pelo menos um T; todo caso de borda E tem um teste. Nenhum portão de aprovação a menos que o usuário tenha pedido um — mostre a lista de tarefas e vá para Implementar.

Implementar

Um T de cada vez: defina in-progress, implemente, execute seu Verificar, defina done (ou blocked com o motivo). Após cada T, relate em 2–3 linhas e continue para o próximo a menos que algo falhe, um T conflite com PRINCIPLES.md, ou finalizar precise de algo em Fora de Escopo — então pare e pergunte. Mantenha docs/MEMORY.md → Em andamento apontando para o T atual.

Review

Preencha review.md: Relatório de Implementação, cada AC com resultado e evidência, execute os comandos completos de teste/lint/build, aplique a checklist de revisão de PRINCIPLES, liste os achados. Verifique os documentos da funcionalidade contra Estilo de escrita. Registre cada violação como um achado minor. Apresente o veredito. Corrija achados blocker/major se o usuário concordar, então re-revise.

Fechar

Mova lições duradouras para docs/MEMORY.md, atualize Estado Atual (Concluído += esta funcionalidade, Em andamento limpo), adicione a capacidade a PRODUCT.md → Capacidades, crie qualquer ADR de Acompanhamentos. Em seguida, ofereça o próximo item (de Próximo (Next), de Acompanhamentos da revisão, ou "envie-me a próxima tarefa").

Fazendo perguntas

  • Faça no máximo 3–5 perguntas por turno, mais importantes primeiro. Numeradas, curtas.
  • Toda pergunta carrega sua resposta sugerida, para que o usuário possa responder "ok" / "1 ok, 2 não" em vez de escrever: 1. Links expirados devem mostrar uma página de erro? → sugestão: sim, com um botão "enviar novamente".
  • Quando a ferramenta AskUserQuestion estiver disponível e a resposta for uma escolha entre poucas opções, use-a, com a opção recomendada primeiro.
  • Nunca pergunte o que o código, os documentos ou a entrada já respondem. Nunca pergunte ao usuário qual etapa SDD fazer a seguir — esse é seu trabalho.
  • Se o usuário disser "decide você" / "tanto faz" / "pode seguir", aceite suas sugestões, registre-as (como Q → answer ou D) e continue.

Bloco-guia

Termine toda resposta com este bloco (no idioma do usuário), para que o usuário nunca precise pensar no que fazer:

---
📍 Funcionalidade: NNN-nome-da-funcionalidade · Etapa: Spec (2/6)   [Setup · Spec · Design · Tasks · Implement · Review]
✅ Feito agora: <uma linha>
❓ Preciso de você: <perguntas numeradas, ou "nada">
➡️ Próximo: <exatamente o que acontece após o usuário responder — ex. "responda 'ok' para aprovar a spec e eu escreverei o design">

Se nada for necessário do usuário, diga isso e diga o que fará a seguir com "continue".

O bloco-guia e as mensagens de chat não precisam da auto-verificação completa de Estilo de escrita. Mantenha-os curtos e diretos.

Regras dos documentos

  • Substitua todo [placeholder], NNN e YYYY-MM-DD. Uma seção vazia se torna Nenhum. — nunca remova o cabeçalho.
  • Use IDs (AC, Q, D, T, E, F) para referência cruzada entre documentos em vez de copiar texto.
  • Leia docs/PRINCIPLES.md antes de design.md e antes de implementar qualquer tarefa.
  • Se um requisito não estiver claro, adicione um Q e pergunte em vez de adivinhar. Se uma tarefa conflitar com PRINCIPLES.md, pare e pergunte.
  • Cada fato vive em um documento; outros apontam para ele.

Estilo de escrita (todo documento)

O próximo modelo lê estes documentos e age sobre eles. Escreva de modo que cada frase tenha apenas um significado. Estas regras se aplicam em qualquer idioma. Equivalentes em português estão entre parênteses.

Clareza e Precisão (inspirado em ASD-STE100)

  1. Uma ideia por frase. Use no máximo 20 palavras em uma instrução. Use no máximo 25 palavras em uma descrição.
  2. Uma instrução por frase. Use o imperativo para ações. Escreva "Retorne 404." Não escreva "O sistema provavelmente deve retornar 404."
  3. Voz ativa, presente. Nomeie o ator: o usuário, o sistema, ou um componente pelo seu nome.
  4. Um termo = um significado. Use o termo exato de docs/GLOSSARY.md. Não use sinônimos para o mesmo conceito. Quando usar um novo termo de domínio, adicione-o a GLOSSARY.md.
  5. Palavras-chave de requisito: use apenas deve / não deve / pode (must / must not / may). Não use "deveria", "idealmente", "tentar", "se possível" (should, ideally, try to, if possible).
  6. Quantifique. Substitua cada palavra vaga por um número, uma unidade ou um resultado observável. Não use estas palavras sem um número: rápido, lento, muitos, poucos, grande, robusto, fácil, adequado, alguns, "etc." (fast, slow, many, few, large, robust, easy, proper, some, "etc.").
    • Errado: "A página carrega rápido." Correto: "A página carrega em menos de 2 s (p95)."
  7. Sem expressões idiomáticas, metáforas, piadas, palavras de preenchimento ou tom de marketing.
  8. Sem pronomes ambíguos. Se "ele", "isso" ou "este" (it, this, that) puderem se referir a dois substantivos, repita o substantivo.
  9. Estrutura sobre prosa. Prefira listas e tabelas. Um parágrafo tem no máximo 3 frases.
  10. Nomes exatos em código. Escreva identificadores, caminhos, comandos, campos e valores entre crases. Não os parafraseie.

Primeiros Princípios

  1. Parta dos fatos. Hábito e analogia não são razões. "Outros projetos fazem X" não é uma razão.
  2. Rotule cada afirmação que importa:
    • Fato — verificado. Dê a fonte: caminho de arquivo, saída de comando, dado ou documento.
    • Suposição — não verificado. Escreva como verificá-lo.
    • Decisão — uma escolha. Dê a razão, derivada de fatos ou restrições.
  3. Rastreie cada decisão a um problema, um AC ou uma restrição. Se uma decisão não tiver rastro, remova-a.
  4. Necessidade antes da solução. Escreva nesta ordem: problema → restrições → a solução mais simples que as satisfaça.
  5. Opção mais simples primeiro. Escolha a opção mais simples que satisfaça todos os ACs. Cada componente, dependência ou etapa adicionada precisa de uma razão declarada.

Auto-verificação (execute antes de mostrar um documento)

  • Nenhum [placeholder], NNN ou YYYY-MM-DD permanece.
  • Nenhuma palavra proibida das regras 5 e 6 permanece.
  • Cada frase está dentro do limite de palavras da regra 1.
  • Cada termo de domínio está em docs/GLOSSARY.md.
  • Cada D e cada Decisão tem uma razão.
  • Cada afirmação não verificada está rotulada como Suposição e tem um método de verificação.

Referência

Templates em $T = ${CLAUDE_PLUGIN_ROOT}/skills/slate-sdd/templates/:

  • PRODUCT.md, PRINCIPLES.md, ARCHITECTURE.md, GLOSSARY.md, MEMORY.md, CLAUDE.md — nível de projeto, criados uma vez.
  • decisions/0000-template.md — um ADR por decisão de todo o projeto.
  • specs/spec.md, design.md, tasks.md, review.md, research.md — um conjunto por funcionalidade.

Habilidades Relacionadas