#Запуск и сохранение динамического workflow
Продвинутый уровень · Урок 3 из 7 · около 20 минут плюс время запуска · Нужно: Выбор паттерна оркестрации · Сверено с Claude Code v2.1.285 (stable) 09.10.2026
#Цель
К концу урока вы сможете поручить Claude написать динамический workflow для задачи, которая расходится по множеству файлов, удержать запуск небольшим и сохранить его как команду, принимающую входные данные из args.
#Что понадобится
- Один из ваших репозиториев минимум с двумя папками, в каждой из которых есть комментарий
TODOилиFIXME, всё ещё актуальный для кода:git grep -n -E 'TODO|FIXME'их показывает. Если в вашем таких нет, возьмите локальный клон проекта, где они есть; пушить в него не придётся. Проверку запускайте из своей копии шаблона для практики с Node.js LTS. Подготовьте в репозитории папку.practice/, как описано в уроке 1 Начального уровня, если ещё не сделали этого. - Расход лимита: большой. Каждый запуск стартует несколько субагентов, а
/deep-researchещё и ищет в интернете (Run a bundled workflow). Экономный вариант: пропустите шаг 3, ограничивайте каждый запуск одной небольшой папкой и запускайте Claude Code с--model sonnet, как показано на шаге 1.
Примечание
На Pro динамические workflow выключены, пока вы не включите их в строке Dynamic workflows в /config, а рекомендуемый размер по умолчанию — small (Orchestrate subagents at scale with dynamic workflows, Set a size guideline).
#Идея
Динамический workflow — это скрипт на JavaScript, который Claude пишет под вашу задачу. Среда выполнения запускает его в фоне, а ваша сессия остаётся отзывчивой (Orchestrate subagents at scale with dynamic workflows). Скрипт запускает субагентов и хранит их результаты в собственных переменных, так что в ваш разговор попадает только итоговый ответ: план держит скрипт, а не Claude (When to use a workflow).
Поскольку план — это код, его можно прочитать до запуска, независимые агенты могут проверить находки друг друга до того, как те попадут в отчёт, а запуск, сделавший то, что нужно, можно сохранить как команду /<name>, которая каждый раз принимает новые входные данные из args (When to use a workflow, Pass input to a saved workflow).
Рекомендуемый размер (size guideline) подсказывает Claude, на сколько агентов ориентироваться при написании скрипта. Это совет, а не потолок (Set a size guideline).
#Разбор примера
- В корне репозитория запустите Claude Code в ручном режиме (Manual):
claude --permission-mode manual
Для экономного варианта запустите его на Sonnet:
claude --permission-mode manual --model sonnet
В строке состояния появится ⏸ manual mode on (Switch permission modes). В ручном режиме Claude Code спрашивает перед каждым запуском workflow, если только вы не попросили больше не спрашивать для этого workflow в этом проекте, так что вы видите каждый план до старта (Approve the plan before it runs).
Если модель ничем больше не назначена, агенты workflow работают на модели вашей сессии (Cost). --model задаёт её только для этой сессии, а /model ещё и сохранил бы её как значение по умолчанию (CLI flags, Commands).
2. Задайте рекомендуемый размер:
/config workflowSizeGuideline=small
small просит Claude использовать как можно меньше агентов; документация советует это, «когда вы хотите ограничить расходы workflow». Claude Code хранит этот выбор в ~/.claude.json, а не в репозитории, и он действует начиная со следующего промпта (All settings, Set a size guideline).
3. В экономном варианте пропустите этот шаг. Запустите встроенный исследовательский workflow (Run a bundled workflow). Ему нужен инструмент WebSearch, которого нет в Amazon Bedrock (WebSearch tool behavior):
/deep-research What changed in the Node.js permission model between v20 and v22?
Claude Code перечисляет запланированные фазы и спрашивает, запускать ли. Поскольку вы запустили workflow по имени, он также предлагает Yes, and don't ask again for <name> in <path> (Approve the plan before it runs). Выберите Yes, run it. Запуск работает в фоне. Его агенты подчиняются вашим правилам разрешений, поэтому в ручном режиме поиск или загрузка страницы могут остановиться в ожидании вашего одобрения, и запуск ждёт вашего ответа (Behavior and limits). Когда он закончится, в сессии появится отчёт со ссылками на источники. Дождитесь его, прежде чем идти дальше.
4. Попросите собственный workflow. Замените <folder> небольшой папкой своего репозитория:
use a workflow to audit every file under <folder> for errors that are caught and then ignored, and adversarially verify each finding before reporting it
Просьба «a workflow» своими словами говорит Claude написать workflow под эту задачу (Ask for a workflow in your prompt). Затем Claude Code спрашивает, запускать ли его, перечисляя запланированные фазы, с вариантами Yes, run it, View raw script и No. Для скрипта, который Claude написал под эту задачу, варианта «больше не спрашивать» нет. Выберите View raw script, чтобы сначала прочитать его, или нажмите Ctrl+G, чтобы открыть его в редакторе (Approve the plan before it runs). По форме он похож на пример из документации, хотя ваш будет отличаться:
export const meta = {
name: 'audit-routes',
description: 'Audit every route handler for missing auth checks',
}
const found = await agent('List every .ts file under src/routes/.', {
schema: { type: 'object', required: ['files'], properties: { files: { type: 'array', items: { type: 'string' } } } },
})
const audits = await pipeline(found.files, file =>
agent(`Audit ${file} for missing authentication checks.`, { label: file }),
)
return audits.filter(Boolean)
agent() запускает одного субагента, pipeline() — по одному на каждый элемент списка, а parallel() — набор агентов одновременно (What the saved script looks like). Затем выберите Yes, run it.
5. Пока он работает, выполните /workflows и выберите свой запуск аудита; если в сессии только один запуск, он откроется сразу. Окно прогресса показывает каждую фазу с числом агентов. ↑ и ↓ выбирают, Enter открывает фазу, а затем агента (его промпт, последние вызовы инструментов и результат), Esc возвращает назад, а p ставит запуск на паузу или возобновляет его (Watch the run). Однострочная сводка прогресса также видна на панели задач под полем ввода (Run a bundled workflow).
6. Когда запуск закончится и его находки появятся в сессии, выполните /workflows, выберите свой запуск аудита (не /deep-research) и нажмите s. В диалоге сохранения Tab переключает между .claude/workflows/ в вашем проекте — после коммита он будет у всех, кто клонирует репозиторий, — и ~/.claude/workflows/, доступным во всех проектах, но только вам. Убедитесь, что выбрана .claude/workflows/ в проекте (если нет — нажмите Tab), затем нажмите Enter (Save the workflow for reuse). Claude Code запишет скрипт как файл .js в ближайшую существующую папку .claude/workflows/ между рабочей папкой и корнем репозитория или, если такой ещё нет, в .claude/workflows/ в корне. Начиная со следующей сессии workflow запускается как команда /<name> и виден в автодополнении / рядом с /deep-research (Bundled workflows).
#Ваша очередь
Задание: соберите workflow, который находит каждый комментарий TODO и FIXME в указанной вами папке, проверяет, актуален ли он для текущего кода, и сообщает только об актуальных. Держите его небольшим: пусть агенты проверяют комментарии несколькими пачками, а не по агенту на комментарий. Выберите две папки, в каждой из которых есть хотя бы один актуальный TODO или FIXME: отчёт, который ничего не нашёл, не ссылается ни на один path:line и не проходит проверку.
Критерии приёмки:
- Workflow сохранён в
.claude/workflows/, закоммичен и запускается по имени. Его первая инструкция остаётсяexport const meta— простым объектным литералом сnameиdescription: переменная, вызов функции или spread на этом месте убирают/<name>из автодополнения/(Edit a saved script). - Он читает папку из
args, так чтоRun /<name> on <folder>работает на любой папке без правки скрипта. - Каждый пункт отчёта начинается со строки
TODOилиFIXMEв видеpath:lineот корня репозитория, а затем одной строкой объясняет, почему комментарий всё ещё актуален, не ссылаясь ни на какой другойpath:line. Неактуальные пункты опускаются. - Запуск на одной небольшой папке не показывает на панели задач предупреждения
Large workflow. При выбранном рекомендуемом размере предупреждение появляется, когда запуск планирует больше агентов, чем допускает этот размер (Cost).
Один из путей: напишите первую версию просьбой «use a workflow» на одной папке и сохраните её, как на шаге 6. Затем выполните /workflow-authoring — он загружает справочник, по которому Claude пишет скрипты, — и попросите Claude изменить сохранённый скрипт так, чтобы он брал папку из args (Edit a saved script). Выполните /reload-skills, затем попросите: Run /<name> on <folder>.
Когда скрипт удовлетворяет остальным критериям, закоммитьте его. Затем запустите его по имени на двух разных папках, не правя между запусками. После каждого запуска попросите Claude сохранить отчёт:
Save that report to .practice/a-3-run1.md: the folder you ran it on as the first line, then one line per item that still applies, starting with its path:line, and nothing else.
Для второй папки используйте .practice/a-3-run2.md.
#Проверка
Урок пройден, когда выполнено всё это:
- У закоммиченного скрипта в
.claude/workflows/первая инструкция — литералexport const metaсnameиdescription, и он читает входные данные изargs:git ls-tree -r --name-only HEAD .claude/workflowsего показывает. -
.practice/a-3-run1.mdи.practice/a-3-run2.mdназывают в первой строке две разные папки, и каждый ссылается хотя бы на одинpath:lineвнутри своей папки. - Каждый упомянутый
path:lineсуществует и содержитTODOилиFIXME. - Самопроверка (не тестируется): вы запускали сохранённый workflow по имени для обоих отчётов, не правя его между запусками, и ни один запуск не показал на панели задач предупреждения
Large workflow.
Запустите npm run check -- a-3 --dir <your repo> из своей копии для практики.
Если не проходит первый пункт, проверьте, что скрипт закоммичен (git check-ignore -v .claude/workflows/<file>.js назовёт правило игнорирования, которое его прячет; добавьте его через git add -f и закоммитьте), и что он читает args. Если отчёт ссылается на path:line вне своей папки или не ссылается ни на один внутри неё, убедитесь, что скрипт берёт папку из args и сообщает только о файлах внутри неё, запускайте claude из корня репозитория, чтобы пути отсчитывались от него, и запустите workflow снова на папке, где есть актуальный TODO или FIXME. Если в упомянутой строке нет TODO или FIXME, значит, либо отчёт ссылается в объяснениях на другие строки, либо файл изменился после запуска: попросите Claude ссылаться только на строки с TODO и FIXME или запустите workflow снова и сохраните новый отчёт промптом выше.
#Осторожно
- В режиме auto Claude Code спрашивает только перед первым запуском workflow: любой ответ Yes записывает согласие в ваши пользовательские настройки, и последующие запуски стартуют без вопросов. Агенты workflow подчиняются вашим правилам разрешений, а когда сессия находится в режиме accept-edits, auto или bypass, работают в том же режиме (Approve the plan before it runs, Permission modes). Читайте каждый скрипт, прежде чем одобрять его, и оставайтесь в ручном режиме для workflow, который вы не читали.
- Запуск может расходовать заметно больше токенов, чем та же задача в разговоре, и засчитывается в лимиты использования и запросов вашего плана. Сначала пробуйте workflow на одной небольшой папке и просите Claude использовать модель поменьше для этапов, которым не нужна самая сильная.
/workflowsпоказывает расход токенов каждым агентом по ходу запуска, аxна выбранном запуске останавливает его. Когда запуск разрастается необычно сильно, в его строке прогресса появляется предупреждениеLarge workflow. Как только вы выбрали рекомендуемый размер, его число агентов заменяет встроенный порог предупреждения, а большой прогнозируемый объём токенов всё равно может его вызвать. Предупреждение не ставит запуск на паузу и не ограничивает его (Cost). pставит запуск на паузу и возобновляет его, но остановленный запуск черезpне возобновить: попросите Claude перезапустить его тем же скриптом — в той же сессии или в сессии, которую вы снова открыли черезclaude --resume. Агенты, которые ещё работали в момент остановки, начнут заново (Resume after a pause). Агент, вывод которого слишком долго не обновляется, тоже сам начинает заново, и/workflowsдобавляет к его имени(retry 1)(When an agent stalls and restarts). В v2.1.285 агент также начинает заново со своего промпта, если соединение зависает на несколько минут посреди ответа (исправлено в v2.1.286) или ваш Mac просыпается после сна (исправлено в v2.1.290) (CHANGELOG), поэтому не давайте машине засыпать, пока идёт запуск.
#Что дальше
- Сохранённый workflow этого руководства: настоящий скрипт, который читает
args, группирует агентов по фазам и поручает отдельным агентам проверять каждое утверждение, прежде чем оно попадёт в отчёт. - Example workflow prompts: другие формы задач — например миграция множества файлов или исправление до прохождения проверки.
- When a run hits your usage limit: когда запуск ждёт сброса лимита, а не падает.
Источники: Orchestrate subagents at scale with dynamic workflows · Choose a permission mode · Create custom subagents · CLI reference · Commands · All settings · Tools reference · Claude Code CHANGELOG
← Выбор паттерна оркестрации · Оглавление Продвинутого уровня · Скрипты с claude -p → · Тема: Субагенты и параллельная работа · Застряли на уроке?