Generated banner for N8n Debugging Official
Generated logo for N8n Debugging Official

N8n Debugging Official

n8nOfficialPublished by n8n

  • Skill
  • Tool integration
  • Automation and integrations
  • Apache-2.0
  • Low risk

From the author

Use when an n8n workflow isn't working, errors appear, results don't match what was expected, or the user says "this isn't working." Triggers on errors, unexpected output, "it's not working", "why is this happening", "the workflow stopped", failure investigation, or any debugging context.
— the description by n8n

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

This skill provides a structured, step-by-step methodology for diagnosing and fixing issues within n8n workflows. It emphasizes evidence-based debugging by prioritizing execution data, node configuration validation, and connection inspection over assumptions. The framework guides users through identifying common failure points such as parameter misconfigurations, stale data assumptions, upstream data stripping, and lost item context, while providing clear paths for verifying node types and investigating source code when necessary.

What it does

  • Systematically identifies causes of workflow failures including configuration errors and logical bugs.
  • Provides a step-by-step diagnostic process to isolate issues between input data and workflow logic.
  • Offers specific techniques for validating node parameters and connection integrity.
  • Guides users on how to inspect execution history to pinpoint exactly where a workflow fails.
  • Includes strategies for detecting version drift between n8n instances and the skills plugin.
  • Facilitates deep-dive debugging by referencing n8n source code and GitHub issues.

When to use it

  • When an n8n workflow returns errors or fails to execute as expected.
  • When output data does not match the user's requirements or expectations.
  • When a workflow stops unexpectedly or behaves inconsistently.
  • When investigating potential bugs in node behavior or configuration.
  • When troubleshooting complex data mapping or item context issues.

Advantages

  • Reduces guesswork by relying on actual execution data and node metadata.
  • Provides a clear, prioritized order of operations for efficient troubleshooting.
  • Helps distinguish between user-level configuration errors and genuine platform bugs.
  • Standardizes the debugging process to ensure consistent and reproducible results.
  • Addresses common but subtle issues like upstream data stripping and item context loss.

Usage examples

“My n8n workflow is failing at the HTTP Request node with a 400 error, can you help?”
The agent will initiate the diagnostic process by asking for the execution ID, fetching the workflow details, and inspecting the node's parameters and input data to identify the cause of the 400 error.
“The data in my workflow is coming up as null, but it should be there. Why?”
The agent will investigate potential upstream data stripping, checking if intermediate nodes are replacing the JSON output and advising on proper reference syntax like $('NodeName').item.json.x.
“I keep getting an error about multiple matching items in my expression.”
The agent will analyze the workflow for lost item context, specifically looking for Aggregate or Split Out nodes, and suggest using a Merge node or $input.all().find() to restore correspondence.
“This workflow worked yesterday but is failing today, what changed?”
The agent will guide the user through checking for version drift, verifying if the n8n instance or skills plugin was updated, and comparing current node configurations against expected types.

Install

  1. Download the skill as a ZIP:

    https://autogineer.com/agent-skills/n8n-io/n8n-debugging-official/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip n8n-debugging-official.zip -d .agents/skills

Documentation by n8n

n8n Debugging

