Każda niejednoznaczność w specyfikacji
to token, który pali Twój agent.

SpecScore to otwarty format plików dla specyfikacji, sprawdzany linterem, zapisany w Markdown i YAML (YAML Ain't Markup Language) — jak JSON (JavaScript Object Notation) dla danych — z interfejsem wiersza poleceń (CLI), który Twoje agenty wywołują, by je przeszukiwać i edytować, jak jq dla JSON-a.

Potem pytanie doprecyzowujące w trakcie prac. Potem poprawka po wdrożeniu. Potem kontekst, który tłumaczysz w kółko od nowa.

Format dla specyfikacji, które już teraz piszesz.

SpecScore to format Markdown + YAML dla funkcji, wymagań i kryteriów akceptacji. Definiuje strukturę zrozumiałą zarówno dla Twojego zespołu, jak i agentów AI — to po prostu zwykłe pliki w Twoim repozytorium.

Projekt SpecScore składa się z trzech rodzajów artefaktów w cyklu życia:Idea rejestruje wstępny kierunek; specyfikacjaFeature zamraża uzgodnione zachowanie;Plan dzieli funkcję na uporządkowane zadania, z których każde wskazuje spełniane kryteria akceptacji.

Dlaczego to ważne dla Twojego agenta. Ponieważ struktura jest czytelna maszynowo, agenci AI mogą odpytywać specyfikację przez CLI zamiast czytać każdy plik. Zapytaj„nad czym powinienem teraz pracować?”, a CLI zwróci otwarte Features i pytania bez odpowiedzi. Ta sama forma, którą weryfikuje Twój zespół; znacznie mniejszy kontekst do załadowania przez agenta.

Feature → Wymagania → Kryteria Akceptacji → Scenariusze.
PRZYKŁADideas/apply-discount.md
# Idea: Discount codes at checkout

**Status:** Approved
**Date:** 2026-05-19
**Owner:** cart-team
**Promotes To:** features/apply-discount

## Problem Statement

How might we let returning customers redeem a
single promo code at checkout without breaking
the existing cart math or the site-wide promotion
engine?

## Recommended Direction

A registered user can apply **one** valid code per cart.
Codes are time-bounded and replaceable. Stacking
with site-wide promotions follows a deterministic
tiebreak rule (higher discount wins; site-wide
wins on tie).
PRZYKŁADfeatures/checkout/apply-discount.md
---
status: approved
owners: [cart-team]
---

# Feature: Apply Discount

A registered user can apply one valid discount code to their cart at checkout.

## Requirements

### R1 — Single-code limit

- **AC-1** The cart accepts at most one discount code at a time.
- **AC-2** Applying a second code replaces the first, with a visible confirmation.
- **AC-3** Removing the code restores the original cart total.

### R2 — Code validity

- **AC-1** A code is valid only if `valid_from` ≤ now ≤ `valid_until`.
- **AC-2** Invalid codes show a specific error message.

### R3 — Discount application

- **AC-1** Percentage discounts apply to subtotal, not shipping.
- **AC-2** Discount totals round down to the nearest cent.
- **AC-3** Stacking with site-wide promotions follows the higher-of rule.

## Scenario: Apply a valid percent-off code

**GIVEN** a cart with subtotal $50.00 and shipping $10.00
**WHEN** the user applies code `SAVE20` (20% off)
**THEN** the cart shows subtotal $40.00, shipping $10.00, total $50.00
PRZYKŁADplans/apply-discount/README.md
# Plan: Apply Discount

**Status:** approved
**Features:**
  - [apply-discount](../../features/apply-discount.md)
**Author:** cart-team
**Effort:** M
**Impact:** high

## Context

The apply-discount Feature is Approved. This plan
breaks it into ordered tasks; each task cites the
acceptance criteria it satisfies.

## Tasks

### T1 — Accept a `code` field on the cart
Cites: R1.AC-1, R1.AC-2, R1.AC-3

### T2 — Validate code time-window
Cites: R2.AC-1, R2.AC-2

### T3 — Apply percentage to subtotal, round down
Cites: R3.AC-1, R3.AC-2

### T4 — Higher-of tiebreak vs site-wide promo
Cites: R3.AC-3

### T5 — Confirmation toast on apply / replace
Cites: R1.AC-2

Specyfikacje są hierarchiczne. Twoje drzewo specyfikacji też.

Płaska lista przy pięćdziesięciu Features staje się wysypiskiem. SpecScore dba o przejrzystość drzewa: elementy nadrzędne określają zakres, podrzędne szczegóły, a struktura katalogów odzwierciedla kształt produktu, o którym Twój zespół już myśli.

Otwarte pytania agregują się w górę. Nierozstrzygnięte pytania na dowolnej głębokości pojawiają się w indeksie każdego rodzica. Widzisz z samego szczytu drzewa, co blokuje wydanie, bez konieczności przeszukiwania każdego pliku.

Większość narzędzi zakłada, że płaska lista wystarczy. I tak jest — do czasu. SpecScore powstał z myślą o momencie, w którym pytanie „gdzie powinna znaleźć się ta Feature?” zaczyna mieć znaczenie.

Zobacz na żywo w specscore-cli →

Zspecscore-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/
└── … jeszcze 10 Features najwyższego poziomu

Co zawodzi, gdy go brakuje.

  • Specyfikacje dryfują.

    Specyfikacja w dokumencie, wątek na Slacku i kod w PR po cichu rozmijają się tygodniami. Nikt nie wie, która wersja ustaleń jest kanoniczna.

    Rozwiązanie

    Jedna kanoniczna specyfikacja, w repozytorium, wersjonowana z kodem.specscore lint uruchamia się w CI przy każdym pushu; historia gita to pełny audyt. Specyfikacja, wątek i PR nie mogą się rozjechać — współdzielą ten sam recenzowany plik.

  • AC pozostają niejasne.

    "Elegancko obsługuje błędy" miało znaczyć"pokaż powiadomienie toast i wycofaj zmiany." A może"zaloguj i ponów próbę?" Agent musi zgadywać.

    Rozwiązanie

    Linter wychwytuje niejednoznaczne kryteria, zanim powstanie choćby linijka kodu. Czasownik nie przechodzi linta, bo brakuje mu konkretnego obiektu lub warunku. Poprawienie ostrzeżenia zmusza do zdefiniowania, co tak naprawdę oznacza"obsługuje".

  • Agenci dostarczają nie to, co trzeba.

    Ludzie dopowiadają sobie kontekst, pytają, uściślają. Agenci AI tego nie robią — wdrażają wzorzec, który najczęściej pojawiał się w ich danych treningowych. Kod przechodzi review, bo robi coś sensownego. Tyle że nie to, co miałeś na myśli.

    Rozwiązanie

    Ustrukturyzowane wejście. Agenci AI deterministycznie parsują identyfikatory REQ, AC oraz scenariuszeGIVEN / WHEN / THEN— nie ma tu miejsca na domysły. Zadania w Planie muszą wskazywać identyfikatory AC, które realizują, dzięki czemu to, co zbudowano, można w każdej chwili zweryfikować ze specyfikacją.

  • Płacisz podwójnie za mętną specyfikację.

    Agent buduje coś na podstawie niejednoznacznego opisu, zauważasz błąd i promptujesz ponownie — na cztery różne sposoby. Każda niedokończona funkcja i każda powtórka kosztują tokeny. Im bardziej mętna specyfikacja, tym więcej rund potrzeba na jej ukończenie.

    Rozwiązanie

    Przeanalizuj specyfikację linterem, zanim uruchomisz agenta.specscore lint z góry odrzuca nieprecyzyjne czasowniki i brakujące kryteria akceptacji, więc agent od razu implementuje konkretny opis zamiast błądzić w kolejnych próbach. Najtańsze wywołanie agenta to to, którego nie musisz powtarzać.

  • Agenci płacą za ponowne czytanie specyfikacji.

    Agent AI odpowiadając na pytanie "co zależy od tej funkcji?" czyta całe README funkcji. Potem indeks każdego rodzica. Potem sąsiednie funkcje na wszelki wypadek. Każde zapytanie to ponowne parsowanie. Tokeny ulatują, rośnie opóźnienie, a wraz z nim rachunek.

    Rozwiązanie

    Strukturalne zapytania zamiast czytania plików.specscore feature tree zwraca hierarchię jako YAML; feature deps przechodzi cały łańcuch zależności; feature info zwraca status, właściciela i otwarte pytania — wszystko w jednym wywołaniu. Agent porusza się po grafie, a nie po tekście.

  • Kod zapomina o swojej specyfikacji.

    Sześć miesięcy później debugujesz funkcję i nikt nie pamięta, które wymaganie ona realizuje. Powiązanie między kodem a specyfikacją istniało tylko w czyjejś głowie, a ta osoba odeszła z pracy. PR, który ją wprowadził, leży w archiwum.

    Rozwiązanie

    Adnotacje w kodzie źródłowym. Komentarze takie jak// specscore: features/checkout/apply-discount/R1.AC-2sprawiają, że powiązanie jest czytelne maszynowo i przetrwa każdy refaktoring. specscore code deps odpowiada na pytanie "jaką specyfikację implementuje ten plik?" w jednym wywołaniu; linter natychmiast zgłasza referencje wskazujące na usunięte specyfikacje.

  • Zmiany statusu rozjeżdżają się.

    Zmieniasz status funkcji z Draft na Approvedw jej README, ale nadrzędny indeks funkcji wciąż ma wpisane Draft. Trzy tygodnie później agent czytający indeks uważa, że funkcja jest w trakcie zmian. Status istnieje w dwóch miejscach i te miejsca sobie przeczą.

    Rozwiązanie

    Polecenie specscore feature change-status zmienia pole Status w pliku funkcji i synchronizuje wiersz w indeksie w jednym atomowym kroku — błąd lintera wycofuje zmianę. Status istnieje w jednym kanonicznym miejscu, a indeks jest jego generowanym widokiem.

  • Specyfikacje zapominają o tym, czego nie wiedzą.

    Specyfikacja wygląda na dopiętą — dopóki nie przypomnisz sobie, że pytanie "a co ze strefami czasowymi?" przepadło w wątku na Slacku dwa miesiące temu i nigdy nie trafiło do dokumentu. Jesteś w trakcie implementacji i nikt nie pamięta odpowiedzi.

    Rozwiązanie

    Każda funkcja w SpecScore ma obowiązkową sekcjęOutstanding Questions. Linter odrzuca funkcje, które ją pomijają — pusta sekcja jest w porządku ("None at this time."), ale jej brak już nie. Nierozstrzygnięte kwestie są widoczne w dokumencie, dostępne przez CLI i nie da się o nich zapomnieć.

Najprostszy sposób na start: SpecStudio Skills dla agentów AI.

SpecStudio Skillsto wtyczka do Claude Code, która przekształca cykl życia SpecScore w cztery polecenia slash. Zainstaluj ją raz, a potem wywołuj je w kolejności — od surowego pomysłu aż po gotowy plan wykonania.

$ /plugin marketplace add specscore/ai-marketplace
$ /plugin install specstudio@specscore
Claude Codeautouzupełnianie
> /specstudio:
   /specstudio:ideate     Dopracuj surowy pomysł w Idea w formacie SpecScore
   /specstudio:specify    Zamień zatwierdzoną Idea w specyfikację Feature
   /specstudio:plan       Podziel Feature na Plan zadań
   /specstudio:implement  Zrealizuj kolejne zadanie z Planu
Claude Code/ideate
> /ideate Zastanówmy się, jak powinien wyglądać ekran koszyka w procesie checkoutu.
Claude Code/specify
> /specify Zdefiniujmy spec/ideas/checkout-basket.md
Claude Code/plan
> /plan Zaplanuj wdrożenie spec/features/checkout/basket/README.md
Claude Code/implement
> /implement Wykonaj zadanie z spec/plans/checkout-basket/README.md

Bezpłatne do każdego zastosowania, także komercyjnego. Źródła wtyczki:specscore/specstudio-skills — na licencji MIT.

Sprawdź specyfikację w dwóch krokach.

Szybki, deterministyczny linter, a następnie pogłębiony przegląd AI — uruchomione na specyfikacji, którą właśnie widziałeś. Dwa kroki, dwa rodzaje pewności.

Uruchom linter.

deterministyczny

Ten sam wynik przy każdym uruchomieniu. Darmowy, szybki, uruchamiany przy każdym commicie.

Przegląd i ocena z AI.

niedeterministyczny

Analizuje znaczenie, tak jak recenzent w zespole.

Oto czego nie wychwyci.

Linter, który twierdzi, że wykryje wszystko, mija się z prawdą. SpecScore to system warstwowy — deterministyczny linter, recenzent AI i Twój własny osąd — a każda warstwa ma swoje granice. Opisaliśmy je wprost: co wyłapuje linter, co wychwytuje AI, a co wciąż spoczywa na Tobie, bo żadne narzędzie jeszcze tego nie potrafi.

Czego linter nie wykryje →

Co znajdziesz w środku.

Format

Markdown + YAML. Działa w każdym edytorze tekstu. Nie wymaga nowych narzędzi, aby zacząć pisać.

Linter

CLI w Go. Weryfikuje strukturę, odwołania i kompletność. Zwraca niezerowy kod wyjścia przy błędach — działa w Twoim terminalu oraz w CI.

Korzystaj z tego, co już masz.

SpecScore to po prostu zwykłe pliki w Twoim repozytorium. Bez konieczności zakładania konta w kolejnym SaaS-ie. Bez wymaganego orkiestratora. Używaj go z Linearem, Jirą, GitHub Projects, czystym Markdownem w katalogu lub całkowicie bez systemu do zarządzania zadaniami. Format i linter nie dbają o to, gdzie żyją Twoje tickety.

Wolisz CLI?

Nie korzystasz z agentów AI lub potrzebujesz walidacji specyfikacji w potoku CI? Jest do tego CLI. Zainstalujesz je w 60 sekund — bez zakładania konta, bez telemetrii, działa w dowolnym katalogu ze specyfikacjami w Markdownie.

$ curl -fsSL https://specscore.md/install/get-cli | sh

Uruchom linter na przykładowej specyfikacji dostarczonej z binarką:

$ specscore lint examples/checkout/apply-discount.md

Zobacz wynik:

  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 1

Przeczytaj pełną dokumentacjęWspółtwórz na GitHubie

Zbudowane na SpecScore.

  • DataTug

    Eksploruj schematy baz danych, twórz i wykonuj zapytania oraz analizuj wyniki z DataTug. SpecScore kieruje jego wymaganiami i kryteriami akceptacji.

    datatug.app Narzędzia, które stworzyliśmy
  • MeaningGraph

    Otwarty rejestr modeli danych i definicji semantycznych, utrzymywanych we własnych repozytoriach Git i powiązanych z modelami i kodem.

    meaninggraph.io Przeglądaj rejestr
  • Codegrapher

    Silnik grafu kodu do szybkiej eksploracji bazy kodu i dwukierunkowego łączenia specyfikacji z kodem.

    codegrapher.dev
  • DALgo

    Warstwa dostępu do danych w Go, wyspecyfikowana za pomocą SpecScore.

    dal-go.github.io
  • inGitDB

    Wersjonowana baza danych oparta na Gicie, wyspecyfikowana za pomocą SpecScore.

    ingitdb.com
  • Rehearse

    Warstwa dowodów akceptacji — uruchamia w praktyce kryteria akceptacji specyfikacji, z weryfikacjami wielokrotnego użytku i bez kodu łączącego.

    rehearse.ink
  • SpecScore Studio

    Interfejs webowy do przeglądania i edytowania specyfikacji SpecScore.

    specscore.studio

Masz pytania?

Oto pytania, które powracają najczęściej. Każde z nich prowadzi do pełnej odpowiedzi na stronie FAQ.

Czym różni się SpecScore od spec-kit?

spec-kit to metodologia; SpecScore to format zapisu specyfikacji, które tworzysz, oraz narzędzie CLI. Współpracują ze sobą — rozszerzenie spec-kit zapisujące w formacie SpecScore jest w przygotowaniu.

Pełna odpowiedź →
Czym różnią się SpecStudio Skills od Superpowers i agent-skills?

Idea jest zbliżona — wszystkie trzy prowadzą agentów AI przez etapy ideate → specify → plan → implement. SpecStudio Skills zapisuje artefakty w formacie SpecScore i używa CLI specscore do zapytań i zmian statusu; pozostałe odczytują i modyfikują pliki bezpośrednio. Wybierz SpecStudio, gdy liczy się zużycie tokenów.

Pełna odpowiedź →
Po co CLI — czy nie wystarczy zainstalować samych skilli?

Skille nie są w stanie niezawodnie egzekwować spójności referencyjnej, zwracać przefiltrowanych wyników bez czytania każdego pliku ani aktualizować odpowiedniego pola statusu w odpowiednim czasie. CLI wykonuje każde z tych zadań jednym wywołaniem. Skille, by zrobić to samo, muszą czytać każdy plik.

Pełna odpowiedź →
Dlaczego „SpecScore” — co tak właściwie ocenia?

Dwa znaczenia, oba zamierzone. Partytura (score) — uporządkowany zapis wymagań. Oraz dosłowna ocena jakości — linter w CLI to ocena deterministyczna, a skill /score to ocena dojrzałości w skali A–F wystawiana przez AI.

Pełna odpowiedź →
Gdzie są dane liczbowe dotyczące oszczędności tokenów?

Dokładne, pomierzone zestawienie porównawcze jest przygotowywane przed publikacją na Habr. Z punktu widzenia architektury: CLI zwraca zwięzłą listę o ustalonej strukturze; zwykły agent zamiast tego musi wczytać N całych dokumentów.

Pełna odpowiedź →
Na jakiej licencji jest SpecScore?

Specyfikacja i dokumentacja w publicznym repozytorium specscore/specscore są na CC BY 4.0. Referencyjny interfejs wiersza poleceń (CLI) w specscore/specscore-cli jest na Apache-2.0.

Pełna odpowiedź →
Czy SpecScore wymaga konkretnego narzędzia AI?

Nie. Specyfikacje to pliki tekstowe w repozytorium. CLI to lokalny program. AI Skills na tej stronie opakowują to CLI dla agentów, które umieją uruchamiać skills. Format nie wymaga jednego dostawcy.

Pełna odpowiedź →
Czym jest rozwój sterowany specyfikacją (SDD)?

Rozwój sterowany specyfikacją (SDD) oznacza napisanie testowalnej specyfikacji — wymagań i kryteriów akceptacji — przed kodem, a potem sprawdzenie wyniku względem tej specyfikacji. SpecScore jest jednym formatem plików dla tych specyfikacji.

Pełna odpowiedź →

Zdefiniuj sukces. Potem zrób na niego miejsce.

SpecScore określa, kiedy projekt jest gotowy. Tygodniowe zobowiązanie pomaga wybrać następny krok. Połącz je krótkim przeglądem wyników.

Specyfikacje, które przechodzą lint.

albo przeczytaj dokumentację

★ Daj nam gwiazdkę na GitHubie — to pomaga innym znaleźć projekt.Gwiazdki na GitHubie

Have an idea how to improve this page?