13 KiB
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.
| Запись | Цель |
|---|---|
| нет числа | 2–3 слота |
N |
ровно N, если граф даёт; иначе сколько даёт, остаток — ревью |
A-B |
держать от A до B живых агентов |
N — одновременные агенты, не «запусти N и забудь». Пять слотов при двух независимых ⬜ — это два разработчика, не пять простаивающих.
Потолок без явной просьбы — 4. Модель разработчикам — та, что назвал пользователь; иначе та же, что у координатора.
Старт
- Прочитай
docs/phases/README.mdиdocs/phases/reviewed.md. Если IDE не наmain— статусы сgit show main:docs/phases/README.md, не с рабочей копии (там может быть чужой 🔄 из бага). - Посчитай, сколько ⬜ с закрытыми зависимостями (шапка фазы). 🔄 не бери как новый захват.
- Проверь
git branch --list "phase/*"иreview/*— заявка уже стоит. - Запусти первую волну (см. «Чем занять слот»). Каждому разработчику — номер фазы в промпте, чтобы не гонялись за одной ⬜.
- Стоп координатора до уведомления. Не делай работу агента в foreground. Не полли транскрипты без сигнала («завис», «продолжай», completion).
Каждый ответ пользователю заканчивай списком живых агентов (см. ниже).
Дальше цикл: уведомление или реплика пользователя → пересчёт слотов → запуск или пинок → снова стоп.
Чем занять слот
Порядок. Следующий пункт — только если предыдущий не набрал ширину волны.
- Разработчик на ⬜ с закрытыми зависимостями, без ветки
phase/<N>-*. Один агент — одна фаза, промпт «новый захват» изworker-prompt.md. Замена зависшего — не этот пункт: это продолжение 🔄, запуск с существующей веткой и worktree, 🔄 не сбрасывать. - Слияние. Ветка готова, в
mainнет — merge-агент, не второй автор фазы. Зависимую фазу не стартовать, пока зависимость не вmain(не «на ветке»). - Ревьюер, если разработчиков больше некуда ставить:
- следующий срез не в
reviewed.md, илиgit log <хеш>..HEAD -- <пути>непустой; - срез в работе (есть ⬜/🔄) — можно, в журнале «в работе на момент проверки»;
- два ревьюера — два среза или два этапа большого среза (A / B–C),
никогда один этап; разные разделы журнала и ветки
review/…; - фазу 🔄/⬜ как «готовую» не закрывай; дописалась посреди ревью — допиши в тот же проход, не начинай срез заново.
- следующий срез не в
- Слот пустой — так и скажи. Не выдумывай фазу, не ставь второго автора на 🔄,
не сажай
/bug-workв слот.
Параллельные разработчики не должны править одни файлы без нужды. В промпте
назови соседа и стоп-границу фазы. Общие docs/phases/README.md,
docs/protocol.md, AGENTS.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 — завис.
resume+interrupt: брось MCP (GetMcpToolsнаcursor-app-controlне звать), не читай скилл заново, продолжай с ветки/worktree. Корень IDE не трогай. Если worktree нет —git worktree addна существующуюphase/<N>-*, не создавай вторую ветку.- Второй раз — старый: «уступи, git не трогай». Новый агент — продолжение того же 🔄: та же ветка и worktree, промпт «замена зависшего». Это не новый захват ⬜ и не второй автор.
- Не убивай
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 соседа. - Конфликт README: обе стороны (пришедший ✅ и чужие 🔄/✅).
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 / ревьюер 29–31 | пишет / сливает / ждёт lock / завис / WIP на паузе |
Пусто — одна строка: «агентов нет».