Turns an agreed-upon design into an executable task list for subagents or sequential execution.
Input
Argument $ARGUMENTS — one of:
- Path to design.md:
openspec/changes/my-feature/design.md - Feature name:
my-feature(searchesopenspec/changes/my-feature/design.md) - Nothing — searches for the single active change in
openspec/changes/
Output
openspec/changes/<feature>/tasks.md — an executable task checklist.
Process
Step 1 — Loading context
rlm_route_context(query="project architecture patterns 1C metadata")
Read:
openspec/changes/<feature>/design.md— the agreed-upon designopenspec/project.md— if present, project conventions- Related XML/BSL files from design.md via Grep/Glob
Step 2 — Decomposition into tasks
Decomposition rules:
- Each task = 2-5 minutes of subagent work
- One task — one atomic operation (create object / write module / add form)
- Dependencies are explicit: "Task 3 requires completion of Task 1"
- Order: first metadata → then BSL → then forms → then integrations → validation
Typical task categories for 1C:
| Category | Task examples |
|---|---|
| Metadata | Create catalog, add attribute, create register |
| Modules | Write CommonModule, ObjectModule, ManagerModule |
| Forms | Create form, add elements, write form module |
| Roles | Create role, configure rights |
| Subsystems | Add objects to subsystem |
| Integrations | Event subscriptions, registration in BSP |
| Validation | Check syntax, update DB |
Step 3 — Writing tasks.md
Save to openspec/changes/<feature>/tasks.md.
Header format
# <Название фичи> — План реализации
> **Для субагента:** используй `/subagent-dev openspec/changes/<feature>/tasks.md`
> для выполнения задач по одной с ревью между ними.
**Цель:** <одно предложение — что строим>
**Дизайн:** `openspec/changes/<feature>/design.md`
**Порядок выполнения:** последовательно, если не указано иное
---
Format of each task
## Задача N: <Глагол + существительное>
**Статус:** `[ ]`
**Зависимости:** Задача X (или «нет»)
**Что делаем:**
<1-3 предложения — суть задачи>
**Файлы:**
- Создать: `src/Catalogs/МойСправочник/`
- Изменить: `src/CommonModules/МойМодуль/Module.bsl`
- Скилл: `/meta-compile` или `/form-compile` и т.д.
**Шаги:**
1. <конкретное действие — не «написать код», а «добавить реквизит Статус типа Перечисление.СтатусыЗаказа»>
2. <следующий шаг>
3. ...
**Проверка:**
- [ ] <критерий 1 — конкретный и проверяемый>
- [ ] <критерий 2>
- [ ] Синтаксис BSL проверен через `1c-syntax-checker`
**Коммит:** `feat: <краткое описание>`
Step 4 — Final task: validation
The last task in the plan is always:
## Задача N: Финальная валидация
**Статус:** `[ ]`
**Зависимости:** все предыдущие задачи
**Шаги:**
1. Запустить `/cf-validate` или `/epf-validate` (по типу объекта)
2. Если нужно обновление БД: `/db-update`
4. Проверить критерии приёмки из design.md
**Проверка:**
- [ ] Конфигурация валидна
- [ ] Все критерии из design.md выполнены
Step 5 — Proposing an execution mode
After saving tasks.md, propose two options:
План сохранён: openspec/changes/<feature>/tasks.md
Задач: N
Как выполнять?
1. /subagent-dev openspec/changes/<feature>/tasks.md
— Субагенты на каждую задачу + ревью между задачами
— Лучше для сложных доработок (3+ задачи, несколько модулей)
2. /openspec-apply <feature>
— Последовательное выполнение в текущей сессии
— Лучше для простых задач (1-3 задачи, один объект)
Do not run automatically — the user chooses themselves.
Plan quality rules
- Exact paths — not
src/modules/, аsrc/CommonModules/УправлениеЗаказами/Module.bsl - Exact skills — specify which skill to use for each task
- Verifiable criteria — not "the code works", but "the form opens, the list is populated"
- YAGNI — do not plan something that is not in design.md
- No unnecessary commits — one commit per task, not per each file
- BSL always through checker — every task with BSL code includes syntax checking
Anti-patterns
- ❌ The task "Implement the entire module" — too large, split it
- ❌ The check "verify that everything works" — unverifiable, make it specific
- ❌ Tasks without specifying files
- ❌ Skip the final validation task
- ❌ Start execution without waiting for the user's choice