⚠️ build — это просто описательное имя для любого действия, автоматически выполняемого на определённых событиях. Эти действия не должны генерировать никакого бинарного вывода — единственное требование — предоставлять логи, которые можно автоматически парсить для ошибок и предупреждений.

Это даёт вам неограниченную гибкость для автоматической проверки вывода модели, обновлений проекта и навыков. Даже когда речь идёт о ручной проверки, вы можете использовать сборки для расширенной проверки — заставить модель подготовить список горячих точек для проверки или детальные отчеты и инструкции для ручного обзора.
Хорошая идея — всегда искать способы автоматизировать и расширить проверку, так как это действительно экономит ваше время и энергию в долгосрочной перспективе. Вам даже не нужно быть творческим — просто попросите модели сделать это за вас, используя .pastukhov/README.md как ссылку.
Проверка автоматической сборки — ядро конвейера проверки Pastukhov Agent. Вместо ожидания, пока модели вызовут npm test или dotnet build, автоматические сборки запускаются при каждом изменении файла, которое ИИ делает в соответствующих папках — компилирование, линтинг, проверка типов и тестирование вашего кода без какого-либо вмешательства. Необработанный вывод сборки затем парсится в структурированные ошибки и предупреждения (используя гибкие правила парсинга, которые вы можете легко обновить), которые поступают обратно в чат в конце с использованием функции Автоисправление и панель сборки для немедленного ручного обзора. Вам не нужно ждать окончания чата, чтобы просмотреть ошибки и отправить свой отзыв — именно для этого существует очередь сообщений. Просто отправьте свой отзыв и уходите — он будет автоматически отправлен в чат в конце.
Из-за этого вы получаете гораздо более быстрые завершения чата, более низкие затраты и более быструю пост-чат проверку, потому что фоново пересобранное приложение может быть полностью развёрнуто в тот момент, когда ИИ генерирует свою финальную сводку. Это особенно эффективно при наличии нескольких типов сборок и линтеров, так как все они запускаются параллельно, а не последовательно выполняемым моделью.
Визуальный шум также намного ниже — вы видите, как модели выполняют ваши задачи, а не борются с вызовом линтеров и билдеров несколько раз подряд. Чтобы сделать это ещё более эффективным, вы должны добавить правило в CLAUDE.md никогда не строить или линтовать вручную и использовать хуки для предотвращения моделей делать это, если они забудут.
Конфигурация сборки
Сборки настроены в .pastukhov/build.yml. Каждая сборка определяет команду, какие события её запускают, и необязательные настройки для задержки, тайм-аута и нормализации пути. Существуют два типа: сборки command (выполнение оболочки) и сборки prompt (проверка, управляемая ИИ — описана в руководстве Автоматические сборки промптов).
build:
task-name:
path: "src/" # Рабочий каталог для команды
command: "npm run check" # Команда оболочки для выполнения
delay: 3 # Секунды ожидания перед запуском (по умолчанию: 3)
timeout: 60 # Максимальное время выполнения в секундах (по умолчанию: 60)
watch: "*.ts *.js" # Глобальные маски файлов или имена сборок (разделены пробелом или запятой), или `chat` для мониторинга текущего завершения чата
commandOutput: "" # Путь к дополнительному файлу вывода (необязательно)
ignore: [] # Регулярные выражения для фильтрации из ошибок/предупреждений
replacements: # Найти/заменить в путях вывода
- find: "/tmp/build"
replace: "/project"
stopStrings: [] # Строки, которые немедленно прерывают сборку
display: always # Видимость UI: always, errors, warnings, never
autofix: always # Участие Автоисправление: always, errors, warnings, never
startSound: "" # Звук при запуске сборки (встроенный или пользовательский)
endSound: "" # Звук при завершении сборки (встроенный или пользовательский)
soundVolume: 1.0 # Громкость 0-1 для звуков сборки
Триггеры сборки
Поле watch поддерживает три типа триггеров:
- Глобальные маски файлов — Glob-паттерны вроде
*.ts *.svelte. Сборка следит за папкойpathна соответствующие изменения файлов и выполняет команду относительно неё, запуская после настроенной задержки - Имена родительских сборок — Ссылка на другую сборку по имени. Эта сборка запускается только после успешного завершения родительской, включая упорядоченные конвейеры
chat— Особый триггер, который срабатывает, когда сессия чата пользователя завершается. Доступен для всех типов сборок и развёртываний
Сборка может следить за изменениями файлов, родительскими сборками или завершениями чата — каждая сборка следит точно за одним типом события. Если вам нужна сборка для активации на комбинации событий, дублируйте её с разными командами watch. Это намеренно: сборки с одной ответственностью легче отлаживать и мониторить. Для сокращения дублирования используйте родительско-дочернюю схему: создайте несколько легковесных родительских сборок no-op, каждая следит за одним типом события, затем имейте одну дочернюю сборку, следящую за всеми ними — она запускается, когда любая родительская завершается, выполняя вашу команду только один раз. Установите display: never на родительских сборках, чтобы скрыть их с панели сборки.
Когда несколько файлов изменяются во время отсрочки задержки, таймер сбрасывается. Если файлы изменяются, пока сборка работает, работающая сборка отменяется и перезапускается с новыми изменениями.
⚠️ watch: chat включает автоматический запуск сборок в конце любого инициированного пользователем (не подагентом) чата. Используйте это для тяжёлой проверки, которая не должна перезапускаться при каждом обновлении файла — сборки промптов, аудиты безопасности, дорогостоящий анализ или всё, что занимает слишком много времени для триггеров наблюдения за файлами.
Она запускается только когда завершены более высокоуровневые конвейеры: сначала обрабатываются все очередные сообщения пользователя (они всегда заходят в чат до всего остального), и конвейер Автоисправление полностью завершён без оставшихся ошибок или предупреждений. Нет смысла запускать тяжёлые операции в «грязном» состоянии — эти проблемы будут автоматически исправлены вашим отзывом или конвейером Автоисправление.
Управление отображением и Автоисправление
Каждая сборка имеет два поля управления, которые определяют её поведение в UI и с Автоисправление:
- display — Управляет тем, когда сборка появляется на панели сборки:
always(по умолчанию),errors(только когда существуют ошибки),warnings(ошибки или предупреждения) илиnever(скрыто) - autofix — Управляет тем, будет ли Автоисправление направлять ошибки этой сборки ИИ:
always(по умолчанию),errors,warningsилиnever. Используйтеneverдля сборок, вывод которых требует ручного обзора, например, сборки промптов, тесты безопасности, анализ высокого уровня
Вы также можете управлять конвейером Автоисправление в реальном времени, используя переключатель Автоисправление под полем ввода сообщения в чате. Выключение его отключает отправку ошибок и предупреждений сборки Автоисправление в чат, пока вы не включите его снова. Это полезно, когда вы останавливаете чат посередине и не хотите быть прерваны попытками Автоисправление исправить сломанное неполное состояние проекта.
Цепочки сборки
Сборки могут быть объединены в цепочку путём наблюдения за другими сборками вместо файлов. Система автоматически разрешает зависимости и запускает сборки в правильном порядке:
build:
compile:
command: "dotnet build"
watch: "*.cs"
inspect:
command: "jb inspectcode Code.sln -f=Xml --verbosity=ERROR -o=bin/inspectcode.xml"
commandOutput: "/tmp/code/builds/inspect/bin/inspectcode.xml"
watch: compile # Запускается только после успешной компиляции
test:
command: "dotnet test --no-build"
watch: compile # Запускается только после успешной компиляции
Парсер сборки
Вывод сборки хранится в .pastukhov/build/ с тремя файлами на задачу: {task-name}.output.txt (полный вывод команды), {task-name}.errors.txt (спарсенные ошибки) и {task-name}.warnings.txt (спарсенные предупреждения).
Парсер сборки преобразует необработанный вывод команды в структурированные ошибки и предупреждения. Он читает .pastukhov/build.parser, который использует блоки [ERROR]/[/ERROR] и [WARNING]/[/WARNING], содержащие последовательные регулярные паттерны. Парсер автоматически перезагружается, когда файл изменяется — перезапуск не нужен.
⚠️ Не пытайтесь редактировать файлы парсера вручную — попросите ИИ-модель сделать это за вас. Самый простой способ: выберите любой непарсенный текст в выводе сборки (Панель сборки или диалог вывода) и кликните на плавающую кнопку Fix parser — она отправляет выбранный текст ИИ с правильно отформатированным промптом для обновления build.parser. В качестве альтернативы, используйте .pastukhov/README.md как ссылку в чате.
Формат парсера
- Строки комментариев, начинающиеся с
#, игнорируются - Однострочные паттерны — Регулярное выражение, которое должно точно соответствовать одной строке вывода
- Многострочные паттерны — Обёрнуты в
{{...}}, соответствуют нулю или более последовательным строкам, следующим за внутренним регулярным выражением
# Ошибки TypeScript с отступным контекстом
[ERROR]
.*\.ts.* # Соответствует строке, содержащей путь .ts файла
Error.* # Соответствует строке, содержащей "Error"
{{^\s+}} # Соответствует нулю или более строк, начинающимся с пробелов
[/ERROR]
# Ошибки компилятора C# (формат MsBuild)
[ERROR]
\[MsBuild\].*\(\d+,\d+\)->\(\d+,\d+\)\s+CS\d+\:.*
[/ERROR]
# Ошибки Python ruff
[ERROR]
[A-Z]\d+\s+(\[\*\]\s+)?.*
\s*-->.*
{{^\s+.*|\d+\s+\|.*}}
[/ERROR]
# Предупреждения
[WARNING]
\(\d+,\d+\): warning
[/WARNING]
Парсер работает последовательно: на каждой строке вывода он пытается применить паттерны каждого блока по порядку. Когда все паттерны в блоке соответствуют последовательно, те строки извлекаются как одна ошибка, и парсер продвигается мимо них. Ранние блоки имеют приоритет — как только найдено соответствие, более поздние блоки пропускаются для тех строк.
Замены путей
Сборки часто запускаются во временных каталогах, поэтому пути ошибок не соответствуют вашим фактическим файлам проекта. Поле replacements перемапливают пути:
build:
client-build:
path: "client/"
command: "npm run build"
watch: "*.ts *.svelte"
replacements:
- find: "/tmp/code/builds/client-build"
replace: "/project/client"
Замены применяются перед парсингом, поэтому местоположения ошибок указывают на правильные файлы в вашем проекте.
Проверка конфигурации
Pastukhov Agent автоматически проверяует все конфигурационные файлы .pastukhov/ при сохранении. Девять провероков запускаются при каждом сохранении, каждый нацелен на конкретный конфигурационный файл:
build.yml— Синтаксис YAML, требуетcommandилиprompt, предупреждает о неизвестных свойствахdeploy.yml— Синтаксис YAML, предупреждает о неизвестных свойствахproject.yml— Синтаксис YAML, требуетname, предупреждает о неизвестных свойствахhooks.yml— Синтаксис YAML, предупреждает о неизвестных типах событий и свойствахmcp.yml— Синтаксис YAML, предупреждает о неизвестных ключах верхнего уровня и свойствах сервераskills.yml— Синтаксис YAML, предупреждает, еслиenabledотсутствуетenvironments.yml— Синтаксис YAML, предупреждает о неизвестных свойствахproviders.yml— Синтаксис YAML, предупреждает о неизвестных свойствах провайдера и окружения*.parser— Проверка пар ([ERROR]/[/ERROR]), действительность регулярных выражений, паттерны вне блоков
Результаты проверки появляются на Панели сборки вместе с вашими обычными сборками. Сообщения об ошибках ссылаются на соответствующий раздел в .pastukhov/README.md, чтобы вы могли найти правильный формат.
⚠️ Ошибки и предупреждения проверки конфигурации исключены из конвейера Автоисправление намеренно, чтобы предотвратить загрязнение существующих чатов, не связанных с конфигурациями Pastukhov Agent. В случае проблем с проверкой конфигурации, создайте свежий чат, кликните на бейджи ошибок/предупреждений на панели сборки, затем кнопку Send на вкладках ошибок и предупреждений в диалоге вывода. Или скопируйте/вставьте вывод вручную, если это вам удобнее. Сборки конфигурации также скрыты по умолчанию из UI для минимизации визуального шума — вы увидите их только когда существуют проблемы проверки.
Цикл обратной связи Автоисправление
Автоисправление связывает сборки и ИИ-модель, создавая самоисправляющийся цикл проверки. Когда включено, Автоисправление опрашивает сборки с настраиваемым интервалом, проверяет ошибки и предупреждения и внедряет их как сообщения чата для ИИ, чтобы исправить. Для полной информации о поведении Автоисправление, ограничениях и ручной отправке ошибок см. Автоисправление.
- Обработка только в idle — Автоисправление внедряет ошибки только когда нет активной ИИ-сессии, предотвращая конфликты
- Осведомленность о зависимостях — Автоисправление проверяет, что все родительские сборки завершены перед обработкой ошибок дочерней сборки
- Приоритет ошибок — Ошибки отправляются перед предупреждениями. Автоисправление не будет касаться предупреждений, пока все ошибки не будут решены
- Обнаружение дубликатов — Проверяет последние 10 сообщений на идентичное содержание для предотвращения бесконечных циклов
- Режим Автоисправления — Поле
autofixкаждой сборки контролирует её участие:always,errors,warningsилиnever
⚠️ Предупреждения автоматически исправляются особым образом — они всегда приходят с требованием исправить, а не игнорировать их. В противном случае модели часто пропускали бы их как неважные.
Эффективные паттерны проверки
Наслаивайте множественные контрольные качества для комплексного покрытия. Каждая сборка ловит разные категории проблем:
Чем больше автоматизированных сборок у вас есть — тем выше качество финального результата вы получаете. Это напрямую переводится в экономию вашего времени и получение лучшего кода и UI автоматически. Не ленитесь в этой части, экспериментируйте больше с различными способами расширения автоматизированной проверки. Даже когда речь идёт о ручной проверки, вы всегда можете упростить свою жизнь полуавтоматическим подходом — заставьте сборки промптов обнаруживать потенциальные ошибки и предупреждения, затем просмотрите их сначала вместо перепроверки всего с нуля после каждого обновления.
- Компилятор + линтер + проверка типов + тесты — Четыре независимые проверки, каждая ловит то, что упускают другие. Чем больше сборок вы добавляете, тем больше автоматического отклика получает Автоисправление
- Объединяйте сборки в порядке зависимостей — Сначала компилируйте, затем линтуйте, затем тестируйте. Каждый шаг запускается только когда предыдущий успешен, избегая каскадного шума
- Добавьте паттерны парсера для ваших инструментов — Если вывод вашей сборки не парсится правильно, попросите ИИ-модель добавить паттерны в
build.parser. Парсер автоматически перезагружается при сохранении - Используйте замены путей для контейнеризованных сборок — Если сборки запускаются в Docker или временных каталогах, отобразите пути обратно к вашему проекту, чтобы местоположения ошибок были точными
- Установите display: never для шумных сборок — Держите панель сборки чистой, скрывая сборки, вывод которых вам редко нужно инспектировать вручную
Для полной справки по функциям сборки см. Сборка и развёртывание. Для цикла обратной связи Автоисправление см. Автоисправление. Для мониторинга ошибок runtime см. Мониторинг вывода развёртывания.