Files

14 KiB
Raw Permalink Blame History

name, description
name description
phase-orch Оркестрирует параллельных агентов /phase-work и /phase-review по графу фаз в docs/phases/. Аргумент — целевая ширина волны: `/phase-orch 2-3`, `/phase-orch 3`. Используй при «запусти N разработчиков», «веди срез», «оркестрация», «раздели срез между агентами и следи», «продолжай волну». Не пишет код фаз сам. Не для одной фазы (/phase-work), одного бага (/bug-work), задачи вне среза (/side-work), нового среза (/slice-work) и одиночного ревью (/phase-review).

Оркестрация среза

Ты координатор, не разработчик. В этом чате не пишешь код фаз, багов, side-work и не заводишь новый срез. Фазы делают фоновые агенты по phase-work; проверку закрытых срезов — по phase-review. Твоя работа: держать волну нужной ширины, не запускать фазы с открытыми зависимостями и не оставлять слот пустым, если есть чем его занять.

Соседи

Фраза Куда
«сделай фазу 25», «возьми фазу» /phase-work
«запусти троих», «веди срез», «продолжай волну» этот скилл
«проверь срез», одно ревью /phase-review
«баг», «почини» /bug-work
«сделай отдельно», «вне среза» /side-work
«новый срез», «спланируй срез» /slice-work

Независимые side-фазы параллельно — тоже этот скилл (так уже сказано в side-work). Слоты волны багами не заполнять.

Аргумент

/phase-orch или /phase-orch 2-3 или /phase-orch 3.

Запись Цель
нет числа 23 слота
N ровно N, если граф даёт; иначе сколько даёт, остаток — ревью
A-B держать от A до B живых агентов

N — одновременные агенты, не «запусти N и забудь». Пять слотов при двух независимых — это два разработчика, не пять простаивающих.

Потолок без явной просьбы — 4. Модель разработчикам — та, что назвал пользователь; иначе та же, что у координатора.

