Skip to content

Конвейер агентной разработки: определения агентов и команд в .claude/ - #18

Open
iljyxa wants to merge 4 commits into
Macegor:developfrom
iljyxa:claude-code-pipeline
Open

Конвейер агентной разработки: определения агентов и команд в .claude/#18
iljyxa wants to merge 4 commits into
Macegor:developfrom
iljyxa:claude-code-pipeline

Conversation

@iljyxa

@iljyxa iljyxa commented Aug 26, 2026

Copy link
Copy Markdown

Проблема

CLAUDE.md и docs/agentic-pipeline.md описывают TDD-конвейер из шести субагентов и ссылаются на
их определения в .claude/agents/*.md. Этих файлов в репозитории нет: каталог .claude целиком
попал в .gitignore (коммит 06ae514), поэтому всё, что там создаётся, git не отслеживает.

Следствие — документация описывает процесс, который нельзя выполнить. Запуск стадии вида
architect завершается ошибкой «нет такого типа агента», и конвейер либо молча вырождается в
работу одним чатом, либо теряет разделение прав между ролями (architect/reviewer по
документации read-only, но универсальный агент получает все инструменты).

Что сделано

.gitignore — вместо исключения всего каталога игнорируется только личный
.claude/settings.local.json. Остальное в .claude/ по конвенции инструмента общее: агенты,
команды и общие настройки шарятся с командой и работают в чистом клоне.

.claude/agents/ — шесть субагентов ровно по таблице ролей из docs/agentic-pipeline.md:
architect, test-writer, developer, qa-e2e, reviewer, documenter. Модель и набор
инструментов у каждого соответствуют колонкам таблицы; architect и reviewer read-only —
у них нет Edit/Write. Единый источник правды не дублируется: агенты ссылаются на CLAUDE.md
и профильные docs/, как того требует сам документ.

.claude/commands/ — семь команд: /pipeline (основной вход с триажем FAST/FULL), /triage,
/qa, /review, /document, /sanity (механические проверки из «Sanity-чек после изменений»),
/commit (коммит по правилам проекта: явные файлы, русское сообщение, без пуша).
/pipeline и /commit запускаются только человеком — первая разворачивает шесть агентов,
вторая имеет побочный эффект. У /commit allowed-tools сужен до конкретных git-команд, а не
голого Bash, чтобы пред-одобрение инструментов не распространялось на git push, который сама
команда запрещает.

.claude/hooks/restrict-write-paths.mjs — ограничение агентов по путям. Настройка инструментов
умеет только выдать или отнять инструмент целиком, поэтому правила «test-writer правит только
тесты» и «documenter правит только документацию» до сих пор держались на тексте промпта. Хук
отклоняет запись за пределами разрешённых каталогов. Написан на Node, а не на bash, ради Windows.

.claude/settings.json — общие разрешения под команды, которые конвейер выполняет постоянно.
Отдельными правилами добавлены MOCHA_GREP=* npm run test:fast и VSCODE_TEST_VERSION=* npm test:
общее правило npm run * их не покрывает, поскольку разрешение не сопоставляется сквозь
присваивание переменной окружения вне известного безопасного набора. git commit и git push
в список сознательно не включены.

scripts/cloud-setup.sh + SessionStart-хук — подготовка headless-окружения (Claude Code Cloud,
CI). npm test поднимает настоящий VS Code на Electron через @vscode/test-electron и без
виртуального X-дисплея не стартует. Подготовка разнесена на два места по границе, которую задаёт
сама модель Claude Code Cloud:

  • системные пакеты (xvfb и библиотеки Electron) — инлайн-текстом в поле Setup script UI
    облака (см. README.md), т.к. на этом этапе нет гарантии, что рабочая директория совпадает с
    клоном репозитория;
  • проектная часть (npm ci + прогрев сборки) — в scripts/cloud-setup.sh, вызывается через
    SessionStart-хук (.claude/settings.json) с обращением "$CLAUDE_PROJECT_DIR"/scripts/cloud-setup.sh
    — единственный задокументированный способ надёжно сослаться на файл репозитория из настройки
    окружения. Хук гейтится по CLAUDE_CODE_REMOTE=true, чтобы не мешать npm run watch локально.

docs/agentic-pipeline.md и CLAUDE.md — зафиксировано исключение для нерантайм-изменений:
если задача не трогает src/**, src-ui/**, src/test/**, стадия qa-e2e не гоняет полный
npm test/coverage:changed, а ограничивается проверкой структуры и конфигурации. reviewer
выполняется в любом случае. Формулировка синхронизирована в обоих документах.

README.md — раздел для разработчиков: раскладка .claude/, таблица команд с областью
применения, разделение личных и общих настроек, разбор разрешений, настройка облачного окружения
с точным содержимым поля Setup script.

Важно: PR удаляет .claude/settings.local.json

Файл сейчас отслеживается git, хотя по конвенции инструмента это личные настройки конкретного
разработчика (в текущей версии там путь c:\Projects\v8vscedit, то есть настройки одной машины,
применяемые ко всем). После вливания он перестаёт отслеживаться и подпадает под .gitignore.

Практическое следствие: при переключении на эту ветку файл исчезнет из рабочего дерева — git
не различает «удалить» и «перестать отслеживать», на уровне коммита это одна операция. Всё, что
нужно для работы конвейера, перенесено в общий .claude/settings.json, так что восстанавливать
специально ничего не требуется. Если в личном файле были свои предпочтения (например outputStyle)
— достаточно создать его заново, теперь он корректно игнорируется.

Если локальная копия была изменена, git не удалит её молча: переключение веток прервётся с
предупреждением или создаст modify/delete-конфликт.

Влияние на сборку и тесты

Изменения полностью нерантайм: ни строки в src/** и src-ui/**. Затронуты только конфигурация
инструментария, документация и новый скрипт подготовки окружения. Сборка, тесты и покрытие не
затрагиваются.

Как проверить

  1. В чистом клоне ветки /pipeline, /triage, /sanity и остальные команды доступны без ручной
    настройки.
  2. /sanity прогоняет npm run compile, npm run lint и rg-проверки архитектурных инвариантов из
    CLAUDE.md.
  3. В UI Claude Code Cloud поле Setup script — по инструкции из README.md (раздел «Claude Code
    Cloud»); проектная часть подхватывается автоматически через SessionStart-хук.

iljyxa added 4 commits August 25, 2026 22:15
CLAUDE.md и docs/agentic-pipeline.md описывают TDD-конвейер из шести субагентов
и ссылаются на их определения в .claude/agents/*.md, но каталог .claude целиком
игнорировался git (коммит 06ae514) — файлы физически не существовали, документация
описывала процесс, который нельзя выполнить.

- .gitignore: вместо исключения всего каталога игнорируется только личный
  .claude/settings.local.json — конвенция инструмента: агенты, команды и общие
  настройки коммитятся и шарятся с командой.
- .claude/agents/: шесть субагентов по таблице ролей из docs/agentic-pipeline.md
  (architect, test-writer, developer, qa-e2e, reviewer, documenter). Модель и
  набор инструментов соответствуют таблице; architect и reviewer read-only.
  Каждый ссылается на CLAUDE.md и профильные docs/, не дублируя их.
- .claude/commands/: семь команд — /pipeline (основной вход, триаж FAST/FULL),
  /triage, /qa, /review, /document, /sanity, /commit. /pipeline и /commit
  запускаются только человеком (disable-model-invocation) — первая разворачивает
  шесть агентов, вторая коммитит.
- .claude/hooks/restrict-write-paths.mjs: PreToolUse-хук, ограничивающий
  test-writer и documenter записью только в их каталоги (src/test и
  docs/CLAUDE.md/README.md соответственно) — поле tools: умеет только выдать
  или отнять инструмент целиком, path-ограничения только через хук.
- .claude/settings.json: разрешения под реальные команды конвейера, включая
  MOCHA_GREP=* npm run test:fast и VSCODE_TEST_VERSION=* npm test — правило
  npm run * их не покрывает, т.к. allow-правило не матчится сквозь присваивание
  переменной окружения вне известного безопасного набора. git commit/push не
  разрешены — требуют явного подтверждения.
- scripts/cloud-setup.sh: подготовка headless-окружения (Claude Code Cloud, CI).
  npm test поднимает настоящий VS Code на Electron через @vscode/test-electron —
  без виртуального X-дисплея не стартует; скрипт ставит xvfb и прогревает сборку.
- docs/agentic-pipeline.md, CLAUDE.md: исключение для нерантайм-изменений —
  если задача не трогает src/**, src-ui/**, src/test/**, qa-e2e не гоняет
  полный npm test/coverage:changed, только проверяет структуру/конфигурацию.
  reviewer выполняется в любом случае.
- README.md: раздел для разработчиков — раскладка .claude/, таблица команд,
  разрешения, ограничение агентов по путям, настройка Claude Code Cloud.
…hook

Ошибка "bash: ./scripts/cloud-setup.sh: No such file or directory" (exit 127)
из поля Setup script — не проблема ветки или прав файла (проверено: 100755,
верный шебанг, LF, файл в дереве коммита). Причина в порядке инициализации:
Setup script выполняется ДО запуска Claude Code, когда рабочая директория не
гарантированно совпадает с клоном репозитория — документация даёт такую
гарантию только для хуков, через $CLAUDE_PROJECT_DIR, специально потому что
для них CWD сессии тоже не гарантирован.

- scripts/cloud-setup.sh: сужен до проектной части (npm ci + прогрев сборки),
  гейт по CLAUDE_CODE_REMOTE=true — хук срабатывает и локально, гейт не даёт
  ему мешать npm run watch на своей машине.
- .claude/settings.json: SessionStart-хук вызывает скрипт через
  "$CLAUDE_PROJECT_DIR"/scripts/cloud-setup.sh — задокументированный способ
  надёжно сослаться на файл репозитория из настройки окружения.
- README.md: системная часть (xvfb, библиотеки Electron) — инлайн-текстом
  прямо в поле Setup script UI облака, без обращения к файлам проекта;
  разделение объяснено и обосновано документацией Claude Code Cloud.
…ючённой песочницы

Агенты конвейера не могли запустить npm test/npm run test:fast со стандартными
настройками Bash — Electron-хост (@vscode/test-electron) убивается сигналом
под песочницей. Нигде в .claude/agents/*.md, .claude/settings.json и
docs/agentic-pipeline.md это не было описано, поэтому каждый агент открывал
ограничение заново и тратил проход на диагностику уже известной проблемы —
вместо живого прогона test-writer подменял его статической проверкой
(tsc --noEmit) или объявлял тест непроверяемым.

- .claude/settings.json: sandbox.excludedCommands — npm test и
  npm run test:fast (с формами под MOCHA_GREP/VSCODE_TEST_VERSION) всегда
  выполняются вне песочницы.
- .claude/agents/{test-writer,developer,qa-e2e}.md: строка в разделе команд —
  тестовые команды идут с отключённой песочницей, compile/lint/test:compile/
  coverage:* обычным способом.
- docs/agentic-pipeline.md: то же самое рядом с описанием быстрого цикла
  test:compile → MOCHA_GREP=… test:fast.

Заодно зафиксирован унаследованный красный на фикстурах example/ (каталог в
.gitignore, у каждого своя копия) — известное состояние окружения, не
регресс задачи; агенты стабильно путали расхождение локальной фикстуры с
поломкой своего изменения.
… developer

documenter не трогает src/** (промпт + хук restrict-write-paths.mjs), но
комментарии в коде протухают от тех же рефакторингов, что и docs/, — и ловить
это должен именно documenter. На практике reviewer нашёл четыре устаревшие
ссылки на перенесённые/переименованные функции в RepositoryFileSyncRunner.ts,
RepositoryService.ts, RepositoryCommandRunner.ts и repositoryService.test.ts;
documenter подтвердил находки, но исправить не смог и вернул оркестратору без
результата — правки в итоге сделал оркестратор вручную, уже в самом конце
прогона, не как штатный шаг.

- .claude/agents/documenter.md: новая обязанность — искать и ПЕРЕЧИСЛЯТЬ
  протухшие комментарии в затронутом src/** отдельным разделом отчёта
  (файл:строка → что устарело → чем заменить), не пытаясь их починить —
  хук всё равно откажет. Расширение прав не рассматривалось: documenter на
  более простой модели, отличить «правку комментария» от «заодно правки
  кода» хук не умеет, а снятие ограничения открывает весь src/**.
- docs/agentic-pipeline.md, шаг 6 TDD-петли: непустой список — обязательный
  микро-возврат оркестратору/developer ДО завершения задачи, а не сюрприз,
  всплывающий в самом конце. Пустой список — стадия закрыта без возврата.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant