Como transformar o que os livros de requisitos ensinam em um template de spec para IA

template de spec para IA baseado em ISO 29148, Volere e EARS
Resposta rápida

Um template de spec para IA é o arquivo com seções fixas que você entrega ao agente de código no lugar de um pedido solto. Ele nasce dos clássicos de requisitos: a ISO/IEC/IEEE 29148 (que substituiu a IEEE 830-1998), o template Volere de James e Suzanne Robertson e o SRS de Karl Wiegers, com os requisitos escritos na sintaxe EARS, criada por Alistair Mavin e colegas na Rolls-Royce e publicada na RE’09 em 2009. As seções: contexto, escopo e não-escopo, requisitos em frase controlada, critérios de aceite, restrições e tarefas rastreáveis

Fala aí, beleza? Existe um abismo entre o livro de requisitos que você comprou e o arquivo que você realmente cola no assistente

O livro fala em stakeholder, rastreabilidade, atributo de requisito, nível de abstração

E o que sai da sua mão pro agente é um parágrafo tipo "faz aí um CRUD de chamados, capricha"

Aí o resultado vem torto e a culpa cai no modelo

Só que na maior parte das vezes o agente não errou por falta de inteligência, ele errou porque a spec permitia duas leituras e ele escolheu a que você não queria

A proposta aqui é fechar essa distância: traduzir o que os clássicos de requisitos ensinam num template de spec para IA com seções fixas, o que entra em cada uma e, principalmente, o que cortar 🙂

O que você precisa antes de escrever a spec

Antes de abrir o editor, três coisas em mãos:

  • Um problema já delimitado: se você ainda está decidindo o que construir, não é spec que falta, é decisão
  • Quem são os interessados: quem usa, quem aprova, quem sofre se quebrar
  • As referências que sustentam o template

E as referências são estas quatro, se liga:

ISO/IEC/IEEE 29148. A IEEE 830-1998, aquela que todo mundo cita de cabeça, está marcada como Superseded Standard: a ISO/IEC/IEEE 29148:2011 a substituiu e a edição vigente é a ISO/IEC/IEEE 29148:2018, "Systems and software engineering, Life cycle processes, Requirements engineering"

Ela define o construto de um bom requisito, traz atributos e características de requisitos, e trata a aplicação dos processos de requisitos como algo iterativo e recursivo ao longo do ciclo de vida

Outra coisa que ela faz e que interessa demais pra gente: separa a especificação em documentos por nível de abstração em vez de um documento único gigante (StRS, SyRS, SRS, BRS e OpsCon)

Formação Claude Code
Formação Recomendada

Formação Claude Code

Domine Claude Code do absoluto zero até o avançado

  • 120 aulas
  • 4 projetos
  • 9h 45min

O template Volere, criado por James e Suzanne Robertson, do Atlantic Systems Guild, e distribuído em volere.org

O Volere usa a requirements shell, também chamada de snow card: uma ficha por requisito atômico, com campos fixos

Guarda esse conceito, porque é ele que vira o formato de linha da nossa lista de requisitos

O SRS de Karl Wiegers, coautor de "Software Requirements" e "Software Requirements Essentials", que mantém um template de Software Requirements Specification distribuído publicamente

A sintaxe EARS (Easy Approach to Requirements Syntax), criada por Alistair Mavin e colegas na Rolls-Royce plc

Ela nasceu de um trabalho bem específico: analisar regulamentos de aeronavegabilidade para um sistema de controle de motor a jato

Foi publicada na IEEE International Requirements Engineering Conference (RE’09), em 2009

O EARS é uma sintaxe controlada de requisito em linguagem natural: ordem de cláusulas consistente e um vocabulário limitado de palavras estruturais

Ele organiza tudo em cinco padrões: ubíquo (sem palavra-chave), dirigido a evento (When), dirigido a estado (While), comportamento indesejado (If/Then) e recurso opcional (Where)

Se você conhece um linter, é a mesma pegada: não é uma linguagem nova, é a sua língua com regra de forma

E se você for encarar essa pilha de leitura, vale jogar o material num caderno de IA e transformar pesquisa em conteúdo antes de sentar pra escrever o template

Passo a passo: montando o template seção por seção

Cada passo abaixo é UMA seção do arquivo, com o conceito de livro que ela herda, um bloco pronto pra copiar e o erro comum de quem escreve essa seção pela primeira vez

1. Contexto e objetivo:

O problema antes da solução

Essa seção herda a lógica do StRS e do OpsCon da 29148: descrever a necessidade e a operação, não a implementação

O agente precisa saber onde ele está pisando pra escolher bem quando a spec ficar omissa (e ela vai ficar em algum ponto)

