[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-n8n-post-build-flow":3,"mdc--53xmtr-key":48,"related-repo-n8n-post-build-flow":1305,"related-org-n8n-post-build-flow":1406},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":20,"repoUrl":21,"updatedAt":22,"license":23,"forks":24,"topics":25,"repo":43,"sourceUrl":46,"mdContent":47},"post-build-flow","verify and set up n8n workflows","Handles workflow verification and setup after build-workflow succeeds, or when the message contains workflow-verification-follow-up or workflow-setup-required. Load after direct builds, when verificationReadiness requires action, or on orchestrator verify\u002Fsetup follow-up turns.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},"n8n","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fn8n.png","n8n-io",[12,14,17],{"name":8,"slug":8,"type":13},"tag",{"name":15,"slug":16,"type":13},"Automation","automation",{"name":18,"slug":19,"type":13},"Workflow Automation","workflow-automation",198156,"https:\u002F\u002Fgithub.com\u002Fn8n-io\u002Fn8n","2026-07-24T05:37:08.421329",null,59655,[26,27,16,28,29,30,31,32,33,34,35,36,37,38,8,39,40,41,42,19],"ai","apis","cli","data-flow","development","integration-framework","integrations","ipaas","low-code","low-code-platform","mcp","mcp-client","mcp-server","no-code","self-hosted","typescript","workflow",{"repoUrl":21,"stars":20,"forks":24,"topics":44,"description":45},[26,27,16,28,29,30,31,32,33,34,35,36,37,38,8,39,40,41,42,19],"Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.","https:\u002F\u002Fgithub.com\u002Fn8n-io\u002Fn8n\u002Ftree\u002FHEAD\u002Fpackages\u002F@n8n\u002Finstance-ai\u002Fskills\u002Fpost-build-flow","---\nname: post-build-flow\ndescription: >-\n  Handles workflow verification and setup after build-workflow succeeds, or when\n  the message contains workflow-verification-follow-up or workflow-setup-required.\n  Load after direct builds, when verificationReadiness requires action, or on\n  orchestrator verify\u002Fsetup follow-up turns.\nrecommended_tools:\n  - ask-user\n  - verify-built-workflow\n  - workflows\n  - build-workflow\n  - executions\n---\n\n# Post-Build Flow\n\nUse this skill after `build-workflow` succeeds on a direct orchestrator build,\nespecially when the build result contains `postBuildFlow.required: true`, or when\nthe current message contains `\u003Cworkflow-verification-follow-up>` or\n`\u003Cworkflow-setup-required>`.\n\nThese instructions are in English, but user-visible text you write while\nfollowing them stays in the user's conversation language.\n\nFor trigger `inputData` shapes, read\n`knowledge-base\u002Freference\u002Ftrigger-input-data-shapes.md` in the sandbox workspace\nwhen available, or load this skill's `references\u002Ftrigger-input-data-shapes.md`\nlinked file.\n\n## Verification follow-up\n\nWhen the current message contains `\u003Cworkflow-verification-follow-up>`, verify\nimmediately from the payload's `obligation` — do not acknowledge first. If the\nobligation is `ready_to_verify` or `verifying`, call `verify-built-workflow`. Do\n**not** call `workflows(action=\"setup\")` in this turn and do **not** declare the\nworkflow finished if `outcome.setupRequirement.status === \"required\"` — setup is\nrouted automatically as a separate `\u003Cworkflow-setup-required>` step after\nverification.\n\n## Setup follow-up\n\nWhen the current message contains `\u003Cworkflow-setup-required>`, your first action\nis to call `workflows(action=\"setup\")` with the `workflowId` from the payload. Do\nnot verify, do not ask, do not write a message first — the inline setup card in\nthe AI Assistant panel is the user-visible surface. If it returns `deferred:\ntrue`, respect the user's choice and do not retry with any other setup tool.\nAfter setup completes or is applied, follow\n[Mocked verification live-test follow-up](#mocked-verification-live-test-follow-up)\nif the payload or prior verification evidence says mocked credentials,\nsimulated node output, fixture overrides, temporary pin data, or another mocked\ninput was used.\n\n## Publishing and testing\n\n**Publishing is never required for testing.** Both `executions(action=\"run\")` and\n`verify-built-workflow` inject `inputData` as the trigger's output — the\nworkflow does not need to be active. Form, webhook, chat, and other event-based\ntriggers are all testable while the workflow is unpublished. Never publish a\nworkflow as a precondition for running it.\n\nFor workflows produced by `build-workflow`, **always verify with\n`verify-built-workflow`, never with raw `executions(action=\"run\")`.** It reuses\nthe build outcome simulation plan, mocked credentials, and temporary pin data, so\ndestructive nodes are pinned and it is safe to call repeatedly. A raw\n`executions(action=\"run\")` runs the workflow live with no pin data, and on a\nworkflow you just verified it surfaces a redundant run-approval prompt to the\nuser right after verification already executed the workflow. For follow-up\nrequests like \"verify again\", call `verify-built-workflow` with `workflowId` even\nif the original `workItemId` is not in context. For alternate deterministic\nscenarios, pass `fixtureOverrides` keyed by simulated node name instead of trying\nto force data through the trigger.\n\n**Reserve `executions(action=\"run\")` for runs the user explicitly asked for**\n(e.g. \"run it now\", \"execute it against my real data\"). Never call it on your own\nto re-test, expand coverage, or \"prove the full chain\" of a workflow you just\nbuilt or verified: re-run `verify-built-workflow` (with `fixtureOverrides` to\nreach an unverified branch) instead, or report the partial coverage and let the\nuser decide whether to run it.\nIf `fixtureOverrides` is rejected with `invalid_fixture_override`, the target\nnode was not classified as simulated in the build outcome. Do not retry the same\noverride. If that node's data controls a branch that needs verification and you\nhave the source file, load `workflow-builder`, declare representative `output`\nfixtures on the controlling upstream node, rebuild the same workflow, and verify\nagain.\n\n## After build-workflow succeeds\n\n1. Read `workflowId`, `workItemId`, `triggerNodes`, `verificationReadiness`,\n   `setupRequirement`, and `postBuildFlow` from the tool output. If the output\n   is missing a `workflowId`, explain that the build did not submit.\n   - Before treating a saved workflow as done, inspect the persisted workflow\n     with `workflows(action=\"get-as-code\", workflowId)` or read the bound\n     workspace source file, and compare the actual graph to the user's requested\n     outcome. Build\u002Fsave success only means a workflow was saved; it does not\n     prove the saved workflow is good.\n   - If the persisted workflow is missing the requested outcome, has an obvious\n     dead-end draft shape, or the verification evidence is weak, load the\n     `workflow-builder` skill and patch the same workflow with `build-workflow`\n     using the existing `workflowId` and `workItemId`; then inspect and verify\n     again.\n   - If `verificationReadiness.status === \"already_verified\"`, treat the\n     workflow as verified and do **not** call `verify-built-workflow` again.\n  - If `verificationReadiness.status === \"ready\"`, call\n    `verify-built-workflow` with the `workflowId`, the `workItemId` when you\n    have it, and the trigger-appropriate `inputData` shape.\n   - If `verificationReadiness.status === \"needs_setup\"`, call\n     `workflows(action=\"setup\")` with the workflowId so the user can configure it\n     through the inline setup card in the AI Assistant panel.\n   - If `verificationReadiness.status === \"not_verifiable\"`, do not infer\n     lower-level verification conditions; use the readiness guidance to give a\n     clear warning or manual-test note. This is a warning completion state, not\n     a verified state and not an infinite blocker.\n2. Judge coverage, not just status. A `verify-built-workflow` result with\n   `success: true` but a non-empty `nodesNotReached` is **partial** evidence:\n   the execution ended early (see `lastNodeExecuted` and `coverageNote`) and\n   the listed nodes — including any planned simulations — never ran.\n   - Most common cause: a lookup\u002Fquery node returned zero items (n8n stops\n     downstream nodes on empty item lists). If the dead-end is a Data Table\n     lookup, insert a matching test row with `data-tables(action=\"insert-rows\")`,\n     re-run `verify-built-workflow`, and delete the test row afterwards.\n   - If you cannot seed the data source, report honestly: name which nodes\n     were verified and which were not, and tell the user the unreached part\n     needs a manual test. Do not start a live `executions(action=\"run\")`\n     yourself to reach those nodes; offer the user a test instead. Never claim\n     end-to-end verification when `nodesNotReached` is non-empty.\n   - If the unreached nodes sit behind IF\u002FSwitch logic controlled by a live or\n     nondeterministic upstream node, and alternate-branch verification is part\n     of this turn's goal, first try one source-file repair: add representative\n     `output` fixtures to that upstream node, rebuild the same workflow, and\n     re-run `verify-built-workflow` with `fixtureOverrides`. Only fall back to a\n     manual-test note when you cannot safely patch the source or the repair\n     budget is exhausted.\n   - Relay `simulationNote` (nodes whose output was simulated) to the user\n     whenever it is present.\n3. After verification handling, if `setupRequirement.status === \"required\"` and\n   setup has not already run for this build, call `workflows(action=\"setup\")`\n   with the workflowId.\n4. When `workflows(action=\"setup\")` opens the inline setup card, the card is the\n   user-visible surface. Do not tell the user to open the editor, use the canvas,\n   or click a Setup button; the user does not need to navigate anywhere.\n5. When `workflows(action=\"setup\")` returns `deferred: true`, respect the user's\n   decision — do not retry with `credentials(action=\"setup\")` or any other\n   setup tool. The user chose to set things up later.\n6. After setup completes or is applied, follow\n   [Mocked verification live-test follow-up](#mocked-verification-live-test-follow-up)\n   when the latest verification evidence used mocks or simulations. If this\n   follow-up is due, ask only that question now; do not also ask about the error\n   workflow in the same response.\n7. For a direct new primary workflow, follow\n   [Error workflow follow-up](#error-workflow-follow-up) after the mocked\n   live-test follow-up is no longer pending for this workflow. If no mocked\n   live-test follow-up is due, ask about the error workflow before any generic\n   testing prompt. Do not replace this explicit opt-in with a generic \"add\n   anything else?\", publish, or test question.\n8. Ask the user if they want to test the workflow (skip this if\n   `verify-built-workflow` already proved it works end-to-end with full\n   coverage). If you need to ask about both generic testing and an error\n   workflow, ask the error-workflow opt-in first and leave generic testing as a\n   later follow-up unless the user already requested testing.\n9. Only call `workflows(action=\"publish\")` when the user explicitly asks to\n   publish. Never publish automatically.\n\n## Error workflow follow-up\n\nThis follow-up comes after the mocked verification live-test follow-up when that\nfollow-up is due, and before generic \"want to test it?\" prompts. For a direct\nnew primary workflow, ask about the error workflow after the user answers,\ndeclines, or defers any pending live\u002Fno-mock testing question. If no mocked\nlive-test follow-up is due, ask about the error workflow first.\n\nIf you just built an Error Trigger workflow because the user opted into adding\none for a known target workflow, do not ask whether to build another error\nworkflow. Continue the publish-before-assign flow for the target workflow:\nask whether to publish the error workflow and set it on that target workflow,\nthen publish and assign only after the user approves.\n\nAfter saving and handling verification\u002Fsetup for a direct new primary workflow,\nask once whether the user wants to build an error workflow for that workflow.\nUse `ask-user` with a yes\u002Fno choice or a concise visible question. Do **not**\ncreate an error workflow before the user opts in.\n\nThe opt-in must explicitly mention an error workflow and the target workflow\nname. A generic follow-up like \"Want me to add anything else?\", \"Want me to\npublish it?\", or \"Want to test it?\" does not satisfy this step.\n\nSkip this follow-up when:\n\n- The workflow you just built is itself an error workflow or starts with an\n  Error Trigger.\n- The build is a supporting workflow, repair, small edit, planned-task\n  subtask, or workflow-level settings patch.\n- The user already asked for an error workflow in the original request, already\n  declined one, or the target workflow already has the desired error workflow\n  set.\n\nIf the user says yes:\n\n1. Load `workflow-builder` and build a separate error workflow using the user's\n   requested notification destination. Keep the error workflow scoped to the\n   target workflow the user opted in for.\n2. Do not ask whether this new error workflow needs its own error workflow.\n3. The error workflow must be published before it can be assigned. If the user\n   has not already asked you to publish and attach it, ask whether to publish it\n   and set it as the error workflow for the named target workflow. When the user\n   agrees, call `workflows(action=\"publish\")` for the error workflow and let the\n   HITL approval card handle confirmation.\n4. After publish succeeds, set the original workflow's workflow-level\n   `settings.errorWorkflow` to the **error workflow's workflowId**. Do not use\n   the published `activeVersionId`, workflow name, a placeholder, or a local SDK\n   id. If you have the original source file, edit it; otherwise call\n   `workflows(action=\"get-as-code\", workflowId)` for the original workflow,\n   write the returned code to a `.workflow.ts` file, add\n   `.settings({ errorWorkflow: '\u003Cpublished-error-workflow-id>' })`, and call\n   `build-workflow` for the original workflow. The workflow edit approval card\n   is the HITL surface for this assignment.\n5. Summarize the result with explicit per-workflow language: this error\n   workflow was assigned only to the named target workflow. Mention that n8n has\n   no global or instance-wide error workflow setting only when the user\n   explicitly asked about, requested, or referenced global\u002Finstance-wide error\n   workflow behavior.\n\n## Mocked verification live-test follow-up\n\nAfter workflow setup completes or is applied, if the latest verification for\nthat workflow used mocked credentials, simulated node output, fixture overrides,\ntemporary pin data, or another mocked input, ask whether the user wants a live\ntest without mocks. Do not run the live test automatically.\n\nThis follow-up has priority over the error-workflow opt-in for a direct new\nprimary workflow. If both follow-ups are due, ask about the live\u002Fno-mock test\nfirst and ask the error-workflow question only after the user has answered,\ndeclined, or deferred the live\u002Fno-mock test follow-up.\n\nIf the user agrees, use the explicit live execution path (`executions(action=\"run\")`\nfor a direct live run) and report the result separately from the earlier mocked\nverification. If the user declines or defers, state what remains untested and do\nnot claim live end-to-end verification.\n\n## Claiming success\n\nDo not tell the user a workflow is \"fixed\", \"verified\", \"tested\", \"working\", or\nhas \"no errors\" unless this turn has a passing `verify-built-workflow` or\n`executions(action=\"run\")` that exercised the path being claimed. A successful\n`build-workflow`\u002Fsave, a static `workflows(action=\"validate\")`, or your own\nnarration are NOT execution evidence. For a produced artifact (a file, generated\ndocument, or Code-node output), read the real output before calling it complete;\ndo not infer correctness from the fact that a node ran. If you could not run the\nfailing path or inspect the artifact, say so plainly — \"I couldn't verify X\nbecause Y\" — and name what is unconfirmed. An honest \"could not verify\" beats an\nunverified success claim.\n\n## Credentials before build\n\nCall `credentials(action=\"list\")` first to know what's available. Build the\nworkflow immediately — the builder preserves explicit valid credentials and\nauto-mocks missing or unselected ones. Do not ask whether to build now and set up\ncredentials later; building first and routing setup after verification is the\ndefault path. Workflow verification is automatic from the build outcome; the\norchestrator handles workflow setup after verification when the saved workflow\nstill has mocked credentials or placeholders.\n\n**Trust the build outcome over your own source file.** When `build-workflow`\nreturns `resolvedCredentialsByNode` (or `setupRequirement.status ===\n\"not_required\"`), the saved workflow is already connected to existing\ncredentials — even if your source used an unresolved `newCredential()` call.\nDo not ask the user to connect those credentials, do not offer the setup card\nfor them, and do not describe them as missing; at most mention which existing\ncredential is being used. Route credential setup only when the build outcome\nreports mocked credentials or `setupRequirement.status === \"required\"`.\n\n**Ask once when a service has multiple credentials of the same type.** If\n`credentials(action=\"list\")` shows more than one entry of the type a requested\nintegration needs (e.g. two `openAiApi` accounts, three Google Calendar\naccounts), use `ask-user` with a single-select to let the user pick one before\nbuilding, and use the chosen credential name in the workflow code. Exception: the\nuser already named the credential in their message — use it directly. With a\nsingle candidate, auto-apply and do not ask.\n\n**Ask which auth type to use when a service supports more than one.**\n`credentials(action=\"setup\")` opens a picker locked to a single `credentialType`\n— the user cannot switch auth types from there. So when\n`credentials(action=\"search-types\")` returns more than one auth option for a\nservice (e.g. `notionApi` and `notionOAuth2Api`, or `slackApi` and\n`slackOAuth2Api`), use `ask-user` with a single-select to let the user pick the\nauth type before calling `credentials(action=\"setup\")`. List OAuth2 first and\npresent it as the recommended option. Exception: the user has clearly indicated\nan auth type (e.g. \"api key\", \"oauth\", \"personal token\") — map it to the matching\n`credentialType` and use it directly without asking.\n",{"data":49,"body":56},{"name":4,"description":6,"recommended_tools":50},[51,52,53,54,55],"ask-user","verify-built-workflow","workflows","build-workflow","executions",{"type":57,"children":58},"root",[59,67,105,110,139,146,226,232,275,281,313,382,444,450,585,657,898,903,908,913,931,936,941,959,964,1059,1064,1069,1074,1086,1092,1125,1131,1144,1191,1223],{"type":60,"tag":61,"props":62,"children":63},"element","h1",{"id":4},[64],{"type":65,"value":66},"text","Post-Build Flow",{"type":60,"tag":68,"props":69,"children":70},"p",{},[71,73,79,81,87,89,95,97,103],{"type":65,"value":72},"Use this skill after ",{"type":60,"tag":74,"props":75,"children":77},"code",{"className":76},[],[78],{"type":65,"value":54},{"type":65,"value":80}," succeeds on a direct orchestrator build,\nespecially when the build result contains ",{"type":60,"tag":74,"props":82,"children":84},{"className":83},[],[85],{"type":65,"value":86},"postBuildFlow.required: true",{"type":65,"value":88},", or when\nthe current message contains ",{"type":60,"tag":74,"props":90,"children":92},{"className":91},[],[93],{"type":65,"value":94},"\u003Cworkflow-verification-follow-up>",{"type":65,"value":96}," or\n",{"type":60,"tag":74,"props":98,"children":100},{"className":99},[],[101],{"type":65,"value":102},"\u003Cworkflow-setup-required>",{"type":65,"value":104},".",{"type":60,"tag":68,"props":106,"children":107},{},[108],{"type":65,"value":109},"These instructions are in English, but user-visible text you write while\nfollowing them stays in the user's conversation language.",{"type":60,"tag":68,"props":111,"children":112},{},[113,115,121,123,129,131,137],{"type":65,"value":114},"For trigger ",{"type":60,"tag":74,"props":116,"children":118},{"className":117},[],[119],{"type":65,"value":120},"inputData",{"type":65,"value":122}," shapes, read\n",{"type":60,"tag":74,"props":124,"children":126},{"className":125},[],[127],{"type":65,"value":128},"knowledge-base\u002Freference\u002Ftrigger-input-data-shapes.md",{"type":65,"value":130}," in the sandbox workspace\nwhen available, or load this skill's ",{"type":60,"tag":74,"props":132,"children":134},{"className":133},[],[135],{"type":65,"value":136},"references\u002Ftrigger-input-data-shapes.md",{"type":65,"value":138},"\nlinked file.",{"type":60,"tag":140,"props":141,"children":143},"h2",{"id":142},"verification-follow-up",[144],{"type":65,"value":145},"Verification follow-up",{"type":60,"tag":68,"props":147,"children":148},{},[149,151,156,158,164,166,172,174,180,182,187,189,195,197,203,205,209,211,217,219,224],{"type":65,"value":150},"When the current message contains ",{"type":60,"tag":74,"props":152,"children":154},{"className":153},[],[155],{"type":65,"value":94},{"type":65,"value":157},", verify\nimmediately from the payload's ",{"type":60,"tag":74,"props":159,"children":161},{"className":160},[],[162],{"type":65,"value":163},"obligation",{"type":65,"value":165}," — do not acknowledge first. If the\nobligation is ",{"type":60,"tag":74,"props":167,"children":169},{"className":168},[],[170],{"type":65,"value":171},"ready_to_verify",{"type":65,"value":173}," or ",{"type":60,"tag":74,"props":175,"children":177},{"className":176},[],[178],{"type":65,"value":179},"verifying",{"type":65,"value":181},", call ",{"type":60,"tag":74,"props":183,"children":185},{"className":184},[],[186],{"type":65,"value":52},{"type":65,"value":188},". Do\n",{"type":60,"tag":190,"props":191,"children":192},"strong",{},[193],{"type":65,"value":194},"not",{"type":65,"value":196}," call ",{"type":60,"tag":74,"props":198,"children":200},{"className":199},[],[201],{"type":65,"value":202},"workflows(action=\"setup\")",{"type":65,"value":204}," in this turn and do ",{"type":60,"tag":190,"props":206,"children":207},{},[208],{"type":65,"value":194},{"type":65,"value":210}," declare the\nworkflow finished if ",{"type":60,"tag":74,"props":212,"children":214},{"className":213},[],[215],{"type":65,"value":216},"outcome.setupRequirement.status === \"required\"",{"type":65,"value":218}," — setup is\nrouted automatically as a separate ",{"type":60,"tag":74,"props":220,"children":222},{"className":221},[],[223],{"type":65,"value":102},{"type":65,"value":225}," step after\nverification.",{"type":60,"tag":140,"props":227,"children":229},{"id":228},"setup-follow-up",[230],{"type":65,"value":231},"Setup follow-up",{"type":60,"tag":68,"props":233,"children":234},{},[235,236,241,243,248,250,256,258,264,266,273],{"type":65,"value":150},{"type":60,"tag":74,"props":237,"children":239},{"className":238},[],[240],{"type":65,"value":102},{"type":65,"value":242},", your first action\nis to call ",{"type":60,"tag":74,"props":244,"children":246},{"className":245},[],[247],{"type":65,"value":202},{"type":65,"value":249}," with the ",{"type":60,"tag":74,"props":251,"children":253},{"className":252},[],[254],{"type":65,"value":255},"workflowId",{"type":65,"value":257}," from the payload. Do\nnot verify, do not ask, do not write a message first — the inline setup card in\nthe AI Assistant panel is the user-visible surface. If it returns ",{"type":60,"tag":74,"props":259,"children":261},{"className":260},[],[262],{"type":65,"value":263},"deferred: true",{"type":65,"value":265},", respect the user's choice and do not retry with any other setup tool.\nAfter setup completes or is applied, follow\n",{"type":60,"tag":267,"props":268,"children":270},"a",{"href":269},"#mocked-verification-live-test-follow-up",[271],{"type":65,"value":272},"Mocked verification live-test follow-up",{"type":65,"value":274},"\nif the payload or prior verification evidence says mocked credentials,\nsimulated node output, fixture overrides, temporary pin data, or another mocked\ninput was used.",{"type":60,"tag":140,"props":276,"children":278},{"id":277},"publishing-and-testing",[279],{"type":65,"value":280},"Publishing and testing",{"type":60,"tag":68,"props":282,"children":283},{},[284,289,291,297,299,304,306,311],{"type":60,"tag":190,"props":285,"children":286},{},[287],{"type":65,"value":288},"Publishing is never required for testing.",{"type":65,"value":290}," Both ",{"type":60,"tag":74,"props":292,"children":294},{"className":293},[],[295],{"type":65,"value":296},"executions(action=\"run\")",{"type":65,"value":298}," and\n",{"type":60,"tag":74,"props":300,"children":302},{"className":301},[],[303],{"type":65,"value":52},{"type":65,"value":305}," inject ",{"type":60,"tag":74,"props":307,"children":309},{"className":308},[],[310],{"type":65,"value":120},{"type":65,"value":312}," as the trigger's output — the\nworkflow does not need to be active. Form, webhook, chat, and other event-based\ntriggers are all testable while the workflow is unpublished. Never publish a\nworkflow as a precondition for running it.",{"type":60,"tag":68,"props":314,"children":315},{},[316,318,323,325,343,345,350,352,357,359,364,366,372,374,380],{"type":65,"value":317},"For workflows produced by ",{"type":60,"tag":74,"props":319,"children":321},{"className":320},[],[322],{"type":65,"value":54},{"type":65,"value":324},", ",{"type":60,"tag":190,"props":326,"children":327},{},[328,330,335,337,342],{"type":65,"value":329},"always verify with\n",{"type":60,"tag":74,"props":331,"children":333},{"className":332},[],[334],{"type":65,"value":52},{"type":65,"value":336},", never with raw ",{"type":60,"tag":74,"props":338,"children":340},{"className":339},[],[341],{"type":65,"value":296},{"type":65,"value":104},{"type":65,"value":344}," It reuses\nthe build outcome simulation plan, mocked credentials, and temporary pin data, so\ndestructive nodes are pinned and it is safe to call repeatedly. A raw\n",{"type":60,"tag":74,"props":346,"children":348},{"className":347},[],[349],{"type":65,"value":296},{"type":65,"value":351}," runs the workflow live with no pin data, and on a\nworkflow you just verified it surfaces a redundant run-approval prompt to the\nuser right after verification already executed the workflow. For follow-up\nrequests like \"verify again\", call ",{"type":60,"tag":74,"props":353,"children":355},{"className":354},[],[356],{"type":65,"value":52},{"type":65,"value":358}," with ",{"type":60,"tag":74,"props":360,"children":362},{"className":361},[],[363],{"type":65,"value":255},{"type":65,"value":365}," even\nif the original ",{"type":60,"tag":74,"props":367,"children":369},{"className":368},[],[370],{"type":65,"value":371},"workItemId",{"type":65,"value":373}," is not in context. For alternate deterministic\nscenarios, pass ",{"type":60,"tag":74,"props":375,"children":377},{"className":376},[],[378],{"type":65,"value":379},"fixtureOverrides",{"type":65,"value":381}," keyed by simulated node name instead of trying\nto force data through the trigger.",{"type":60,"tag":68,"props":383,"children":384},{},[385,397,399,404,406,411,413,418,420,426,428,434,436,442],{"type":60,"tag":190,"props":386,"children":387},{},[388,390,395],{"type":65,"value":389},"Reserve ",{"type":60,"tag":74,"props":391,"children":393},{"className":392},[],[394],{"type":65,"value":296},{"type":65,"value":396}," for runs the user explicitly asked for",{"type":65,"value":398},"\n(e.g. \"run it now\", \"execute it against my real data\"). Never call it on your own\nto re-test, expand coverage, or \"prove the full chain\" of a workflow you just\nbuilt or verified: re-run ",{"type":60,"tag":74,"props":400,"children":402},{"className":401},[],[403],{"type":65,"value":52},{"type":65,"value":405}," (with ",{"type":60,"tag":74,"props":407,"children":409},{"className":408},[],[410],{"type":65,"value":379},{"type":65,"value":412}," to\nreach an unverified branch) instead, or report the partial coverage and let the\nuser decide whether to run it.\nIf ",{"type":60,"tag":74,"props":414,"children":416},{"className":415},[],[417],{"type":65,"value":379},{"type":65,"value":419}," is rejected with ",{"type":60,"tag":74,"props":421,"children":423},{"className":422},[],[424],{"type":65,"value":425},"invalid_fixture_override",{"type":65,"value":427},", the target\nnode was not classified as simulated in the build outcome. Do not retry the same\noverride. If that node's data controls a branch that needs verification and you\nhave the source file, load ",{"type":60,"tag":74,"props":429,"children":431},{"className":430},[],[432],{"type":65,"value":433},"workflow-builder",{"type":65,"value":435},", declare representative ",{"type":60,"tag":74,"props":437,"children":439},{"className":438},[],[440],{"type":65,"value":441},"output",{"type":65,"value":443},"\nfixtures on the controlling upstream node, rebuild the same workflow, and verify\nagain.",{"type":60,"tag":140,"props":445,"children":447},{"id":446},"after-build-workflow-succeeds",[448],{"type":65,"value":449},"After build-workflow succeeds",{"type":60,"tag":451,"props":452,"children":453},"ol",{},[454],{"type":60,"tag":455,"props":456,"children":457},"li",{},[458,460,465,466,471,472,478,479,485,487,493,495,501,503,508,510],{"type":65,"value":459},"Read ",{"type":60,"tag":74,"props":461,"children":463},{"className":462},[],[464],{"type":65,"value":255},{"type":65,"value":324},{"type":60,"tag":74,"props":467,"children":469},{"className":468},[],[470],{"type":65,"value":371},{"type":65,"value":324},{"type":60,"tag":74,"props":473,"children":475},{"className":474},[],[476],{"type":65,"value":477},"triggerNodes",{"type":65,"value":324},{"type":60,"tag":74,"props":480,"children":482},{"className":481},[],[483],{"type":65,"value":484},"verificationReadiness",{"type":65,"value":486},",\n",{"type":60,"tag":74,"props":488,"children":490},{"className":489},[],[491],{"type":65,"value":492},"setupRequirement",{"type":65,"value":494},", and ",{"type":60,"tag":74,"props":496,"children":498},{"className":497},[],[499],{"type":65,"value":500},"postBuildFlow",{"type":65,"value":502}," from the tool output. If the output\nis missing a ",{"type":60,"tag":74,"props":504,"children":506},{"className":505},[],[507],{"type":65,"value":255},{"type":65,"value":509},", explain that the build did not submit.\n",{"type":60,"tag":511,"props":512,"children":513},"ul",{},[514,527,560],{"type":60,"tag":455,"props":515,"children":516},{},[517,519,525],{"type":65,"value":518},"Before treating a saved workflow as done, inspect the persisted workflow\nwith ",{"type":60,"tag":74,"props":520,"children":522},{"className":521},[],[523],{"type":65,"value":524},"workflows(action=\"get-as-code\", workflowId)",{"type":65,"value":526}," or read the bound\nworkspace source file, and compare the actual graph to the user's requested\noutcome. Build\u002Fsave success only means a workflow was saved; it does not\nprove the saved workflow is good.",{"type":60,"tag":455,"props":528,"children":529},{},[530,532,537,539,544,546,551,553,558],{"type":65,"value":531},"If the persisted workflow is missing the requested outcome, has an obvious\ndead-end draft shape, or the verification evidence is weak, load the\n",{"type":60,"tag":74,"props":533,"children":535},{"className":534},[],[536],{"type":65,"value":433},{"type":65,"value":538}," skill and patch the same workflow with ",{"type":60,"tag":74,"props":540,"children":542},{"className":541},[],[543],{"type":65,"value":54},{"type":65,"value":545},"\nusing the existing ",{"type":60,"tag":74,"props":547,"children":549},{"className":548},[],[550],{"type":65,"value":255},{"type":65,"value":552}," and ",{"type":60,"tag":74,"props":554,"children":556},{"className":555},[],[557],{"type":65,"value":371},{"type":65,"value":559},"; then inspect and verify\nagain.",{"type":60,"tag":455,"props":561,"children":562},{},[563,565,571,573,577,578,583],{"type":65,"value":564},"If ",{"type":60,"tag":74,"props":566,"children":568},{"className":567},[],[569],{"type":65,"value":570},"verificationReadiness.status === \"already_verified\"",{"type":65,"value":572},", treat the\nworkflow as verified and do ",{"type":60,"tag":190,"props":574,"children":575},{},[576],{"type":65,"value":194},{"type":65,"value":196},{"type":60,"tag":74,"props":579,"children":581},{"className":580},[],[582],{"type":65,"value":52},{"type":65,"value":584}," again.",{"type":60,"tag":511,"props":586,"children":587},{},[588,627,645],{"type":60,"tag":455,"props":589,"children":590},{},[591,592,598,600,605,606,611,613,618,620,625],{"type":65,"value":564},{"type":60,"tag":74,"props":593,"children":595},{"className":594},[],[596],{"type":65,"value":597},"verificationReadiness.status === \"ready\"",{"type":65,"value":599},", call\n",{"type":60,"tag":74,"props":601,"children":603},{"className":602},[],[604],{"type":65,"value":52},{"type":65,"value":249},{"type":60,"tag":74,"props":607,"children":609},{"className":608},[],[610],{"type":65,"value":255},{"type":65,"value":612},", the ",{"type":60,"tag":74,"props":614,"children":616},{"className":615},[],[617],{"type":65,"value":371},{"type":65,"value":619}," when you\nhave it, and the trigger-appropriate ",{"type":60,"tag":74,"props":621,"children":623},{"className":622},[],[624],{"type":65,"value":120},{"type":65,"value":626}," shape.",{"type":60,"tag":455,"props":628,"children":629},{},[630,631,637,638,643],{"type":65,"value":564},{"type":60,"tag":74,"props":632,"children":634},{"className":633},[],[635],{"type":65,"value":636},"verificationReadiness.status === \"needs_setup\"",{"type":65,"value":599},{"type":60,"tag":74,"props":639,"children":641},{"className":640},[],[642],{"type":65,"value":202},{"type":65,"value":644}," with the workflowId so the user can configure it\nthrough the inline setup card in the AI Assistant panel.",{"type":60,"tag":455,"props":646,"children":647},{},[648,649,655],{"type":65,"value":564},{"type":60,"tag":74,"props":650,"children":652},{"className":651},[],[653],{"type":65,"value":654},"verificationReadiness.status === \"not_verifiable\"",{"type":65,"value":656},", do not infer\nlower-level verification conditions; use the readiness guidance to give a\nclear warning or manual-test note. This is a warning completion state, not\na verified state and not an infinite blocker.",{"type":60,"tag":451,"props":658,"children":660},{"start":659},2,[661,791,811,823,849,860,873,885],{"type":60,"tag":455,"props":662,"children":663},{},[664,666,671,673,679,681,687,689,694,696,702,703,709,711],{"type":65,"value":665},"Judge coverage, not just status. A ",{"type":60,"tag":74,"props":667,"children":669},{"className":668},[],[670],{"type":65,"value":52},{"type":65,"value":672}," result with\n",{"type":60,"tag":74,"props":674,"children":676},{"className":675},[],[677],{"type":65,"value":678},"success: true",{"type":65,"value":680}," but a non-empty ",{"type":60,"tag":74,"props":682,"children":684},{"className":683},[],[685],{"type":65,"value":686},"nodesNotReached",{"type":65,"value":688}," is ",{"type":60,"tag":190,"props":690,"children":691},{},[692],{"type":65,"value":693},"partial",{"type":65,"value":695}," evidence:\nthe execution ended early (see ",{"type":60,"tag":74,"props":697,"children":699},{"className":698},[],[700],{"type":65,"value":701},"lastNodeExecuted",{"type":65,"value":552},{"type":60,"tag":74,"props":704,"children":706},{"className":705},[],[707],{"type":65,"value":708},"coverageNote",{"type":65,"value":710},") and\nthe listed nodes — including any planned simulations — never ran.\n",{"type":60,"tag":511,"props":712,"children":713},{},[714,734,753,778],{"type":60,"tag":455,"props":715,"children":716},{},[717,719,725,727,732],{"type":65,"value":718},"Most common cause: a lookup\u002Fquery node returned zero items (n8n stops\ndownstream nodes on empty item lists). If the dead-end is a Data Table\nlookup, insert a matching test row with ",{"type":60,"tag":74,"props":720,"children":722},{"className":721},[],[723],{"type":65,"value":724},"data-tables(action=\"insert-rows\")",{"type":65,"value":726},",\nre-run ",{"type":60,"tag":74,"props":728,"children":730},{"className":729},[],[731],{"type":65,"value":52},{"type":65,"value":733},", and delete the test row afterwards.",{"type":60,"tag":455,"props":735,"children":736},{},[737,739,744,746,751],{"type":65,"value":738},"If you cannot seed the data source, report honestly: name which nodes\nwere verified and which were not, and tell the user the unreached part\nneeds a manual test. Do not start a live ",{"type":60,"tag":74,"props":740,"children":742},{"className":741},[],[743],{"type":65,"value":296},{"type":65,"value":745},"\nyourself to reach those nodes; offer the user a test instead. Never claim\nend-to-end verification when ",{"type":60,"tag":74,"props":747,"children":749},{"className":748},[],[750],{"type":65,"value":686},{"type":65,"value":752}," is non-empty.",{"type":60,"tag":455,"props":754,"children":755},{},[756,758,763,765,770,771,776],{"type":65,"value":757},"If the unreached nodes sit behind IF\u002FSwitch logic controlled by a live or\nnondeterministic upstream node, and alternate-branch verification is part\nof this turn's goal, first try one source-file repair: add representative\n",{"type":60,"tag":74,"props":759,"children":761},{"className":760},[],[762],{"type":65,"value":441},{"type":65,"value":764}," fixtures to that upstream node, rebuild the same workflow, and\nre-run ",{"type":60,"tag":74,"props":766,"children":768},{"className":767},[],[769],{"type":65,"value":52},{"type":65,"value":358},{"type":60,"tag":74,"props":772,"children":774},{"className":773},[],[775],{"type":65,"value":379},{"type":65,"value":777},". Only fall back to a\nmanual-test note when you cannot safely patch the source or the repair\nbudget is exhausted.",{"type":60,"tag":455,"props":779,"children":780},{},[781,783,789],{"type":65,"value":782},"Relay ",{"type":60,"tag":74,"props":784,"children":786},{"className":785},[],[787],{"type":65,"value":788},"simulationNote",{"type":65,"value":790}," (nodes whose output was simulated) to the user\nwhenever it is present.",{"type":60,"tag":455,"props":792,"children":793},{},[794,796,802,804,809],{"type":65,"value":795},"After verification handling, if ",{"type":60,"tag":74,"props":797,"children":799},{"className":798},[],[800],{"type":65,"value":801},"setupRequirement.status === \"required\"",{"type":65,"value":803}," and\nsetup has not already run for this build, call ",{"type":60,"tag":74,"props":805,"children":807},{"className":806},[],[808],{"type":65,"value":202},{"type":65,"value":810},"\nwith the workflowId.",{"type":60,"tag":455,"props":812,"children":813},{},[814,816,821],{"type":65,"value":815},"When ",{"type":60,"tag":74,"props":817,"children":819},{"className":818},[],[820],{"type":65,"value":202},{"type":65,"value":822}," opens the inline setup card, the card is the\nuser-visible surface. Do not tell the user to open the editor, use the canvas,\nor click a Setup button; the user does not need to navigate anywhere.",{"type":60,"tag":455,"props":824,"children":825},{},[826,827,832,834,839,841,847],{"type":65,"value":815},{"type":60,"tag":74,"props":828,"children":830},{"className":829},[],[831],{"type":65,"value":202},{"type":65,"value":833}," returns ",{"type":60,"tag":74,"props":835,"children":837},{"className":836},[],[838],{"type":65,"value":263},{"type":65,"value":840},", respect the user's\ndecision — do not retry with ",{"type":60,"tag":74,"props":842,"children":844},{"className":843},[],[845],{"type":65,"value":846},"credentials(action=\"setup\")",{"type":65,"value":848}," or any other\nsetup tool. The user chose to set things up later.",{"type":60,"tag":455,"props":850,"children":851},{},[852,854,858],{"type":65,"value":853},"After setup completes or is applied, follow\n",{"type":60,"tag":267,"props":855,"children":856},{"href":269},[857],{"type":65,"value":272},{"type":65,"value":859},"\nwhen the latest verification evidence used mocks or simulations. If this\nfollow-up is due, ask only that question now; do not also ask about the error\nworkflow in the same response.",{"type":60,"tag":455,"props":861,"children":862},{},[863,865,871],{"type":65,"value":864},"For a direct new primary workflow, follow\n",{"type":60,"tag":267,"props":866,"children":868},{"href":867},"#error-workflow-follow-up",[869],{"type":65,"value":870},"Error workflow follow-up",{"type":65,"value":872}," after the mocked\nlive-test follow-up is no longer pending for this workflow. If no mocked\nlive-test follow-up is due, ask about the error workflow before any generic\ntesting prompt. Do not replace this explicit opt-in with a generic \"add\nanything else?\", publish, or test question.",{"type":60,"tag":455,"props":874,"children":875},{},[876,878,883],{"type":65,"value":877},"Ask the user if they want to test the workflow (skip this if\n",{"type":60,"tag":74,"props":879,"children":881},{"className":880},[],[882],{"type":65,"value":52},{"type":65,"value":884}," already proved it works end-to-end with full\ncoverage). If you need to ask about both generic testing and an error\nworkflow, ask the error-workflow opt-in first and leave generic testing as a\nlater follow-up unless the user already requested testing.",{"type":60,"tag":455,"props":886,"children":887},{},[888,890,896],{"type":65,"value":889},"Only call ",{"type":60,"tag":74,"props":891,"children":893},{"className":892},[],[894],{"type":65,"value":895},"workflows(action=\"publish\")",{"type":65,"value":897}," when the user explicitly asks to\npublish. Never publish automatically.",{"type":60,"tag":140,"props":899,"children":901},{"id":900},"error-workflow-follow-up",[902],{"type":65,"value":870},{"type":60,"tag":68,"props":904,"children":905},{},[906],{"type":65,"value":907},"This follow-up comes after the mocked verification live-test follow-up when that\nfollow-up is due, and before generic \"want to test it?\" prompts. For a direct\nnew primary workflow, ask about the error workflow after the user answers,\ndeclines, or defers any pending live\u002Fno-mock testing question. If no mocked\nlive-test follow-up is due, ask about the error workflow first.",{"type":60,"tag":68,"props":909,"children":910},{},[911],{"type":65,"value":912},"If you just built an Error Trigger workflow because the user opted into adding\none for a known target workflow, do not ask whether to build another error\nworkflow. Continue the publish-before-assign flow for the target workflow:\nask whether to publish the error workflow and set it on that target workflow,\nthen publish and assign only after the user approves.",{"type":60,"tag":68,"props":914,"children":915},{},[916,918,923,925,929],{"type":65,"value":917},"After saving and handling verification\u002Fsetup for a direct new primary workflow,\nask once whether the user wants to build an error workflow for that workflow.\nUse ",{"type":60,"tag":74,"props":919,"children":921},{"className":920},[],[922],{"type":65,"value":51},{"type":65,"value":924}," with a yes\u002Fno choice or a concise visible question. Do ",{"type":60,"tag":190,"props":926,"children":927},{},[928],{"type":65,"value":194},{"type":65,"value":930},"\ncreate an error workflow before the user opts in.",{"type":60,"tag":68,"props":932,"children":933},{},[934],{"type":65,"value":935},"The opt-in must explicitly mention an error workflow and the target workflow\nname. A generic follow-up like \"Want me to add anything else?\", \"Want me to\npublish it?\", or \"Want to test it?\" does not satisfy this step.",{"type":60,"tag":68,"props":937,"children":938},{},[939],{"type":65,"value":940},"Skip this follow-up when:",{"type":60,"tag":511,"props":942,"children":943},{},[944,949,954],{"type":60,"tag":455,"props":945,"children":946},{},[947],{"type":65,"value":948},"The workflow you just built is itself an error workflow or starts with an\nError Trigger.",{"type":60,"tag":455,"props":950,"children":951},{},[952],{"type":65,"value":953},"The build is a supporting workflow, repair, small edit, planned-task\nsubtask, or workflow-level settings patch.",{"type":60,"tag":455,"props":955,"children":956},{},[957],{"type":65,"value":958},"The user already asked for an error workflow in the original request, already\ndeclined one, or the target workflow already has the desired error workflow\nset.",{"type":60,"tag":68,"props":960,"children":961},{},[962],{"type":65,"value":963},"If the user says yes:",{"type":60,"tag":451,"props":965,"children":966},{},[967,979,984,996,1054],{"type":60,"tag":455,"props":968,"children":969},{},[970,972,977],{"type":65,"value":971},"Load ",{"type":60,"tag":74,"props":973,"children":975},{"className":974},[],[976],{"type":65,"value":433},{"type":65,"value":978}," and build a separate error workflow using the user's\nrequested notification destination. Keep the error workflow scoped to the\ntarget workflow the user opted in for.",{"type":60,"tag":455,"props":980,"children":981},{},[982],{"type":65,"value":983},"Do not ask whether this new error workflow needs its own error workflow.",{"type":60,"tag":455,"props":985,"children":986},{},[987,989,994],{"type":65,"value":988},"The error workflow must be published before it can be assigned. If the user\nhas not already asked you to publish and attach it, ask whether to publish it\nand set it as the error workflow for the named target workflow. When the user\nagrees, call ",{"type":60,"tag":74,"props":990,"children":992},{"className":991},[],[993],{"type":65,"value":895},{"type":65,"value":995}," for the error workflow and let the\nHITL approval card handle confirmation.",{"type":60,"tag":455,"props":997,"children":998},{},[999,1001,1007,1009,1014,1016,1022,1024,1029,1031,1037,1039,1045,1047,1052],{"type":65,"value":1000},"After publish succeeds, set the original workflow's workflow-level\n",{"type":60,"tag":74,"props":1002,"children":1004},{"className":1003},[],[1005],{"type":65,"value":1006},"settings.errorWorkflow",{"type":65,"value":1008}," to the ",{"type":60,"tag":190,"props":1010,"children":1011},{},[1012],{"type":65,"value":1013},"error workflow's workflowId",{"type":65,"value":1015},". Do not use\nthe published ",{"type":60,"tag":74,"props":1017,"children":1019},{"className":1018},[],[1020],{"type":65,"value":1021},"activeVersionId",{"type":65,"value":1023},", workflow name, a placeholder, or a local SDK\nid. If you have the original source file, edit it; otherwise call\n",{"type":60,"tag":74,"props":1025,"children":1027},{"className":1026},[],[1028],{"type":65,"value":524},{"type":65,"value":1030}," for the original workflow,\nwrite the returned code to a ",{"type":60,"tag":74,"props":1032,"children":1034},{"className":1033},[],[1035],{"type":65,"value":1036},".workflow.ts",{"type":65,"value":1038}," file, add\n",{"type":60,"tag":74,"props":1040,"children":1042},{"className":1041},[],[1043],{"type":65,"value":1044},".settings({ errorWorkflow: '\u003Cpublished-error-workflow-id>' })",{"type":65,"value":1046},", and call\n",{"type":60,"tag":74,"props":1048,"children":1050},{"className":1049},[],[1051],{"type":65,"value":54},{"type":65,"value":1053}," for the original workflow. The workflow edit approval card\nis the HITL surface for this assignment.",{"type":60,"tag":455,"props":1055,"children":1056},{},[1057],{"type":65,"value":1058},"Summarize the result with explicit per-workflow language: this error\nworkflow was assigned only to the named target workflow. Mention that n8n has\nno global or instance-wide error workflow setting only when the user\nexplicitly asked about, requested, or referenced global\u002Finstance-wide error\nworkflow behavior.",{"type":60,"tag":140,"props":1060,"children":1062},{"id":1061},"mocked-verification-live-test-follow-up",[1063],{"type":65,"value":272},{"type":60,"tag":68,"props":1065,"children":1066},{},[1067],{"type":65,"value":1068},"After workflow setup completes or is applied, if the latest verification for\nthat workflow used mocked credentials, simulated node output, fixture overrides,\ntemporary pin data, or another mocked input, ask whether the user wants a live\ntest without mocks. Do not run the live test automatically.",{"type":60,"tag":68,"props":1070,"children":1071},{},[1072],{"type":65,"value":1073},"This follow-up has priority over the error-workflow opt-in for a direct new\nprimary workflow. If both follow-ups are due, ask about the live\u002Fno-mock test\nfirst and ask the error-workflow question only after the user has answered,\ndeclined, or deferred the live\u002Fno-mock test follow-up.",{"type":60,"tag":68,"props":1075,"children":1076},{},[1077,1079,1084],{"type":65,"value":1078},"If the user agrees, use the explicit live execution path (",{"type":60,"tag":74,"props":1080,"children":1082},{"className":1081},[],[1083],{"type":65,"value":296},{"type":65,"value":1085},"\nfor a direct live run) and report the result separately from the earlier mocked\nverification. If the user declines or defers, state what remains untested and do\nnot claim live end-to-end verification.",{"type":60,"tag":140,"props":1087,"children":1089},{"id":1088},"claiming-success",[1090],{"type":65,"value":1091},"Claiming success",{"type":60,"tag":68,"props":1093,"children":1094},{},[1095,1097,1102,1103,1108,1110,1115,1117,1123],{"type":65,"value":1096},"Do not tell the user a workflow is \"fixed\", \"verified\", \"tested\", \"working\", or\nhas \"no errors\" unless this turn has a passing ",{"type":60,"tag":74,"props":1098,"children":1100},{"className":1099},[],[1101],{"type":65,"value":52},{"type":65,"value":96},{"type":60,"tag":74,"props":1104,"children":1106},{"className":1105},[],[1107],{"type":65,"value":296},{"type":65,"value":1109}," that exercised the path being claimed. A successful\n",{"type":60,"tag":74,"props":1111,"children":1113},{"className":1112},[],[1114],{"type":65,"value":54},{"type":65,"value":1116},"\u002Fsave, a static ",{"type":60,"tag":74,"props":1118,"children":1120},{"className":1119},[],[1121],{"type":65,"value":1122},"workflows(action=\"validate\")",{"type":65,"value":1124},", or your own\nnarration are NOT execution evidence. For a produced artifact (a file, generated\ndocument, or Code-node output), read the real output before calling it complete;\ndo not infer correctness from the fact that a node ran. If you could not run the\nfailing path or inspect the artifact, say so plainly — \"I couldn't verify X\nbecause Y\" — and name what is unconfirmed. An honest \"could not verify\" beats an\nunverified success claim.",{"type":60,"tag":140,"props":1126,"children":1128},{"id":1127},"credentials-before-build",[1129],{"type":65,"value":1130},"Credentials before build",{"type":60,"tag":68,"props":1132,"children":1133},{},[1134,1136,1142],{"type":65,"value":1135},"Call ",{"type":60,"tag":74,"props":1137,"children":1139},{"className":1138},[],[1140],{"type":65,"value":1141},"credentials(action=\"list\")",{"type":65,"value":1143}," first to know what's available. Build the\nworkflow immediately — the builder preserves explicit valid credentials and\nauto-mocks missing or unselected ones. Do not ask whether to build now and set up\ncredentials later; building first and routing setup after verification is the\ndefault path. Workflow verification is automatic from the build outcome; the\norchestrator handles workflow setup after verification when the saved workflow\nstill has mocked credentials or placeholders.",{"type":60,"tag":68,"props":1145,"children":1146},{},[1147,1152,1154,1159,1161,1167,1169,1175,1177,1183,1185,1190],{"type":60,"tag":190,"props":1148,"children":1149},{},[1150],{"type":65,"value":1151},"Trust the build outcome over your own source file.",{"type":65,"value":1153}," When ",{"type":60,"tag":74,"props":1155,"children":1157},{"className":1156},[],[1158],{"type":65,"value":54},{"type":65,"value":1160},"\nreturns ",{"type":60,"tag":74,"props":1162,"children":1164},{"className":1163},[],[1165],{"type":65,"value":1166},"resolvedCredentialsByNode",{"type":65,"value":1168}," (or ",{"type":60,"tag":74,"props":1170,"children":1172},{"className":1171},[],[1173],{"type":65,"value":1174},"setupRequirement.status === \"not_required\"",{"type":65,"value":1176},"), the saved workflow is already connected to existing\ncredentials — even if your source used an unresolved ",{"type":60,"tag":74,"props":1178,"children":1180},{"className":1179},[],[1181],{"type":65,"value":1182},"newCredential()",{"type":65,"value":1184}," call.\nDo not ask the user to connect those credentials, do not offer the setup card\nfor them, and do not describe them as missing; at most mention which existing\ncredential is being used. Route credential setup only when the build outcome\nreports mocked credentials or ",{"type":60,"tag":74,"props":1186,"children":1188},{"className":1187},[],[1189],{"type":65,"value":801},{"type":65,"value":104},{"type":60,"tag":68,"props":1192,"children":1193},{},[1194,1199,1201,1206,1208,1214,1216,1221],{"type":60,"tag":190,"props":1195,"children":1196},{},[1197],{"type":65,"value":1198},"Ask once when a service has multiple credentials of the same type.",{"type":65,"value":1200}," If\n",{"type":60,"tag":74,"props":1202,"children":1204},{"className":1203},[],[1205],{"type":65,"value":1141},{"type":65,"value":1207}," shows more than one entry of the type a requested\nintegration needs (e.g. two ",{"type":60,"tag":74,"props":1209,"children":1211},{"className":1210},[],[1212],{"type":65,"value":1213},"openAiApi",{"type":65,"value":1215}," accounts, three Google Calendar\naccounts), use ",{"type":60,"tag":74,"props":1217,"children":1219},{"className":1218},[],[1220],{"type":65,"value":51},{"type":65,"value":1222}," with a single-select to let the user pick one before\nbuilding, and use the chosen credential name in the workflow code. Exception: the\nuser already named the credential in their message — use it directly. With a\nsingle candidate, auto-apply and do not ask.",{"type":60,"tag":68,"props":1224,"children":1225},{},[1226,1231,1236,1238,1244,1246,1252,1254,1260,1261,1267,1269,1275,1276,1282,1284,1289,1291,1296,1298,1303],{"type":60,"tag":190,"props":1227,"children":1228},{},[1229],{"type":65,"value":1230},"Ask which auth type to use when a service supports more than one.",{"type":60,"tag":74,"props":1232,"children":1234},{"className":1233},[],[1235],{"type":65,"value":846},{"type":65,"value":1237}," opens a picker locked to a single ",{"type":60,"tag":74,"props":1239,"children":1241},{"className":1240},[],[1242],{"type":65,"value":1243},"credentialType",{"type":65,"value":1245},"\n— the user cannot switch auth types from there. So when\n",{"type":60,"tag":74,"props":1247,"children":1249},{"className":1248},[],[1250],{"type":65,"value":1251},"credentials(action=\"search-types\")",{"type":65,"value":1253}," returns more than one auth option for a\nservice (e.g. ",{"type":60,"tag":74,"props":1255,"children":1257},{"className":1256},[],[1258],{"type":65,"value":1259},"notionApi",{"type":65,"value":552},{"type":60,"tag":74,"props":1262,"children":1264},{"className":1263},[],[1265],{"type":65,"value":1266},"notionOAuth2Api",{"type":65,"value":1268},", or ",{"type":60,"tag":74,"props":1270,"children":1272},{"className":1271},[],[1273],{"type":65,"value":1274},"slackApi",{"type":65,"value":298},{"type":60,"tag":74,"props":1277,"children":1279},{"className":1278},[],[1280],{"type":65,"value":1281},"slackOAuth2Api",{"type":65,"value":1283},"), use ",{"type":60,"tag":74,"props":1285,"children":1287},{"className":1286},[],[1288],{"type":65,"value":51},{"type":65,"value":1290}," with a single-select to let the user pick the\nauth type before calling ",{"type":60,"tag":74,"props":1292,"children":1294},{"className":1293},[],[1295],{"type":65,"value":846},{"type":65,"value":1297},". List OAuth2 first and\npresent it as the recommended option. Exception: the user has clearly indicated\nan auth type (e.g. \"api key\", \"oauth\", \"personal token\") — map it to the matching\n",{"type":60,"tag":74,"props":1299,"children":1301},{"className":1300},[],[1302],{"type":65,"value":1243},{"type":65,"value":1304}," and use it directly without asking.",{"items":1306,"total":1405},[1307,1322,1337,1351,1363,1376,1388],{"slug":1308,"name":1308,"fn":1309,"description":1310,"org":1311,"tags":1312,"stars":20,"repoUrl":21,"updatedAt":1321},"config-evals","configure workflow evaluations","Builds and maintains configuration-based evaluations on a workflow with the eval-config tool. Use when the user asks to set up, add, view, change, or remove an evaluation, score, grade, or judge a workflow's output, or measure answer quality against a test dataset. This is the only eval form Instance AI handles — it does not touch on-canvas evaluation nodes.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[1313,1316,1317,1320],{"name":1314,"slug":1315,"type":13},"Evals","evals",{"name":8,"slug":8,"type":13},{"name":1318,"slug":1319,"type":13},"Testing","testing",{"name":18,"slug":19,"type":13},"2026-07-24T05:37:07.398695",{"slug":1323,"name":1323,"fn":1324,"description":1325,"org":1326,"tags":1327,"stars":20,"repoUrl":21,"updatedAt":1336},"credential-setup-with-computer-use","configure n8n credentials via browser","Guides n8n credential setup through Computer Use browser tools. Use when a user needs OAuth apps, API keys, client IDs, client secrets, or other credential values from an external service console.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[1328,1329,1332,1333],{"name":15,"slug":16,"type":13},{"name":1330,"slug":1331,"type":13},"Configuration","configuration",{"name":8,"slug":8,"type":13},{"name":1334,"slug":1335,"type":13},"OAuth","oauth","2026-06-30T07:40:45.54",{"slug":1338,"name":1338,"fn":1339,"description":1340,"org":1341,"tags":1342,"stars":20,"repoUrl":21,"updatedAt":1350},"data-table-manager","manage n8n Data Tables","Load before calling data-tables or parse-file. Use for natural standalone requests like \"what data tables do I have?\", \"show\u002Flist my tables\", or \"what columns are in this table?\", and whenever the user asks to list, show, create, inspect, import, seed, query, update, clean up, rename columns in, or delete data tables and rows, especially from CSV\u002FXLSX\u002FJSON attachments. Also load before building or planning workflows that create or write to Data Tables (then load workflow-builder before build-workflow).",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[1343,1346,1349],{"name":1344,"slug":1345,"type":13},"Data Engineering","data-engineering",{"name":1347,"slug":1348,"type":13},"Database","database",{"name":8,"slug":8,"type":13},"2026-07-27T06:07:14.648144",{"slug":1352,"name":1352,"fn":1353,"description":1354,"org":1355,"tags":1356,"stars":20,"repoUrl":21,"updatedAt":1336},"debugging-executions","debug failed n8n workflow executions","Debug failed or wrong-output workflow executions using executions tools. Load when the user reports execution failures, unexpected node output, empty parameter values after a successful run, or a node showing a red or failed expression error.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[1357,1358,1361,1362],{"name":15,"slug":16,"type":13},{"name":1359,"slug":1360,"type":13},"Debugging","debugging",{"name":8,"slug":8,"type":13},{"name":18,"slug":19,"type":13},{"slug":1364,"name":1364,"fn":1365,"description":1366,"org":1367,"tags":1368,"stars":20,"repoUrl":21,"updatedAt":1375},"intent-recognition","classify automation requests by control flow","Classifies automation requests using two decisions: anchor (which primitive owns the top-level control flow — workflow-anchored, agent-anchored, needs-clarification, or out-of-scope) and embeds_other (whether the other primitive appears embedded inside — an agent step inside a workflow, or a workflow invoked as an agent tool). Must be used before deciding the intent of any automation request, including compound requests with multiple independent automations, mid-build extensions to an existing workflow or agent, one-off questions or reports that need external systems you cannot query directly, and requests that need clarification before an anchor can be chosen, before choosing workflow-builder, planning, or an agent-oriented design.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[1369,1372,1373,1374],{"name":1370,"slug":1371,"type":13},"Agents","agents",{"name":15,"slug":16,"type":13},{"name":8,"slug":8,"type":13},{"name":18,"slug":19,"type":13},"2026-07-30T05:30:06.772347",{"slug":1377,"name":1377,"fn":1378,"description":1379,"org":1380,"tags":1381,"stars":20,"repoUrl":21,"updatedAt":1387},"n8n-cli","manage n8n workflows from the CLI","Use the n8n CLI to manage workflows, credentials, executions, and more on an n8n instance. Use when the user asks to interact with n8n, automate workflows, manage credentials, or operate their instance from the command line.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[1382,1383,1385,1386],{"name":15,"slug":16,"type":13},{"name":1384,"slug":28,"type":13},"CLI",{"name":8,"slug":8,"type":13},{"name":18,"slug":19,"type":13},"2026-04-06T18:38:40.360123",{"slug":1389,"name":1389,"fn":1390,"description":1391,"org":1392,"tags":1393,"stars":20,"repoUrl":21,"updatedAt":1404},"n8n-docs-assistant","retrieve n8n documentation and guidance","Answers n8n product, setup, credential, node, hosting, API, and usage questions from current n8n docs. Load n8n-docs via load_tool before calling it (search \"n8n docs\" if not visible). Use when the user asks how to configure, set up, troubleshoot, or understand n8n behavior, especially credential setup questions opened from the credential modal.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[1394,1397,1398,1401],{"name":1395,"slug":1396,"type":13},"Documentation","documentation",{"name":8,"slug":8,"type":13},{"name":1399,"slug":1400,"type":13},"Reference","reference",{"name":1402,"slug":1403,"type":13},"Search","search","2026-07-27T06:07:15.692906",11,{"items":1407,"total":1506},[1408,1415,1422,1428,1435,1442,1449,1456,1465,1477,1483,1492],{"slug":1308,"name":1308,"fn":1309,"description":1310,"org":1409,"tags":1410,"stars":20,"repoUrl":21,"updatedAt":1321},{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[1411,1412,1413,1414],{"name":1314,"slug":1315,"type":13},{"name":8,"slug":8,"type":13},{"name":1318,"slug":1319,"type":13},{"name":18,"slug":19,"type":13},{"slug":1323,"name":1323,"fn":1324,"description":1325,"org":1416,"tags":1417,"stars":20,"repoUrl":21,"updatedAt":1336},{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[1418,1419,1420,1421],{"name":15,"slug":16,"type":13},{"name":1330,"slug":1331,"type":13},{"name":8,"slug":8,"type":13},{"name":1334,"slug":1335,"type":13},{"slug":1338,"name":1338,"fn":1339,"description":1340,"org":1423,"tags":1424,"stars":20,"repoUrl":21,"updatedAt":1350},{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[1425,1426,1427],{"name":1344,"slug":1345,"type":13},{"name":1347,"slug":1348,"type":13},{"name":8,"slug":8,"type":13},{"slug":1352,"name":1352,"fn":1353,"description":1354,"org":1429,"tags":1430,"stars":20,"repoUrl":21,"updatedAt":1336},{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[1431,1432,1433,1434],{"name":15,"slug":16,"type":13},{"name":1359,"slug":1360,"type":13},{"name":8,"slug":8,"type":13},{"name":18,"slug":19,"type":13},{"slug":1364,"name":1364,"fn":1365,"description":1366,"org":1436,"tags":1437,"stars":20,"repoUrl":21,"updatedAt":1375},{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[1438,1439,1440,1441],{"name":1370,"slug":1371,"type":13},{"name":15,"slug":16,"type":13},{"name":8,"slug":8,"type":13},{"name":18,"slug":19,"type":13},{"slug":1377,"name":1377,"fn":1378,"description":1379,"org":1443,"tags":1444,"stars":20,"repoUrl":21,"updatedAt":1387},{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[1445,1446,1447,1448],{"name":15,"slug":16,"type":13},{"name":1384,"slug":28,"type":13},{"name":8,"slug":8,"type":13},{"name":18,"slug":19,"type":13},{"slug":1389,"name":1389,"fn":1390,"description":1391,"org":1450,"tags":1451,"stars":20,"repoUrl":21,"updatedAt":1404},{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[1452,1453,1454,1455],{"name":1395,"slug":1396,"type":13},{"name":8,"slug":8,"type":13},{"name":1399,"slug":1400,"type":13},{"name":1402,"slug":1403,"type":13},{"slug":1457,"name":1457,"fn":1458,"description":1459,"org":1460,"tags":1461,"stars":20,"repoUrl":21,"updatedAt":1336},"planned-task-runtime","manage n8n task runtimes","Handles system follow-up turns: planned-task-follow-up (synthesize, replan, build-workflow, checkpoint), background-task-completed, running-tasks context, and create-tasks silence rules. Load whenever any of these tags appear or after calling create-tasks.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[1462,1463,1464],{"name":15,"slug":16,"type":13},{"name":8,"slug":8,"type":13},{"name":18,"slug":19,"type":13},{"slug":1466,"name":1466,"fn":1467,"description":1468,"org":1469,"tags":1470,"stars":20,"repoUrl":21,"updatedAt":1476},"planning","coordinate multi-artifact workflows","ONLY for coordinated multi-artifact work: multiple workflows with dependencies, shared data-table schema\u002Fmigration 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.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[1471,1472,1473,1475],{"name":15,"slug":16,"type":13},{"name":8,"slug":8,"type":13},{"name":1474,"slug":1466,"type":13},"Planning",{"name":18,"slug":19,"type":13},"2026-07-27T06:07:16.673218",{"slug":4,"name":4,"fn":5,"description":6,"org":1478,"tags":1479,"stars":20,"repoUrl":21,"updatedAt":22},{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[1480,1481,1482],{"name":15,"slug":16,"type":13},{"name":8,"slug":8,"type":13},{"name":18,"slug":19,"type":13},{"slug":433,"name":433,"fn":1484,"description":1485,"org":1486,"tags":1487,"stars":20,"repoUrl":21,"updatedAt":1491},"build and edit n8n workflows","Load before calling build-workflow. Default path for all single-workflow work: new one-off workflows, existing-workflow edits, verification repairs, and workflow-local data tables. Write or edit a workspace source file, then call build-workflow with filePath. When the workflow creates or writes Data Tables, load data-table-manager first, then this skill. Do not load planning or create-tasks first. Load planning only when multiple coordinated workflows or shared cross-task data tables require a dependency-aware task graph.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[1488,1489,1490],{"name":15,"slug":16,"type":13},{"name":8,"slug":8,"type":13},{"name":18,"slug":19,"type":13},"2026-07-30T05:30:07.798011",{"slug":1493,"name":1493,"fn":1494,"description":1495,"org":1496,"tags":1497,"stars":1503,"repoUrl":1504,"updatedAt":1505},"n8n-agents-official","build AI agents in n8n","Use when building or editing any AI feature in n8n: AI Agents, Text Classifier, Information Extractor, Sentiment Analysis, Summarization Chain, Basic LLM Chain, embeddings, vector stores, single one-shot LLM calls, or AI media generation (image \u002F audio \u002F video) via the native LangChain provider nodes. Triggers on any `@n8n\u002Fn8n-nodes-langchain.*` node, \"agent\", \"chat assistant\", \"LLM with tools\", \"tool calling\", \"fromAi\", \"system prompt\", \"memory window\", \"structured output\", \"outputParser\", \"function calling\", \"RAG\", \"vector store\", \"embeddings\", \"classify with AI\", \"extract fields with LLM\", \"sentiment analysis\", \"summarize with LLM\", \"single LLM call\", chat triggers with files, AI image \u002F video \u002F audio generation, or any multi-turn or one-shot LLM behavior.",{"slug":8,"name":8,"logoUrl":9,"githubOrg":10},[1498,1499,1502],{"name":1370,"slug":1371,"type":13},{"name":1500,"slug":1501,"type":13},"LLM","llm",{"name":18,"slug":19,"type":13},319,"https:\u002F\u002Fgithub.com\u002Fn8n-io\u002Fskills","2026-07-08T05:44:47.938896",25]