O formato
Markdown + YAML. Funciona em qualquer editor que abra texto. Nenhuma ferramenta nova para começar a escrever.
Depois uma pergunta no meio da implementação. Depois uma correção após o lançamento. Depois o contexto que você explica de novo e de novo.
O SpecScore é um formato de arquivo aberto e lintável para especificações — assim como o JSON é para dados. Com uma CLI que seus agentes chamam para consultar e editar — como jq para JSON.

SpecScore é um formato em Markdown + YAML para features, requisitos e critérios de aceitação. Ele define uma estrutura que tanto seu time quanto seus agentes de IA entendem — e são só arquivos no seu repositório.
Um projeto SpecScore tem três tipos de artefato ao longo de um ciclo de vida: uma Ideia captura uma direção ainda em formação; uma especificação de Feature congela o comportamento acordado; um Plano decompõe a feature em tarefas ordenadas, cada uma citando os critérios de aceitação que satisfaz.
Por que seu agente se importa. Como a estrutura é legível por máquina, agentes de IA podem consultar a especificação através da CLI em vez de ler cada arquivo. Pergunte “no que eu deveria trabalhar agora?” e a CLI devolve as features em aberto e as perguntas sem resposta. A mesma forma que seu time revisa; muito menos contexto que o agente precisa carregar.
Lista plana com cinquenta Features vira um depósito. SpecScore mantém a árvore navegável: os pais cuidam do escopo, os filhos cuidam do detalhe, e o formato dos diretórios espelha o formato do produto sobre o qual seu time já raciocina.
Perguntas em aberto sobem. Perguntas não resolvidas em qualquer profundidade aparecem no índice de cada pai. Você vê o que está bloqueando uma release a partir do topo da árvore, sem precisar garimpar para achar.
A maioria das ferramentas de especificações parte do princípio que uma lista plana funciona. E funciona — até que para de funcionar. SpecScore foi feito justamente para o momento em que «onde mora essa Feature?» começa a importar.
specscore-cli/spec/features/cli/spec/features/cli/
├── agent/
│ └── setup/
├── feature/
│ ├── change-status/
│ ├── deps/
│ ├── info/
│ ├── list/
│ ├── new/
│ ├── refs/
│ └── tree/
├── idea/
│ ├── change-status/
│ ├── new/
│ └── relocate/
├── spec/
│ └── lint/
│ ├── issue-rules/ ← sub-sub-Feature
│ └── plan-rules/
├── task/
│ ├── info/
│ ├── list/
│ └── new/
└── … mais 10 Features de nível superiorA especificação no documento, a thread no Slack e o código no PR discordam silenciosamente por semanas. Ninguém consegue achar qual versão da conversa é a canônica.
A solução
Uma especificação canônica, no repositório, versionada com o código.specscore lint roda no CI a cada push; o histórico do git é a trilha de auditoria. A especificação, a thread e o PR não podem mais discordar em silêncio — eles compartilham o mesmo arquivo em revisão.
"Lida com erros graciosamente" era para significar"mostrar um toast e fazer rollback." Ou era"logar e tentar de novo?" O agente tem que adivinhar.
A solução
O linter pega critérios ambíguos antes de qualquer linha de código ser escrita. O verbo falha no lint porque não tem objeto ou condição concretos. Corrigir o aviso obriga você a escrever o que "lida" realmente significa.
Humanos interpolam, perguntam, esclarecem. Agentes de IA não — eles implementam o padrão mais comum nos dados de treinamento. O código passa no review porque fazalguma coisa sensata. Só não é o que você queria dizer.
A solução
Entrada estruturada. Agentes de IA parseiam REQ IDs, AC IDs e cenáriosGIVEN / WHEN / THENde forma determinística — não há nada para interpolar. Planos precisam citar os AC IDs que cada tarefa satisfaz, então o que foi construído é sempre verificável contra o que foi especificado.
O agente constrói algo a partir de um brief ambíguo, você percebe que está errado e pede de novo — de quatro formas diferentes. Cada funcionalidade pela metade e cada nova tentativa são cobradas em tokens. Quanto mais vaga a especificação, mais rodadas até acertar.
A solução
Faça lint da especificação antes de o agente rodar.specscore lint rejeita verbos vagos e critérios de aceitação ausentes logo de início, então o agente implementa um brief concreto de uma vez em vez de adivinhar entre tentativas. A execução mais barata é a que você não precisa repetir.
Um agente de IA respondendo "o que depende dessa feature?"lê o README inteiro da feature. Depois cada índice pai. Depois features irmãs por garantia. Toda consulta é um re-parse. Tokens evaporam; a latência sobe; a conta sobe junto.
A solução
Consultas estruturadas em vez de leituras de arquivo.specscore feature tree devolve a hierarquia em YAML; feature deps percorre a cadeia transitiva de dependências; feature info expõe status, dono e perguntas em aberto — cada uma em uma única chamada. O agente navega o grafo, não a prosa.
Seis meses depois, você está debugando uma função e ninguém lembra qual feature ela implementa. A ligação entre código e especificação vivia na cabeça de alguém, e essa pessoa saiu. O PR que a introduziu está no arquivo morto.
A solução
Anotações no código-fonte. Comentários como// specscore: features/checkout/apply-discount/R1.AC-2tornam a ligação legível por máquinas e sobrevivem a qualquer refatoração.specscore code deps responde"qual especificação este arquivo implementa?" em uma única chamada; o linter sinaliza referências que apontam para especificações deletadas.
Você move uma feature de Draft para Approvedno README dela, mas o features-index pai ainda a lista como Draft. Três semanas depois, um agente lendo o índice acha que ela ainda está em definição. O status agora vive em dois lugares, e eles discordam.
A solução
specscore feature change-status reescreve o campo Status da feature e ressincroniza a linha no features-index num único passo atômico — se o lint falhar, a reescrita é revertida. O status existe em um único lugar canônico; o índice é uma visão gerada dele.
Uma especificação parece acabada — até você lembrar que a pergunta"e quanto aos fusos horários?" se perdeu numa thread do Slack há dois meses e nunca chegou ao documento. Agora vocês estão na implementação, e ninguém sabe dizer qual era a resposta.
A solução
Toda feature SpecScore tem uma seçãoOutstanding Questions obrigatória. O linter rejeita features que a omitem — vazio tudo bem ("None at this time."), mas faltar não pode. Perguntas em aberto ficam visíveis no documento, consultáveis pela CLI, e impossíveis de esquecer.
SpecStudio Skillsé um plugin do Claude Code que transforma o ciclo de vida do SpecScore em quatro slash commands. Instale uma vez e rode em ordem — da ideia crua ao plano executável.
$ /plugin marketplace add specscore/ai-marketplace $ /plugin install specstudio@specscore
> /specstudio: /specstudio:ideate Refinar uma ideia crua em uma SpecScore Idea /specstudio:specify Transformar uma Idea aprovada em uma especificação de Feature /specstudio:plan Decompor uma Feature num Plano de tarefas /specstudio:implement Executar a próxima tarefa de um Plano
Grátis para repositórios públicos e open-source. O código do plugin está emspecscore/specstudio-skills — licença MIT.
Um linter determinístico rápido, depois uma revisão mais profunda por IA — rodando contra a especificação que você acabou de ver. Duas passagens, dois tipos de certeza.
$ specscore lint apply-discount.md ✓ R1 has acceptance criteria ✓ R2 has acceptance criteria ✗ R3 no acceptance criteria ✗ link "Related Feature: discount-tiers" not found ✗ section "Open Questions" missing 3 problems exit 1
Mesmo resultado a cada execução. Gratuito, rápido, roda em todo commit.
> /score apply-discount.md Grade: B — ready with edits AC-2 vague trigger — name the actor and event AC-3 no error path for an expired code prose reads clean; criteria need tightening
Lê em busca de significado, como um revisor humano.
Markdown + YAML. Funciona em qualquer editor que abra texto. Nenhuma ferramenta nova para começar a escrever.
CLI em Go. Valida estrutura, referências e completude. Sai com código não-zero em caso de falha — funciona no seu terminal e no seu CI.
SpecScore é só arquivos no seu repositório. Nenhum SaaS para se cadastrar. Nenhum orquestrador obrigatório. Use com Linear, Jira, GitHub Projects, Markdown puro numa pasta, ou sem nenhum gestor de tarefas. Para o formato e o linter, tanto faz onde seus tickets vivem.
Desenvolvimento orientado a especificações é um espaço concorrido. Aqui está onde o SpecScore se posiciona frente às alternativas — honestamente.
Não usa agentes de IA, ou precisa de validação de especificações no seu pipeline de CI? Tem uma CLI para isso. Instala em 60 segundos — sem conta, sem telemetria, funciona em qualquer pasta com especificações em Markdown.
$ curl -fsSL https://specscore.md/install/get-cli | sh> irm https://specscore.md/install/get-cli.ps1 | iexRode o linter na especificação de exemplo que vem com o binário:
$ specscore lint examples/checkout/apply-discount.mdVeja a saída:
examples/checkout/apply-discount.md
✓ R1 has acceptance criteria
✓ R2 has acceptance criteria
✗ R3 no acceptance criteria
✗ link "Related Feature: discount-tiers" not found
✗ section "Open Questions" missing
3 problems exit 1Motor de grafo de código para exploração rápida do código e vínculo bidirecional entre especificações e código.
codegrapher.devCamada de acesso a dados em Go, especificada com SpecScore.
dal-go.github.ioBanco de dados versionado baseado em Git, especificado com SpecScore.
ingitdb.comCamada de evidência de aceitação: executa de verdade os critérios de aceitação de uma especificação, com verificações reutilizáveis e sem código de cola.
rehearse.inkInterface web para visualizar e editar especificações SpecScore.
specscore.studio★ Dê uma estrela no GitHub — ajuda outras pessoas a encontrar o projeto.
Encontrou um erro na tradução ou tem uma ideia para melhorar esta página? Nos avise.