## Contexto
Produto: painel interno de suporte
Problema: o atendente abre 3 abas pra responder um chamado
Quem é afetado: atendimento (uso diário), liderança (relatório semanal)
Objetivo: fechar o chamado sem sair de uma tela
Sinal de sucesso: o chamado é concluído em uma única tela

O erro comum deste passo: escrever a solução disfarçada de contexto ("objetivo: criar o componente TicketPanel")

Isso já entrega a arquitetura mastigada e mata a única parte em que o agente é bom sozinho

2. Escopo e não-escopo:

O que cortar é informação, não é enfeite

A seção de não-escopo é a que mais economiza retrabalho, porque agente de código é otimista por natureza: se cabe, ele faz

## Escopo
- Busca do chamado por número e por e-mail do cliente
- Resposta usando template salvo

## Fora de escopo (não faça)
- Login social
- Migração dos chamados antigos
- Qualquer alteração de schema no banco
- Renomear arquivo ou pasta existente

O erro comum deste passo: deixar o não-escopo vazio "porque ainda não sei"

Não-escopo vazio é convite: você pede um filtro de busca e volta com refatoração de três módulos que ninguém pediu haha

3. Requisitos em frase controlada:

Aqui entra o EARS, com os cinco padrões

A regra é uma frase por requisito, sempre na mesma ordem de cláusulas, sempre com o mesmo punhado de palavras estruturais

Os exemplos canônicos publicados pelo próprio autor deixam o formato claro:

  • Evento: When "mute" is selected, the laptop shall suppress all audio output
  • Estado: While there is no card in the ATM, the ATM shall display "insert card to begin"
  • Ubíquo: The mobile phone shall have a mass of less than XX grams

Repare no ubíquo: ele não tem gatilho, vale sempre

Já o comportamento indesejado usa If/Then, e o recurso opcional usa Where

No template, cada linha vira uma ficha atômica, no espírito da requirements shell do Volere: identificador, frase e origem

## Requisitos

UB-01 | ubíquo
The system shall keep the ticket history read-only

EV-01 | evento (When)
When the agent selects a saved template, the system shall fill the reply field with it

ST-01 | estado (While)
While the ticket is closed, the system shall disable the reply field

UW-01 | indesejado (If/Then)
If the ticket API is unavailable, then the system shall show the last cached ticket

OP-01 | opcional (Where)
Where the workspace has SLA enabled, the system shall show the remaining time

Escreveu em português? Beleza também, o que não pode é misturar meia dúzia de formas de dizer a mesma coisa no mesmo arquivo

O erro comum deste passo: escrever requisito com dois verbos ("o sistema deve validar e notificar o gestor")

Requisito com "e" no meio é requisito duplo: quando um dos lados falha, você não consegue nem dizer se o item passou

4. Critérios de aceite:

A forma condicional de sempre

O requisito diz o que o sistema faz

O critério de aceite diz como você prova que ele fez

O Kiro usa exatamente essa ideia no requirements.md, com histórias de usuário e critérios de aceite em notação EARS, no formato WHEN <condição/evento> THE SYSTEM SHALL <comportamento esperado>

O exemplo da documentação deles:

WHEN a user submits a form with invalid data THE SYSTEM SHALL display
validation errors next to the relevant fields

É o mesmo esqueleto do EARS, só que apontado pro teste em vez de apontado pro comportamento

E isso muda muito a conversa com o agente, porque ele passa a ter um alvo verificável em vez de uma vontade

O erro comum deste passo: critério que não dá pra observar ("a busca deve ser rápida", "a tela deve ser intuitiva")

Se você não consegue dizer o que aparece na tela, o agente inventa um número e você descobre depois

5. Restrições técnicas e decisões:

O pedaço que vira design

Essa seção é o design.md da vida: arquitetura, abordagem técnica, o que já foi decidido e não está em discussão

No Kiro, o design.md guarda a arquitetura técnica e diagramas de sequência

No OpenSpec, o design.md responde o "como", a abordagem técnica, separado do proposal.md, que responde o porquê e o quê

## Restrições
- Stack fixa: TypeScript, sem dependência nova sem aprovação
- Sem migration nesta entrega
- O componente novo mora em src/features/tickets/
- Erro de rede sempre exibe estado visível, nunca falha em silêncio

## Decisões já tomadas
- Cache em memória, não em disco (motivo: dado sensível)

O erro comum deste passo: listar preferência de estilo como se fosse restrição de arquitetura

Separar as duas coisas ajuda quem lê depois (humano ou máquina) a saber o que é negociável

6. Tarefas rastreáveis:

Ordenadas por dependência, com caminho de arquivo

Essa é a seção que o agente mais usa na prática, e é a que mais gente escreve mal