When something breaks, the cause is almost always:

  1. Parameter misconfiguration (wrong value, wrong type, missing field).

  2. Stale assumptions (different version, different behavior than you remember).

  3. Paths misconfigured or misconnected (wrong output index, wrong merge input, missing wire, IF/Switch wired to the wrong branch).

  4. Upstream data stripped (an intermediate node replaced $json with its own output, so downstream $json.x resolves to null even though "it should be there"). Fix: reference the stable upstream node by name ($('Earlier Node').item.json.x).

  5. Item context lost (after Aggregate, Execute Once, or Split Out flows, n8n can't pair .item references deterministically, error reads like "The expression is referencing... multiple matching items"). Fix: Merge node to re-establish context, $input.all().find(...) for explicit lookup, or redesign to keep item correspondence stable (e.g., split into stateless sub-workflows).

  6. Logical errors (the wires are right and the parameters are right, but the workflow does the wrong thing, same as a logic bug in code).

  7. Genuine bug (rare but real).

Diagnose systematically: cheap checks first, deeper investigation only when those fail.

Non-negotiable

Believe the user. "This isn't working" means something isn't behaving as they expect, even if they describe the symptom imprecisely. Don't dismiss with "it should work" or "are you sure you're doing X?". Investigate first: the user is truth about what should happen, execution data and source are truth about what is happening. When you can't find the cause, "I don't know yet" beats a plausible-sounding fabrication.

Strong defaults (cause to cheap check)

Match cause to cheap check, in order of likelihood:

  1. Parameter misconfiguration → re-fetch via get_node_types, compare against get_workflow_details, look for type/value/missing-field mismatches. validate_node_config on the failing node alone returns per-parameter errors directly; faster than eyeballing the diff for nodes with deep / conditional shapes.

<!-- TEMPORARY: when instance metadata tool is added, change asking user to just using the tool -->

  1. Stale assumptions → ask the n8n version, ask when the user last updated the skills plugin, suspect drift if behavior contradicts the skill.

  2. Paths misconfigured or misconnected → inspect the connections object via get_workflow_details. For Merge input mismatches, see n8n-node-configuration-official references/MERGE_NODE.md.

  3. Upstream data stripped → trace $json.x references back through the chain, look for any node that replaces the json with its own output. Common offenders: Aggregate, HTTP-binary, Extract from File, Code in "Run for All Items" mode, branching Merge. Not exhaustive: any node can do this if its output shape doesn't include the upstream fields.

  4. Item context lost → check downstream of any Aggregate / Execute Once / Split Out for .item references, switch to $input.all().find(...) or a Merge anchor.

  5. Logical errors → trace data through get_workflow_execution step by step, compare each node's output vs. expected.

  6. Genuine bug → fall through to reading the n8n source, then GitHub issues, then a workaround.

For external API problems, the upstream service's API docs (not n8n's wrapper) are the truth. Fetch API docs and n8n's source code to debug if required.

Step-by-step walkthrough

When the cheap checks above don't immediately pinpoint the cause, work through these in order.

Step 1: confirm the symptom

Ask:

  • What did they expect?

  • What actually happened?

  • Error message text?

  • When did it last work? What changed since?

Vague ("it's broken") becomes tractable when concrete ("email sends to wrong address" or "workflow returns 500 with empty body").

Step 2: check the execution
get_workflow_execution({ executionId: <execution_id>, workflowId: <workflow_id>, includeData: true })

Look at:

  • Which node failed?

  • What input did it have?

  • What error message? Read carefully. Usually points at the cause.

No execution ID? Ask the user to re-run.

Step 3: re-fetch the workflow
get_workflow_details({ workflowId: <workflow_id> })

Confirm the actual current state. The user might be looking at a different workflow or remembering a stale version.

Compare:

  • Nodes vs. the user's mental model.

  • Connections vs. intent: pull via get_workflow_details and compare the connections object to the SDK code.

  • Credentials vs. expected (per n8n-credentials-and-security-official).

  • Upstream-strip risk: any node between a data source and a downstream $json.x consumer that replaces the json with its own output? Common offenders are HTTP-binary, Extract from File, Aggregate, Code in "Run for All Items" mode, and branching Merge, but any node can do this if its output shape doesn't include the upstream fields. The consumer should reference the source node by name ($('Source Node').item.json.x), not $json. Otherwise the field silently resolves to null.

  • Item-context risk: any Aggregate / Execute Once / Split Out followed by downstream .item references? n8n may not be able to pair items deterministically. Look for "The expression is referencing... multiple matching items" in past executions.

Step 4: re-fetch the node types
get_node_types([{ name: '<failed-node>', resource: '...', operation: '...' }])

Compare actual parameter shape vs. configured. Common mismatches:

  • Missing required parameter.

  • Wrong type (string vs. number, etc.).

  • object and array are distinct in n8n's UI type dropdowns (Set, IF, Switch, Filter, anywhere the UI asks you to pick a type). Picking object won't accept an array value, and vice versa. Inside expressions themselves it's normal JS (arrays are objects), so the distinction only bites at those UI type-pick surfaces. Watch for this when a ={{ ... }} expression returns the wrong container shape for a typed slot.

  • A dependent parameter set without its parent (e.g., credentials without authentication !== 'none', or query without operation === 'executeQuery'). Re-fetch with get_node_types passing the right discriminators.

If the manual shape-vs-config diff is tedious (deep params, AI tool subnodes, many conditional branches), run validate_node_config directly. Returns { path, message } per failure. For tool subnodes set isToolNode: true.

Step 5: test with pinned data
prepare_workflow_pin_data({ workflowId: '<id>' })
test_workflow({ workflowId: '<id>' })

