Workflow Orchestration
Claude Code dynamic workflows - JS-скрипт, который оркестрирует
недетерминированных субагентов. Скрипт = «рельсы» (loop, branching, промежуточные
результаты в переменных); агенты = «поезда». Надёжность даёт код вокруг агентов, а не
агенты сами. Доступность зависит от плана, текущей конфигурации и runtime: на Pro
включи Dynamic workflows в /config; перед запуском проверь доступность в текущей сессии.
Этот skill - наш свод поверх официального API: что платформа уже даёт, и что мы
добавляем сами для задач, где нужна доказуемая полнота batch-результата.
Текущая опора (проверено 2026-09-06): официальная документация,
официальный разбор
и официальный cookbook.
Дата обновления docs/cookbook на странице не указана; blog датирован 2026-06-02.
Когда workflow, а когда нет
|
Subagent |
Skill |
Agent Team |
Workflow |
| Что |
воркер, спавнится разово |
инструкции для Claude |
сварм, коллаборация |
скрипт, исполняет runtime |
| Кто решает что дальше |
Claude, ход за ходом |
Claude по промпту |
Claude + обмен между агентами |
скрипт (детерминизм) |
| Где промежуточные результаты |
контекст Claude |
контекст Claude |
контекст Claude |
переменные скрипта |
| Масштаб |
пара задач/ход |
как subagent |
х2-х10 агентов |
десятки-сотни, лимит 1000 |
| Прерывание |
рестарт хода |
рестарт хода |
рестарт хода |
resumable в той же сессии |
Бери workflow когда: задаче нужно больше агентов, чем удержит один контекст; нужна
повторяемая оркестрация как читаемый скрипт; нужен repeatable quality-паттерн
(агенты adversarially проверяют находки друг друга перед тем как их вернуть).
Практический тест: бери workflow, когда работа больше контекста одного агента или один
и тот же шаг надо повторить по множеству независимых элементов, а orchestration полезно
сохранить и повторить. Для 1--3 одноразовых делегаций бери subagent. Это не правило «все
три условия», а выбор масштаба и повторяемости.
НЕ бери workflow когда: хватает 1-3 субагентов на ход (бери subagent); задача -
следование инструкции (skill); нужен интерактивный sign-off в середине (кроме permission
prompts, run не принимает mid-run input; каждый этап с sign-off = свой workflow).
Opt-in обязателен. Workflow tool вызывается, когда user прямо просит workflow
своими словами, использует keyword ultracode, или в сессии включён Ultracode. После
v2.1.160 literal workflow больше не является trigger keyword (до этой версии он был
им); обычная явная просьба работает в обеих версиях. Иначе — обычные субагенты. Это и
наше правило, и поведение платформы.
Анатомия (точный API)
export const meta = { // ПЕРВЫМ. Pure literal — без переменных,
name: 'my-flow', // вызовов функций, спредов, интерполяции.
description: 'one-liner для диалога approve',
phases: [{ title: 'Scan', detail: '...' }, { title: 'Fix' }], // = phase() вызовам
whenToUse: '...', // опц., в списке /workflows
}
// тело — обычный async JS + примитивы:
phase('Scan') // группа прогресса; agent() ниже в неё
const r = await agent('prompt', {schema: S, label, phase, model, isolation, agentType})
const all = await parallel(items.map(x => () => agent(...))) // БАРЬЕР, ждёт всех
const out = await pipeline(items, stageA, stageB) // fan-out, БЕЗ барьера
const sub = await workflow('deep-research', {question}) // суб-воркфлоу, вложен. 1
log('сообщение пользователю')
agent(prompt, opts?) → без schema возвращает финальный текст (string); со schema
(JSON Schema) форсит StructuredOutput tool и возвращает валидированный объект (модель
ретраит при mismatch); null, если агент остановлен в ходе run или случилась невосстановимая
API-ошибка. opts: label, phase (явная
группа - юзать внутри parallel/pipeline, не глобальный phase()), model (опускать -
наследует модель сессии; ставить только когда уверен), isolation:'worktree' (дорого -
только когда агенты параллельно мутируют файлы), agentType ('Explore', 'code-reviewer'...).
parallel(thunks) - массив функций ()=>Promise, барьер. Результат агента может
быть null. .filter(Boolean) допустим только для представления уже учтённых результатов;
для явного batch сначала свяжи каждый null с исходным item и верни его как pending.
pipeline(items, ...stages) - каждый item независимо через все стадии, БЕЗ барьера
между ними (item 2 на стадии 3, item 4 ещё на стадии 1). Если стадия даёт null, следующие
могут быть пропущены; после pipeline восстанавливай состояние по исходному item. Дефолт
для многостадийной работы.
budget {total: number|null, spent(), remaining()} - токен-таргет хода. total
null если не задан. Хард-потолок: при достижении agent() бросает.
args - значение, переданное в Workflow, дословно (для параметризованных команд).
Золотые правила (L1 корректности)
- pipeline по умолчанию. parallel-барьер - ТОЛЬКО когда стадия N реально нужна ВСЕ
результаты N-1 разом (dedup по всему множеству, early-exit по总count, «сравни с
остальными находками»). «Надо сначала flatten/filter» - делай это ВНУТРИ стадии pipeline.
- Никогда
Date.now() / Math.random() / argless new Date() - бросают (ломают
journaling/resume). Таймстемпы - через args; «случайность» - варьируй prompt/label по idx.
- Скрипт НЕ имеет fs/shell. Читают/пишут/запускают команды только агенты (у них Bash,
Read, Write). Скрипт лишь координирует и передаёт данные через переменные.
- schema для всего, что обрабатываешь кодом. Текст парсить нельзя надёжно - schema
даёт валидированный объект + авто-ретрай.
- Явный batch не теряет identity. Не фильтруй
null до ledger: finder:<input> /
verify:<finding> /
card:<finding> / sample:<input> / judge:<input> / card-audit остаётся pending.
Card audit доказывает one-to-one set equality (count, distinct IDs, membership), не только
count. COMPLETE только когда полный set доказан; иначе верни INCOMPLETE и named pending.
- meta - pure literal. Любая вычисляемая часть = parse error.
- Permission mode не фиксирован skill-ом. Subagents применяют permission rules сессии;
agent permission prompts могут приостановить run. До long run подготовь нужный allowlist,
но не заявляй
acceptEdits или автоодобрение без проверки текущего режима.
Подтверждённые текущие limits
До 16 concurrent agents (меньше на CPU-limited host) · до 4,096 items в одном parallel()
или pipeline() · 1,000 agents total на run. Не используй фиксированный minimum version
как замену current availability: проверь план, /config, runtime и актуальную документацию.
bundled /workflow-authoring для редактирования saved script требует v2.1.248+. Остальные
числа из старого community research не используй как current contract: см.
references/research-findings-2026-05-30.md только как исторические заметки.
Quality-паттерны (повышают доверие к результату)
- Adversarial verify - на каждую находку N независимых скептиков, промпт «опровергни,
по умолчанию refuted=true». Убить если большинство опровергло. Ловит правдоподобно-неверное.
- Perspective-diverse verify - когда находка может сломаться по-разному, дай каждому
верификатору свою линзу (correctness/security/perf/repro), не N одинаковых.
- Judge panel - N независимых попыток под разными углами → параллельные судьи оценивают
→ синтез из победителя + лучшие идеи из остальных. Бьёт «одна попытка, итерируем».
- Loop-until-dry - для discovery неизвестного размера: спавнить finders пока K раундов
подряд не дадут ничего нового. Dedup против
seen (всё виденное), НЕ против confirmed -
иначе отклонённые находки возвращаются каждый раунд и не сходится.
- Multi-modal sweep - параллельные агенты, каждый ищет своим способом (по контейнеру / по
контенту / по сущности / по времени). Каждый слеп к находкам других.
- Completeness critic - финальный агент «что упущено - не пройденная модальность,
непроверенный claim, непрочитанный источник?». Найденное = следующий раунд.
Масштабируй под запрос: «найди баги» - пара finders, single-vote. «Тщательно проверь» -
больше finders, 3-5-голосный adversarial, стадия синтеза.
Выбор паттерна оркестрации
5 структурных паттернов (детали + safety в
references/orchestration-patterns.md):
sequential · operator · split-and-merge (наш основной fan-out) · agent teams · headless.
Принцип: начинай проще, чем кажется; усложняй только когда измеримо упёрся.
- Error amplification - в мультиагенте плохой output одного каскадит через других до того,
как поймают. Контрмеры: schema-контракты между стадиями, adversarial verify ДО того как
находка «folds in», fail-closed + sentinel-поля (
confidence/needs_human).
- Headless (
claude -p / Agent SDK / bypass) - бери ПОСЛЕДНИМ: только после интерактивной
обкатки на выборке входов, с узким allowlist, fail-loud states, checkpoints на необратимое.
- Model-tiering: рутинные стадии на меньшей модели (
agent(p, {model:'sonnet'})),
judgment (architecture/security/debug) - дефолт сессии.
- Эффективность прогонов (resume, узкий контекст, фильтрация, тихие фейлы) - в
~/.claude/workflows/EFFECTIVE-AGENTS.md.
Наши добавки к платформе (закрытие gaps)
Платформа НЕ даёт из коробки: retry при падении агента (не schema-mismatch), multisampling,
error policy для логических ошибок, файловую observability с карточками, эвалы для самих
флоу. Мы закрываем это конвенциями - детали и готовый код в
references/lessons-and-gaps.md, аннотированный рабочий
шаблон в references/workflow-template.js.
Кратко:
withRetry(fn, n) - ретрай только явно пойманного throw в ограниченном бюджете; null
не ретраить вслепую, поскольку он означает остановку или unrecoverable API error. Сохрани
исходную identity как pending. Платформенный ретрай - только на schema-mismatch.
.runs/ workspace - агенты пишут артефакты (карточки находок, промежуточные JSON) в
.runs/<flow>-<runId>/ через Write; runId приходит из args (в скрипте нет Date.now).
Это durable observability сверх /workflows UI и agent-<id>.jsonl журналов.
- Карточка на каждый косяк (идея deksden) - verify не только выдаёт вердикт, но агент
оформляет карточку
findings/<id>.md с repro/severity/fix. Детерминированная проверка
в скрипте: «число карточек == число подтверждённых находок».
- Eval-harness для флоу - эталонный
fixtures/<flow>/ (репо/датасет с известными
косяками) → прогон флоу → проверка что косяки найдены и оформлены. См. reference.
⚠️ BILLING - машина по истреблению токенов
Workflow спавнит до 1000 агентов; расход кратный. Если в один поток лимит уходит за 4 часа,
х7-агентов сделает это за ~35 минут. Дисциплина (см. rules/safety-billing.md Риск 4):
- Перед большим прогоном -
/model (на маленькой модели рутину), оценить число агентов.
- Демо/проверка флоу - 2-4 агента, read-only.
budget-guard в loop-флоу: while (budget.total && budget.remaining() > 50_000). Без
budget.total-гарда remaining() = Infinity → цикл до 1000-агентного потолка.
- На Pro workflows off по дефолту (жжёт быстро) - включается в
/config.
- Перед запуском оцени масштаб и расход; соблюдай текущий permission/plan-approval
mode и явные user-ограничения бюджета, если они заданы. Размер сам по себе не
создаёт новый consent gate.
Наши workflow-команды (~/.claude/workflows/)
/scrape-batch - аудит+диспетч парсинг-флота по сайтам (probe → workers Up →
Drive-sync → вердикт). Под jewelry/fashion проект. Pipeline-кейс.
/deep-review-flow - competency-review (security/perf/arch/concurrency/...) с
adversarial-верификацией + карточка на косяк. Перенос skill deep-review на рельсы.
/research-cn-ru - research с обязательными китайскими (Alibaba/Tencent/DeepSeek,
ModelScope) и русскими (Хабр, TG) углами, не только англо-веб. Наше правило ресерча.
/dataset-validate - pipeline проверки датасета перед обучением (целостность картинок,
манифест, дубликаты). Под ML-pipeline.
Чеклист перед запуском workflow
- Opt-in от user есть? (явная просьба своими словами /
ultracode / режим Ultracode;
не требуй literal workflow)
- Нужные агентам команды (ssh/rclone/git) - в tool allowlist? (иначе промпт в середине)
node --check скрипта прошёл (L1)? meta - pure literal?
- Размер и расход оценены; текущий permission/plan-approval mode и явные
user-ограничения бюджета соблюдены?
- Явный batch имеет ledger pending/completed и
COMPLETE возможен только после card-audit?
- Долгий прогон → промежуточное пишется в
.runs/ (resume только в той же сессии)?
Если workflow недоступен
Не объявляй исходную работу заблокированной. Выполни её доступными авторизованными средствами
в текущей сессии; workflow остаётся необязательной формой оркестрации, а не условием результата.
Связь с нашими правилами
principles/04 Deterministic Orchestration - философская база (рельсы > настроение агента).
principles/06 Multi-Agent Decomposition - когда декомпозировать.
rules/no-guessing.md Independent Verifier = adversarial verify паттерн.
rules/safety-billing.md Риск 4 - токен-дисциплина workflows.
- skill
agent-harness-design / agents-best-practices - общая агентная архитектура.
- skill
deep-review - ручной предшественник /deep-review-flow.
1---2name: workflow-orchestration3description: Написание и запуск Claude Code dynamic workflows (JS-оркестратор субагентов). Use when user просит workflow своими словами или включает ultracode, нужен fan-out на десятки-сотни агентов, codebase-wide аудит/миграция, cross-checked research, competency-review, batch-обработка списка элементов через стадии. Покрывает: примитивы phase/agent/parallel/pipeline/workflow, pipeline vs parallel, schema, budget, resume, quality-паттерны (adversarial verify, judge panel, loop-until-dry), и наши добавки к платформе (accounting, bounded retry, error policy, .runs observability, eval-harness, billing-дисциплина). Триггеры: явная просьба «use/run a workflow» или «запусти воркфлоу», оркестратор, fan-out, ultracode, deep-research, 1000 агентов, скрипт агентов. Do NOT use to design the agent/Generator-Evaluator architecture itself (use harness-design) or for a single one-shot subagent/review where no deterministic multi-stage script is needed; this writes the JS orchestrator, it is not for ad-hoc one-off agent calls.4---56# Workflow Orchestration78Claude Code **dynamic workflows** - JS-скрипт, который оркестрирует9недетерминированных субагентов. Скрипт = «рельсы» (loop, branching, промежуточные10результаты в переменных); агенты = «поезда». Надёжность даёт код вокруг агентов, а не11агенты сами. Доступность зависит от плана, текущей конфигурации и runtime: на Pro12включи Dynamic workflows в `/config`; перед запуском проверь доступность в текущей сессии.1314Этот skill - наш свод поверх официального API: что платформа уже даёт, и что мы15добавляем сами для задач, где нужна доказуемая полнота batch-результата.1617**Текущая опора (проверено 2026-09-06):** [официальная документация](https://code.claude.com/docs/en/workflows),18[официальный разбор](https://claude.com/blog/a-harness-for-every-task-dynamic-workflows-in-claude-code)19и [официальный cookbook](https://platform.claude.com/cookbook/claude-agent-sdk-08-dynamic-workflows).20Дата обновления docs/cookbook на странице не указана; blog датирован 2026-06-02.2122## Когда workflow, а когда нет2324| | Subagent | Skill | Agent Team | **Workflow** |25|---|---|---|---|---|26| Что | воркер, спавнится разово | инструкции для Claude | сварм, коллаборация | **скрипт, исполняет runtime** |27| Кто решает что дальше | Claude, ход за ходом | Claude по промпту | Claude + обмен между агентами | **скрипт (детерминизм)** |28| Где промежуточные результаты | контекст Claude | контекст Claude | контекст Claude | **переменные скрипта** |29| Масштаб | пара задач/ход | как subagent | х2-х10 агентов | **десятки-сотни, лимит 1000** |30| Прерывание | рестарт хода | рестарт хода | рестарт хода | **resumable в той же сессии** |3132**Бери workflow когда:** задаче нужно больше агентов, чем удержит один контекст; нужна33повторяемая оркестрация как читаемый скрипт; нужен repeatable quality-паттерн34(агенты adversarially проверяют находки друг друга перед тем как их вернуть).3536**Практический тест:** бери workflow, когда работа больше контекста одного агента или один37и тот же шаг надо повторить по множеству независимых элементов, а orchestration полезно38сохранить и повторить. Для 1--3 одноразовых делегаций бери subagent. Это не правило «все39три условия», а выбор масштаба и повторяемости.4041**НЕ бери workflow когда:** хватает 1-3 субагентов на ход (бери subagent); задача -42следование инструкции (skill); нужен интерактивный sign-off в середине (кроме permission43prompts, run не принимает mid-run input; каждый этап с sign-off = свой workflow).4445**Opt-in обязателен.** Workflow tool вызывается, когда user прямо просит workflow46своими словами, использует keyword `ultracode`, или в сессии включён Ultracode. После47v2.1.160 literal `workflow` больше не является trigger keyword (до этой версии он был48им); обычная явная просьба работает в обеих версиях. Иначе — обычные субагенты. Это и49наше правило, и поведение платформы.5051## Анатомия (точный API)5253```js54export const meta = { // ПЕРВЫМ. Pure literal — без переменных,55 name: 'my-flow', // вызовов функций, спредов, интерполяции.56 description: 'one-liner для диалога approve',57 phases: [{ title: 'Scan', detail: '...' }, { title: 'Fix' }], // = phase() вызовам58 whenToUse: '...', // опц., в списке /workflows59}60// тело — обычный async JS + примитивы:61phase('Scan') // группа прогресса; agent() ниже в неё62const r = await agent('prompt', {schema: S, label, phase, model, isolation, agentType})63const all = await parallel(items.map(x => () => agent(...))) // БАРЬЕР, ждёт всех64const out = await pipeline(items, stageA, stageB) // fan-out, БЕЗ барьера65const sub = await workflow('deep-research', {question}) // суб-воркфлоу, вложен. 166log('сообщение пользователю')67```6869- **`agent(prompt, opts?)`** → без `schema` возвращает финальный текст (string); со `schema`70 (JSON Schema) форсит StructuredOutput tool и возвращает **валидированный объект** (модель71 ретраит при mismatch); `null`, если агент остановлен в ходе run или случилась невосстановимая72 API-ошибка. opts: `label`, `phase` (явная73 группа - юзать внутри parallel/pipeline, не глобальный phase()), `model` (опускать -74 наследует модель сессии; ставить только когда уверен), `isolation:'worktree'` (дорого -75 только когда агенты параллельно мутируют файлы), `agentType` ('Explore', 'code-reviewer'...).76- **`parallel(thunks)`** - массив **функций** `()=>Promise`, барьер. Результат агента может77 быть `null`. `.filter(Boolean)` допустим только для представления уже учтённых результатов;78 для явного batch сначала свяжи каждый `null` с исходным item и верни его как pending.79- **`pipeline(items, ...stages)`** - каждый item независимо через все стадии, БЕЗ барьера80 между ними (item 2 на стадии 3, item 4 ещё на стадии 1). Если стадия даёт `null`, следующие81 могут быть пропущены; после pipeline восстанавливай состояние по исходному item. **Дефолт82 для многостадийной работы.**83- **`budget`** `{total: number|null, spent(), remaining()}` - токен-таргет хода. `total`84 null если не задан. Хард-потолок: при достижении `agent()` бросает.85- **`args`** - значение, переданное в Workflow, дословно (для параметризованных команд).8687## Золотые правила (L1 корректности)88891. **pipeline по умолчанию.** parallel-барьер - ТОЛЬКО когда стадия N реально нужна ВСЕ90 результаты N-1 разом (dedup по всему множеству, early-exit по总count, «сравни с91 остальными находками»). «Надо сначала flatten/filter» - делай это ВНУТРИ стадии pipeline.922. **Никогда `Date.now()` / `Math.random()` / argless `new Date()`** - бросают (ломают93 journaling/resume). Таймстемпы - через `args`; «случайность» - варьируй prompt/label по `idx`.943. **Скрипт НЕ имеет fs/shell.** Читают/пишут/запускают команды только агенты (у них Bash,95 Read, Write). Скрипт лишь координирует и передаёт данные через переменные.964. **schema для всего, что обрабатываешь кодом.** Текст парсить нельзя надёжно - schema97 даёт валидированный объект + авто-ретрай.985. **Явный batch не теряет identity.** Не фильтруй `null` до ledger: `finder:<input>` /99 `verify:<finding>` /100 `card:<finding>` / `sample:<input>` / `judge:<input>` / `card-audit` остаётся pending.101 Card audit доказывает one-to-one set equality (count, distinct IDs, membership), не только102 count. `COMPLETE` только когда полный set доказан; иначе верни `INCOMPLETE` и named pending.1036. **meta - pure literal.** Любая вычисляемая часть = parse error.1047. **Permission mode не фиксирован skill-ом.** Subagents применяют permission rules сессии;105 agent permission prompts могут приостановить run. До long run подготовь нужный allowlist,106 но не заявляй `acceptEdits` или автоодобрение без проверки текущего режима.107108## Подтверждённые текущие limits109110До 16 concurrent agents (меньше на CPU-limited host) · до 4,096 items в одном `parallel()`111или `pipeline()` · 1,000 agents total на run. Не используй фиксированный minimum version112как замену current availability: проверь план, `/config`, runtime и актуальную документацию.113bundled `/workflow-authoring` для редактирования saved script требует v2.1.248+. Остальные114числа из старого community research не используй как current contract: см.115`references/research-findings-2026-05-30.md` только как исторические заметки.116117## Quality-паттерны (повышают доверие к результату)118119- **Adversarial verify** - на каждую находку N независимых скептиков, промпт «опровергни,120 по умолчанию refuted=true». Убить если большинство опровергло. Ловит правдоподобно-неверное.121- **Perspective-diverse verify** - когда находка может сломаться по-разному, дай каждому122 верификатору свою линзу (correctness/security/perf/repro), не N одинаковых.123- **Judge panel** - N независимых попыток под разными углами → параллельные судьи оценивают124 → синтез из победителя + лучшие идеи из остальных. Бьёт «одна попытка, итерируем».125- **Loop-until-dry** - для discovery неизвестного размера: спавнить finders пока K раундов126 подряд не дадут ничего нового. Dedup против `seen` (всё виденное), НЕ против `confirmed` -127 иначе отклонённые находки возвращаются каждый раунд и не сходится.128- **Multi-modal sweep** - параллельные агенты, каждый ищет своим способом (по контейнеру / по129 контенту / по сущности / по времени). Каждый слеп к находкам других.130- **Completeness critic** - финальный агент «что упущено - не пройденная модальность,131 непроверенный claim, непрочитанный источник?». Найденное = следующий раунд.132133Масштабируй под запрос: «найди баги» - пара finders, single-vote. «Тщательно проверь» -134больше finders, 3-5-голосный adversarial, стадия синтеза.135136## Выбор паттерна оркестрации1371385 структурных паттернов (детали + safety в139[references/orchestration-patterns.md](references/orchestration-patterns.md)):140sequential · operator · **split-and-merge** (наш основной fan-out) · agent teams · headless.141142Принцип: **начинай проще, чем кажется; усложняй только когда измеримо упёрся.**143- **Error amplification** - в мультиагенте плохой output одного каскадит через других до того,144 как поймают. Контрмеры: schema-контракты между стадиями, adversarial verify ДО того как145 находка «folds in», fail-closed + sentinel-поля (`confidence`/`needs_human`).146- **Headless** (`claude -p` / Agent SDK / bypass) - бери ПОСЛЕДНИМ: только после интерактивной147 обкатки на выборке входов, с узким allowlist, fail-loud states, checkpoints на необратимое.148- **Model-tiering**: рутинные стадии на меньшей модели (`agent(p, {model:'sonnet'})`),149 judgment (architecture/security/debug) - дефолт сессии.150- Эффективность прогонов (resume, узкий контекст, фильтрация, тихие фейлы) - в151 `~/.claude/workflows/EFFECTIVE-AGENTS.md`.152153## Наши добавки к платформе (закрытие gaps)154155Платформа НЕ даёт из коробки: retry при падении агента (не schema-mismatch), multisampling,156error policy для логических ошибок, файловую observability с карточками, эвалы для самих157флоу. Мы закрываем это конвенциями - детали и готовый код в158[references/lessons-and-gaps.md](references/lessons-and-gaps.md), аннотированный рабочий159шаблон в [references/workflow-template.js](references/workflow-template.js).160161Кратко:162- **`withRetry(fn, n)`** - ретрай только явно пойманного throw в ограниченном бюджете; `null`163 не ретраить вслепую, поскольку он означает остановку или unrecoverable API error. Сохрани164 исходную identity как pending. Платформенный ретрай - только на schema-mismatch.165- **`.runs/` workspace** - агенты пишут артефакты (карточки находок, промежуточные JSON) в166 `.runs/<flow>-<runId>/` через Write; `runId` приходит из `args` (в скрипте нет `Date.now`).167 Это durable observability сверх `/workflows` UI и `agent-<id>.jsonl` журналов.168- **Карточка на каждый косяк** (идея deksden) - verify не только выдаёт вердикт, но агент169 оформляет карточку `findings/<id>.md` с repro/severity/fix. Детерминированная проверка170 в скрипте: «число карточек == число подтверждённых находок».171- **Eval-harness для флоу** - эталонный `fixtures/<flow>/` (репо/датасет с известными172 косяками) → прогон флоу → проверка что косяки найдены и оформлены. См. reference.173174## ⚠️ BILLING - машина по истреблению токенов175176Workflow спавнит до 1000 агентов; расход кратный. Если в один поток лимит уходит за 4 часа,177х7-агентов сделает это за ~35 минут. **Дисциплина (см. `rules/safety-billing.md` Риск 4):**178- Перед большим прогоном - `/model` (на маленькой модели рутину), оценить число агентов.179- Демо/проверка флоу - 2-4 агента, read-only.180- `budget`-guard в loop-флоу: `while (budget.total && budget.remaining() > 50_000)`. Без181 `budget.total`-гарда `remaining()` = Infinity → цикл до 1000-агентного потолка.182- На Pro workflows off по дефолту (жжёт быстро) - включается в `/config`.183- Перед запуском оцени масштаб и расход; соблюдай текущий permission/plan-approval184 mode и явные user-ограничения бюджета, если они заданы. Размер сам по себе не185 создаёт новый consent gate.186187## Наши workflow-команды (`~/.claude/workflows/`)188189- **`/scrape-batch`** - аудит+диспетч парсинг-флота по сайтам (probe → workers Up →190 Drive-sync → вердикт). Под jewelry/fashion проект. Pipeline-кейс.191- **`/deep-review-flow`** - competency-review (security/perf/arch/concurrency/...) с192 adversarial-верификацией + карточка на косяк. Перенос skill `deep-review` на рельсы.193- **`/research-cn-ru`** - research с обязательными китайскими (Alibaba/Tencent/DeepSeek,194 ModelScope) и русскими (Хабр, TG) углами, не только англо-веб. Наше правило ресерча.195- **`/dataset-validate`** - pipeline проверки датасета перед обучением (целостность картинок,196 манифест, дубликаты). Под ML-pipeline.197198## Чеклист перед запуском workflow1992001. Opt-in от user есть? (явная просьба своими словами / `ultracode` / режим Ultracode;201 не требуй literal `workflow`)2022. Нужные агентам команды (ssh/rclone/git) - в tool allowlist? (иначе промпт в середине)2033. `node --check` скрипта прошёл (L1)? meta - pure literal?2044. Размер и расход оценены; текущий permission/plan-approval mode и явные205 user-ограничения бюджета соблюдены?2065. Явный batch имеет ledger pending/completed и `COMPLETE` возможен только после card-audit?2076. Долгий прогон → промежуточное пишется в `.runs/` (resume только в той же сессии)?208209## Если workflow недоступен210211Не объявляй исходную работу заблокированной. Выполни её доступными авторизованными средствами212в текущей сессии; workflow остаётся необязательной формой оркестрации, а не условием результата.213214## Связь с нашими правилами215216- `principles/04 Deterministic Orchestration` - философская база (рельсы > настроение агента).217- `principles/06 Multi-Agent Decomposition` - когда декомпозировать.218- `rules/no-guessing.md` Independent Verifier = adversarial verify паттерн.219- `rules/safety-billing.md` Риск 4 - токен-дисциплина workflows.220- skill `agent-harness-design` / `agents-best-practices` - общая агентная архитектура.221- skill `deep-review` - ручной предшественник `/deep-review-flow`.