Sweep 22 Sep 2026 · 15:52Z Build v2.1.280 501 read Stable v2.1.267 Latest v2.1.280 Next v2.1.280 Feeds RSS JSON llms.txt Unofficial
Writing the changelog v2.1.280 merge candidates · 1/5 waiting for the next tick
Tool description

Workflow, as sent

CLI Claude Code, interactive mode, v2.1.270. 27 model strings share this prompt, byte for byte.

Lines353,480 characters
Moved+0−0 against v2.1.269
Reach27model strings receive this description
Copies1distinct descriptions under this name
Parameters70 of them required Tools in captureall of themevery description on this arm
Plain text · sha256 e1dee0b24033

The description, rendered

This renders the markdown inside the description, so it isn’t quite the description itself.

The raw view and the plain text are the bytes as they were sent.

Execute a workflow script that orchestrates multiple subagents deterministically. Workflows run in the background — this tool returns immediately with a task ID, and a <task-notification> arrives when the workflow completes. Use /workflows to watch live progress.

ONLY call this tool when the user has explicitly opted into multi-agent orchestration. Workflows can spawn dozens of agents and consume a large amount of tokens; the user must request that scale, not have it inferred. Explicit opt-in means one of:

  • The user included the keyword "ultracode" in their prompt (you'll see a system-reminder confirming it).
  • Ultracode is on for the session (a system-reminder confirms it) — see Ultracode in the workflow authoring reference.
  • The user directly asked you to run a workflow or use multi-agent orchestration in their own words ("use a workflow", "run a workflow", "fan out agents", "orchestrate this with subagents"). The ask must be in the user's words — a task that would merely benefit from a workflow does not count.
  • The user invoked a skill or slash command whose instructions tell you to call Workflow.
  • The user asked you to run a specific named or saved workflow.

For any other task — even one that would clearly benefit from parallelism — do NOT call this tool. Use the Agent tool (if available) for individual subagents, or briefly describe what a multi-agent workflow could do and how much it would roughly cost, and ask the user whether to run it. Mention they can ask for one with "use a workflow" in a future message to skip the ask.

Every script must begin with export const meta = {...}: a PURE LITERAL (no variables, calls or interpolation) giving the workflow's name, a one-line description (shown in the permission dialog) and optionally phases — one { title, detail? } per phase() call, titles matched exactly. Pass the script inline via script — do not Write it to a file first, and do not also set the tool's name input (that selects a saved workflow); it is plain JavaScript, not TypeScript.

The canonical multi-stage pattern — pipeline by default, each dimension verifies as soon as its review completes: export const meta = { name: 'review-changes', description: 'Review changed files across dimensions, verify each finding', phases: [{ title: 'Review' }, { title: 'Verify' }], } const DIMENSIONS = [{key: 'bugs', prompt: '...'}, {key: 'perf', prompt: '...'}] const results = await pipeline( DIMENSIONS, d => agent(d.prompt, {label: review:${d.key}, phase: 'Review', schema: FINDINGS_SCHEMA}), review => parallel(review.findings.map(f => () => agent(Adversarially verify: ${f.title}, {label: verify:${f.file}, phase: 'Verify', schema: VERDICT_SCHEMA}) .then(v => ({...f, verdict: v})) )) ) const confirmed = results.flat().filter(Boolean).filter(f => f.verdict?.isReal) return { confirmed } // Dimension 'bugs' findings verify while dimension 'perf' is still reviewing. No wasted wall-clock.

Before writing a script, load the workflow-authoring skill — the workflow authoring reference: script API and gotchas, resume, the Ultracode section, quality patterns, worked examples.

This session has the default workflow size guideline: medium — keep workflows under 15 agents. This is a guideline, not a hard limit — follow it unless the user's prompt calls for a different scale. The user can raise or remove it with "Dynamic workflow size" in /config.

What it accepts

7 parameters The JSON parameter schema sent beside this description, 1,929 characters of it. Name, type, then whether the client marked it required.
args any optional Optional input value exposed to the script as the global `args`, verbatim. Pass arrays/objects as actual JSON values, NOT as a JSON-encoded string — a stringified list breaks `args.filter`/`args.map` in the script. Use for parameterized named workflows (e.g. a research question).
description string optional Ignored — set the workflow description in the script's `meta` block.
name string optional Name of a predefined workflow (built-in or from .claude/workflows/). Resolves to a self-contained script.
resumeFromRunId string optional Run ID of a prior Workflow invocation to resume from. Completed agent() calls with unchanged (prompt, opts) return their cached results instantly; only edited or new calls re-run. Same-session only. Stop the prior run first (TaskStop) before resuming.
script string optional Self-contained workflow script. Must begin with `export const meta = { name, description, phases }` (pure literal, no computed values) followed by the script body using agent()/parallel()/pipeline()/phase().
scriptPath string optional Path to a workflow script file on disk. Every Workflow invocation persists its script under the session directory and returns the path in the tool result. To iterate, edit that file with Write/Edit and re-invoke Workflow with the same `scriptPath` instead of re-sending the full script. Takes precedence over `script` and `name`.
title string optional Ignored — set the workflow title in the script's `meta` block.

sha256 769e296ac463 · the schema as the client sent it:

{ "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "args": { "description": "Optional input value exposed to the script as the global `args`, verbatim. Pass arrays/objects as actual JSON values, NOT as a JSON-encoded string \u2014 a stringified list breaks `args.filter`/`args.map` in the script. Use for parameterized named workflows (e.g. a research question)." }, "description": { "description": "Ignored \u2014 set the workflow description in the script's `meta` block.", "type": "string" }, "name": { "description": "Name of a predefined workflow (built-in or from .claude/workflows/). Resolves to a self-contained script.", "type": "string" }, "resumeFromRunId": { "description": "Run ID of a prior Workflow invocation to resume from. Completed agent() calls with unchanged (prompt, opts) return their cached results instantly; only edited or new calls re-run. Same-session only. Stop the prior run first (TaskStop) before resuming.", "pattern": "^wf_[a-z0-9-]{6,}$", "type": "string" }, "script": { "description": "Self-contained workflow script. Must begin with `export const meta = { name, description, phases }` (pure literal, no computed values) followed by the script body using agent()/parallel()/pipeline()/phase().", "maxLength": 524288, "type": "string" }, "scriptPath": { "description": "Path to a workflow script file on disk. Every Workflow invocation persists its script under the session directory and returns the path in the tool result. To iterate, edit that file with Write/Edit and re-invoke Workflow with the same `scriptPath` instead of re-sending the full script. Takes precedence over `script` and `name`.", "type": "string" }, "title": { "description": "Ignored \u2014 set the workflow title in the script's `meta` block.", "type": "string" } }, "type": "object" }