Skip to content
Back to skills

Nano Pipeline

BSecurity

Конвейер реализации на пресете nano-pipeline — короткая задача без ТЗ и критики (при пустом write_scope карточки исполнитель сам сперва возвращает границы правки — ход 1 на чтении, потом реализует продолжением сессии): код пишет devin (SWE-2, усилие high) фоновой задачей, принимает и коммитит GLM 5.3 Flash агентным судьёй в pi. Вызывай, когда задача укладывается в один прогон, резать её на порции не нужно, а перед коммитом нужна независимая приёмка. Запускай только по явному имени: маршрутом ...

  • 3 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 7, 2026
ai-agentsvuegitapi

Works with

  • api

Security analysis

B75/100
  • criticalPipes output to a shell interpreter

Pro shows the line behind each finding and how to fix it

Scanned October 7, 2026

npx -y skills add dmitry-fomin/listik --skill nano-pipeline --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Nano Pipeline?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Nano Pipeline
[![Security: B — Skills Directory](https://www.skillsdirectory.com/api/skills/dmitry-fomin-nano-pipeline/badge)](https://www.skillsdirectory.com/skills/dmitry-fomin-nano-pipeline)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: nano-pipeline
description: "Конвейер реализации на пресете nano-pipeline — короткая задача без ТЗ и критики (при пустом write_scope карточки исполнитель сам сперва возвращает границы правки — ход 1 на чтении, потом реализует продолжением сессии): код пишет devin (SWE-2, усилие high) фоновой задачей, принимает и коммитит GLM 5.3 Flash агентным судьёй в pi. Вызывай, когда задача укладывается в один прогон, резать её на порции не нужно, а перед коммитом нужна независимая приёмка. Запускай только по явному имени: маршрутом карточки Listik (launch_route или метка process:<ключ>) или когда человек назвал пресет; по сходству задачи сам не подхватывай."
argument-hint: "[описание задачи или путь к adhoc-файлу]"
license: MIT
---

# Конвейер nano-pipeline

**Прочитай [pipeline-core.md](../../references/pipeline-core.md) целиком до первого действия.** Ниже — только
то, чем этот пресет отличается.

## Роли

| Этап | Кто | Модель и усилие | Первая строка отчёта |
| --- | --- | --- | --- |
| 3. Реализация | скил `devin:devin-delegate`, фоновой задачей, с `--write` | `--thinking high` (SWE-2 high) | `готово`, `не смог` или `вопрос` |
| 4. Приёмка и коммит | скил `pi:pi-delegate`, фоновой задачей, с `--write` | `--channel glm` (GLM 5.3 Flash, канал по умолчанию) | `зелёный` с хешем или `красный` |

Основной контекст код не пишет и не коммитит: только маршрутизирует, носит вопросы автору и ведёт журнал.
Внешних денег ≈ $0.25–0.5 на задачу, квота подписки — 0.

Почему так (расчёт `references/presets-2026-09-24.md`): судья GLM 5.3 Flash вместо прежнего Grok 4.7 xhigh —
галлюцинаций меньше (Hal .28) и TB4 выше (.328 против .258 у Grok), а стоит в 15 раз дешевле; код — SWE-2 high
вместо прежнего GPT-6 Astra high в Codex. SWE-2 Artificial Analysis не оценивает — сверять по доле зелёных
вердиктов в журнале.

**Стоп-фактор.** Любая роль недоступна (предполётная проверка не прошла, харнесс не установлен или не залогинен, запуск упал, ответила не та модель) — конвейер стоит: журнал `стоп: <роль> — <харнесс> недоступен: <причина>`, `listik needs-owner <id> "<вопрос>"` и тот же вопрос в чат, и больше ничего. Запасного исполнителя нет: роль не подменяется ни другим харнессом, ни другой моделью, ни локальным субагентом, в headless тоже (`pipeline-core.md`, «Стоп-фактор»). Повтор того же харнесса и той же модели в той же роли — не подмена.

## Нужные скилы

Стоп, если нет хотя бы одного — раздел «Внешние скилы» `pipeline-core.md`. Скрипты из кэша не зови.

- [`devin:devin-delegate`](../../../devin/skills/devin-delegate/SKILL.md) (`plugins/devin/skills/devin-delegate/SKILL.md`) — ход 1 и этап 3 (`--thinking high` обязателен; `--write` — только на этапе 3); [`devin:devin-check`](../../../devin/skills/devin-check/SKILL.md) — готовность; [`devin:devin-jobs`](../../../devin/skills/devin-jobs/SKILL.md) — ход и забор; [`devin:devin-runtime`](../../../devin/skills/devin-runtime/SKILL.md) — контракт и продолжение сессии;
- [`pi:pi-delegate`](../../../pi/skills/pi-delegate/SKILL.md) (`plugins/pi/skills/pi-delegate/SKILL.md`) — этап 4
  (`--write` обязателен, канал `glm`);
  [`pi:pi-check`](../../../pi/skills/pi-check/SKILL.md) — готовность; [`pi:pi-jobs`](../../../pi/skills/pi-jobs/SKILL.md) —
  ход и забор; [`pi:pi-runtime`](../../../pi/skills/pi-runtime/SKILL.md) — контракт (`run`/`result`/`status`, таймауты);
- `xlow-pipeline` — образец задания этапа 3 (флаги, текст задачи, продолжение сессии);
- [`listik:listik`](../../../listik/skills/listik/SKILL.md) (`plugins/listik/skills/listik/SKILL.md`) — карточка, этапы, журнал, вопросы автору.

## Правила

1. **Ветка.** Пресет — adhoc-ветка без ТЗ: этапов 1–2 нет, класс задачи всегда «широкая механическая правка»,
   даже при правке в одном файле. Код сам не правишь и не коммитишь никогда.
2. **Когда не подходит — стоп и вопрос автору** с предложением `low-pipeline` или `high-pipeline`: эпик, задача
   на несколько порций, просьба «спроектируй», несколько независимых частей. Эпик проверяй по типу карточки
   и веди, как у `xlow-pipeline`: вопрос автору по разделу «Listik» ядра, этапы не начинай.
3. **Шаг 0** — по ядру. Текст автора дословно в adhoc-файл с разделами «Требования» и «Границы правки», порция
   одна (`a`), своих требований не добавляй. Карточку Listik веди по ветке ядра «Пресет без писателя ТЗ», как у
   `xlow-pipeline`: карточка одна, путь к ТЗ и к чек-листу — сам adhoc-файл, ссылку на критику не ставь.
4. **Каналы.** Запуск скила — согласие автора на отправку требований и кода порции в devin и pi **и на коммит
   порции судьёй pi при зелёном** — это исключение из запрета коммитов в `pi:pi-delegate` названо там же; в задании
   судье оно пишется явно (правило 9). Все вызовы
   обоих харнессов — из корня основного дерева.
5. **Предполётная проверка до этапа 3** — оба канала: devin через `devin:devin-check` (не готов — чинить по выводу
   этого скила, сам не обходи), pi через `pi:pi-check` — должен ответить канал `glm` (судья). Усилие исполнителя
   зашито пресетом — `--thinking high`, другое не выбирай.
   Скилов нет — стоп по ядру. Любой канал недоступен — **стоп-фактор**
   (раздел «Стоп-фактор» `pipeline-core.md`): журнал `стоп: <роль> — <харнесс> недоступен: <причина>`,
   `needs-owner <id> "<вопрос>"` и тот же вопрос в чат. Запасного исполнителя нет: devin не подменяется ни pi,
   ни другой моделью, ни локальным субагентом, в headless тоже; без судьи пресет не запускай.
6. **Ход 1 — границы правки (условно).** Писателя ТЗ у пресета нет, поэтому задачу делает одна нейронка в
   **два хода одной сессии devin**: ход 1 — только чтение, исполнитель возвращает текстом ответа раздел
   «Границы правки» со списком путей и план; ход 2 — это этап 3, продолжение той же сессии с правом записи.
   Список путей из хода 1 уходит в `write_scope` карточки — по нему рой раскладывает задачи по волнам.

   **Когда идёт.** Ход 1 идёт, только если выполнены **оба** условия: у карточки пуст `write_scope`
   (`listik show <id> --json` — поле `write_scope` равно `[]`) **и** автор в тексте задачи не назвал ни одного
   пути. «Назвал путь» — в тексте автора есть хотя бы один токен, похожий на путь: содержит `/` без пробелов
   (`listik/store.py`, `web/src/`, `docs/`) **или** оканчивается расширением файла (`.py .md .ts .vue .mjs .js
   .json .sh .toml .yaml .yml .css .html .txt`) — регекс
   `(^|\s)[\w.@-]+(/[\w.@-]*)+|\b[\w-]+\.(py|md|ts|vue|mjs|js|json|sh|toml|yaml|yml|css|html|txt)\b`.
   Существование пути в дереве **не** проверяется: названный автором новый файл — тоже «назван». Без карточки —
   только второе условие. Иначе ход 1 пропускается: в adhoc-файл идут границы автора (по ядру), в журнал —
   `порция a: ход 1 пропущен — write_scope задан` или `порция a: ход 1 пропущен — пути названы автором`, и этап 3
   идёт одним ходом.

   **Вызов.** Вызови `devin:devin-delegate` с `--permission read` (режим `auto`, только читающие инструменты;
   `--write` не давать), `--thinking high`, `--cwd $WT`, `--label "$BASE a: границы"`, `--session "$BASE-a"`,
   фоновой задачей; путь к adhoc-файлу — строкой. Имя сессии — это и есть её id: сразу после запуска в
   журнал `порция a: devin сессия <id>`. Задание, которое уходит в скил:

   ```
   Ход 1, только чтение: ничего не правь, команд не запускай. Прочитай файл <путь adhoc-файла подставь буквально> целиком и код, который задача затронет. Первая строка ответа — `готово` или `вопрос`. После неё ровно два раздела. «## Границы правки» — не длиннее 30 строк: строка «Файлы:» и список путей от корня репозитория в бэктиках, по одному в строке — файлы и каталоги, которые придётся править (существующие или новые; каталог — не шире одного модуля, корень репозитория и `.` не годятся); строка «Не трогать:» и список того, чего касаться нельзя (соседние модули, тесты, конфиги с секретами — .env, *.key, *.pem, credentials.json всегда здесь). «## План» — шаги реализации, не длиннее 40 строк: для правки текста три-четыре строки, для незнакомой подсистемы — сколько нужно в этом пределе. Путь, которого в дереве нет и который ты не собираешься создавать, — в список не клади. `вопрос` — только если без ответа автора список путей получается разным: список вопросов, у каждого варианты, один помечен словом «предпочитаю».
   ```

   Listik-хвост в ход 1 не добавляется: карточку на ход 1 исполнителю не выдают — её держит оркестратор
   (`--holder claude`), и heartbeat во время фонового хода 1 шлёт **оркестратор** по разделу «Всегда» ядра с note
   `<id>, порция a, ход 1: границы`. Ожидание и забор — `devin:devin-jobs`.

   **Ответ `готово`.** Сначала критерий годности (проверяет оркестратор до записи): путь годен, если он
   существует в `$WT` **или** существует его родительский каталог (новый файл в существующем каталоге). Список
   «Файлы:» пуст, или в нём есть `.`, `/`, `$WT`, корень репозитория, или хотя бы один негодный путь — ответ
   считается `не смог` (повтор по правилу ниже с добавкой «предыдущий список отклонён: <причина>»). Годный ответ:
   раздел «Границы правки» adhoc-файла переписываешь списками «Файлы:»/«Не трогать:» из ответа (текст автора в
   «Требованиях» не трогается) и дописываешь после него раздел «План» из ответа; при карточке —
   `listik set <id> write_scope=<пути из «Файлы:» через запятую> --actor agent:claude --harness claude`, пути
   берутся только из этого списка, не из «Не трогать:»; в журнал `порция a: ход 1 — границы: <N> путей,
   сессия <id>` и та же строка в карточку `comment -k journal`.

   **Ответ `вопрос`** — протокол вопросов ядра (в headless — дефолт «предпочитаю»); ответ автора уходит
   продолжением `resume --session "<действующая сессия>" --permission read --background` (через
   `devin:devin-delegate`, синтаксис — `devin:devin-runtime`; ход 1 ещё не закончен).

   **`не смог`, `failed`, таймаут, пустой ответ** — один повтор новым `run` тем же вызовом (`--permission read`)
   с новым именем сессии (`--session "$BASE-a-2"`: одно имя — одна сессия, занятое имя даёт exit 2).
   Второй сбой — стоп и вопрос автору: идти одним ходом с границами автора / остановиться; в headless — дефолт
   «одним ходом», `needs-owner` с дефолтной строкой, в журнал `порция a: ход 1 не удался дважды — одним ходом`;
   этап 3 тогда идёт как без хода 1.

   **Действующая сессия.** Каждый новый `run` (повтор хода 1, откат хода 2, этап 3 без хода 1) идёт с новым
   именем сессии, и сразу после запуска в журнал идёт та же строка `порция a: devin сессия <id>` с новым именем;
   действующая сессия — последняя такая строка. Продолжение (`resume --session`) даёт новый job-id той же
   сессии — его в журнал строкой `порция a: devin <job-id>`; следующий `resume` идёт по имени сессии.
7. **Этап 3.** devin не запустился — стоп-фактор (правило 5): `стоп: исполнитель — devin недоступен: <причина>`, `needs-owner`, вопрос в чат; подмены нет. **Развилка по ходу 1.** Был ход 1 (успешный) — этап 3 это **ход 2**: через `devin:devin-delegate`
   продолжение с правом записи — `resume --session "<действующая сессия>" --permission write --background --label
   "$BASE a"` (синтаксис — `devin:devin-runtime`; каталог и усилие `resume` наследует от исходного прогона, а
   `--permission write` перебивает унаследованное чтение) с заданием этапа 3 ниже. `resume` вернул exit 2 или другую
   ошибку — откат на новый `run --write --thinking high --session "<новое имя>"` с тем же заданием, в журнал
   `порция a: откат — новая сессия <id>` и `порция a: devin сессия <id>`. Хода 1 не было (пропущен или не удался
   дважды) — как ниже, одним ходом, строка `порция a: devin сессия <id>` пишется здесь.

   Переведи карточку на реализацию и выдай её devin (`listik stage <P> --to s3-impl --holder devin --actor
   agent:claude --harness claude`; `claim` за devin не пишешь — он сам). Вызови `devin:devin-delegate` с `--write`,
   `--thinking high`, `--cwd $WT`, `--label "$BASE a"`, `--session "$BASE-a"` (имя уже заняли неудачные прогоны
   хода 1 — `$BASE-a-3`) — как этап 3 `xlow-pipeline`. Жди и
   забирай ответ через `devin:devin-jobs`; job id из ответа скила — в журнал строкой `порция a: devin <job-id>`.

   Задание devin:
   - путь к adhoc-файлу, а не его текст; раздел «Границы правки» — жёсткое условие;
   - «Раздел „Границы правки“ — это список путей: правки вне „Файлы:“ — выход за границы; понадобился путь вне
     списка — верни `вопрос`, а не правь»;
   - прогнать проверки проекта: тесты, линтер, типы;
   - не коммитить, не делать git add, stash, checkout и reset, не трогать .env, ключи и credentials, не править
     тесты под реализацию и не глушить гарды;
   - при неясности — сделать то, что от ответа не зависит, и вернуть первой строкой `вопрос` со списком
     вопросов, у каждого варианты, один помечен «предпочитаю»;
   - отчёт не длиннее 30 строк: первая строка `готово`, `не смог` или `вопрос`, дальше сделано по пунктам
     требований, не сделано с причиной, открытые вопросы, изменённые файлы, проверки; хоть одно требование
     не выполнено — первая строка `не смог`;
   - Listik: первым действием сам берёт карточку, по ходу шлёт heartbeat каждые 10–15 минут, перед ответом пишет
     итог в журнал карточки; при `не смог` и `вопрос` отпускает карточку.

   **Сессия devin и повтор** — как в `xlow-pipeline`: имя сессии сразу идёт в журнал строкой
   `порция <X>: devin сессия <id>`; повтор после `вопрос` **продолжает ту же сессию**, ответы автора
   уходят в неё дословно: `resume --session "<имя>" --background --label "…"` по `devin:devin-runtime`.
   `resume` вернул exit 2 (сессии нет) или другую ошибку — **откат на новый прогон** через `devin:devin-delegate`
   с тем же заданием, дополненным строкой «правки прошлого захода уже в дереве, не откатывай их, работай поверх»
   и ответами автора дословно. После красного приёмки — то же продолжение сессии с красными пунктами дословно;
   новый прогон и здесь только откат. Правило одно на все пресеты и задано ядром («Шаг 0 — конфиг»), отдельного
   ключа настройки у него нет.
8. **Отчёт devin:** `вопрос` — протокол вопросов ядра (продолжение той же сессии, откат на новый прогон — только
   если продолжение не удалось); `не смог`, сбой, таймаут или пустой ответ — по таблице пределов ядра как
   `не смог`, с хвостом лога задачи; `готово` — на этап 4.
9. **Этап 4.** Собери пакет диффа по ядру; пакет пуст — судью не запускай, стоп и строка в журнал. Выдай карточку
   судье на приёмку: `listik stage <P> --to s4-judge --holder pi --actor agent:claude --harness claude`; `claim`
   за судью не пишешь — он сам. Вызови скил `pi:pi-delegate` с `--write` (судья коммитит при зелёном),
   `--channel glm` (канал по умолчанию, передаётся явно), `--cwd` корень основного дерева, `--timeout 10800`,
   `--session "$BASE-a-judge-<R>"`, `--label "$BASE a: приёмка <R>"`, фоновой задачей (`run --background`).
   Job id — сразу в журнал строкой `порция a: pi судья <job-id>`. Судья не запустился или ответил не `glm` — стоп-фактор (`стоп: судья — pi недоступен: <причина>`, `needs-owner`, вопрос в чат), подмены нет. Жди финального статуса по `pi:pi-runtime`
   (`result <job-id> --wait`, верить `actual_status`: done, failed или cancelled), не дольше трёх часов; предел
   исчерпан — стоп и вопрос автору. Ход задачи — `pi:pi-jobs`. Подсказок «это не дефект» судье не давай.

   Задание судье (pi, GLM 5.3 Flash):
   - пути к adhoc-файлу — он же порция и чек-лист — и к пакету диффа; при повторном заходе ещё дамп прошлого
     захода и указание смотреть разницу;
   - кода не правит;
   - строкой в начале задания: «Запрет pi на коммиты здесь снят автором для одного действия — коммита этой
     порции при зелёном вердикте; всё остальное из красных линий pi в силе»;
   - каждый пункт требований и границ проверяет по факту с наблюдаемым исходом, прогоняет проверки проекта и
     ищет срезанные углы: тесты под реализацию, ослабленные ассерты, скипы, отключённые правила линтера,
     заглушенные гарды, выход за границы правки, правки не по теме;
   - негативный контроль (сценарий, на котором проверка обязана отказать) из adhoc-файла прогоняет и отказ
     показывает выводом команды; отказа нет — красный пункт; порция добавляет или чинит проверку (барьер,
     `claim`, шлюз, гард, валидацию, отказ API), а негативного контроля в файле нет — строит сценарий сам и
     прогоняет;
   - каждое число, SHA и цитату в вердикте и отчёте даёт копией из вывода команды этого захода: хеш — из
     `git rev-parse --short HEAD` после коммита, счётчики — из вывода раннера тестов, место в файле — `path:line`;
     числа не из вывода в вердикт не идут; числа и хеши исполнителя сверяет со своей командой, на веру не берёт;
   - вердикт первой строкой: `зелёный` — сам коммитит порцию явными путями, не добавляет всё дерево, не коммитит
     бумаги шага и журналы, не делает push, amend, reset, stash, rebase, не обходит хуки, не трогает секреты;
     `git rm` не в `git add`: `did not match any files`, не стейджит ничего — обрывается вся команда, а не один путь;
     `git commit -m … -- <все пути>`; `git show --stat --name-status`; неполный: второй коммит поверх, нельзя amend;
     `красный` — без коммита, нумерованный список дефектов с тем, что доделать, находка про выход за границы
     правки начинается с `ГРАНИЦЫ:`;
   - отчёт не длиннее 40 строк: первая строка `зелёный` с хешем коммита или `красный`, дальше пункты с исходом,
     срезанные углы, проверки, отложенное; вторая строка вердикта — оба хеша через запятую, последний итоговый;
   - Listik: первым действием сам берёт карточку (`listik claim <P> --holder pi --actor agent:pi --harness pi`),
     пишет в неё вердикт (`listik comment <P> "…" -k verdict --actor agent:pi --harness pi`) с первой строкой
     ровно `VERDICT: PASS` или `VERDICT: FAIL` и дальше хешем или красными пунктами; при красном отпускает
     карточку (`listik release <P> --holder pi --actor agent:pi --harness pi`);
   - секреты не читает: `.env`, `*.key`, `*.pem`, `credentials.json` — запрет в тексте задания обязателен, pi
     открывает файлы сам.
10. **Вердикт:**
   - `зелёный` — проверь, что коммит есть, запиши строку в журнал с хешем, закрой карточку с хешем в причине.
   - `красный` — по таблице пределов ядра. Первая находка `ГРАНИЦЫ:` на порции — стоп и вопрос автору по
     «Нарушение границ»; при ответе «границы неточны» автор правит раздел «Границы правки» adhoc-файла. Прочие
     красные — на этап 3 с пунктами дословно продолжением той же сессии, новый прогон — только откат
     (правило ядра, «Шаг 0 — конфиг»); третий красный — стоп и доклад автору.
   - Сбой, 402, пустой ответ или исчерпанный предел ожидания — вердикта нет: строка в журнал, вопрос автору,
     карточку не закрывай.

## Грабли

| Симптом | Что делать |
| --- | --- |
| В сессии нет `devin:devin-delegate` | стоп и вопрос автору: плагин devin не установлен или сессия стартовала до установки; скрипт из кэша не зови |
| devin отвечает долго, десятки минут | ждать фоном, не перезапускать и не снимать задачу; ход смотреть через `devin:devin-jobs` |
| Код написан на усилии `medium` | забыт `--thinking high` в новом прогоне: перезапустить с `--thinking high` |
| devin вернул разбор вместо правки, дерево чистое | перезапустить с правом записи; прошлый ответ отчётом не считать |
| Статус или ответ харнесса не находят задачу | звать статус и забор из каталога запуска |
| Ожидание судьи закончилось сразу | `result --wait` вышел по своему пределу (exit 5): ждать дальше, верить `actual_status`, а не пропаже «running» |
| Судья ответил, коммита нет, в ответе «read-only» | в вызов не попал `--write`: вердикт не считать, перезапуск с `--write` |
| Судья ответил не на GLM | в вызов попал другой канал или `--model`: ответ не считать, перезапуск с `--channel glm` |
| Судья упал: таймаут `glm`, exit 6, 402 | вердикта нет: строка в журнал, `pi:pi-check`, вопрос автору, карточку не закрывать |
| devin не готов | стоп-фактор: `стоп: исполнитель — devin недоступен: …`, `needs-owner`, вопрос в чат; запасного нет (правило 5) |
| Пакет диффа пуст | судью не запускать, стоп, строка в журнал |
| Судья сказал `зелёный`, коммита нет | вопрос автору, карточку не закрывать |
| devin сказал `готово`, этапа 4 не было | не закрывать карточку, запустить этап 4 |
| Повтор после `вопроса` начал сессию с нуля | это откат, а не сбой: id сессии не попал в журнал или продолжение не удалось — новый прогон через `devin:devin-delegate` с текущим заданием, строка в журнал |
| Ход 1 вернул правки, дерево не чистое | в вызов хода 1 попал не `--permission read`: ответ не считать, `git status` проверить, повтор хода 1 с `--permission read` |
| После хода 1 в write_scope каталог `.`/корень | список путей «Файлы:» негодный, критерий годности пропущен: повтор хода 1 с уточнением «каталоги не шире модуля» |
| Ход 2 начал сессию с нуля | `resume --session` действующей сессии вернул exit 2 — это откат: новый `run --write --thinking high` с новым именем сессии, строки `порция a: откат — новая сессия <id>` и `порция a: devin сессия <id>` в журнал |

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…