CLI инструмент для управления спецификациями, управляемыми архитектурой (spec-driven architecture). Позволяет определять структуру кода через спецификации, автоматизировать их проверку и визуализировать зависимости.
Спецификации — это MD-файлы рядом с кодом, которые:
- Определяют архитектурные решения и контексты
- Описывают контракты и ограничения компонентов
- Управляют зависимостями между компонентами
- Документируют причины и ответственности
Инструмент помогает проверить консистентность спецификаций и понять граф их зависимостей.
- Актуальная мажорная версия:
v3.x. - Серия
v2.xотозвана (withdrawn) и не поддерживается. - Теги
v2.xсохранены в репозитории для исторической совместимости и аудита.
go install github.com/SmirnovND/spec-agent/v3/cmd/spec-agent@latestПроверка установки:
spec-agent --helpspec-agent initСоздаст .spec_agent/config.yaml с путями к спецификациям.
Для PHP-проекта:
spec-agent init-php# .spec_agent/config.yaml
roots:
- internal/services
- internal/repositories
exclude:
- cmd/staticlint
- cmd/serverУкажите директории, где находятся корневые спецификации (MD-файлы).
Через exclude можно исключить технические папки из сканирования/экспорта.
spec-agent serveОткройте в браузере: http://localhost:8080
spec-agent graphУвидите структуру зависимостей между спеками.
spec-agent initСоздаёт структуру:
.spec_agent/config.yaml— конфиг с корневыми путями для поиска спецификацийspec_changes/— директория для отслеживания изменений
Для PHP-проектов используйте отдельную команду:
spec-agent init-phpДополнительно создаётся отдельный профиль:
.spec_agent/php/prompts/base/spec_rules.md— правила для PHP спецификаций.spec_agent/php/prompts/base/agent_prompt.md— базовый prompt для PHP-агента.spec_agent/php/prompts/base/workflow.md— workflow для PHP.spec_agent/php/examples/— примеры спецификаций для PHP
Архитектурное правило слоёв (зафиксировано в промптах):
- Сценарная бизнес-оркестрация должна находиться в
usecase. serviceреализует отдельные шаги сценария и технические операции, вызываемые изusecase.- Логика полноценного пользовательского/бизнес-сценария не должна размещаться в
service.
Для интеграции с Zenflow можно сразу создать кастомный workflow:
spec-agent init --zenflowОтличие источников промтов:
initберёт промты изinternal/fs/assets/go/prompts/baseinit --zenflowдобавляет zenflow-набор изinternal/fs/assets/go/prompts/zenflow
Дополнительно создаётся файл:
.zenflow/workflows/spec-agent-spec-driven.md— custom workflow с шагамиPlanning,Technical Specification,Specification Review,Implementation,Review & Wrap-Up- В workflow используются артефакты Zenflow:
{@artifacts_path}/plan.md,{@artifacts_path}/spec.md,{@artifacts_path}/report.md - Для каждого шага используются отдельные обязательные инструкции:
.spec_agent/prompts/zenflow/planning.md.spec_agent/prompts/zenflow/technical_specification.md.spec_agent/prompts/zenflow/specification_review.md.spec_agent/prompts/zenflow/implementation.md.spec_agent/prompts/zenflow/review_wrap_up.md
Для PHP-профиля:
spec-agent init-php --zenflowСоздаётся отдельный workflow:
.zenflow/workflows/spec-agent-php-spec-driven.md- шаги ссылаются на
.spec_agent/php/prompts/zenflow/*.md
Способ 1: Встроенный веб-сервер (рекомендуется)
spec-agent serve -p 8080Запускает встроенный HTTP-сервер на http://localhost:8080:
- Автоматически генерирует HTML если спеки ещё не экспортированы
- Обслуживает статические файлы из
.spec_agent/build/ - Прекращает работу по
Ctrl+C - Не требует nginx, node или docker
Опции:
spec-agent serve -p 3000 # Другой порт
spec-agent serve --host 0.0.0.0 # Доступен для других хостовСпособ 2: Экспорт в статичный HTML
spec-agent exportГенерирует HTML файлы в .spec_agent/build/:
index.html— главная страница с оглавлением{spec_name}.md.html— отдельные страницы спеков- Можно открыть как локальный файл в браузере
spec-agent graphАнализирует спецификации и выводит информацию:
- Найденные root-спеки (на которые никто не ссылается)
- Граф зависимостей (кол-во узлов и рёбер)
- Определяет структуру и взаимосвязи
spec-agent/
├── cmd/spec-agent/
│ └── main.go # Точка входа приложения
├── internal/
│ ├── cli/ # Команды CLI (Cobra)
│ │ ├── root.go # Корневая команда
│ │ ├── init.go # spec-agent init
│ │ ├── graph.go # spec-agent graph
│ │ ├── export.go # spec-agent export
│ │ └── serve.go # spec-agent serve
│ ├── spec/ # Логика работы со спецификациями
│ │ ├── model.go # Структуры: Spec, Graph, Node, Edge
│ │ ├── parser.go # Парсинг MD-файлов
│ │ ├── graph.go # Построение графа зависимостей
│ │ └── exporter.go # Генерация HTML
│ ├── config/
│ │ └── config.go # Загрузка .spec_agent/config.yaml
│ └── fs/
│ └── init.go # Инициализация проекта
├── assets/
│ ├── examples/ # Примеры спецификаций
│ ├── go/prompts/ # Go-профиль: base + zenflow
│ └── php/prompts/ # PHP-профиль: base + zenflow
├── go.mod
├── go.sum
└── README.md
- Cobra — фреймворк для CLI команд
- gopkg.in/yaml.v3 — парсинг YAML конфига
Спецификации — это Markdown-файлы со следующей структурой:
# Название компонента
## Контекст
Описание задачи, роли в системе, исторический контекст.
## Ответственность
Что этот компонент отвечает за реализацию.
## Контракты
Интерфейсы, структуры данных, API.
## Ограничения
Constraint'ы, assumptions, limitations.
## Зависимости
- Ссылка на другую спецификацию: [Component Name](../other/spec.md).spec_agent/config.yaml:
roots:
- internal/controllers # Где искать спецификации
- internal/middleware
exclude:
- cmd/staticlint # Что исключить из сканирования
- cmd/server# CreateUserUseCase
## Responsibility
Реализует бизнес-процесс создания нового пользователя со всеми необходимыми проверками.
## Inputs
- Email пользователя
- Пароль
- Имя пользователя
## Outputs
- Созданный объект User с ID
## Business Rules
1. Email должен быть уникальным
2. Пароль должен быть минимум 8 символов
3. Новый пользователь создается в неактивном состоянии
## Flow
1. Валидирует входные данные
2. Проверяет уникальность email → calls: [UserRepository](../repositories/user_repository.md)
3. Хеширует пароль → calls: [CryptoService](../services/crypto_service.md)
4. Создает запись в БД → writes: [UserRepository](../repositories/user_repository.md)
5. Отправляет письмо подтверждения → calls: [EmailService](../services/email_service.md)
## Dependencies
- [UserRepository](../repositories/user_repository.md)
- [CryptoService](../services/crypto_service.md)
- [EmailService](../services/email_service.md)
## Errors
- ErrEmailExists — email уже зарегистрирован
- ErrInvalidEmail — некорректный формат
- ErrWeakPassword — слабый пароль# UserRepository
## Responsibility
Управляет доступом к данным пользователей в базе данных.
## Inputs
- User object for create/update
- User ID for read/delete
- Filter parameters for list
## Outputs
- User object(s) or error
## Dependencies
- [Database Driver](../db/connection.md)
## Contract
- Create(ctx, user) → (userWithID, error)
- GetByID(ctx, id) → (user, error)
- GetByEmail(ctx, email) → (user, error)
- Update(ctx, user) → error
- Delete(ctx, id) → errorgo build -o spec-agent ./cmd/spec-agent
./spec-agent --helpgo test ./...Каждая команда в internal/cli/ соответствует CLI команде:
root.go— корневая команда и регистрация подкомандexport.go— генерация HTMLserve.go— встроенный веб-серверgraph.go— анализ зависимостейinit.go— инициализация проекта
В internal/spec/ находится основная логика:
parser.go— парсинг MD-файлов в структуру Specgraph.go— построение графа зависимостейexporter.go— генерация HTML с навигацией