Формат
Markdown + YAML. Работает в любом редакторе, открывающем текст. Никаких новых инструментов, чтобы начать писать.
Потом уточняющий вопрос посреди разработки. Потом исправление после релиза. Потом контекст, который вы объясняете снова и снова.
SpecScore — открытый, линтуемый файловый формат для спецификаций, как JSON для данных. С CLI, через который ваши агенты запрашивают и редактируют их — как jq для JSON.

SpecScore — это формат на основе Markdown + YAML для фич, требований и критериев приёмки. Он задаёт структуру, понятную и вашей команде, и вашим ИИ-агентам — и это просто файлы в вашем репозитории.
Проект SpecScore состоит из трёх типов артефактов в едином жизненном цикле: Идея фиксирует полусформированное направление;Фича замораживает согласованное поведение;План раскладывает фичу на упорядоченные задачи, каждая из которых ссылается на критерии приёмки, которые она удовлетворяет.
Зачем это вашему агенту. Поскольку структура машиночитаема, ИИ-агенты могут запрашивать спецификацию через CLI, а не читать каждый файл. Спросите «над чем мне работать дальше?» — и CLI вернёт открытые фичи и нерешённые вопросы. Та же форма, которую читает ваша команда; куда меньше контекста, который агенту нужно загружать.
Плоский список на пятидесяти фичах превращается в свалку. SpecScore сохраняет дерево навигируемым: родители держат объём, дети — детали, а форма директорий повторяет форму продукта, о которой ваша команда и так рассуждает.
Открытые вопросы всплывают наверх.Нерешённые вопросы на любой глубине показываются в индексе каждого родителя. Вы видите, что блокирует релиз, с вершины дерева — не приходится копать, чтобы их найти.
Большинство инструментов для спецификаций исходят из того, что плоский список работает. Работает — пока не перестаёт. SpecScore сделан ровно для того момента, когда вопрос «а где живёт эта фича?» начинает иметь значение.
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/ ← под-под-фича
│ └── plan-rules/
├── task/
│ ├── info/
│ ├── list/
│ └── new/
└── … ещё 10 фич верхнего уровняСпека в документе, тред в Slack и код в PR молча расходятся неделями. Никто не может найти, какая версия разговора каноническая.
Решение
Одна каноническая спека в репозитории, версионируется вместе с кодом. specscore lint запускается в CI на каждый push; git-история — это аудит-трейл. Спека, тред и PR не могут молча разойтись — это один и тот же файл под ревью.
"Обрабатывает ошибки корректно" должно было означать "показать тост и откатить." Или"логировать и повторить?" Агенту приходится гадать.
Решение
Линтер ловит размытые критерии до того, как написана хоть строчка кода. Глагол не проходит линт, потому что у него нет конкретного объекта и условия. Чтобы убрать предупреждение, приходится сформулировать, что значит"обрабатывает".
Люди интерполируют, уточняют, спрашивают. ИИ-агенты — нет. Они реализуют тот паттерн, который чаще всего встречался в их обучающих данных. Код проходит ревью, потому что делаетчто-то разумное. Просто не то, что вы имели в виду.
Решение
Структурированный вход. ИИ-агенты парсят REQ-ID, AC-ID и сценарииGIVEN / WHEN / THENдетерминированно — интерполировать нечего. Каждая задача Plan обязана сослаться на AC-ID, которые она удовлетворяет: сделанное всегда сверяемо со специфицированным.
Агент что-то собирает по нечёткому заданию, вы видите, что это не то, и переформулируете запрос — четырьмя разными способами. Каждая недоделанная функция и каждая повторная попытка оплачиваются токенами. Чем расплывчатее спецификация, тем больше кругов до результата.
Решение
Линтуйте спецификацию до запуска агента.specscore lint сразу отклоняет расплывчатые глаголы и недостающие критерии приёмки, поэтому агент реализует чёткое задание с первого раза, а не гадает между попытками. Самый дешёвый запуск агента — тот, который не приходится повторять.
ИИ-агент, отвечающий на вопрос "что зависит от этой фичи?", читает весь README фичи. Потом каждый родительский индекс. Потом соседние фичи на всякий случай. Каждый запрос — новый парсинг. Токены сгорают; латентность растёт; счёт растёт вместе с ними.
Решение
Структурированные запросы вместо чтения файлов.specscore feature tree возвращает иерархию как YAML; feature deps обходит транзитивные зависимости; feature info показывает статус, владельца и открытые вопросы — каждая команда за один вызов. Агент навигирует по графу, а не по прозе.
Спустя полгода ты дебажишь функцию, и никто не помнит, какую фичу она реализует. Связь между кодом и спекой жила в чьей-то голове, и этот человек уволился. PR, который её ввёл, ушёл в архив.
Решение
Аннотации в исходниках. Комментарии вида// specscore: features/checkout/apply-discount/R1.AC-2делают связь машиночитаемой и переживают любой рефакторинг.specscore code deps отвечает на вопрос"какую спеку реализует этот файл?" за один вызов; линтер помечает ссылки на удалённые спецификации.
Ты переводишь фичу из Draft в Approvedв её README, но родительский features-index всё ещё показывает её как Draft. Через три недели агент, читающий индекс, думает, что фича всё ещё в работе. Статус живёт в двух местах, и они расходятся.
Решение
specscore feature change-status переписывает поле Status фичи и пересинхронизирует строку в features-index одной атомарной операцией — при сбое линта изменение откатывается. Статус существует в одном каноническом месте; индекс — это его сгенерированное представление.
Спека читается как готовая — пока ты не вспоминаешь, что вопрос "а что с часовыми поясами?" потерялся в треде Slack два месяца назад и так и не попал в документ. Теперь вы в реализации, и никто не может сказать, каким был ответ.
Решение
У каждой SpecScore-фичи обязательная секцияOutstanding Questions. Линтер отвергает фичи, в которых её нет — пусто можно ("None at this time."), но отсутствие — нельзя. Нерешённые вопросы видны в документе, доступны из CLI и их невозможно забыть.
SpecStudio Skills — плагин для Claude Code, который превращает жизненный цикл SpecScore в четыре slash-команды. Установите один раз, потом запускайте их по порядку — от сырой идеи к выполнимому плану.
$ /plugin marketplace add specscore/ai-marketplace $ /plugin install specstudio@specscore
> /specstudio: /specstudio:ideate Превратить сырую идею в SpecScore Idea /specstudio:specify Превратить одобренную Idea в Feature-спеку /specstudio:plan Разложить Feature на Plan из задач /specstudio:implement Выполнить следующую задачу из Plan
Бесплатно для публичных и open-source репозиториев. Исходники плагина —specscore/specstudio-skills, лицензия MIT.
Сначала быстрый детерминированный линтер, затем более глубокая проверка ИИ — на той же спецификации, что вы только что видели. Два прохода — два вида уверенности.
$ 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
Одинаковый результат при каждом запуске. Бесплатно, быстро, на каждом коммите.
> /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
Читает по смыслу, как живой рецензент.
Markdown + YAML. Работает в любом редакторе, открывающем текст. Никаких новых инструментов, чтобы начать писать.
CLI на Go. Проверяет структуру, ссылки и полноту. Выходит с ненулевым кодом при ошибке — работает в терминале и в CI.
SpecScore — это просто файлы в вашем репозитории. Не нужно регистрироваться в SaaS. Не нужен оркестратор. Используйте с Linear, Jira, GitHub Projects, сырыми Markdown-файлами в папке — или вообще без таск-трекера. Формату и линтеру всё равно, где живут ваши тикеты.
Разработка на основе спецификаций — переполненное направление. Вот где SpecScore стоит среди альтернатив — честно.
Не используете ИИ-агентов или нужна валидация спек в CI-пайплайне? Для этого есть CLI. Установка за 60 секунд — без аккаунта, без телеметрии, работает на любой папке с Markdown-спеками.
$ curl -fsSL https://specscore.md/install/get-cli | sh> irm https://specscore.md/install/get-cli.ps1 | iexЗапустите линтер на примере спеки, которая идёт в комплекте:
$ specscore lint examples/checkout/apply-discount.mdВывод:
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Движок графа кода для быстрого исследования кода и двусторонней связи между спецификациями и кодом.
codegrapher.devСлой доступа к данным на Go, специфицированный с помощью SpecScore.
dal-go.github.ioВерсионная база данных на основе Git, специфицированная с помощью SpecScore.
ingitdb.comСлой доказательств приёмки — реально прогоняет критерии приёмки спецификации, с переиспользуемыми проверками и без связующего кода.
rehearse.inkВеб-интерфейс для просмотра и редактирования SpecScore-спецификаций.
specscore.studio★ Поставьте звезду на GitHub — это помогает другим находить проект.
Нашли ошибку в переводе или знаете как улучшить эту страницу? Сообщите нам.