N8n Code Python
davila7/claude-code-templates
Write Python code in n8n Code nodes. An agent skill from davila7/claude-code-templates.
Guides writing JavaScript in n8n Code nodes: picking an execution mode, reading input data, returning items, using built-in helpers and avoiding common errors.
$ npx skills add czlonkowski/n8n-skills --skill n8n-code-javascript -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install czlonkowski/n8n-skills n8n-code-javascript --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/czlonkowski/n8n-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/n8n-code-javascript .claude/skills/n8n-code-javascript && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "n8n-code-javascript" agent skill from https://github.com/czlonkowski/n8n-skills/tree/main/skills/n8n-code-javascript into .claude/skills/n8n-code-javascript/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "n8n-code-javascript", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/czlonkowski/n8n-skills/tree/main/skills/n8n-code-javascriptType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add czlonkowski/n8n-skills --skill n8n-code-javascript -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install czlonkowski/n8n-skills n8n-code-javascript --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/czlonkowski/n8n-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/n8n-code-javascript .agents/skills/n8n-code-javascript && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "n8n-code-javascript" agent skill from https://github.com/czlonkowski/n8n-skills/tree/main/skills/n8n-code-javascript into .agents/skills/n8n-code-javascript/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "n8n-code-javascript", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add czlonkowski/n8n-skills --skill n8n-code-javascript -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install czlonkowski/n8n-skills n8n-code-javascript --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/czlonkowski/n8n-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/n8n-code-javascript .cursor/skills/n8n-code-javascript && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "n8n-code-javascript" agent skill from https://github.com/czlonkowski/n8n-skills/tree/main/skills/n8n-code-javascript into .cursor/skills/n8n-code-javascript/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "n8n-code-javascript", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/czlonkowski/n8n-skills.git --path skills/n8n-code-javascript--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add czlonkowski/n8n-skills --skill n8n-code-javascript -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install czlonkowski/n8n-skills n8n-code-javascript --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/czlonkowski/n8n-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/n8n-code-javascript .gemini/skills/n8n-code-javascript && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "n8n-code-javascript" agent skill from https://github.com/czlonkowski/n8n-skills/tree/main/skills/n8n-code-javascript into .gemini/skills/n8n-code-javascript/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "n8n-code-javascript", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install czlonkowski/n8n-skills n8n-code-javascriptInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add czlonkowski/n8n-skills --skill n8n-code-javascript -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/czlonkowski/n8n-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/n8n-code-javascript .github/skills/n8n-code-javascript && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "n8n-code-javascript" agent skill from https://github.com/czlonkowski/n8n-skills/tree/main/skills/n8n-code-javascript into .github/skills/n8n-code-javascript/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "n8n-code-javascript", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add czlonkowski/n8n-skills --skill n8n-code-javascript -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install czlonkowski/n8n-skills n8n-code-javascript --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/czlonkowski/n8n-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/n8n-code-javascript .opencode/skills/n8n-code-javascript && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "n8n-code-javascript" agent skill from https://github.com/czlonkowski/n8n-skills/tree/main/skills/n8n-code-javascript into .opencode/skills/n8n-code-javascript/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "n8n-code-javascript", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
n8n-code-javascriptGuides writing JavaScript in n8n Code nodes: picking an execution mode, reading input data, returning items, using built-in helpers and avoiding common errors.
This skill is a guide to JavaScript in n8n Code nodes. It recommends the Run Once for All Items mode for most work, shows how to read data with $input.all(), $input.first() or $input.item, and says the node should return an array of objects with a json key. Webhook payloads sit under $json.body, a detail it flags as critical.
It documents what the sandbox provides: this.helpers.httpRequest for unauthenticated calls, Luxon DateTime and $jmespath, while the bare $helpers global, httpRequestWithAuthentication and, depending on settings, $env and require() are unavailable. For authenticated calls, pagination or retries it recommends the HTTP Request node. Instances can allowlist modules through environment variables, and the skill tells the agent to use them when you say they are enabled.
Supporting files cover built-in functions, common patterns, data access and error patterns. The skill also addresses SplitInBatches loops, pairedItem and questions about speed on large datasets. For the Custom Code Tool attached to an AI Agent it redirects to the separate n8n-code-tool skill.
7 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 19cd793. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are javascript).
From the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
docs.n8n.iomoment.github.ioFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
n8n Code Node JavaScript loads about 4.9k tokens when it runs. Until then it costs about 242 tokens; SKILL.md has 1,903 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from czlonkowski/n8n-skills at commit 19cd793, republished under its MIT licence (© czlonkowski). 1,903 words, ~4,897 tokens.
.claude/skills/n8n-code-javascript/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.Expert guidance for writing JavaScript code in n8n Code nodes.
// Basic template for Code nodes
const items = $input.all();
// Process data
const processed = items.map(item => ({
json: {
...item.json,
processed: true,
timestamp: new Date().toISOString()
}
}));
return processed;$input.all(), $input.first(), or $input.item[{json: {...}}] — the canonical, mode-portable form. In Run Once for All Items mode n8n also auto-wraps a bare return {…} object, so that runs too; what genuinely fails is returning a primitive (string/number) or null.$json.body (not $json directly)this.helpers.httpRequest() (no auth — the bare $helpers global is undefined in the task-runner sandbox, so $helpers.httpRequest() throws ReferenceError: $helpers is not defined), DateTime (Luxon), $jmespath(). Not available: this.helpers.httpRequestWithAuthentication (deny-listed), $env (when N8N_BLOCK_ENV_ACCESS_IN_NODE=true), require() (unless allowlisted). For anything beyond a trivial unauthenticated GET (auth, pagination, retries), prefer the HTTP Request node and keep Code nodes for pure logic.N8N_RUNNERS_ALLOWED_BUILT_IN_MODULES and N8N_RUNNERS_ALLOWED_EXTERNAL_MODULES (legacy: NODE_FUNCTION_ALLOW_BUILTIN / NODE_FUNCTION_ALLOW_EXTERNAL). If the user says their instance allows specific modules (e.g. axios, lodash, crypto), use them via require() — don't refuse. If unsure, ask or default to built-ins only.@n8n/n8n-nodes-langchain.toolCode), stop — that node has a different contract (input via query, must return a string, no $input/$helpers). Use the n8n-code-tool skill.The Code node offers two execution modes. Choose based on your use case:
Use this mode for: 95% of use cases
$input.all() or items array// Example: Calculate total from all items
const allItems = $input.all();
const total = allItems.reduce((sum, item) => sum + (item.json.amount || 0), 0);
return [{
json: {
total,
count: allItems.length,
average: total / allItems.length
}
}];When to use:
Use this mode for: Specialized cases only
$input.item or $item// Example: Add processing timestamp to each item
const item = $input.item;
return [{
json: {
...item.json,
processed: true,
processedAt: new Date().toISOString()
}
}];When to use:
Decision Shortcut:
Mode choice is the single biggest performance lever in a Code node. Each per-item execution context costs a setup tax (measured on n8n 2.x, small records):
| What runs per item | Approx. cost |
|---|---|
| Code All Items (one run for the whole set) | ~0.02 ms/item |
| Expression in any node (IF / Set / etc.) | ~0.2 ms/item |
| Code Each Item (a full sandbox per item) | ~0.6 ms/item — ~25–30× All Items |
So Run Once for Each Item over 10k items is ~6 s of pure overhead vs ~0.2 s in Run Once for All Items. Use Each Item only when an item genuinely needs isolating (independent error handling, or a per-item API call you can't batch); otherwise loop inside one All Items node. Expression complexity itself is essentially free (~90% of the cost is the per-item context, not your code) and every node→node hop re-copies all items — so reduce the number of per-item boundaries, don't micro-optimize each one. Below a few hundred items none of this matters; reach for it on the hot path (large item counts, little I/O).
See: DATA_ACCESS.md → "Mode Performance" for the corollaries, hop costs, and scale check.
Four ways to pull data from upstream nodes. Note $node["Name"] and $('Name') need .first().json or .all() — never .json directly.
const allItems = $input.all(); // 1. All items — batch ops, aggregation (most common)
const data = $input.first().json; // 2. First item — single objects, API responses
const item = $input.item; // 3. Current item — "Each Item" mode ONLY (undefined otherwise)
const other = $node["Webhook"].json; // 4. Named node — combine data across nodesAlways access fields via .json (e.g. item.json.name, not item.name), and prefer the explicit $input.first().json.field over a bare $json.field.
See: DATA_ACCESS.md for the full guide — every pattern with examples, a decision tree, and the common mistakes (mutating originals, missing length checks, $input.item in the wrong mode).
MOST COMMON MISTAKE: Webhook data is nested under .body
// ❌ WRONG - Will return undefined
const name = $json.name;
const email = $json.email;
// ✅ CORRECT - Webhook data is under .body
const name = $json.body.name;
const email = $json.body.email;
// Or with $input
const webhookData = $input.first().json.body;
const name = webhookData.name;Why: Webhook node wraps all request data under body property. This includes POST data, query parameters, and JSON payloads.
See: DATA_ACCESS.md for full webhook structure details
Canonical form: [{json: {...}}] — an array of objects each with a json property. It is unambiguous and works identically in both execution modes, so make it your default.
In Run Once for All Items mode n8n auto-normalizes looser shapes on the way out: a single bare object, or an array of bare objects, gets wrapped under json for you. So return {foo: 1} runs. What has nothing to wrap — and therefore genuinely fails at runtime with "Code doesn't return items properly" — is a primitive (string/number/boolean) or null/undefined. (n8n-mcp ≥ 2.63.0 no longer flags a bare-object return as an error; it reflects this auto-wrap behavior.)
// ✅ Single result
return [{
json: {
field1: value1,
field2: value2
}
}];
// ✅ Multiple results
return [
{json: {id: 1, data: 'first'}},
{json: {id: 2, data: 'second'}}
];
// ✅ Transformed array
const transformed = $input.all()
.filter(item => item.json.valid)
.map(item => ({
json: {
id: item.json.id,
processed: true
}
}));
return transformed;
// ✅ Empty result (when no data to return)
return [];
// ✅ Conditional return
if (shouldProcess) {
return [{json: processedData}];
} else {
return [];
}// ⚠️ Auto-wrapped in All Items mode → [{json: {field: value}}]. Runs, but prefer the array form.
return {
json: {field: value}
};
// ⚠️ Auto-wrapped → [{json: {field: value}}]. Runs, but add the json wrapper for clarity.
return [{field: value}];
// ✅ Fine — input items already carry a json property, so returning them unchanged is a valid passthrough
return $input.all();// ❌ FAILS: primitive — n8n errors "Code doesn't return items properly"
return "processed";
// ❌ FAILS: null / undefined — nothing to pass to the next node
return null;Why it matters: The canonical [{json: {...}}] is unambiguous and behaves the same in both modes. n8n auto-normalizes bare objects and arrays-of-objects in All Items mode, but a primitive or null return has nothing to wrap and stops execution.
See: ERROR_PATTERNS.md #3 for detailed error solutions
The most useful Code node shapes from production workflows. One quick example — sum/aggregate across all items:
const items = $input.all();
const total = items.reduce((sum, item) => sum + (item.json.amount || 0), 0);
return [{ json: { total, count: items.length, average: total / items.length } }];The full library covers 10 patterns: multi-source aggregation, regex filtering, markdown/structured-text parsing, JSON comparison, CRM/form transformation, release processing, array transformation with computed fields, Slack Block Kit formatting, top-N ranking, and string-aggregation reporting — each with variations.
See: COMMON_PATTERNS.md for the 10 detailed production patterns (and the Best Practices section: validate input, try-catch, filter-early, array methods over loops, console.log debugging).
The recurring Code node failures, in rough frequency order:
return [...], and make sure every branch returns.{{ }} where JavaScript belongs (return {{ $json.x }} is a syntax error). Use `${$json.field}` or $input.first().json.field. {{ }} inside a string literal is fine — it's just literal text n8n won't evaluate.return [{json:{...}}]. A bare return {…} auto-wraps in All Items mode, but returning a primitive (string/number) or null is what actually fails.item.json?.user?.email || 'fallback'.$json.email is undefined; use $json.body.email.httpRequestWithAuthentication) and $env blocked — route secrets through credentials/HTTP Request node, not the Code node sandbox.See: ERROR_PATTERNS.md for the comprehensive guide — each error with wrong/right code, escaping rules, the sandbox restrictions (Errors #6–#7), a prevention checklist, and a quick error-message lookup table.
// HTTP requests (no auth — see sandbox note below)
const res = await this.helpers.httpRequest({ method: 'GET', url: 'https://api.example.com/data' });
// DateTime (Luxon): now, formatting, arithmetic
const now = DateTime.now();
const formatted = now.toFormat('yyyy-MM-dd');
const tomorrow = now.plus({ days: 1 });
// $jmespath() — query JSON structures
const adults = $jmespath($input.first().json, 'users[?age >= `18`]');
// $getWorkflowStaticData() — data that persists across executionsSandbox (since n8n v2.0, JsTaskRunnerSandbox): the accessor is this.helpers.httpRequest() — the bare $helpers global is undefined here ($helpers.httpRequest() throws ReferenceError). Inside a nested async function where this is lost, call it as await fn.call(this, ...). this.helpers.httpRequestWithAuthentication and this.helpers.requestWithAuthenticationPaginated are deny-listed (→ UnsupportedFunctionError); for authenticated calls use an HTTP Request node with the credential (preferred), a sub-workflow, or a manual Authorization: Bearer ${token} header on this.helpers.httpRequest() only when the token already flows through the workflow as data. $env is blocked when N8N_BLOCK_ENV_ACCESS_IN_NODE=true; require() works only for allowlisted modules. Buffer, URL, and standard JS globals (Math, JSON, Object, Array) always work.
See: BUILTIN_FUNCTIONS.md for the complete reference — full httpRequest options, all DateTime/Luxon operations, JMESPath patterns, static-data use cases, and the sandbox-restriction details.
.json before processing.filter/map/reduce) over manual loops.console.log() for debugging (output goes to the browser console).See: COMMON_PATTERNS.md → "Best Practices" for code examples of each.
Hard-won lessons from real deployments — summarized here, with code in DATA_ACCESS.md → "Production Gotchas":
main[0] = done (fires once, after all batches), main[1] = each batch (the loop body). Add a Limit 1 node after the done output as a safety.batchSize: 1 is the loop equivalent of Each Item — use the largest batch your real constraint (rate limit, page size, memory) allows, or don't loop at all.$('Node Inside Loop').all() returns ONLY the last iteration's items. Accumulate via $getWorkflowStaticData('global') (reset before, push inside, read after).pairedItem: { item: i } or downstream Set nodes fail with paired_item_no_info.$('Node').first().json or $('Node').all() — never .json directly on the reference.Math.round(a*100) !== Math.round(b*100) — to avoid false positives from float noise.Before reaching for a Code node, walk the transform gatekeeper in the n8n Expression Syntax skill: expression → arrow-function IIFE inside an Edit Fields field → Code node, in that order. The first two paths cover most "transform this data" tasks at ~1–10ms each, versus the Code node's sandboxed ~500–1000ms — a ~100x gap on pure single-item shaping, with no functional difference. The Code node earns its place only for whole-dataset aggregation (
$input.all()), allowlisted libraries, or async work. And before writing code for crypto (HMAC, hashing, signing) or XML/SOAP/RSS parsing, check for a native node — n8n has a Crypto node (nodes-base.crypto) and an XML node (nodes-base.xml) that cover those without any JavaScript. Dropping into Code for something a native node already does is one of the most common false positives.
Use Code node when:
Consider other nodes when:
Code node excels at: Complex logic that would require chaining many simple nodes
n8n Expression Syntax:
{{ }} syntax in other nodes{{ }})n8n MCP Tools Expert:
search_nodes({query: "code"})get_node({nodeType: "nodes-base.code"})validate_node({nodeType: "nodes-base.code", config: {...}})n8n Node Configuration:
n8n Workflow Patterns:
n8n Validation Expert:
Before deploying Code nodes, verify:
null{json: {...}} (bare objects auto-wrap, but be explicit)$input.all(), $input.first(), or $input.item{{ }} written as code - Use JavaScript template literals: `${value}`.body if from webhookReady to write JavaScript in n8n Code nodes! Start with simple transformations, use the error patterns guide to avoid common mistakes, and reference the pattern library for production-ready examples.
© czlonkowski, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 5 other files in skills/n8n-code-javascript of czlonkowski/n8n-skills.
Open the folder on GitHubat commit 19cd793
n8n Code Node JavaScript next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| n8n Code Node JavaScript this skillczlonkowski/n8n-skills | 6.4k | — | ~4.9k | Automated safety check: Pass | MIT | |
| N8n Code Pythondavila7/claude-code-templates | 32k | 7 repos | ~4.5k | Automated safety check: Pass | MIT | |
| N8n Code Javascriptdavila7/claude-code-templates | 32k | 4 repos | ~4k | Automated safety check: Pass | MIT | |
| N8n Code Toolsickn33/agentic-awesome-skills | 47k | 1 repos | ~4.1k | Automated safety check: Pass | MIT | |
| Debugging Executionsn8n-io/n8n | 207k | — | ~2.6k | Automated safety check: Pass | Custom licence | |
| N8n CLIn8n-io/n8n | 207k | — | ~3k | Automated safety check: Pass | Custom licence |
davila7/claude-code-templates
Write Python code in n8n Code nodes. An agent skill from davila7/claude-code-templates.
davila7/claude-code-templates
Write JavaScript code in n8n Code nodes. An agent skill from davila7/claude-code-templates.
sickn33/agentic-awesome-skills
Write and debug JavaScript or Python for the AI-callable n8n Custom Code Tool, including schemas, sandbox limits, and return formats.
n8n-io/n8n
Debug failed or wrong-output workflow executions using executions tools.
n8n-io/n8n
Use the n8n CLI to manage workflows, credentials, executions, and more on an n8n instance.
n8n-io/n8n
Answers n8n product, setup, credential, node, hosting, API, and usage questions from current n8n docs.
czlonkowski/n8n-skills
Explains how n8n keeps file bytes in $binary apart from structured $json data, and how to read, write and preserve binary across nodes, agent tools and chat.
czlonkowski/n8n-skills
Explains how to write native Python in n8n Code nodes, including the two input variables, blocked imports and fixes for common errors.
czlonkowski/n8n-skills
Explains the n8n Custom Code Tool's actual runtime contract so an AI-agent-callable tool doesn't get written like a regular workflow Code node.
czlonkowski/n8n-skills
Wires n8n workflows so failures are visible and recoverable: per-node error outputs, retries, error workflows and correct 4xx and 5xx webhook responses.
czlonkowski/n8n-skills
Keeps an n8n MCP session pointed at the right n8n instance, with rules for discovering, switching and verifying the target before credential writes and for recovering from misroutes.
czlonkowski/n8n-skills
Explains how to configure n8n nodes correctly: which fields each operation requires, how property dependencies show or hide fields, and which get_node detail level to use.
Works with
Categories
Guides writing JavaScript in n8n Code nodes: picking an execution mode, reading input data, returning items, using built-in helpers and avoiding common errors. This skill is a guide to JavaScript in n8n Code nodes.item, and says the node should return an array of objects with a json key.
n8n Code Node JavaScript fits situations like: writing a Code node that aggregates or filters items; fixing a Code node error such as an undefined $helpers; deciding between per-item and all-items execution modes; making a Code node faster on a large dataset.
Run `npx skills add czlonkowski/n8n-skills --skill n8n-code-javascript -a claude-code`. Or copy the skill folder (skills/n8n-code-javascript in czlonkowski/n8n-skills) into .claude/skills/n8n-code-javascript in your project. Claude Code loads it when a task matches its description.
Run `npx skills add czlonkowski/n8n-skills --skill n8n-code-javascript -a codex`. Or copy the skill folder (skills/n8n-code-javascript in czlonkowski/n8n-skills) into .agents/skills/n8n-code-javascript in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add czlonkowski/n8n-skills --skill n8n-code-javascript -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/n8n-code-javascript, .gemini/skills/n8n-code-javascript, .github/skills/n8n-code-javascript and .opencode/skills/n8n-code-javascript in your project.
SKILL.md names no scripts, command-line tools or credentials: n8n Code Node JavaScript is instructions for the agent only. Our summary lists: An n8n instance with Code nodes.
SKILL.md names 2 domains. As links in the text: docs.n8n.io and moment.github.io. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
n8n Code Node JavaScript is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.9k tokens (SKILL.md is roughly 20k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with n8n Code Node JavaScript: N8n Code Python (davila7/claude-code-templates, 32k stars), N8n Code Javascript (davila7/claude-code-templates, 32k stars), N8n Code Tool (sickn33/agentic-awesome-skills, 47k stars) and Debugging Executions (n8n-io/n8n, 207k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
czlonkowski (a GitHub user) maintains it in czlonkowski/n8n-skills, which has 6,389 GitHub stars. The repository holds 15 skills in this directory. The repository was last updated on September 16, 2026.
Source: czlonkowski/n8n-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.