From dm-cc-assistant
Autonomous parallel execution of the active epic's subtasks. Reads plan-E-XXX.md, runs waves of execution-agents in worktrees, merges results between waves via release-manager, runs in-execute review by code-reviewer, aggregates report, then engages user in a 4-step final dialog. Pre-conditions — active epic in In Progress with .task/plan-E-XXX.md ready.
How this skill is triggered — by the user, by Claude, or both
Slash command
/dm-cc-assistant:executeThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Это skill вызывается командой `/dm-cc-assistant:execute`. Он оркестрирует параллельное исполнение подзадач активного эпика через `execution-agent`'ов, мерджит результаты через `release-manager` (merge mode), агрегирует через `release-manager` (aggregation mode), запускает `code-reviewer` (in-execute mode), и ведёт 4-шаговый финальный диалог.
Это skill вызывается командой /dm-cc-assistant:execute. Он оркестрирует параллельное исполнение подзадач активного эпика через execution-agent'ов, мерджит результаты через release-manager (merge mode), агрегирует через release-manager (aggregation mode), запускает code-reviewer (in-execute mode), и ведёт 4-шаговый финальный диалог.
«Автономно от старта до финала, диалог только в начале и в конце». Pre-execute confirmation (один раз) → автономный прогон всех волн → агрегированный отчёт + диалог.
Ты orchestrator — спаунишь subagent'ов через Task tool и управляешь pipeline'ом. Сам код не пишешь, не мёрджишь, не делаешь review.
test -f ./CLAUDE.md && test -f ./OVERVIEW.md && test -f ./ARCHITECTURE.md && echo DOCS_OK || echo DOCS_MISSING
test -f .task/backlog.md && echo BACKLOG_OK || echo BACKLOG_MISSING
test -f .task/.execute-active && echo EXECUTE_ACTIVE || echo NO_EXECUTE
DOCS_MISSING — отказ: «Нет основных docs. Запусти /dm-cc-assistant:project-init сначала.»
BACKLOG_MISSING — recovery: «Нет .task/backlog.md. Запусти /dm-cc-assistant:backlog для создания.» Завершай.
EXECUTE_ACTIVE — отказ: «Уже идёт /execute в другой сессии (есть .task/.execute-active). Завершите его или удалите marker вручную.» Завершай.
awk '/^## In Progress$/{f=1; next} /^## /{f=0} f' .task/backlog.md | grep '^### E-'
| Найдено | Действие |
|---|---|
0 эпиков | Recovery: «Активного эпика нет. Запусти /dm-cc-assistant:backlog (Pick from Todo).» Завершай. |
1 эпик | OK, извлеки E-ID активного эпика |
>1 | Recovery: «Сломанное состояние — больше одного In Progress эпика. Зайди в /dm-cc-assistant:backlog (Unselect active epic).» Завершай. |
test -f .task/plan-E-XXX.md && echo PLAN_OK || echo PLAN_MISSING
PLAN_MISSING — recovery: «Эпик E-XXX в работе, но плана нет. Запусти /dm-cc-assistant:plan сначала.» Завершай.
Проверь наличие worktree'ев и report'ов:
git worktree list
ls .task/report-E-XXX.*.md 2>/dev/null
ls .task/research-E-XXX.*.md 2>/dev/null
Для каждой подзадачи E-XXX.Y из плана сопоставь с состоянием:
| Состояние | Default action |
|---|---|
| Worktree + commits + report Status=Done + smoke OK | Skip — пометить Done в текущем плане, не перезапускать |
| Worktree + commits + report Status=Partial | Запросить: Resume / Restart |
| Worktree + commits + НЕТ отчёта | Запросить: Resume / Restart |
| Worktree + commits + report Status=Failed | Запросить: Restart / re-open /plan / Skip |
| Только ветка без worktree | Recreate worktree (Resume) |
| Worktree без коммитов | Clean safe (просто заново начнёт) |
| Uncommitted changes в worktree | Hard stop — ручной разбор; завершать /execute |
Если есть подзадачи с состоянием Resume / Restart — спрашивай по каждой:
E-XXX.Y — обнаружено: <состояние>. Действие? (Resume / Restart / Skip / Manual)
STOP. Жди ответ по каждой.
Если выбран Resume для подзадачи — спауни resume-analyzer через Task tool (один вызов на подзадачу). Он напишет .task/resume-E-XXX.Y.md.
Покажи пользователю summary recommendation от resume-analyzer:
E-XXX.Y resume analysis: Confidence: <high/medium/low>, Action: <Resume safe / Restart recommended / ...>
Принять? (yes / переключить на Restart)
STOP.
Если feat/E-XXX ещё не существует:
git checkout main
git pull --ff-only # опционально, если хочешь синхронизироваться
git checkout -b feat/E-XXX
Если существует — git checkout feat/E-XXX.
Прочитай .task/plan-E-XXX.md. Покажи пользователю краткий summary того, что будет запущено:
Активный эпик: E-XXX [Priority] (Type)
Базовая ветка: feat/E-XXX
Волны (M):
- 🌊 Волна 1 (параллельно): E-XXX.1, E-XXX.2 — типы: impl, impl
- 🌊 Волна 2 (после волны 1): E-XXX.3 — тип: test
Контекст для каждой подзадачи:
- E-XXX.1: spec из plan §2, файлы [...], DoD [...], доп. контекст [...]
- E-XXX.2: ...
- E-XXX.3: ...
Что произойдёт:
- Создам / переиспользую worktree'ы под каждую подзадачу
- Запущу подзадачи волнами параллельно через Task tool
- Между волнами — release-manager (merge mode) объединит ветки в feat/E-XXX
- После всех волн — code-reviewer (in-execute) + release-manager (aggregation)
- Финальный диалог по результатам
Подтверди старт: [y] go / [a] abort
STOP. Жди явный ответ.
.execute-active markerecho "E-XXX started $(date '+%Y-%m-%d %H:%M')" > .task/.execute-active
Подставь реальный E-ID активного эпика вместо E-XXX. $(date ...) подставит актуальный timestamp при выполнении — не записывай буквально YYYY-MM-DD HH:MM.
Этот marker сообщает SessionStart hook'у и другим командам, что идёт /execute.
Для каждой волны W (от 1 до M):
Прежде чем запускать волну, проверь зависимости:
Для каждой подзадачи в волне W:
Done (Failed / Skipped / Conflict-blocked / Cancelled) → пометь подзадачу Skipped с reason blocked by E-XXX.ZЕсли все подзадачи волны W помечены Skipped — пропусти волну, иди к W+1.
В одном сообщении запусти все активные подзадачи волны через Task tool с subagent_type: execution-agent:
[Task tool call для E-XXX.A]
[Task tool call для E-XXX.B]
[Task tool call для E-XXX.C]
Prompt для каждого execution-agent (см. agents/execution-agent.md «Receive prompt»):
Эпик: E-XXX
Подзадача: E-XXX.A
Тип: <type>
Title: <title>
Worktree: .worktrees/E-XXX.A
Ветка: feat/E-XXX.A-<slug>
Базовая ветка: feat/E-XXX
Plan: .task/plan-E-XXX.md (читай §2 для своей подзадачи)
Спецификация подзадачи:
- Что делает: <из плана>
- Файлы: <из плана>
- DoD: <из плана>
- Зависит от: <из плана>
Декларируемый контекст:
- <files>
[Если Resume:]
Resume context: .task/resume-E-XXX.A.md — читай его перед стартом.
Согласно своим инструкциям: setup worktree, прочитай план + spec + контекст, реализуй,
коммить, прогоняй smoke check, пиши .task/report-E-XXX.A.md (5 секций), верни summary.
Wait all returns. Соберём статусы:
E-XXX.A → Done | Failed | Partial
E-XXX.B → ...
Обнови inline-статусы подзадач в .task/backlog.md (сразу после волны, до merge'а — Done / Failed / Partial).
Один Task tool call:
subagent_type: release-manager
prompt:
Mode: merge
Эпик: E-XXX
Волна: W
Подзадачи в волне:
- E-XXX.A (Status: Done) — branch feat/E-XXX.A-<slug>
- E-XXX.B (Status: Failed) — branch feat/E-XXX.B-<slug>
- E-XXX.C (Status: Done) — branch feat/E-XXX.C-<slug>
Согласно своим инструкциям: на feat/E-XXX замёрджи Done подзадачи, резолви конфликты по 3-уровневой схеме (combine → auto-pick → user dialog flag), cleanup worktree'ев Done, обнови inline-статусы. Verни summary.
Wait return.
Если в plan-E-XXX.md для этой волны есть post-wave smoke command (например, общий build) — запускай. Зафиксируй результат, не блокируй следующую волну.
Cascade на downstream Failed / Conflict-blocked подзадач выполняется в следующей волне через шаг 7.1 — отдельная запись здесь не нужна (дублирование).
Если ещё есть волны — продолжай. Иначе — выход из цикла.
После всех волн:
subagent_type: code-reviewer
prompt:
Mode: in-execute
Эпик: E-XXX
Согласно своим инструкциям: пройди cross-subtask quality review на feat/E-XXX vs main, пиши .task/review-E-XXX.md (severity-tagged findings).
Wait return.
subagent_type: release-manager
prompt:
Mode: aggregation
Эпик: E-XXX
Согласно своим инструкциям: собери .task/report-E-XXX.md из per-subtask отчётов + merge logs + code-review findings.
Wait return.
Прочитай .task/report-E-XXX.md. Сгенерируй живой narrative summary с фиксированной структурой:
# Epic E-XXX — отчёт
## Сделано
<connected текст что закрыто, что в feat/E-XXX>
## Не сделано
<failed / skipped / blocked, конкретно>
## Что это значит
<implication для проекта: что не работает, чего не хватает>
## Требуются действия
<главная развилка с рекомендацией и обоснованием>
## Иначе
<последствия каждого пути: accept partial / defer>
## Дополнительно
<обзор decisions / open questions / follow-ups / review findings — счётчики>
## Что обсуждаем?
<меню — см. step 2>
Тон conversational, скелет фиксированный. Длина — по содержанию, без искусственных лимитов.
Покажи меню в порядке убывания важности:
1. Obstacles (X failed + Y skipped)
2. Conflicts (N high-stakes blocked)
3. Review findings (Critical / High / Medium / Low)
4. Open questions (N)
5. Decisions (M)
6. Follow-ups (K)
7. Show full report
8. Skip, go to final action
Стрелка ← рекомендую начать здесь ставится туда, где реально требует внимания: Obstacles → Conflicts → Review Crit/High → Open → ничего.
STOP. Жди выбор.
Каждая категория имеет свои действия:
Для каждой failed подзадачи:
/dm-cc-assistant:plan (Iterate phase 2) для перепланированияCancelled, worktree удаляетсяSTOP по каждой.
Для каждого finding'а:
STOP по каждому Critical / High.
Для каждого finding'а:
STOP.
Для каждого:
## Open Questions backlog'а/dm-cc-assistant:plan (Iterate phase 5) или вручную добавить в backlogSTOP.
Для каждой:
STOP.
Для каждого Conflict-blocked:
Cancelled, worktree удаляетсяSTOP.
Для каждого:
STOP.
[r] /release — текущее состояние feat/E-XXX готово к релизу
[i] Iterate — re-plan failed/blocked, переход в /plan phase 2
[p] Partial /execute — перезапустить только failed/skipped без re-plan
[d] Defer — оставить эпик в In Progress, выйти
[a] Abort epic — откатить feat/E-XXX, эпик → Cancelled
Нельзя выйти без явного финального действия — переспрашивай.
[r] /releaseПросто советуй пользователю запустить /dm-cc-assistant:release. Не вызывай chain'ом.
[i] IterateСоветуй /dm-cc-assistant:plan (он сам определит что эпик уже планирован и предложит Iterate phase X).
[p] Partial /executeСнова перезапустить /execute. Pre-execute analysis детектит, что часть подзадач Done — пропустит их, запустит только failed/skipped (с подтверждением пользователя на каждой).
Это новый запуск skill'а — пользователь делает руками /dm-cc-assistant:execute. Ты только советуешь.
[d] DeferЭпик остаётся In Progress. Выйти. Удалить marker (см. шаг 11).
[a] Abort epicПодтверждение:
Удалить ВСЕ worktree'ы эпика + ветка feat/E-XXX + пометить эпик как Cancelled? (yes / no)
STOP. Если yes:
# Удалить все worktrees связанные с эпиком
for wt in $(git worktree list | grep "feat/E-XXX" | awk '{print $1}'); do
git worktree remove --force "$wt"
done
# Удалить ветки
git checkout main
for branch in $(git branch | grep "feat/E-XXX"); do
git branch -D "$branch"
done
Обновить backlog: ## In Progress E-XXX → ## Cancelled с датой.
Edit log в backlog.md:
> - YYYY-MM-DD · v0.3.0 · execute (orchestrator) · E-XXX → Cancelled (Abort epic)
rm .task/.execute-active
Финальный summary:
/executeзавершён. Действие: <r/i/p/d/a>. Дальнейший шаг: <соответствующая подсказка>.
.task/.execute-active всегда удаляется в конце (даже при Abort, defer, ошибке)./execute детектит — recovery dialog.| Ошибка | Действие |
|---|---|
| Execution-agent вернул Status=Failed | Cascade на зависимых, продолжаем волны |
| Execution-agent вернул некорректный summary | Перечитать его report-E-XXX.Y.md, доверять файлу |
| Release-manager (merge) → hard stop (uncommitted changes) | Прерывать /execute, сообщить пользователю, оставить marker (для повторного запуска ручного разбора) |
| Code-reviewer не пишет файл | Считать «нет findings», продолжить aggregation |
| Release-manager (aggregation) не пишет файл | Hard stop — aggregation обязательна для финального диалога |
/execute если есть .task/.execute-active..execute-active до завершения финального действия./release, /plan, /backlog — только советуй пользователю.npx claudepluginhub dmatryus/dm-cc-assistant --plugin dm-cc-assistantProvides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.