Agent skill · Audited from source
n8n-subworkflows
skill · czlonkowski/n8n-skillsMIT licenceAudited 29 Oct 2026 · source e25b729cc88a
Is it safe? Yes — SAFE, grade B (89/100). We read this skill's source at commit e25b729cc88a and found no filesystem, network or shell access and no hard-coded secrets. What it does: Build reusable, composable n8n sub-workflows. Use when extracting shared logic, building anything multi-step or reused across workflows, or any workflow over ~10 nodes — and whenever the user mentions sub-workflows,…
Cite
Cite this page
ModelsAtlas. “n8n-subworkflows (czlonkowski/n8n-skills)”. Retrieved 29 Oct 2026. https://modelsatlas.com/skills/czlonkowski/n8n-subworkflows
Trust audit
Audit 0.4.1 · source read 29 Oct 2026
SAFE means nothing in the source contradicts what the skill says it does. Grade B is shared by 13,985 of 14,816 audited skills.
What the source does
- FilesystemNone observedNo reads or writes in the source
- NetworkNone observedNo outbound calls in the source
- ShellNone observedNo commands run in the source
- DependenciesPinnedNothing floats
- SecretsNone foundNo keys in source
Five audit layers
| Layer | What we check | Result | Findings |
|---|---|---|---|
L0 Provenance | Repo owner, licence, archive status, activity | PASS | 0 |
L1 Static source | Secrets, path traversal, supply chain, hidden code | NA | 0 |
L2 Instructions | Prompt injection, authority framing, hidden directives | PASS | 1 |
L3 Inventory | The files and declarations match the source | PASS | 0 |
L4 Sandbox | Run in isolation and watch behaviour | SKIPPED why | 0 |
Gates applied: no behavioural pass.
Findings (1)
INFOPrompt injectionprompt.conditional_escalation · SKILL.md:3
description: Build reusable, composable n8n sub-workflows. Use when extracting shared logic, building anything multi-step or reused across workflows, or any workflow over ~10 nodes — and whenever the
- Why
- No further detail recorded for this rule.
- Fix
- —
Audit 0.4.1 · source sha e25b729cc88a · 29 Oct 2026Report an issue or request a re-scan
Provenance
Who published it, and what the verdict is pinned to
- Publisherczlonkowski GitHub userOwner of the repository this skill is read from
- Source folderczlonkowski/n8n-skills/skills/n8n-subworkflowsThe exact folder we audited
- LicenceMITAs the repository states it
- Commit pinned for this verdicte25b729cc88aA new audit runs when the source changes
- Repository statusNot archivedLast push 4 days ago
- Sandboxed runNot runSkills are read, not executed; layer L4 is skipped
What it tells the agent
Full source on GitHub ↗Its description: Build reusable, composable n8n sub-workflows. Use when extracting shared logic, building anything multi-step or reused across workflows, or any workflow over ~10 nodes — and whenever the user mentions sub-workflows,…
---
name: n8n-subworkflows
description: Build reusable, composable n8n sub-workflows. Use when extracting shared logic, building anything multi-step or reused across workflows, or any workflow over ~10 nodes — and whenever the user mentions sub-workflows, Execute Workflow, reuse, shared/common logic, modular workflows, "Define Below" inputs, waitForSubWorkflow, mode each vs all, or exposing a workflow as an agent tool. Covers typed sub-workflow inputs, all-vs-each execution, verb-first naming for discovery, stateless vs stateful design, and splitting by input shape.
---
# n8n Sub-workflows
A sub-workflow is a reusable function. An **Execute Workflow Trigger** declares typed inputs, the body does the work, and the last node returns the output. A caller invokes it through an **Execute Workflow** node like any other step.
That framing buys you the things functions buy you everywhere: encapsulation, reuse, testability, replaceability. It's the primary reuse mechanism in n8n, and it's badly underused. Without it, the same logic gets copy-pasted across workflows — then a bug gets fixed in two places, the third copy gets missed, and your "identical" copies quietly drift apart.
This skill is about when to reach for a sub-workflow, how to define its input/output contract so callers (and agents) can actually use it, how to call it correctly (`all` vs `each`, blocking vs fire-and-forget), and how to name it so it gets found instead of rebuilt.
---
## The two non-negotiables
Everything else is judgement. These two are not.
### 1. Search before you build
Before you write logic for a generic problem, check whether a sub-workflow already does it. The community MCP can't filter workflows by tag, so the **name is the discovery surface**:
```
n8n_list_workflows() # scan the library
n8n_get_workflow({ id: "<candidate>" }) # read its inputs/outputs + body
```
If something fits, use it and tell the user ("I found `Subworkflow: Parse RFC2822 date` — using that"). If nothing fits, build it *with a discoverable name* so the next search finds it. The discovery convention (verb-first prefixes) lives in **NAMING_AND_DISCOVERY.md**.
### 2. The Execute Workflow Trigger uses "Define Below" with typed fields — not passthrough
The trigger has two input modes. **Default to "Define Below"** with explicit typed fields. Define Below is the only mode that gives callers a schema to fill — it's what lets an AI agent pass values via `$fromAI` and what lets structured callers map fields cleanly. Passthrough has no schema, so the trigger can't be wired as a clean agent tool and structured callers have nothing to bind to.
Two exceptions, and only two:
- **Binary input.** Typed fields are JSON-only. If the sub-workflow must receive an image/file/PDF, you need passthrough so the `binary` slot flows through.
- **Zero inputs.** Define Below requires at least one field. A genuinely no-arg operation ("list active credentials", "current count") has nowhere to put an empty schema, so passthrough is the only option.
Outside those two cases, passthrough is a bug. See "Inputs and outputs as a contract" below.
---
## Should this be a sub-workflow?
You're about to write a chunk of logic. Run it through this:
```
Could this plausibly be needed in another workflow?
└─ Yes → extract.
Is it a generic concern (auth, retry, parsing, formatting, ID generation)?
└─ Almost always → extract. These are the canonical reusable sub-workflows.
Is it >5 nodes and conceptually one thing?
└─ Probably extract, even if reuse isn't certain. It's better isolated.
Is it one HTTP call with no logic around it?
└─ Don't. A sub-workflow that's just trigger → HTTP → return adds a boundary
for nothing.
Is it tightly coupled to this one caller's data shape?
└─ Don't extract yet — fix the data shape first, or you just relocate the coupling.
```
The reasons to extract go beyond reuse:
- **Readability.** The caller shows one node ("Parse date") instead of five.
- **Testability.** Run the sub-workflow alone with pinned input: `n8n_test_workflow({workflowId, method: "prepare"})` names the nodes that need data, then `method: "pinned"` runs it with what you build (needs `N8N_MCP_ACCESS_TOKEN` and the workflow's "Available in MCP" setting — see **n8n-mcp-tools-expert**). A sub-workflow has no HTTP trigger, so the default `method: "auto"` cannot run it.
- **Replaceability.** Swap the implementation without rippling to callers.
A 20-node workflow is fine *if it's mostly a linear sequence of Execute Workflow calls and decisions* — each node has one purpose, and you inspect a section by opening the sub-workflow it calls. A 20-node workflow of inline transformations is not fine. If yours has 15+ nodes and isn't mostly sub-workflow calls and branches, extract more.
---
## Stateless vs. stateful (deliberately)
Both are first-class. The choice is about intent and what the contract promises.
**Stateless** — input in, output out, no I/O beyond that. The default for pure logic. When you need it again, you call it without worrying about side effects firing.
- `Subworkflow: Parse RFC2822 date` — date string → ISO date or error.
- `Subworkflow: Compute MRR from subscription` — subscription object → number.
- `Subworkflow: Format invoice as HTML` — invoice data → HTML string.
**Stateful (deliberate)** — reads or writes external state *behind a clean contract*. This is the repository pattern: the sub-workflow abstracts the storage operation so callers think in domain terms, not SQL.
- `Customer: get by id` — id → customer object or `{ ok: false, error: "not_found" }`. Reads the DB.
- `Customer: write billing record` — record → `{ ok: true, id }`. Writes the DB.
- `Notify: send to on-call` — channel, message → `{ ok: true, messageId }`. Calls Slack/SMTP.
Why build these as sub-workflows: callers think `get customer by id` instead of writing the query; you can swap the store (Postgres → Supabase, native node → HTTP) wExcerpt, first 6,000 characters of SKILL.md, verbatim from the audited commit. It is text from someone else’s repository, quoted so you can judge it before your agent reads it.
Install
Pinned to the audited commit e25b729
git clone https://github.com/czlonkowski/n8n-skills git -C n8n-skills checkout e25b729cc88a
The author documents no install command, so this uses the repository directly. Our verdict covers commit e25b729cc88a only.
Works in which agents?
What its own text says, not a test
| Agent | Status | More |
|---|---|---|
| Cursor | Mentioned in its text, not tested | Skills for Cursor · About Cursor |
Audit history
Every audit, every source change
- ✓SAFE B 89 / 100
first audit · source
e25b729cc88a
README badge
For maintainers · shows the latest audit
[](https://modelsatlas.com/skills/czlonkowski/n8n-subworkflows/)
The badge shows our verdict and grade for this skill, and links back to this page. It changes when the audit does.
Similar skills
All automation skills →czlonkowski/n8n-skills
Interpret validation errors and guide fixing them. Use when encountering validation errors, validation warnings, false positives, operator structure issues, or need help understanding validation results. Also use when…
czlonkowski/n8n-skills
Deploy a production self-hosted n8n end-to-end to a fresh Linux VM over SSH, using Docker Compose behind a Caddy reverse proxy with automatic HTTPS. Use whenever the user wants to self-host, install, provision, or…
czlonkowski/n8n-skills
Operation-aware node configuration guidance. Use when configuring nodes, understanding property dependencies, determining required fields, choosing between get_node detail levels, or learning common configuration…
czlonkowski/n8n-skills
Use when an n8n-mcp account targets more than one n8n instance — i.e. the `n8n_instances` tool is available, the user mentions multiple n8n instances or environments (prod vs staging, several teams or clients), several…
czlonkowski/n8n-skills
Expert guide for using n8n-mcp MCP tools effectively. Use when searching for nodes, validating configurations, accessing templates, managing workflows, organizing workflows into folders, managing credentials, auditing…
czlonkowski/n8n-skills
Validate n8n expression syntax and fix common errors. Use when writing n8n expressions, using {{}} syntax, accessing $json/$node variables, troubleshooting expression errors, mapping data between nodes, or referencing…
Add this badge to your README
[](https://modelsatlas.com/skills/czlonkowski/n8n-subworkflows/)
<a href="https://modelsatlas.com/skills/czlonkowski/n8n-subworkflows/"><img src="https://modelsatlas.com/skills/czlonkowski/n8n-subworkflows/badge.svg" alt="ModelsAtlas: SAFE B"></a>
Questions about n8n-subworkflows
What does the n8n-subworkflows skill do?
Is n8n-subworkflows safe to install?
What can n8n-subworkflows access on my machine?
What do I need installed to use n8n-subworkflows?
Which assistants does n8n-subworkflows work with?
How current is this page?
Sources
- github.com/czlonkowski/n8n-skills/tree/main/skills/n8n-subworkfl — the audited source at commit e25b729cc88a and every finding aboveObserved · 29 Oct 2026
Spotted something wrong? Report a correction · Methodology
Keep going in your AI
Opens with this page as the source. We add nothing else to the prompt.
- What does the n8n-subworkflows skill do?
- Is n8n-subworkflows safe to install?
- What can n8n-subworkflows access on my machine?