Пресет opus-pipeline — одна названная задача целиком уходит Opus на medium, он её делает и сам коммитит; ни ТЗ, ни критики, ни независимой приёмки нет, основной контекст только кладёт текст задачи файлом, носит вопросы автору и ведёт журнал. Вызывай, когда работа понятная и делается в один заход — точечная правка по описанию, широкая механическая замена по слою, доделка с ясным условием готовности, — и конвейер из четырёх ролей на ней не окупается: внешних денег ноль против доллара, минут шес...
Installs into .claude/skills of the current project.
Are you the author of Opus Pipeline?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/dmitry-fomin-opus-pipeline)
---
name: opus-pipeline
description: "Пресет opus-pipeline — одна названная задача целиком уходит Opus на medium, он её делает и сам коммитит; ни ТЗ, ни критики, ни независимой приёмки нет, основной контекст только кладёт текст задачи файлом, носит вопросы автору и ведёт журнал. Вызывай, когда работа понятная и делается в один заход — точечная правка по описанию, широкая механическая замена по слою, доделка с ясным условием готовности, — и конвейер из четырёх ролей на ней не окупается: внешних денег ноль против доллара, минут шесть против двадцати. Не вызывай, когда задачу надо проектировать, когда условие готовности неочевидно или когда результат обязан посмотреть кто-то кроме исполнителя: там /feature-pipeline:high-pipeline. Запускай только по явному имени: маршрутом карточки Listik (launch_route или метка process:<ключ>) или когда человек назвал пресет; по сходству задачи сам не подхватывай."
argument-hint: "[описание задачи или путь к файлу с ней]"
license: MIT
---
# Конвейер opus-pipeline
Самый короткий пресет плагина: одна роль, один вызов, один коммит. Внешних денег $0.00,
квоты 2.19 усл. ед., около 365 с — против $2.01 и 1608 с у low-pipeline из четырёх
ролей. Это и есть повод: **конвейер из дешёвых моделей проигрывает одной средней модели
и по деньгам, и по времени**, поэтому на задачи, которые модель делает за один заход,
конвейер ставить незачем. Обоснование — в [ROLES.md](../../references/ROLES.md), раздел
«Пресет 5 существует, потому что конвейер не всегда окупается».
**Прочитай [pipeline-core.md](../../references/pipeline-core.md) целиком до первого
действия** — но применяй оттуда не всё, список ниже. Карточка — скил [`listik:listik`](../../../listik/skills/listik/SKILL.md) (`plugins/listik/skills/listik/SKILL.md`). Скил запускается только по явному имени — маршрутом карточки Listik (`launch_route` или метка
`process:opus-pipeline`) или человеком (`/feature-pipeline:opus-pipeline`); по сходству задачи сам его не подхватывай. Все команды — из корня основного дерева.
## Чем платим за скорость
**Независимой приёмки здесь нет.** В остальных пресетах порцию принимает модель, которая
кода не писала, и коммит — её. Здесь смотрит результат только тот, кто его сделал, и
зелёный отчёт с недоделкой поймать нечем: он просто уедет в историю.
Отсюда жёсткое правило класса задачи: **сюда идёт только понятная работа, которая делается
в один проход и текст которой сам себе служит и требованиями, и чек-листом.** Если по тексту
задачи нельзя прогнать пункты и сказать «закрыто / не закрыто» — это не задача для этого
пресета, потому что проверять её будет нечем и некому.
Появилось сомнение, исполнитель просит решения, которого в задаче нет, или задача оказалась
крупнее, чем выглядела — **стоп, и задача уходит в `/feature-pipeline:high-pipeline`**,
строкой в журнал. Это ровно правило «класс меняется только вверх» из `pipeline-core.md`:
сделанное отдаётся полному конвейеру материалом, а не в коммит.
## Что берётся из `pipeline-core.md`, а что нет
Берётся:
- роль оркестратора и жёсткие правила — **кроме** «порцию коммитит приёмка»: здесь коммитит
исполнитель, и `pipeline-core.md` это исключение называет прямо; в основном контексте
по-прежнему нет ни строки кода и ни одного `git commit` задачи;
- протокол вопросов целиком, вместе с возобновлением через `SendMessage`;
- шаг 0: пути (`docs/specs`, `docs/specs/steps`), класс задачи,
журнал, проверка дерева;
- треки со сведением и уборкой — если автор назвал несколько независимых частей;
- журнал и его строки.
Не берётся:
- цикл порций 1 → 2 → 3 → 4: этапов 1, 2 и 4 здесь не существует;
- пакет диффа для приёмки: приёмки нет, собирать дамп некому и незачем;
- пределы на порцию — **кроме строки про `не смог`**: `M ≤ 2` — повтор его формулировкой,
`M = 3` — остановка и доклад автору. Полного круга здесь нет: он переписывает ТЗ, а ТЗ
в этом пресете не существует. Счётчика `K` тоже нет — красных вердиктов не бывает.
## Роли
| Этап | Кто | Модель и усилие | Первая строка отчёта |
| --- | --- | --- | --- |
| реализация и коммит | субагент `feature-pipeline:pipeline-implementer-solo` | **`model: opus` в вызове** (frontmatter — Sonnet, effort medium) → Opus medium | `готово` с хешем, `не смог` или `вопрос` |
`model: opus` обязателен в каждом запуске и повторе: без него задачу сделает Sonnet, и
пресет перестанет быть тем, за что выбран. Усилие в вызове не правится — `medium` стоит
во frontmatter агента, нужен другой уровень — это другой пресет. Внешних каналов у скила
нет, поэтому предполётной проверки тоже нет.
**Стоп-фактор.** Любая роль недоступна (предполётная проверка не прошла, харнесс не установлен или не залогинен, запуск упал, ответила не та модель) — конвейер стоит: журнал `стоп: <роль> — <харнесс> недоступен: <причина>`, `listik needs-owner <id> "<вопрос>"` и тот же вопрос в чат, и больше ничего. Запасного исполнителя нет: роль не подменяется ни другим харнессом, ни другой моделью, ни локальным субагентом, в headless тоже (`pipeline-core.md`, «Стоп-фактор»). Повтор того же харнесса и той же модели в той же роли — не подмена.
## Шаг 0 — конфиг, класс задачи, журнал, дерево
По `pipeline-core.md`, с двумя уточнениями:
- **класс задачи.** Первая строка таблицы («названная правка в одном-двух файлах») остаётся
как есть: такое правишь сам, здесь, без субагента. Всё, что попадает в строки «спроектируй»,
«как лучше», «новый шаг спеки», в этот пресет не идёт — там `high-pipeline`. Остаётся
середина: понятная работа в один проход. `$ARGUMENTS` пусто — спроси, что берём.
- **журнал** — при карточке `<steps>/<id>.journal.md`, без карточки —
`<steps>/single-<ГГГГ-ММ-ДД>-<слаг>.journal.md` (`<имя>` ниже — `<id>` или слаг, по тому же
правилу), первой строкой `задача <имя>: старт, пресет opus-pipeline`. Пресет в строке
старта обязателен: после `/clear` по журналу должно быть видно, что приёмки у этой работы
не было.
## Файл задачи
Текст автора кладётся **файлом мимо твоего контекста**, как adhoc-файл шага 0: при карточке
`<steps>/<id>.md`, без карточки — `<steps>/single-<ГГГГ-ММ-ДД>-<слаг>.md`, два раздела —
- «Границы правки» — то, что автор назвал; не назвал — «только названные файлы и слой,
остальное не трогать»;
- «Требования» — текст автора **дословно**, как есть, и **последним разделом**: в тексте
автора бывают свои заголовки `##`, и раздел до конца файла ими не обрезается.
Своих требований не добавляешь и текст не редактируешь: у автора он же служит исполнителю
чек-листом, а твоя правка формулировки — это тихая подмена требования. Автор дал путь
к готовому файлу с задачей — бери его, второй файл не сочиняй.
Перед созданием — `ls <steps>/<имя>.*`: файл с этим именем уже есть, а журнал этой же работы
(`<имя>.journal.md`) о нём молчит или не описывает его как свою работу — **стоп и вопрос
автору**; сам не перезаписывает, не переименовывает и не берёт другое имя.
## Реализация и коммит
`Agent` `feature-pipeline:pipeline-implementer-solo`, **`model: opus`**. В задаче —
**один путь** к файлу задачи и больше ничего; в треке первой строкой ещё абсолютный путь
дерева трека («код правь в `<путь>`, каждую команду начинай с перехода туда»). При карточке
к ним добавляется строка `Listik, карточка <id>` (id буквально) — первой строкой, в треке второй,
сразу после пути дерева; без карточки (`Listik: карточки нет`, раздел `## Listik` ядра) её нет.
Сессия выдаёт карточку себе (`listik stage <id> --to s3-impl --holder claude …`) и держит
страховочные `claim`/`heartbeat`, а `claim`/`journal` исполнитель пишет сам по скилу `listik:listik`. Формат отчёта,
запрет на выход за границы, правила коммита агент знает сам — не пересказывай.
Разбор отчёта:
- **`готово` с хешем коммита** — в журнал `задача <имя>: готово (коммит <hash7>)`; открытые
вопросы и расхождения, если раздел непустой, покажи автору одной репликой. Затем проверь,
что коммит действительно есть: `git log --oneline -1` (в треке — `git -C <дерево> log
--oneline -1`). Хеша в отчёте нет или лога не видно — это не готово: вопрос автору, задача
не закрывается.
- **`не смог`** — коммита нет, правка осталась в рабочем дереве. Повтор **его формулировкой**,
не твоим пересказом, в пределах бюджета (`M ≤ 2`); `M = 3` — остановка и доклад автору.
Повтор после `не смог` — всегда новый субагент.
- **`вопрос`** — протокол вопросов из `pipeline-core.md`: дословно автору через
`AskUserQuestion`, ответ дословно тому же исполнителю через `SendMessage` по его agent id.
Продолжить нельзя (`SendMessage` отказал, agent id потерян после `/clear`) — откат: новый запуск,
ответы автора из журнала строками в текст задачи.
- **отчёт без ожидаемой первой строки** (ошибка API, лимит ходов, агент остановлен) — сперва
`git log --oneline -1`: коммит есть — исполнитель успел, а коммитит он только полностью
сделанное, значит задача закрыта; нет — строка `стоп` в журнал и вопрос автору.
Бумаги — файл задачи и журнал — коммитишь ты отдельным коммитом **явным списком путей**,
когда задача закрыта, и тогда же пушишь, если автор этого просил.
## Грабли пресета
| Симптом | Причина | Что делать |
| --- | --- | --- |
| Задачу сделал Sonnet вместо Opus | забыт `model: opus` | у агента во frontmatter `sonnet`; `model: opus` в каждом запуске и повторе |
| Исполнитель сказал «готово», коммита нет | прогон оборвался после правки | `git log --oneline -1` после каждого `готово`; нет коммита — вопрос автору, задача не закрыта |
| Исполнитель встал на несуществующем файле | задача отдана текстом, а не путём | файл задачи из раздела выше, путь строкой, ровно один |
| В коммите половина задачи | текст задачи не давал условия готовности | это признак не того пресета: в `high-pipeline`, а не второй заход здесь |
| Задача разрослась по ходу | класс определён по описанию, а не по работе | стоп, `high-pipeline`, сделанное — материалом этапу 1, строка в журнал |
| Ответил на вопрос исполнителя сам | показалось очевидным | на всё отвечает автор; свой вариант — строкой «решение» в журнале после его ответа |
| Собрал дамп диффа и стал искать судью | применён раздел ядра, которого у пресета нет | приёмки здесь нет по построению; нужна — это другой пресет |