Le format
Markdown + YAML. Fonctionne dans n'importe quel éditeur de texte. Aucun nouvel outil requis pour commencer à écrire.
SpecScore est un format de fichier ouvert et vérifiable par un linter pour les spécifications, écrit en Markdown et YAML (YAML Ain't Markup Language) — comme JSON (JavaScript Object Notation) pour les données — avec une interface en ligne de commande (CLI) que vos agents appellent pour les interroger et les modifier, comme jq pour JSON.
Puis une question de clarification en plein développement. Puis un correctif après le déploiement. Puis ce contexte qu'il faut réexpliquer sans cesse.

SpecScore est un format Markdown + YAML pour les features, les exigences et les critères d'acceptation. Il définit une structure que votre équipe et vos agents d'IA comprennent tous deux — et ce sont simplement des fichiers dans votre dépôt.
Un projet SpecScore s'articule autour de trois types d'artefacts au long d'un cycle de vie : une Idea capture une orientation encore en gestation ; une spécification de Feature fige le comportement convenu ; unPlan décompose la feature en tâches ordonnées, chacune citant les critères d'acceptation qu'elle satisfait.
Pourquoi votre agent s'en soucie. La structure étant lisible par une machine, les agents d'IA peuvent interroger la spécification via le CLI au lieu de lire chaque fichier. Demandez « sur quoi devrais-je travailler ensuite ? »et le CLI renvoie les features ouvertes et les questions en suspens. La même forme que votre équipe révise ; beaucoup moins de contexte que l'agent doit charger.
Une liste plate de cinquante Features devient vite un dépotoir. SpecScore garde l'arbre navigable : les parents portent le périmètre, les enfants portent le détail, et la structure des répertoires reflète la structure du produit telle que votre équipe la conçoit déjà.
Les questions ouvertes remontent. Les questions non résolues, à n'importe quelle profondeur, apparaissent dans l'index de chaque parent. Vous voyez ce qui bloque une version depuis le sommet de l'arbre, sans avoir à fouiller pour le trouver.
La plupart des outils de spécification partent du principe qu'une liste plate suffit. Et cela fonctionne — jusqu'au jour où ce n'est plus le cas. SpecScore est conçu pour le moment où la question « où réside cette Feature ? » devient essentielle.
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/ ← sous-sous-Feature
│ └── plan-rules/
├── task/
│ ├── info/
│ ├── list/
│ └── new/
└── … 10 autres Features de premier niveauLa spécification dans le document, le fil sur Slack et le code dans la PR divergent en silence pendant des semaines. Personne ne sait quelle version de la discussion fait foi.
Le remède
Une seule spécification canonique, dans le dépôt, versionnée avec le code. specscore lint s'exécute en CI à chaque push ; l'historique git constitue la piste d'audit. La spécification, le fil et la PR ne peuvent plus diverger en silence — ils partagent le même fichier sous révision.
« Gérer les erreurs avec élégance » devait signifier« afficher un toast et annuler. » Ou était-ce« enregistrer dans les logs et réessayer ? » L'agent doit deviner.
Le remède
Le linter détecte les critères ambigus avant même qu'une seule ligne de code ne soit écrite. Le verbe échoue au lint car il manque d'objet ou de condition concrète. Corriger l'avertissement oblige à expliciter ce que« gérer » veut réellement dire.
Les humains interpolent, posent des questions, précisent. Les agents d'IA, non — ils implémentent le motif le plus fréquent dans leurs données d'entraînement. Le code passe la revue parce qu'il faitquelque chose de sensé. Mais ce n'est pas ce que vous vouliez dire.
Le remède
Une entrée structurée. Les agents d'IA analysent les identifiants REQ, AC et les scénarios GIVEN / WHEN / THENde manière déterministe — rien à interpoler. Chaque tâche du Plan doit citer les AC qu'elle satisfait, de sorte que ce qui est construit soit toujours vérifiable par rapport à ce qui a été spécifié.
L'agent construit quelque chose à partir d'un brief flou, vous voyez que c'est erroné et vous lui redemandez — de quatre manières différentes. Chaque fonction inachevée et chaque nouvelle tentative se paient en tokens. Plus la spécification est vague, plus les allers-retours s'accumulent avant d'obtenir le bon résultat.
Le remède
Passez la spécification au linter avant que l'agent ne commence.specscore lint rejette d'entrée les verbes vagues et les critères d'acceptation manquants, permettant à l'agent d'implémenter un brief précis en une seule passe au lieu de tâtonner entre les essais. L'exécution la moins chère est celle que vous n'avez pas à recommencer.
Un agent d'IA qui répond à « de quoi dépend cette feature ? » lit le README entier de la feature. Puis chaque index parent. Puis les features sœurs au cas où. Chaque requête est une nouvelle analyse syntaxique. Les tokens s'envolent ; la latence grimpe ; la facture avec.
Le remède
Des requêtes structurées plutôt que la lecture de fichiers.specscore feature tree renvoie la hiérarchie en YAML ; feature deps parcourt la chaîne transitive de dépendances ; feature infoexpose le statut, le propriétaire et les questions ouvertes — chacun en un seul appel. L'agent navigue dans le graphe, pas dans la prose.
Six mois plus tard, vous déboguez une fonction et personne ne se souvient de quelle feature elle découle. Le lien entre code et spécification résidait dans la tête de quelqu'un, et cette personne est partie. La PR qui l'a introduite a disparu dans les archives.
Le remède
Des annotations dans le code source. Des commentaires tels que// specscore: features/checkout/apply-discount/R1.AC-2rendent le lien lisible par une machine et résistent aux refactorisations.specscore code deps répond à« quelle spécification ce fichier implémente-t-il ? » en un seul appel ; le linter signale les références pointant vers des spécifications supprimées.
Vous passez une feature de Draft à Approveddans son README, mais le features-index parent continue de l'afficher comme Draft. Trois semaines plus tard, un agent lisant l'index croit qu'elle est toujours en cours de révision. L'état réside à deux endroits, et ils se contredisent.
Le remède
specscore feature change-status réécrit le champ Status de la feature et resynchronise la ligne de l'index en une seule étape atomique — si le lint échoue, la réécriture est annulée. L'état existe en un lieu unique et canonique ; l'index est une vue générée de cet état.
Une spécification se lit comme si elle était close — jusqu'à ce que vous réalisiez que la question« et que fait-on pour les fuseaux horaires ? » s'est perdue dans un fil Slack il y a deux mois et n'a jamais atteint le document. Vous êtes en pleine implémentation et personne ne sait quelle était la réponse.
Le remède
Chaque feature SpecScore comporte une section obligatoireOutstanding Questions. Le linter rejette les features qui l'omettent — vide est accepté ("None at this time."), mais absente ne l'est pas. Les questions non résolues sont visibles dans le document, consultables via le CLI et impossibles à oublier.
SpecStudio Skillsest un plugin Claude Code qui transforme le cycle de vie de SpecScore en quatre commandes slash. Installez-le une fois, puis exécutez-les dans l'ordre — de l'idée brute jusqu'au plan exécutable.
$ /plugin marketplace add specscore/ai-marketplace $ /plugin install specstudio@specscore
> /specstudio: /specstudio:ideate Ajuster une idée brute en une SpecScore Idea /specstudio:specify Transformer une Idea approuvée en spécification de Feature /specstudio:plan Décomposer une Feature en un Plan de tâches /specstudio:implement Exécuter la prochaine tâche du Plan
Gratuit pour tout usage, y compris commercial. Le code du plugin est disponible surspecscore/specstudio-skills — sous licence MIT.
Un linter déterministe et rapide, puis une revue par IA plus approfondie — exécutés sur la spécification que vous venez de voir. Deux passes, deux formes de certitude.
$ specscore spec lint features/apply-discount/README.md:0 [error] oq-section: Open Questions section not found features/apply-discount/README.md:0 [error] index-entries: Child directory not listed in index: refunds features/apply-discount/refunds:0 [error] readme-exists: README.md not found 3 violations found (3 errors) # exit code 1
Le même résultat à chaque exécution. Gratuit, rapide, s'exécute à chaque 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
Lit pour en saisir le sens, comme un réviseur humain.
Markdown + YAML. Fonctionne dans n'importe quel éditeur de texte. Aucun nouvel outil requis pour commencer à écrire.
CLI en Go. Valide la structure, les références et l'intégrité. Quitte avec un code d'erreur non nul en cas d'échec — fonctionne dans votre terminal et dans votre CI.
SpecScore, ce sont simplement des fichiers dans votre dépôt. Aucun SaaS auquel s'abonner. Aucun orchestrateur imposé. Utilisez-le avec Linear, Jira, GitHub Projects, du simple Markdown dans un dossier, ou même sans aucun gestionnaire de projet. Le format et le linter se moquent de l'endroit où vivent vos tickets.
Le développement piloté par les spécifications est un domaine effervescent. Voici où se positionne SpecScore face aux alternatives — en toute franchise.
Vous n'utilisez pas d'agents d'IA, ou vous avez besoin de valider vos spécifications dans votre pipeline de CI ? Il y a un CLI pour cela. S'installe en 60 secondes — sans compte, sans télémétrie, fonctionne sur n'importe quel dossier de spécifications en Markdown.
$ curl -fsSL https://specscore.md/install/get-cli | sh> irm https://specscore.md/install/get-cli.ps1 | iexPassez le linter sur l'exemple de spécification fourni avec le binaire :
$ specscore lint examples/checkout/apply-discount.mdObservez le résultat :
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 1Explorez les schémas de bases de données, composez et exécutez des requêtes et comprenez les résultats avec DataTug. SpecScore guide ses exigences et critères d'acceptation.
datatug.app Outils du workflowRegistre ouvert de modèles de données et de définitions sémantiques, conservées dans vos propres dépôts Git et reliées aux modèles et au code.
meaninggraph.io Parcourir le registreMoteur de graphe de code pour une exploration rapide du code et une liaison bidirectionnelle entre spécifications et code.
codegrapher.devCouche d'accès aux données en Go, spécifiée avec SpecScore.
dal-go.github.ioBase de données versionnée adossée à Git, spécifiée avec SpecScore.
ingitdb.comCouche de preuve d'acceptation : exécute réellement les critères d'acceptation d'une spécification, avec des vérifications réutilisables et sans code d'adaptation.
rehearse.inkInterface web pour visualiser et éditer les spécifications SpecScore.
specscore.studioSpecScore définit ce que signifie « terminé ». Un engagement hebdomadaire aide à choisir la suite. Reliez les deux par une courte revue des résultats.
★ Donnez-nous une étoile sur GitHub — cela aide d'autres personnes à découvrir le projet.
Have an idea how to improve this page?