O tasks.md gerado pelo GitHub Spec Kit é um bom modelo do que faz diferença: quebra organizada por user story, ordenação por dependência (models antes de services, services antes de endpoints), marcação de paralelismo pra tarefa que pode rodar junto com outra e caminho exato do arquivo

## Tarefas
- [ ] T1 criar o tipo Ticket em src/features/tickets/types.ts
- [ ] T2 criar o serviço em src/features/tickets/service.ts (depende de T1)
- [ ] T3 criar o componente de resposta em src/features/tickets/Reply.tsx (pode rodar em paralelo)
- [ ] T4 ligar o serviço na tela em src/app/tickets/page.tsx (depende de T2 e T3)

O erro comum deste passo: tarefa sem caminho de arquivo

"Criar o serviço" faz o agente escolher a pasta, e a pasta que ele escolhe raramente é a que o seu projeto usa

7. Onde o arquivo mora e como o agente acha:

Spec boa em lugar que ninguém lê não serve pra nada

Durante um bom tempo cada ferramenta lia o seu próprio arquivo de instrução: CLAUDE.md no Claude, GEMINI.md no Gemini, .github/copilot-instructions.md no GitHub Copilot

O AGENTS.md nasceu justamente pra resolver essa fragmentação: é um formato aberto pra dar contexto de projeto a agentes de código

Ele foi formalizado como especificação aberta em agosto de 2025, com liderança da OpenAI e participação de Google, Cursor e Factory

Em dezembro de 2025 foi doado à Agentic AI Foundation, da Linux Foundation

No mesmo dado de dezembro de 2025: mais de 60.000 projetos open source adotaram o formato e mais de 20 ferramentas de código com IA o suportam

O caminho prático é simples: o contexto permanente do projeto fica no arquivo que a SUA ferramenta lê, e a spec da entrega fica num arquivo próprio, versionado junto do código, apontado explicitamente quando você abre a tarefa

O erro comum deste passo: enfiar a spec inteira dentro do arquivo de contexto do projeto

Contexto é permanente, spec é da entrega: misturar os dois faz o agente carregar pra sempre uma regra que valia só pra uma feature

Spec Kit, Kiro e OpenSpec: como cada um já organiza esses arquivos

Antes de sair montando o seu do zero, vale saber que já existe ferramenta que cospe esses arquivos prontos

O GitHub Spec Kit é um toolkit open source do GitHub descrito como "Toolkit to help you get started with Spec-Driven Development"

O OpenSpec vai por outro caminho: organiza por MUDANÇA, não por documento único

E o Kiro é o que mais se aproxima do template que a gente montou aqui, com os três arquivos e o EARS nos critérios

Ferramenta Artefatos por spec Como entra no projeto Detalhe que muda o uso
GitHub Spec Kit constitution.md, spec.md, plan.md e tasks.md uvx --from git+https://github.com/github/spec-kit.git specify init my-project, e specify init my-project --ai claude pra escolher o agente comandos /speckit.constitution, /speckit.specify, /speckit.plan, /speckit.tasks e /speckit.implement; no Claude Code a integração é baseada em skills, instaladas em .claude/skills
Kiro requirements.md, design.md e tasks.md documentação oficial de specs critérios de aceite em notação EARS dentro das histórias de usuário; o design.md guarda arquitetura e diagramas de sequência
OpenSpec proposal.md, design.md, tasks.md e a pasta specs/ com delta specs distribuído como pacote npm @fission-ai/openspec tudo mora em openspec/changes/<name>/, ou seja, a unidade é a mudança e não o projeto

Uma nota sobre o Spec Kit que costuma passar batido: ele suporta vários agentes, não só um

Entre os suportados estão Claude Code, GitHub Copilot, CodeBuddy CLI, Gemini CLI, Pi Coding Agent e Oh My Pi

Se você já usa alguma dessas, adotar a ferramenta pronta economiza a briga de manter template próprio

Se o seu fluxo é peculiar, mantém o seu arquivo e rouba o formato dos artefatos, que é o que realmente carrega o valor

Quando usar o template inteiro e quando usar só um pedaço

Spec completa pra tudo é receita pra você parar de escrever spec na terceira semana

A 29148 já resolve isso do jeito dela, separando por nível de abstração em vez de empilhar tudo num documento único

Dá pra aplicar a mesma lógica em escala pequena, assim:

Feature nova em projeto existente: template inteiro

Aqui tem contexto pra explicar, tem coisa que não pode ser tocada e tem ordem de execução

As sete seções valem o tempo, porque cada uma corta uma classe inteira de retrabalho

Correção pontual: só requisito + critério de aceite

Bug não precisa de contexto de negócio nem de plano de arquitetura

Precisa de uma frase EARS dizendo o comportamento correto e um WHEN ... THE SYSTEM SHALL ... dizendo como se prova

Duas linhas resolvem melhor que duas páginas

