Install any skill in seconds. Free to start, no credit card required.
Get Started Free →ONLY for coordinated multi-artifact work: multiple workflows with dependencies, shared data-table schema/migration across tasks, or the user explicitly asked to review a plan first. Load create-tasks via load_tool before calling it (search "create tasks" if not visible). Do NOT use for new one-off workflows, single-workflow edits, verification-only requests, or standalone data-table ops — use workflow-builder or data-table-manager instead.
.claude/skills/n8n-io-planning/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-11 | ✗→✓ | ▲ Improved | 229% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 23% | 0% |
| case-22 | ✗→✓ | ▲ Improved | 44% | 0% |
| case-12 | ✓→✗ | ▼ Worse | 41% | 0% |
| case-18 | ✓→✓ | = Same ✓ | 66% | 0% |
Use this skill to design a dependency-aware task graph in the orchestrator and submit it with create-tasks. Do not spawn another agent and do not use incremental plan item tools.
Before calling create-tasks, load it via load_tool (search "create tasks" if it is not visible).
Stop and use workflow-builder + build-workflow instead when the request is:
Do not call create-tasks just to get approval, verification, or a checklist for a single workflow. Workflow verification is automatic from structured build outcomes after build-workflow.
Planning is only for work that needs coordination: multiple workflows, dependencies between workflows, shared data-table schema or migration work across tasks, multiple durable artifacts, broad best-practice research across many sources, genuinely ambiguous business-process architecture that cannot be resolved with one build-workflow call, or an explicit user request to review a plan first.
If shared data tables are involved, load data-table-manager before this skill and carry the relevant table guidance into workflow task specs. Clear single-workflow builds and existing-workflow edits use workflow-builder with build-workflow directly. Standalone data-table work uses data-table-manager with direct data-tables and parse-file calls.
Consult the knowledge base before planning. It lives at the workspace root. Read the relevant .md guides and templates for each technique the request involves (${N8N_WORKSPACE_DIR}/knowledge-base/index.json, ${N8N_WORKSPACE_DIR}/knowledge-base/best-practices/index.json, and linked files). Use workspace_execute_command with rg or find under ${N8N_WORKSPACE_DIR}/knowledge-base/templates/ to locate matching SDK examples — never load templates/index.json wholesale. Skip only for trivial mechanical edits you have already reviewed in this thread.
whether a workflow is new.
nodes(action="suggested"), credentials(action="list"), data-tables(action="list"), parse-file, workflows, and research when relevant.
answer would materially change the plan and cannot be discovered.
Independent tasks should not depend on each other.
Do not create separate data-table tasks unless the table work is a durable artifact shared across tasks.
workflow verification cannot cover.
create-tasks via load_tool if needed, then call create-tasks withplanningContext.source: "planning-skill", a concise summary, optional assumptions, postBuildRunRequested: true only when the user explicitly asked to run, execute, or test a workflow after building it, and the final task graph.
create-tasks, do not write visible text. The approval card isthe user-visible surface.
build-workflow and checkpoint.id must be stable and referenced by dependency edges.title should be short and user-facing.spec must be the complete executor briefing for that task. The taskexecutor may not see your broader planning notes.
build-workflow tasks, make spec a structured executor briefing, notfreeform prose. Include these labels in this order: Outcome, Trigger mode, External systems, Required effects, Required branches, Required data, Explicit constraints, Empty/invalid behavior, and Done when.
Required effects, list every observable action the user asked for, suchas send email, send Telegram, write Google Sheets, create Notion pages, upsert Data Table rows, or post one Slack summary.
Required branches, state partial-failure behavior when multiple effectsstart from the same trigger, and state whether no-results or invalid-input paths need an explicit notification, fallback, log, or no-op.
Required data, name fields needed by later conditions, filters, ranking,response messages, or downstream effects, and note when those fields must remain available after side-effect nodes that replace item JSON.
Explicit constraints, preserve concrete user-provided resource names,channels, tables, labels, URLs, and required node families or mechanisms. If the user explicitly says to use a node family or mechanism such as HTTP Request, webhook, form, MCP, or a service-native node, treat that as a hard requirement unless it is impossible or contradicts another stated requirement. Do not move those values to assumptions, replace them with placeholders, or silently swap them for a more convenient alternative.
Empty/invalid behavior, distinguish data that invalidates the whole itemfrom data that only affects one requested effect. For multi-effect intake workflows, do not turn a field into a workflow-wide rejection requirement merely because one message or side effect uses it.
Done when, write observable acceptance checks, including final actionsand branch behavior. Do not write node-by-node wiring or fake user data.
build-workflow task's final deliverable is a supporting sub-workflow,set isSupportingWorkflow: true on that task. Do not set it for helper sub-workflows that are only intermediate artifacts inside a larger main workflow task.
checkpoint tasks, write structured semantic verification instructions:Verify trigger mode, Verify external systems, Verify required effects, Verify required branches, Verify required data, Verify explicit constraints, Verify empty/invalid behavior, and Pass condition. Checkpoints are exceptional; use this structure only when a checkpoint is actually warranted.
existing data tables, workflow names, node availability, or attached-file structure.
trigger mechanics when a sensible default exists.
it. Use that timezone for schedule times, cron assumptions, and digest windows.
channels, calendars, spreadsheets, folders, databases, or recipient lists. Leave them for the builder to resolve or collect through setup.
includes already-collected answers or already-discovered resources, treat them as authoritative and do not ask again for purpose, trigger, integrations, schedule, model, resource, or credential choices already listed there.
("later"), or skipped it, never re-present it. On a skip or deferral, record a sensible assumption in planningContext.assumptions where a default exists (for example a default morning time for a digest), otherwise leave the detail for the builder or setup — do not block on it and do not ask again.
credential name in planningContext.assumptions.
leave it unresolved and route setup after verification.
with ask-user because the choice cannot be discovered.
for example validating a named Slack channel that affects the architecture. Do not turn resource lookup into a credential-choice question unless the multiple-credentials rule applies.
Workflow verification is automatic from structured build outcomes. Do not add routine "verify this workflow" checkpoint tasks for every workflow.
Checkpoint tasks are exceptional semantic checks. Use them for cross-workflow contracts, confirming a report combines upstream data correctly, validating a business invariant across deliverables, or checking a condition that cannot be covered by normal runtime verification.
Do not add checkpoints for routine verification-only work.
If the user rejects the plan with requested changes, revise surgically, load create-tasks via load_tool if needed, and call create-tasks again in the same orchestrator run with planningContext.source: "planning-skill".
If the user denies the plan outright, stop. Do not call create-tasks again in the same message group.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 34,638 | 9,070 | -74% | 1 | 1 | 0% | 6,730 | 2,648 | -61% | 0 | 0 | — |
case-02 | fail→fail | 43,745 | 10,664 | -76% | 1 | 1 | 0% | 8,288 | 2,874 | -65% | 0 | 0 | — |
case-03 | fail→fail | 27,324 | 8,926 | -67% | 1 | 1 | 0% | 4,600 | 2,722 | -41% | 0 | 0 | — |
case-04 | fail→fail | 8,583 | 13,492 | +57% | 1 | 1 | 0% | 1,865 | 2,955 | +58% | 0 | 0 | — |
case-05 | fail→fail | 11,857 | 9,290 | -22% | 1 | 1 | 0% | 1,807 | 2,578 | +43% | 0 | 0 | — |
case-06 | fail→fail | 9,656 | 22,148 | +129% | 1 | 1 | 0% | 1,558 | 2,939 | +89% | 0 | 0 | — |
case-07 | fail→fail | 39,527 | 8,415 | -79% | 1 | 1 | 0% | 7,589 | 2,498 | -67% | 0 | 0 | — |
case-08 | fail→fail | 23,472 | 10,895 | -54% | 1 | 1 | 0% | 3,264 | 2,678 | -18% | 0 | 0 | — |
case-09 | fail→fail | 19,810 | 19,801 | -0% | 1 | 1 | 0% | 3,042 | 2,762 | -9% | 0 | 0 | — |
case-10 | fail→fail | 8,724 | 3,893 | -55% | 1 | 1 | 0% | 1,190 | 2,473 | +108% | 0 | 0 | — |
case-11 | fail→pass | 6,959 | 6,626 | -5% | 1 | 1 | 0% | 986 | 3,241 | +229% | 0 | 0 | — |
case-12 | pass→fail | 12,799 | 33,948 | +165% | 1 | 1 | 0% | 2,001 | 2,814 | +41% | 0 | 0 | — |
case-13 | fail→pass | 16,231 | 5,604 | -65% | 1 | 1 | 0% | 2,313 | 2,839 | +23% | 0 | 0 | — |
case-14 | fail→fail | 20,177 | 9,143 | -55% | 1 | 1 | 0% | 3,226 | 2,780 | -14% | 0 | 0 | — |
case-15 | fail→fail | 19,365 | 9,638 | -50% | 1 | 1 | 0% | 3,170 | 2,567 | -19% | 0 | 0 | — |
case-16 | fail→fail | 13,272 | 5,284 | -60% | 1 | 1 | 0% | 1,788 | 2,821 | +58% | 0 | 0 | — |
case-17 | fail→fail | 10,843 | 9,357 | -14% | 1 | 1 | 0% | 1,582 | 3,775 | +139% | 0 | 0 | — |
case-18 | pass→pass | 12,719 | 5,726 | -55% | 1 | 1 | 0% | 1,679 | 2,795 | +66% | 0 | 0 | — |
case-19 | pass→pass | 15,725 | 7,775 | -51% | 1 | 1 | 0% | 2,245 | 3,283 | +46% | 0 | 0 | — |
case-20 | fail→fail | 17,068 | 8,011 | -53% | 1 | 1 | 0% | 2,914 | 2,589 | -11% | 0 | 0 | — |
case-21 | fail→fail | 12,400 | 5,875 | -53% | 1 | 1 | 0% | 1,771 | 2,940 | +66% | 0 | 0 | — |
case-22 | fail→pass | 11,573 | 4,289 | -63% | 1 | 1 | 0% | 1,752 | 2,516 | +44% | 0 | 0 | — |
case-23 | pass→pass | 10,936 | 10,060 | -8% | 1 | 1 | 0% | 1,800 | 3,383 | +88% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 10 counted toward the lift figure. The other 13 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +9 percentage points is the difference between those two pass rates over the 10 comparable cases. 7 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.