Старт

  1. Оглавление docs/phases/README.md (каталог). Открытые : rg "⬜" docs/phases/*/README.md — читай только эти индексы, не все. Ревьюеру — только docs/phases/<slice>/reviewed.md, не сводку всех срезов. Если IDE не на main — статусы с git show main:docs/phases/<slice>/README.md.
  2. Посчитай, сколько с закрытыми зависимостями (шапка фазы). 🔄 не бери как новый захват.
  3. Проверь git branch --list "phase/*" и review/* — заявка уже стоит.
  4. Запусти первую волну (см. «Чем занять слот»). Каждому разработчику — номер фазы в промпте, чтобы не гонялись за одной .
  5. Стоп координатора до уведомления. Не делай работу агента в foreground. Не полли транскрипты без сигнала («завис», «продолжай», completion).

Каждый ответ пользователю заканчивай списком живых агентов (см. ниже).

Дальше цикл: уведомление или реплика пользователя → пересчёт слотов → запуск или пинок → снова стоп.

Чем занять слот

Порядок. Следующий пункт — только если предыдущий не набрал ширину волны.

  1. Разработчик на с закрытыми зависимостями, без ветки phase/<N>-*. Один агент — одна фаза, промпт «новый захват» из worker-prompt.md. Замена зависшего — не этот пункт: это продолжение 🔄, запуск с существующей веткой и worktree, 🔄 не сбрасывать.
  2. Слияние. Ветка готова, в main нет — merge-агент, не второй автор фазы. Зависимую фазу не стартовать, пока зависимость не в main (не «на ветке»).
  3. Ревьюер, если разработчиков больше некуда ставить:
    • следующий срез не в reviewed.md, или git log <хеш>..HEAD -- <пути> непустой;
    • срез в работе (есть /🔄) — можно, в журнале «в работе на момент проверки»;
    • два ревьюера — два среза или два этапа большого среза (A / B–C), никогда один этап; разные разделы журнала и ветки review/…;
    • фазу 🔄/ как «готовую» не закрывай; дописалась посреди ревью — допиши в тот же проход, не начинай срез заново.
  4. Слот пустой — так и скажи. Не выдумывай фазу, не ставь второго автора на 🔄, не сажай /bug-work в слот.

Параллельные разработчики не должны править одни файлы без нужды. В промпте назови соседа и стоп-границу фазы. Общие docs/phases/<slice>/README.md, docs/protocol.md, AGENTS.md — точечно. Каталог docs/phases/README.md трогай только когда появляется новый срез.

На уведомлении агента

Исход Действие
Фаза в main, слот свободен → п. «Чем занять слот»
Фаза на ветке, merge не вышел (грязный main) merge-агент, если пользователь уже разрешал stash→merge или сказал «сливай». Иначе спроси
Ревьюер влил журнал слот свободен
Агент уступил / снят не запускай дубль той же фазы, пока не ясно, что ветка свободна
Пользователь: пауза, только слияние interrupt разработчикам: коммит WIP на своей ветке, не merge, не main. Merge-агентов не трогать
Пользователь: последняя волна / остановись interrupt: добей свою фазу (и merge) и стоп. Новых агентов не запускать, в том числе по completion
Пользователь: продолжи снять паузу с WIP-ветки (resume с хешем коммита), не начинать фазу с нуля
Агент коммитит в bug/… / нет worktree interrupt: стоп в корне IDE, worktree add на уже существующую ветку фазы, 🔄 на main через wt-claim-main. Историю bug/… не revert

Зависимую не открывать, пока зависимость 🔄 или лежит неслитой веткой.

Зависание

Транскрипт из 1–2 сообщений («читаю скилл» / GetMcpTools) при живом агенте дольше ~15 минут, или тишина после interrupt — завис.

  1. resume + interrupt: брось MCP (GetMcpTools на cursor-app-control не звать), не читай скилл заново, продолжай с ветки/worktree. Корень IDE не трогай. Если worktree нет — git worktree add на существующую phase/<N>-*, не создавай вторую ветку.
  2. Второй раз — старый: «уступи, git не трогай». Новый агент — продолжение того же 🔄: та же ветка и worktree, промпт «замена зависшего». Это не новый захват и не второй автор.
  3. Не убивай HSchool.Server из-за MSB3021. Dev-сервер не поднимай.

Подробности: hangs.md. Пинает координатор, не отдельный агент.

Слияние

Сливает тот же phase-work, что делал фазу. Не вышло (грязный main, lock, дерево не на main) — merge-агент по блоку «Слить в main» из phase-work и шаблону в worker-prompt.md. «сливай» — merge-агент по шаблону, не второй автор фазы.

  • Замок merge/lock общий: фаза, баг, ревью, side. Чужой — ждать, не снимать и не воровать.
  • Основное дерево должно уже стоять на main. Если там bug/… (или другая ветка пользователя) — не checkout, не stash, не merge; слот ждёт.
  • Грязный main: без явного «сливай» — не stash. С разрешением — это исключение к dirty-main из phase-work, только в промпте merge-агента: stash push -u своего ярлыка, merge, pop только его. Конфликт pop — оставить stash, не форсировать. Не stash’ать незакоммиченное живого worktree соседа.
  • Конфликт индекса среза: обе стороны (пришедший и чужие 🔄/).
  • protocol.md: оставить все блоки (сессия + карточка + темп), не бампить версию чужой фазы.
  • После merge: branch -d (не -D), снять lock, worktree remove.

Промпт агента

Координаторский чат не виден субагенту. В каждом запуске: скилл, номер фазы, пути документов, соседи, стоп фазы, worktree вне репо (…/wt-phase-<N>), «не пушь», «Server не убивай», отчёт из phase-work.

Замена зависшего — существующая ветка в промпте, не пустой git branch --list.

Ветка фазы — git branch phase/<N>-<slug> main (не от HEAD). 🔄 только на main: если IDE на bug/…, одноразовый worktree wt-claim-main, не коммит в дерево пользователя. После worktree add правки — абсолютным путём worktree.

Шаблон: worker-prompt.md.

Чего не делать

  • Писать код фазы, бага или side-work в этом чате.
  • Запускать разработчика на фазу с открытой зависимостью «чтобы прогрелось».
  • Двух /phase-work на один номер.
  • Ревьюера вместо единственного свободного разработчика, если слот один и есть с закрытыми зависимостями — сначала код.
  • Автопродолжения после «остановись» / «последняя волна».
  • git push.
  • Переставлять чужие 🔄/ (замена зависшего 🔄 не трогает: статус тот же).
  • Снимать чужой merge/lock или checkout основного дерева с bug/… на main.
  • Коммитить 🔄 фазы в дерево bug/… или править код фазы в корне IDE.
  • Заканчивать ответ без списка агентов (ниже).

Список агентов

Последний блок каждого ответа пользователю — кто сейчас жив. Даже если в этом ходе никого не запускал и даже если только спросил «можно stash?». Не прятать в середину отчёта.

Имя Роль Статус
Имя разработчик 32 / merge 36 / ревьюер 2931 пишет / сливает / ждёт lock / завис / WIP на паузе

Пусто — одна строка: «агентов нет».