Controlled input isolates "workflow broken?" from "input weird?". If pinned data works but real input fails, the issue is in real input handling.

If pinned data also produces wrong output, that's likely a logical error: trace each node's output against what you expected. get_workflow_execution on the test run gives you the actual emitted data per step, which is the source of truth for what each node did.

Step 6: read the n8n source

When everything checks out and behavior still seems wrong:

github.com/n8n-io/n8n
  • packages/nodes-base/nodes/<NodeName> for built-in nodes.

  • packages/cli/src/... for execution logic.

  • packages/core/src/... for workflow runtime.

The behavior of the code is truth.

See references/FETCHING_N8N_SOURCE.md.

Step 7: suspect drift on either side

If steps 1-6 all check out and behavior still doesn't match expectations, version drift is the most likely remaining cause. Two sides drift independently:

<!-- TEMPORARY: when instance metadata tool is added, change asking user to just using the tool -->

  • Their n8n instance version. Ask. (UI: Settings → About, or GET /rest/settings.) On older instances, parameters and tools the skill assumes may be missing; on very new ones, parameter shapes or tool names may have moved. Suggest updating to the latest n8n release, or if a fix is rumored or the issue is recent, the latest beta.

  • This skill plugin's version. These skills drift relative to n8n over time. If the user installed the plugin a while ago, suggest git pull (or the plugin manager's update command) on the skills repo. See the README's "Drift" section.

Drift surfaces as: parameter shape mismatches in get_node_types, MCP tools that don't exist or carry new parameters, tool descriptions that contradict what the skill teaches, behavior diverging from the skill's claims. When you spot any of those, surface drift explicitly to the user: "This may be drift between your n8n version and these skills. Can you tell me your n8n version, and when you last updated the skills?"

If after updating both sides the issue persists, proceed to Step 8.

Step 8: report or workaround

For confirmed bugs:

  • Have the user post a question on https://community.n8n.io

  • Surface a clear repro to the user.

  • Check n8n GitHub issues. May already be filed.

  • If blocking, work around (different node/approach) and note in workflow notes.

  • If a fix is in progress, mark workarounds with <!-- TEMPORARY: ... -->

Reference files

FileRead when
references/PARAMETER_VERIFICATION.mdParameters might be misconfigured, need a systematic re-check
references/FETCHING_N8N_SOURCE.mdn8n behavior contradicts docs, need to read the actual code

Anti-patterns

Anti-patternWhat goes wrongFix
"It should work, are you sure you're doing X?"Dismisses the user's report, misses real issuesBelieve the user. Investigate.
Re-running without checking the executionSame failure twice, no new infoget_workflow_execution on the failed run, read the error
Assuming docs are accurate when behavior contradictsAccepting the wrong mental modelRead the source. Behavior is truth
Re-implementing logic in a Code node when a configured node failsHides the bug, doesn't fix root causeDiagnose first, only work around when the bug is confirmed
Bisecting by deleting nodes randomlyWastes timeStep through get_workflow_execution to find the failed node directly
Asking the user to re-screenshot instead of inspecting via MCPSlow, error-proneUse get_workflow_details and get_workflow_execution
Calling it "fixed" when you've worked around the bug, not understood itBug recurs in slightly different formDocument the cause. If working around, mark with <!-- TEMPORARY: -->
Declaring a "bug" without asking the user's n8n version or when they last updated the skillsReal cause is often drift, and user updates and the "bug" disappearsAsk both versions before reporting. See Step 7.

Files

LICENSE

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for describing the origin of the Work and
      reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may accept and charge a
      fee for accepting support, warranty, indemnity, or other liability
      obligations and/or rights consistent with this License. However, in
      accepting such obligations, You may act only on Your own behalf
      and on Your sole responsibility, not on behalf of any other
      Contributor, and only if You agree to indemnify, defend, and hold
      each Contributor harmless for any liability incurred by, or claims
      asserted against, such Contributor by reason of your accepting any
      such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright 2026 n8n GmbH

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
   implied. See the License for the specific language governing
   permissions and limitations under the License.

Requirements and compatibility

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Needs Node.js

Security

What our scanner noticed· Low risk

  • Phrasing that asks for actions without confirmation

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Published by
n8n
Publisher
n8n (Official)
Source
n8n-io/skills · skills/n8n-debugging-official · commit 27b6b9f
Licence
Apache License 2.0 (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by n8n or n8n.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download n8n-debugging-official.zip