plan-orchestrate
affaan-m/ECC
Считывает документ с планом, разбивает его на этапы, формирует цепочку агентов для каждого этапа на основе каталога ECC и генерирует готовые к вставке / оркестрации настраиваемые подсказки, не запуская их.
...Расширить всеПланирование и координация
Связывает документ с планом с пользовательской командой /orchestrate, выдавая по одному готовому к вставке вызову на каждый шаг. Этот навык является исключительно генеративным — он никогда не выполняет команду /orchestrate. Пользователь вставляет каждую строку, когда будет готов.
Когда активировать
- У пользователя есть многоэтапный документ с планом (PRD, RFC, план реализации), и он хочет реализовать его с помощью
/orchestrate. - Пользователь говорит: «оркестрируй этот план», «дай мне подсказки для /orchestrate по каждому шагу», «составь цепочки для этого плана».
- Пошаговый план существует, но пользователь не хочет вручную выбирать агентов для каждого шага.
Пропустить, если:
- Работа представляет собой один разовый шаг → вызовите
/orchestrate customнапрямую. - План нечитаем или пуст. Отсутствие явной нумерации само по себе не является условием пропуска — см. крайний случай «Отсутствие четких шагов» ниже.
Входные данные
[--lang=python|typescript|go|rust|cpp|java|kotlin|flutter|auto] [--scope=all|step:|range:-] [--dry-run]
— обязательный параметр; относительный или абсолютный путь (допускается формат@docs/...).--lang— вариант языка рецензента; по умолчанию —auto(определяется по проекту).--scope— ограничивает выводимые шаги; по умолчанию —all.--dry-run— выводить только разбивку на этапы и обоснование цепочки; не выводить итоговые запросы.
Авторитетная форма /orchestrate (не отклоняться)
{ORCH_CMD} custom ",,...," ""
Где {ORCH_CMD} определяется на Фазе 0 (см. ниже). Строка команды в генерируемом выводе всегда использует одну конкретную форму — никогда обе, никогда заменяющий символ.
customпредставляет собой последовательную цепочку; HANDOFF каждого агента передаёт данные следующему.- Список агентов, разделенный запятыми. Предпочтительно без пробелов; допускается один пробел.
- Флагов
--mode/--gate/--agents=...не существует — никогда их не придумывайте. - Имена агентов берутся из каталога данного навыка. Встроенные двойные кавычки в описании задачи экранируются как
\".
Формат установки ECC и пространство имён
Две формы установки определяют префикс как для команды со слэшем, так и для каждого имени агента. Эти две формы ДОЛЖНЫ оставаться синхронизированными — по одной форме на каждый вывод, смешивать их нельзя:
Пусть обозначим домашний каталог Claude Code: ~/.claude в macOS/Linux, %USERPROFILE%\.claude в Windows. Определяйте его так, как хост-платформа определяет домашний каталог пользователя (не используйте жесткую кодировку ~).
| Форма | Обнаружение | {ORCH_CMD} |
Формат имени агента |
|---|---|---|---|
| Установка плагина (версия 1.9.0 и выше) | каталог /plugins/marketplaces/everything-claude-code/ |
/everything-claude-code:orchestrate |
everything-claude-code: |
| Устаревшая базовая установка | Вышеуказанное отсутствует; файлы агента находятся в |
/orchestrate |
|
Почему это важно: при установке через плагин агенты регистрируются как everything-claude-code:tdd-guide. Имена без префикса вынуждают систему использовать неточное сопоставление, что при параллельных вызовах периодически приводит к сбоям. В устаревшей версии формы с префиксом не регистрируются и сразу же завершаются сбоем.
Доступный каталог агентов (необходимо выбрать из перечисленных)
Общие:
планировщик— переформулировка требований, декомпозиция рисков, планирование этаповarchitect— архитектура, проектирование системы, предложения по рефакторингуtdd-guide— написание тестов → реализация → покрытие 80%+рецензент кода— общий рецензирование кодарецензент по безопасности— аудит безопасности, OWASP, утечка секретной информациирефакторинг-очиститель— мёртвый код, дубликаты, очистка классов Knipdoc-updater— документация, карта кода, READMEdocs-lookup— поиск API сторонних библиотек (Context7)e2e-runner— оркестрация сквозных тестовdatabase-reviewer— схема PostgreSQL, миграция, производительностьharness-optimizer— настройка локального агентаloop-operator— автономные циклы длительного выполненияchief-of-staff— многоканальная сортировка (редко подходит для этапов плана)
Средства устранения ошибок сборки:
build-error-resolver(общий) /cpp-build-resolver/go-build-resolver/java-build-resolver/kotlin-build-resolver/rust-build-resolver/pytorch-build-resolver
Рецензенты кода:
python-reviewer/typescript-reviewer/go-reviewer/rust-reviewer/cpp-reviewer/java-reviewer/kotlin-reviewer/flutter-reviewer
Неправильно написанное имя агента приводит к сбою /orchestrate. Перед отправкой сверьте с этим списком.
Как это работает
Этап 0 — Определение режима ECC и языка
Считать
. Если отсутствует или пусто, сообщить об этом и остановиться.Определить форму установки ECC один раз и зафиксировать её в
ECC_MODE. Алгоритм (выполнять по порядку, остановиться при первом совпадении):- Если существует
→/plugins/marketplaces/everything-claude-code/ ECC_MODE=plugin. - В противном случае, если существует
каталоги он содержит хотя бы один файл агента ECC (например,/agents/ tdd-guide.md,code-reviewer.md) →ECC_MODE=legacy. - В противном случае → по умолчанию устанавливается
ECC_MODE=legacyи в начале вывода выводится однострочное предупреждение:> Предупреждение: не удалось обнаружить установку ECC; используется форма legacy по умолчанию. Если вы используете установку плагина, отредактируйте префиксы вручную. - Если присутствуют оба маркера (смешанная установка), приоритет имеет
плагин— только пространство имён плагина разрешает имена агентов без нестрогого сопоставления.
С этого момента в каждой выводимой строке используется соответствующий префикс как в команде со слешем, так и в каждом имени агента. Никогда не выводите обе формы в одном выводе.
- Если существует
Определите
--lang. При значении«auto»выполните определение с учётом поддержки нескольких языков:- Проверка маркеров:
pyproject.toml/uv.lock/requirements.txt→ python;package.json→ typescript;go.mod→ go;Cargo.toml→ rust;CMakeLists.txtилифайлы *.cppверхнего уровня → cpp;pom.xml/build.gradle(Java) → java;build.gradle.ktsили Kotlin верхнего уровня → kotlin;pubspec.yaml→ flutter. - Разрешение ничьей при наличии нескольких языков: если совпадает более одного маркера, выбирается тот язык, исходных файлов которого больше, чем других (подсчёт производится с помощью команды
git ls-files, исключаяпапки vendor/,node_modules/,dist/,build/,.venv/, сгенерированные файлы и очевидные тестовые фикстуры). В случае равенства или если ни один язык не превышает 60 % исходных файлов, установитеlang=unknown. - Если ни один маркер не совпал → установите
lang=unknown. lang=unknownявляется индикатором — это не имя агента. Правила 4 и 5 фазы 2 преобразуют его врецензента кода/решателя ошибок сборкиво время формирования цепочки.
- Проверка маркеров:
Обнаружение подпрофиля PyTorch: если
lang=pythonи в любом изфайлов pyproject.toml/requirements.txt/uv.lockзаявлена зависимость отtorch, установитеpytorch=true. Это влияет только на выбор цепочкисборки(правило фазы 2 ниже); рецензентом по-прежнему остаётсяpython-reviewer.Нормализовать все имена агентов, объявленные в плане: если в тексте плана агенты упоминаются в форме с префиксом плагина (например,
everything-claude-code:tdd-guide), удалите префикс, чтобы получить чистое имя из каталога, прежде чем проверять или составлять цепочки. Повторное добавление префикса происходит только на этапе вывода в соответствии сECC_MODE(фаза 4). Ни в коем случае не допускайте попадания имени с предварительно добавленным префиксом в состав цепочки — в режиме плагина это приведет к двойному префиксу.
Фаза 1 — Разбиение шагов
Определите «единицы шагов» в порядке приоритета:
- Явная нумерация:
## Шаг N/### Фаза N/## N. .../ упорядоченный список верхнего уровня. - Колонка «Шаг» в таблице.
----разделенныеблоки с заголовками, начинающимися с глагола.- В противном случае каждый заголовок H2 рассматривается как один шаг.
Для каждого шага извлеките идентификатор (начиная с 1), заголовок (≤ 80 символов), цель (1–3 предложения), теги.
Этап 2 — Теги и цепочка выбора
Помечайте тегами по замыслу (допускается использование нескольких тегов; цепочка формируется из основного тега и наборных вторичных тегов):
При сопоставлении приведенных ниже триггерных слов не учитывается регистр. Поддерживаются многоязычные планы путем сопоставления корней слов на любом языке, при условии что их значение соответствует перечисленным английским триггерным словам.
| Теги | Ключевые слова | Цепочка по умолчанию |
|---|---|---|
дизайн |
архитектура, дизайн, выбрать, оценить, RFC | проектировщик, архитектор |
план |
план, разбивка, этап | планировщик |
impl |
реализовать, создать, добавить, разработать, портировать | tdd-guide, |
тест |
тест, покрытие, e2e, интеграция | tdd-guide, e2e-runner |
рефакторинг |
рефакторинг, очистка, удаление дубликатов, разделение | архитектор, refactor-cleaner, |
миграция |
миграция, обновление, переписывание, портирование | архитектор, руководство по TDD, |
база данных |
схема, миграция, индекс, SQL, Postgres, alembic, sqlmodel | рецензент баз данных, |
безопасность |
шифрование, аутентификация, секретные данные, OWASP, персональные данные | рецензент по безопасности, |
сборка |
сборка, компиляция, ошибка lint, CI | (переключается на решатель-ошибок-сборки) |
документация |
документация, readme, карта кода, журнал изменений | обновление документации |
поиск |
поиск, справочник, использование API | поиск-в-документации |
review |
обзор, аудит, проверка | |
цикл |
цикл, автономный, сторожевой таймер | оператор цикла |
Правила составления цепочек:
- Выбор основного тега: когда шаг соответствует нескольким тегам, основным считается первый в порядке таблицы (верх таблицы = наивысший приоритет); остальные являются второстепенными. Правила компоновки 2 и 3 ниже явно обрабатывают конкретные комбинации нескольких тегов; в противном случае второстепенные цепочки добавляются в порядке таблицы тегов.
impl+security→tdd-guide,.-reviewer,security-reviewer impl+db→tdd-guide,database-reviewer,.-reviewer - Удалите дубликаты из полученной цепочки (сохраните первое вхождение). Например,
review+lang=unknownдастcode-reviewer,code-reviewerпосле применения правила 5; удаление дубликатов сводит результат кcode-reviewer. преобразуется в-reviewer code-reviewer, еслиlang=unknown.преобразуется в-build-resolver build-error-resolver, когдаlang=unknown. Особый случай: если на этапе 0 установленоpytorch=true, для цепочексборкиследует использоватьpytorch-build-resolverнезависимо от.Python-build-resolverотсутствует;--lang=pythonбезpytorch=trueпреобразуется вbuild-error-resolver.- Шаги с нулевым тегом: если ни одно триггерное слово не совпадает, установите цепочку на
code-reviewerи запишите«тег не найден»; по умолчанию используется цепочка «только ревью» в соответствии с «Обоснованием цепочки». - Длина цепочки ≤ 4 после удаления дубликатов. Если превышена, удалите самый слабый тег (сначала
поискидокументация). - Не объединяйте
планировщикаиархитекторав цепочкеimpl(растрата токенов). Объединяйте их только на этапахпроектирования. - Шаги с тегами
«impl»,«refactor» или«migration»заканчиваются агентом класса «reviewer » — любым изследующих: «,-reviewer» «code-reviewer»,«security-reviewer» или«database-reviewer». Рецензент, наиболее специализированный в данной области, занимает конечную позицию (например,«impl+security»по правилу 2 заканчивается на«security-reviewer»;«impl+db»по правилу 3 заканчивается на«, поскольку-reviewer» «database-reviewer»уже контролирует этап «migration» ранее в цепочке). Этапытестированияисборкиконтролируются собственными валидаторами (соответственноe2e-runnerи build resolver) и не требуют дополнительного рецензента.
Этап 3 — Сжатие описания задачи
Каждое выданное должно:
- быть самодостаточным (первому агенту не нужно, чтобы документ с планом был открыт).
- Начинаться со
строки [Plan:.#step- ] - Включать 1–3 проверяемых критерия приемки.
- Содержать ограничение области действия (
Вне области действия: ...) только в том случае, если план объявляет его для данного шага. Перенимать дословно. Если в плане отсутствует заявление о выходе за пределы области действия, полностью опустить это предложение — не придумывать его. - Объём — 200–600 символов; одна строка; встроенные
символы«»экранируются как\; без буквальных символов новой строки.
Этап 4 — Вывод
Выведите Markdown, используя формат, определяемый ECC_MODE. Вывод использует одну форму на протяжении всего текста — каждый {ORCH_CMD} и каждое имя агента отображаются с соответствующим префиксом из этапа 0. Не выводите обе формы; не включайте инструкции «это форма плагина» / «удалить префикс» в отображаемый вывод.
Конкретные правила отображения:
{ORCH_CMD}=/everything-claude-code:orchestrateв версииplugin,/orchestrateв версииlegacy.{AGENT(name)}=everything-claude-code:в версии сплагином,вlegacy.- В столбце «Chain» таблицы обзора используется тот же формат отображения
{AGENT(name)}. - Блоки bash для каждого шага содержат только исполняемую команду. Комментарии
в формате # plugin formили# legacy formотсутствуют — формат подразумевается и является единообразным во всём выводе.
Структура вывода:
# Plan-Orchestrate Результат
**План**: ``
**Язык**: ``
**Режим ECC**: ``
**Шаги**:
**Область действия**:
## Обзор шагов
| # | Название | Теги | Цепочка |
|---|---|---|---|
| 1 | ... | impl, db | `{AGENT(tdd-guide)},{AGENT(database-reviewer)},{AGENT(python-reviewer)}` |
| ... | | | |
---
## Шаг 1 —
**Цель**: <1–3 sentences>
**Теги**:
**Обоснование цепочки**:
```bash
{ORCH_CMD} custom "{AGENT(tdd-guide)},{AGENT(database-reviewer)},{AGENT(python-reviewer)}" "[План: docs/foo.md#step-1] ; Приемка: <1–3 items>; Вне рамок: <…>"
```
Приведённые выше обозначения
{ORCH_CMD}и{AGENT(...)}описывают подстановку, которую данный навык выполняет во время выполнения. Фактически выводимый Markdown содержит разрешённые строки, а не заполнители.
Добавьте заключительный блок «Пакетное выполнение», агрегирующий команды каждого шага в порядке, чтобы пользователь мог вставить их все сразу. Пропустите блок «Пакетное выполнение» в режиме «Только обзор» (см. крайний случай «Большой план»): когда выводится только таблица обзора, нет команд по шагам, которые нужно агрегировать.
Фаза 5 — Самопроверка (запускается перед выводом)
- Каждый агент в каждой цепочке берется из каталога (после удаления префикса
everything-claude-code:, который появился в плане; см. этап 0, шаг 5). - Разрешённые
{ORCH_CMD}и все разрешённые{AGENT(...)}используют одну и ту же форму (плагинилиустаревшую) — они никогда не смешиваются в одном выводе. - В сгенерированном выводе не остаётся ни аннотаций
# plugin form/# legacy form, ни инструкций по «удалению префикса». - Нет вымышленных полей
--mode/--gate/--agents=... - Описание каждой задачи занимает одну строку, заключено в двойные кавычки, а встроенные символы
«»экранированы. - Каждое описание задачи начинается с
[Plan:и включает в себя критерии приемки (1–3 пункта). Условие#step- ] «Вне области применения:»присутствует только в том случае, если оно унаследовано из плана. - Отсутствие дубликатов агентов в любой цепочке после дедупликации на этапе 2.
- Длина цепочки ≤ 4.
- Шаги с тегами
impl/refactor/migrationзаканчиваются агентом класса рецензента (,-reviewer code-reviewer,security-reviewerилиdatabase-reviewer).testиbuildисключаются — см. правило 10 фазы 2. - Шаги с тегом «zero» генерируют
агент «code-reviewer»с обоснованием«no tag matched»; по умолчанию используется цепочка «review-only». - В таблице обзора перечислены все шаги плана, независимо от
параметра --scope. - Количество блоков с подробностями для каждого шага соответствует заданному параметру
--scope(полный план при--scope=all; один блок дляшага:n; размер диапазона дляrange:a-b). В режиме «только обзор» блоки для отдельных шагов и блок Batch не выдаются.
Крайние случаи
- Отсутствие чётких шагов: отдавайте предпочтение разделению на H2/H3; если неоднозначность сохраняется, выдавайте сообщение «не обнаружено структурированных шагов» вместе с оглавлением документа и просите пользователя подтвердить запуск по оглавлению.
- Большой план (>1500 строк): перейти в режим «только обзор» — вывести только таблицу обзора и попросить пользователя сузить область с помощью
--scopeперед повторным запуском для получения деталей. В этом режиме пропускаются блоки с подробностями по каждому шагу и блок пакетного выполнения. - Шаг слишком обширен (например, «завершить всю работу бэкенда»): не навязывать единую цепочку. Предложить разбиение на N.a и N.b и предложить вариант разбиения.
- План объявляет агентов (редко): сначала удалите любой префикс
everything-claude-code:,чтобы получить чистое имя каталога (фаза 0, шаг 5), затем проверьте его соответствие каталогу. Замените недопустимые агенты и объясните причину в разделе «Обоснование цепочки». Чистое имя снова получает префикс при выводе в соответствии сECC_MODE. - В многоязычном проекте, где
параметр `--lang=auto`не может выбрать победителя: установите`lang=unknown`; рецензент преобразуется в`code-reviewer`, а резолвер сборки — в`build-error-resolver`. Укажите резервный вариант в разделе «Обоснование цепочки».
Примеры
Пример 1 — Режим плагина, план на Python
Входные данные:
plan-orchestrate @docs/plan/example-feature.md --lang=python
Фрагмент ожидаемого вывода:
## Шаг 2 — Шифрование конфиденциальных полей UserProfile
**Цель**: Ввести тип `EncryptedString` в SQLAlchemy и зашифровать `birth_datetime` / `location` с помощью AES-GCM перед сохранением в базу данных; загрузить ключ из переменной среды.
**Теги**: impl, security, db
**Обоснование цепочки**: Путь записи, чувствительный к вопросам безопасности, поэтому цепочку закрывает `security-reviewer`; `database-reviewer` проверяет миграцию Alembic; `python-reviewer` проверяет типизацию и соответствие PEP 8.
```bash
/everything-claude-code:orchestrate custom "everything-claude-code:tdd-guide,everything-claude-code:database-reviewer,everything-claude-code:python-reviewer,everything-claude-code:security-reviewer" «[План: docs/plan/example-feature.md#step-2] Реализовать тип EncryptedString в SQLAlchemy и выполнить миграцию столбцов UserProfile.birth_datetime/location; ключ из ENV APP_DB_KEY; Приемка: успешное прохождение тестов шифрования/дешифрования в обоих направлениях; чистая работа Alembic при обновлении/понижении версии на пустой БД; отсутствие открытого текста в БД после миграции; Вне рамок: логика совместного использования профилей между арендаторами"
```
Пример 2 — Устаревший режим, тот же шаг
Если бы был обнаружен ECC_MODE=legacy, тот же шаг был бы сгенерирован в виде одной единой команды (без форм с префиксами плагинов в выводе):
/orchestrate custom "tdd-guide,database-reviewer,python-reviewer,security-reviewer" "[Plan: docs/plan/example-feature.md#step-2] ..."
Два приведенных выше примера иллюстрируют два возможных варианта вывода для двух разных сред. Один вызов навыка генерирует только один из них, от начала до конца.
Примечания
- Только для генерации. Никогда не вызывайте
/orchestrateизнутри этого навыка. - Используйте тот же язык, что и в документе плана, для описания задач (имена агентов всегда остаются на английском языке).
- Не вставляйте в вывод строки «Co-Authored-By» или эмодзи, если пользователь явно не попросит об этом.
---
name: plan-orchestrate
description: Reads a plan document, decomposes it into steps, designs a per-step agent chain from the ECC catalogue, and emits ready-to-paste /orchestrate custom prompts without executing them.
---
# Plan Orchestrate
Bridge a plan document to `/orchestrate custom` by emitting one ready-to-paste invocation per step. The skill is generative only — it never executes `/orchestrate`. The user pastes each line when ready.
## When to Activate
- User has a multi-step plan document (PRD, RFC, implementation plan) and wants to drive it through `/orchestrate`.
- User says "orchestrate this plan", "give me orchestrate prompts for each step", "compose chains for this plan".
- A step-by-step plan exists but the user does not want to manually pick agents per step.
Skip when:
- The work is one ad-hoc step → call `/orchestrate custom` directly.
- The plan is unreadable or empty. Lack of explicit numbering alone is not a skip condition — see the "No clear steps" edge case below.
## Inputs
```
<plan-doc-path> [--lang=python|typescript|go|rust|cpp|java|kotlin|flutter|auto] [--scope=all|step:<n>|range:<a>-<b>] [--dry-run]
```
- `<plan-doc-path>` — required; relative or absolute path (`@docs/...` accepted).
- `--lang` — reviewer language variant; defaults to `auto` (detected from project).
- `--scope` — limits emitted steps; defaults to `all`.
- `--dry-run` — print decomposition + chain rationale only; do not emit final prompts.
## Authoritative `/orchestrate` shape (do not deviate)
```
{ORCH_CMD} custom "<agent1>,<agent2>,...,<agentN>" "<task description>"
```
Where `{ORCH_CMD}` is determined in Phase 0 (see below). The command string in the emitted output **always uses one concrete form** — never both, never a placeholder.
- `custom` is a sequential chain; each agent's HANDOFF feeds the next.
- Comma-separated agent list. No spaces preferred; one space tolerated.
- No `--mode` / `--gate` / `--agents=...` flags exist — never invent them.
- Agent names come from the catalogue in this skill. Embedded double quotes in the task description are escaped as `\"`.
## ECC install form and namespacing
Two install forms determine the prefix on **both** the slash command and every agent name. The two MUST stay in sync — one form per output, never mixed:
Let `<claude-home>` denote the Claude Code home directory: `~/.claude` on macOS/Linux, `%USERPROFILE%\.claude` on Windows. Resolve it the way the host platform resolves the user home directory (do not hardcode `~`).
| Form | Detection | `{ORCH_CMD}` | Agent name format |
|---|---|---|---|
| Plugin install (1.9.0+) | `<claude-home>/plugins/marketplaces/everything-claude-code/` exists | `/everything-claude-code:orchestrate` | `everything-claude-code:<name>` |
| Legacy bare install | Above absent; agent files under `<claude-home>/agents/` | `/orchestrate` | `<name>` |
Why this matters: under the plugin install, agents register as `everything-claude-code:tdd-guide`. Bare names force fuzzy matching, which fails intermittently under parallel calls. Under legacy, the prefixed forms are not registered and fail outright.
## Available agent catalogue (must pick from these)
General:
- `planner` — requirement restatement, risk decomposition, step planning
- `architect` — architecture, system design, refactor proposals
- `tdd-guide` — write tests → implement → 80%+ coverage
- `code-reviewer` — generic code review
- `security-reviewer` — security audit, OWASP, secret leakage
- `refactor-cleaner` — dead code, duplicates, knip-class cleanup
- `doc-updater` — documentation, codemap, README
- `docs-lookup` — third-party library API lookups (Context7)
- `e2e-runner` — end-to-end test orchestration
- `database-reviewer` — PostgreSQL schema, migration, performance
- `harness-optimizer` — local agent harness configuration
- `loop-operator` — long-running autonomous loops
- `chief-of-staff` — multi-channel triage (rarely a fit for plan steps)
Build error resolvers:
- `build-error-resolver` (generic) / `cpp-build-resolver` / `go-build-resolver` / `java-build-resolver` / `kotlin-build-resolver` / `rust-build-resolver` / `pytorch-build-resolver`
Code reviewers:
- `python-reviewer` / `typescript-reviewer` / `go-reviewer` / `rust-reviewer` / `cpp-reviewer` / `java-reviewer` / `kotlin-reviewer` / `flutter-reviewer`
A misspelled agent name fails `/orchestrate`. Cross-check against this list before emitting.
## How It Works
### Phase 0 — Detect ECC mode + language
1. Read `<plan-doc-path>`. If missing or empty, report and stop.
2. Detect ECC install form once and freeze it into `ECC_MODE`. Algorithm (run in order, stop at the first match):
1. If `<claude-home>/plugins/marketplaces/everything-claude-code/` exists → `ECC_MODE=plugin`.
2. Else if `<claude-home>/agents/` exists and contains at least one ECC agent file (e.g. `tdd-guide.md`, `code-reviewer.md`) → `ECC_MODE=legacy`.
3. Else → default to `ECC_MODE=legacy` and emit a one-line warning at the top of the output: `> Warning: could not detect ECC install; defaulting to legacy form. If you use the plugin install, edit the prefixes manually.`
4. If both markers exist (mixed install), `plugin` wins — the plugin namespace is the only one that resolves agent names without fuzzy matching.
From this point on, every emitted line uses the matching prefix on **both** the slash command and every agent name. **Never emit both forms in the same output.**
3. Resolve `--lang`. When `auto`, run a polyglot-aware detection:
- Probe markers: `pyproject.toml` / `uv.lock` / `requirements.txt` → python; `package.json` → typescript; `go.mod` → go; `Cargo.toml` → rust; `CMakeLists.txt` or top-level `*.cpp` → cpp; `pom.xml` / `build.gradle` (Java) → java; `build.gradle.kts` or top-level Kotlin → kotlin; `pubspec.yaml` → flutter.
- **Polyglot tie-break**: if more than one marker matches, pick the language whose source files outnumber the others (count via `git ls-files`, excluding `vendor/`, `node_modules/`, `dist/`, `build/`, `.venv/`, generated files, and obvious test fixtures). On a tie or when no language exceeds 60% of source files, set `lang=unknown`.
- No marker matched → set `lang=unknown`.
- `lang=unknown` is a sentinel — it is **not** an agent name. Phase 2 rules 4 and 5 turn it into `code-reviewer` / `build-error-resolver` at chain composition time.
4. Detect a **PyTorch sub-profile**: when `lang=python` and any of `pyproject.toml` / `requirements.txt` / `uv.lock` declares a dependency on `torch`, set `pytorch=true`. This only affects `build` chain selection (Phase 2 rule below); the reviewer remains `python-reviewer`.
5. **Normalize any agent names declared in the plan**: if the plan text references agents by their plugin-prefixed form (e.g. `everything-claude-code:tdd-guide`), strip the prefix to get the bare catalogue name before validating or composing chains. Re-prefixing happens only at output time per `ECC_MODE` (Phase 4). Never let a pre-prefixed name flow into chain composition — it would double-prefix in plugin mode.
### Phase 1 — Decompose steps
Identify "step units" in priority order:
1. Explicit numbering: `## Step N` / `### Phase N` / `## N. ...` / top-level ordered list.
2. A "Step" column in a table.
3. `---`-separated blocks with verb-led headings.
4. Otherwise treat each H2 as one step.
Per step extract `id` (1-based), `title` (≤ 80 chars), `intent` (1–3 sentences), `tags`.
### Phase 2 — Tag and pick chain
Tag by intent (multi-tag allowed; chain built from primary + stacked secondaries):
Trigger words below are matched case-insensitively. Multilingual plans are supported by matching the word stems in any language as long as the meaning aligns with the listed English trigger words.
| Tag | Trigger words | Default chain |
|---|---|---|
| `design` | architecture, design, choose, evaluate, RFC | `planner,architect` |
| `plan` | plan, breakdown, milestone | `planner` |
| `impl` | implement, build, add, create, port | `tdd-guide,<lang>-reviewer` |
| `test` | test, coverage, e2e, integration | `tdd-guide,e2e-runner` |
| `refactor` | refactor, cleanup, dedupe, split | `architect,refactor-cleaner,<lang>-reviewer` |
| `migration` | migrate, upgrade, rewrite, port | `architect,tdd-guide,<lang>-reviewer` |
| `db` | schema, migration, index, SQL, Postgres, alembic, sqlmodel | `database-reviewer,<lang>-reviewer` |
| `security` | encrypt, auth, secret, OWASP, PII | `security-reviewer,<lang>-reviewer` |
| `build` | build, compile, lint failure, CI | `<lang>-build-resolver` (falls back to `build-error-resolver`) |
| `docs` | docs, readme, codemap, changelog | `doc-updater` |
| `lookup` | lookup, reference, API usage | `docs-lookup` |
| `review` | review, audit, verify | `<lang>-reviewer,code-reviewer` |
| `loop` | loop, autonomous, watchdog | `loop-operator` |
Chain composition rules:
1. **Primary tag selection**: when a step matches multiple tags, the **first one in table order** (top of the table = highest priority) is the primary; the rest are secondaries. Composition rules 2 and 3 below handle specific multi-tag combinations explicitly; otherwise, append secondary chains in tag table order.
2. `impl` + `security` → `tdd-guide,<lang>-reviewer,security-reviewer`.
3. `impl` + `db` → `tdd-guide,database-reviewer,<lang>-reviewer`.
4. **Deduplicate** the resulting chain (preserve first occurrence). E.g. `review` + `lang=unknown` would yield `code-reviewer,code-reviewer` after rule 5; deduplication collapses it to `code-reviewer`.
5. `<lang>-reviewer` resolves to `code-reviewer` when `lang=unknown`.
6. `<lang>-build-resolver` resolves to `build-error-resolver` when `lang=unknown`. **Special case**: if Phase 0 set `pytorch=true`, use `pytorch-build-resolver` for `build` chains regardless of `<lang>`. There is no `python-build-resolver`; `--lang=python` without `pytorch=true` resolves to `build-error-resolver`.
7. **Zero-tag steps**: if no trigger word matches, set chain to `code-reviewer` and write `no tag matched; default review-only chain` under "Chain rationale".
8. Chain length ≤ 4 after deduplication. If exceeded, drop weakest tag (`lookup` and `docs` first).
9. Do not pair `planner` and `architect` in an `impl` chain (token waste). Pair them only on `design` steps.
10. Steps tagged `impl`, `refactor`, or `migration` end with a **reviewer-class** agent — any of `<lang>-reviewer`, `code-reviewer`, `security-reviewer`, or `database-reviewer`. The most domain-specific reviewer wins the tail position (e.g. rule 2's `impl+security` ends with `security-reviewer`; rule 3's `impl+db` ends with `<lang>-reviewer` because `database-reviewer` already gates the migration earlier in the chain). `test` and `build` steps are gated by their own validators (`e2e-runner` and the build resolver respectively) and do not require an additional reviewer.
### Phase 3 — Compress task description
Each emitted `<task description>` must:
- Be self-contained (the first agent does not need the plan document open).
- Start with `[Plan: <path>#step-<id>]`.
- Include 1–3 verifiable Acceptance criteria.
- Include a Scope guard (`Out of scope: ...`) **only if the plan declares one for this step**. Inherit verbatim. If the plan has no out-of-scope statement, omit the clause entirely — do not invent one.
- Be 200–600 characters; one line; embedded `"` escaped as `\"`; no literal newlines.
### Phase 4 — Output
Emit Markdown using **the form determined by `ECC_MODE`**. The output uses one form throughout — every `{ORCH_CMD}` and every agent name is rendered with the matching prefix from Phase 0. **Do not emit both forms; do not include "this is plugin form" / "strip the prefix" instructions in the rendered output.**
Concrete rendering rules:
- `{ORCH_CMD}` = `/everything-claude-code:orchestrate` under `plugin`, `/orchestrate` under `legacy`.
- `{AGENT(name)}` = `everything-claude-code:<name>` under `plugin`, `<name>` under `legacy`.
- The overview-table "Chain" column uses the same `{AGENT(name)}` rendering.
- Per-step bash blocks contain only the runnable command. **No `# plugin form` or `# legacy form` comments** — the form is implicit and uniform across the whole output.
Output structure:
````markdown
# Plan-Orchestrate Result
**Plan**: `<path>`
**Lang**: `<detected-or-given>`
**ECC mode**: `<plugin | legacy>`
**Steps**: <N>
**Scope**: <all | step:n | range:a-b>
## Steps overview
| # | Title | Tags | Chain |
|---|---|---|---|
| 1 | ... | impl, db | `{AGENT(tdd-guide)},{AGENT(database-reviewer)},{AGENT(python-reviewer)}` |
| ... | | | |
---
## Step 1 — <title>
**Intent**: <1–3 sentences>
**Tags**: <a, b>
**Chain rationale**: <why this chain; which agent closes the loop>
```bash
{ORCH_CMD} custom "{AGENT(tdd-guide)},{AGENT(database-reviewer)},{AGENT(python-reviewer)}" "[Plan: docs/foo.md#step-1] <compressed task description>; Acceptance: <1–3 items>; Out of scope: <…>"
```
````
> The `{ORCH_CMD}` and `{AGENT(...)}` notation above describes the substitution this skill performs at runtime. The actual emitted Markdown contains the resolved strings, never the placeholders.
Append a final "Batch execution" block aggregating every step's command in order so the user can paste them all at once. **Skip the Batch block in overview-only mode** (see "Large plan" edge case): when only the overview table is being emitted, there are no per-step commands to aggregate.
### Phase 5 — Self-check (run before emitting)
- [ ] Every agent in every chain comes from the catalogue (after stripping any `everything-claude-code:` prefix that appeared in the plan; see Phase 0 step 5).
- [ ] Resolved `{ORCH_CMD}` and every resolved `{AGENT(...)}` use the **same** form (`plugin` or `legacy`) — never mixed in one output.
- [ ] No `# plugin form` / `# legacy form` annotations and no "strip the prefix" instructions remain in the rendered output.
- [ ] No invented `--mode` / `--gate` / `--agents=...` fields.
- [ ] Each task description is single-line, double-quoted, with embedded `"` escaped.
- [ ] Each task description begins with `[Plan: <path>#step-<id>]` and includes Acceptance (1–3 items). The `Out of scope:` clause is present only when inherited from the plan.
- [ ] No duplicate agent in any chain after Phase 2 dedup.
- [ ] Chain length ≤ 4.
- [ ] Steps tagged `impl`/`refactor`/`migration` end with a reviewer-class agent (`<lang>-reviewer`, `code-reviewer`, `security-reviewer`, or `database-reviewer`). `test` and `build` are exempt — see Phase 2 rule 10.
- [ ] Zero-tag steps emit `code-reviewer` with the rationale `no tag matched; default review-only chain`.
- [ ] Overview table lists every step in the plan, regardless of `--scope`.
- [ ] Per-step detail block count matches the resolved `--scope` (full plan when `--scope=all`; one block for `step:n`; range size for `range:a-b`). In overview-only mode, no per-step blocks and no Batch block are emitted.
## Edge cases
- **No clear steps**: prefer H2/H3 splitting; if still ambiguous, report "no structured steps detected" with the document outline and ask the user to confirm running by outline.
- **Large plan (>1500 lines)**: enter **overview-only mode** — emit only the overview table and ask the user to narrow with `--scope` before re-running for details. In this mode, skip per-step detail blocks and skip the Batch execution block.
- **Step too broad** (e.g. "complete all backend work"): do not force a single chain. Suggest splitting into N.a and N.b and propose a split.
- **Plan declares agents** (rare): first **strip any `everything-claude-code:` prefix** to get the bare catalogue name (Phase 0 step 5), then validate against the catalogue. Replace invalid agents and explain under "Chain rationale". The bare name is re-prefixed at output time per `ECC_MODE`.
- **Polyglot project where `--lang=auto` cannot pick a winner**: set `lang=unknown`; reviewer resolves to `code-reviewer` and build resolver to `build-error-resolver`. Mention the fallback under "Chain rationale".
## Examples
### Example 1 — Plugin mode, Python plan
Input:
```
plan-orchestrate @docs/plan/example-feature.md --lang=python
```
Excerpt of expected output:
````markdown
## Step 2 — Encrypt sensitive UserProfile fields
**Intent**: Introduce an `EncryptedString` SQLAlchemy type and AES-GCM encrypt `birth_datetime` / `location` before persistence; load the key from an environment variable.
**Tags**: impl, security, db
**Chain rationale**: Security-sensitive write path, so `security-reviewer` closes the chain; `database-reviewer` validates the alembic migration; `python-reviewer` covers typing and PEP 8.
```bash
/everything-claude-code:orchestrate custom "everything-claude-code:tdd-guide,everything-claude-code:database-reviewer,everything-claude-code:python-reviewer,everything-claude-code:security-reviewer" "[Plan: docs/plan/example-feature.md#step-2] Implement EncryptedString SQLAlchemy type and migrate UserProfile.birth_datetime/location columns; key from ENV APP_DB_KEY; Acceptance: encrypt/decrypt roundtrip tests pass; alembic upgrade/downgrade clean on empty DB; no plaintext in DB after migrate; Out of scope: cross-tenant profile sharing logic"
```
````
### Example 2 — Legacy mode, same step
If `ECC_MODE=legacy` were detected, the same step would be emitted as a single uniform command (no plugin-prefixed forms anywhere in the output):
```bash
/orchestrate custom "tdd-guide,database-reviewer,python-reviewer,security-reviewer" "[Plan: docs/plan/example-feature.md#step-2] ..."
```
The two examples above illustrate **the two possible outputs** for two different environments. A single skill invocation produces only one of them, end to end.
## Notes
- Generative only. Never invoke `/orchestrate` from inside this skill.
- Match the language of the plan document for task descriptions (agent names always remain English).
- Do not insert "Co-Authored-By" lines or emoji in the output unless the user explicitly asks.
Все файлы
1 файловУстановить plan-orchestrate
Скачайте файлы навыков и распакуйте их в каталог .claude/skills/.
Скачать ZIPКлонируйте репозиторий и скопируйте файлы навыка в свой проект.
git clone https://github.com/affaan-m/ECC/tree/main/skills/plan-orchestrate # Copy SKILL.md to your .claude/skills/ directory
Копировать





Дом