Projeto do zero: contexto e restrições valem mais que a lista de requisitos

No começo você não conhece os requisitos direito, e fingir que conhece só gera lista bonita que morre na primeira semana

O que segura o agente nessa fase é contexto, escopo, não-escopo e restrição técnica

A lista de requisitos você preenche conforme as decisões aparecem

E aí a coisa fica interessante: se você vai destrinchar documentação, transcrição de reunião ou material de pesquisa antes de escrever esse contexto, gerar um vídeo resumo dos documentos ajuda a entender o material antes de virar seção do template

Conclusão

A teoria de requisitos não envelheceu, ela só mudou de leitor

O que a 29148, o Volere, o SRS do Wiegers e o EARS resolvem é ambiguidade, e ambiguidade é justamente onde o agente de código escorrega

A diferença é que agora o destinatário da sua frase controlada não é o time de QA daqui a três meses, é uma máquina que vai executar em cinco minutos

Próximo passo bem concreto pra hoje: cria o arquivo no repositório com as sete seções fixas, escreve os três primeiros requisitos em EARS e roda UMA tarefa real em cima dele

O que voltar errado te mostra exatamente onde a spec ainda deixa duas leituras possíveis, e é ali que o template melhora de verdade

Depois vai afinando, porque template de spec bom não nasce pronto, ele apanha um pouquinho antes 😀

Até o próximo post!

Perguntas frequentes

Qual a diferença entre EARS e a ISO/IEC/IEEE 29148 num template de spec para IA?

O EARS é uma sintaxe controlada para escrever a frase de cada requisito, com cinco padrões (ubíquo, evento, estado, comportamento indesejado e recurso opcional). Já a ISO/IEC/IEEE 29148:2018 é a norma que organiza o documento como um todo: define o que é um bom requisito e separa a especificação em níveis de abstração (StRS, SyRS, SRS, BRS, OpsCon). No template, o EARS entra na seção de requisitos e a 29148 dá a estrutura geral das seções.

Quem criou a sintaxe EARS e para que ela foi feita originalmente?

O EARS foi criado por Alistair Mavin e colegas na Rolls-Royce plc, durante a análise de regulamentos de aeronavegabilidade para um sistema de controle de motor a jato. O trabalho foi publicado na IEEE International Requirements Engineering Conference (RE’09), em 2009. Ou seja, nasceu num contexto de engenharia crítica, bem longe do vibe coding, mas a sintaxe controlada se encaixa igual num agente de código.

O que é a requirements shell do Volere e como ela vira o template de spec para IA?

É a snow card, uma ficha por requisito atômico com campos fixos, criada por James e Suzanne Robertson no template Volere. No template de spec para IA, essa lógica de ficha vira o formato de linha da seção de requisitos: identificador, frase EARS e origem. Cada linha fica atômica e fácil do agente rastrear.

O Spec Kit funciona só com Claude Code ou dá pra usar em outro agente?

O GitHub Spec Kit suporta vários agentes além do Claude Code, incluindo GitHub Copilot, CodeBuddy CLI, Gemini CLI, Pi Coding Agent e Oh My Pi. Então dá pra adotar o mesmo formato de artefatos independente do agente que você usa no dia a dia.

Como o Kiro usa a notação EARS nos critérios de aceite da spec?

O Kiro organiza cada spec em três arquivos (requirements.md, design.md e tasks.md) e escreve os critérios de aceite do requirements.md em notação EARS. O formato usado é a forma condicional WHEN, condição ou evento, THE SYSTEM SHALL, comportamento esperado, como em ‘WHEN a user submits a form with invalid data THE SYSTEM SHALL display validation errors next to the relevant fields’.

Qual a diferença entre AGENTS.md e um template de spec para IA como OpenSpec ou Spec Kit?

O AGENTS.md é um formato aberto pra dar contexto geral de projeto a agentes de código, aquilo que vale pro repositório inteiro. Já o Spec Kit e o OpenSpec estruturam a spec de uma mudança específica, cada um nos seus próprios arquivos. São complementares: um dá o contexto permanente do projeto, o outro especifica a tarefa em mãos.



Escrito por | Matheus Battisti

Matheus Battisti
Fundador da Hora de Codar

Programador apaixonado pelo mundo das tecnologias, sempre buscando em aprender e se aprofundar em linguagens, frameworks e o que mais for necessário para executar um bom trabalho. Agora tem uma nova missão que é de passar seu conhecimento adiante para formar novos programadores e especializar mais os que já são.

Subscribe
Notify of
guest

0 Comentários
Oldest
Newest Most Voted

Formações

Formação Vibe Coding

Formação Vibe Coding

Do Prompt ao Produto: Crie Software Real com IA

  • 474 aulas
  • 20 projetos
  • 39h 27min

Blog | Mais populares