n8n Expression Syntax
czlonkowski/n8n-skills
Validates and fixes n8n's double-curly-brace expressions, covering $json, $node, and the webhook body-wrapping mistake.
A skill your agent uses when building or fixing a no-code automation on n8n, Make, or Zapier — trigger to multi-app steps with data mapping, dedup, retries and an error path — or picking the…
$ npx skills add ericrisco/rsc-harness --skill automation-flows -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ericrisco/rsc-harness automation-flows --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/ericrisco/rsc-harness.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/automation-flows .claude/skills/automation-flows && 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 "automation-flows" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/automation-flows into .claude/skills/automation-flows/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "automation-flows", 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/ericrisco/rsc-harness/tree/main/skills/automation-flowsType 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 ericrisco/rsc-harness --skill automation-flows -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ericrisco/rsc-harness automation-flows --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/automation-flows .agents/skills/automation-flows && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "automation-flows" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/automation-flows into .agents/skills/automation-flows/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "automation-flows", 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 ericrisco/rsc-harness --skill automation-flows -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ericrisco/rsc-harness automation-flows --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/automation-flows .cursor/skills/automation-flows && 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 "automation-flows" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/automation-flows into .cursor/skills/automation-flows/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "automation-flows", 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/ericrisco/rsc-harness.git --path skills/automation-flows--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 ericrisco/rsc-harness --skill automation-flows -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ericrisco/rsc-harness automation-flows --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/automation-flows .gemini/skills/automation-flows && 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 "automation-flows" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/automation-flows into .gemini/skills/automation-flows/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "automation-flows", 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 ericrisco/rsc-harness automation-flowsInstalls 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 ericrisco/rsc-harness --skill automation-flows -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/automation-flows .github/skills/automation-flows && 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 "automation-flows" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/automation-flows into .github/skills/automation-flows/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "automation-flows", 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 ericrisco/rsc-harness --skill automation-flows -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ericrisco/rsc-harness automation-flows --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/automation-flows .opencode/skills/automation-flows && 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 "automation-flows" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/automation-flows into .opencode/skills/automation-flows/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "automation-flows", 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.
automation-flowsA skill your agent uses when building or fixing a no-code automation on n8n, Make, or Zapier — trigger to multi-app steps with data mapping, dedup, retries and an error path — or picking the…
Automation Flows is an agent skill from ericrisco/rsc-harness. Use when building or fixing a no-code automation on n8n, Make, or Zapier — trigger to multi-app steps with data mapping, dedup, retries and an error path — or picking the platform by billing unit (task vs credit vs execution). NOT a typed API client in code (that is api-connector-builder), NOT a webhook receiver in your own app (that is webhooks).
Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 8 other files, including scripts and reference files (for example `evals/README.md`, `evals/cases.yaml` and `references/error-handling.md`).
It sits in Productivity & Automation, covering Workflow automation and Webhooks. It works with n8n and Zapier. The repository describes itself as: Your agent invents things because it has no memory, and can't touch your database because it has no arms. rsc is the meta-harness that gives it both, plus the trade to know the… The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit e3d5b33. 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.
Ships 1 file in scripts/ (Shell), which the agent can run.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From 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.
Automation Flows loads about 2.9k tokens when it runs, and up to ~4.8k if it reads all its reference files. Until then it costs about 92 tokens; SKILL.md has 1,504 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); the scripts in this folder are not scanned.
The full file from ericrisco/rsc-harness at commit e3d5b33, republished under its MIT licence (© ericrisco). 1,504 words, ~2,855 tokens.
.claude/skills/automation-flows/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.You are building a working automation on a hosted visual platform: a trigger, a chain of app actions with branching and explicit data mapping, and an error-handling and retry strategy without which the flow is not done.
Your job is two things at once: platform judgement (pick n8n vs Make vs Zapier by the constraints) and a buildable artifact (an importable n8n workflow JSON, or a precise numbered build sheet for Make/Zapier, which have no portable export).
This skill stops the moment the right answer is real code. Writing a typed API client → ../api-connector-builder/SKILL.md. Building the endpoint that receives a webhook in your own app → ../webhooks/SKILL.md. Scripting one vendor directly → ../stripe/SKILL.md, ../notion-connector/SKILL.md, ../google-workspace/SKILL.md, ../whatsapp-telegram/SKILL.md.
The single most expensive mistake is choosing on familiarity instead of cost model. The three platforms bill on fundamentally different units, and at volume that gap is 10×.
| Constraint | Zapier | Make | n8n |
|---|---|---|---|
| Billing unit (why it dominates cost) | per task — every action counts | per credit — each module action = 1 credit (was "operations" until 2025-08-27; converted 1:1) | per execution — whole run = 1, any step count |
| Free tier | 100 tasks/mo | 1,000 ops/mo | self-host free, unlimited execs |
| Entry paid | Pro ≈ $19.99/mo (billed annually), 750 tasks | Core ≈ $9/mo, 10k credits (billing unit became credits on 2025-08-27) | cloud Starter ≈ €20/mo (billed annually), 2,500 execs; self-host = $0 |
| App breadth (obscure-app signal) | ≈ 8,000+ integrations — widest | ≈ 1,500, often deeper per app | ≈ 1,000 nodes + generic HTTP node + code |
| Self-host / data residency | no | no | yes — your infra, your data |
| Who maintains it | non-technical-friendly | mid; visual but richer | technical; you run the box (n8n 2.0, stable Dec 2025, made isolated code execution the default — Code nodes run in sandboxed task runners) |
Worked cost example. A 10-step flow run 10,000×/month:
For complex, high-volume flows, n8n's execution model can cut cost 80–90% vs Zapier.
Pricing and version figures move; re-check the primary vendor pages before quoting a customer (the ≈ is a hedge, not a guarantee): Zapier zapier.com/pricing, Make make.com/en/pricing, n8n n8n.io/pricing, and the n8n 2.0 release note blog.n8n.io/introducing-n8n-2-0. Make's switch to credits as the billing unit (2025-08-27) and n8n 2.0's sandboxed-by-default code execution (stable Dec 2025) are the two facts most likely to surprise someone who learned these tools a year ago.
Decision in one line per row: bill on the unit that matches your shape — many short flows favor task/op platforms; few long flows favor n8n. Obscure app you can't find a node for → Zapier. Raw HTTP / custom code / data must stay on your infra → n8n. Non-technical owner who never wants to SSH → Zapier or Make cloud.
A flow has exactly one trigger. Then a chain of action steps. Map every field explicitly.
Trigger: prefer webhook/push over polling. A webhook trigger (Zapier Catch Hook, Make custom webhook, n8n Webhook node) fires on an inbound POST — near-instant. A polling trigger (Zapier Retrieve Poll) does a periodic GET; the interval depends on plan, 1–15 minutes between checks. Polling costs latency, costs runs (it fires even when nothing changed), and can miss events between polls.
Bad: Trigger = "poll Airtable for new rows every 15 min" → up to 15 min stale, burns runs on empty checks
Good: Trigger = Airtable "new record" webhook → fires the instant the row lands, zero idle runsMap data explicitly. Never assume field names survive a hop. The Typeform field email does not arrive at the Slack step called email — it arrives as a node-output reference you must wire by hand. Pin a real sample, look at the actual output keys, map from those.
Add a guard early. Put a filter/condition right after the trigger so junk events stop before they hit an external API: drop test payloads, require the fields you need to be non-empty, exit on the wrong event type.
Every flow ships with an error path, because a flow without one is a silent failure waiting for the day the API hiccups and nobody notices the orders stopped syncing. Before you call a flow done you must be able to point at three things: where a failed run goes, how many times it retries, and who gets told. Full per-platform recipes (including the manual exponential-backoff loop) live in references/error-handling.md, and the retry/backoff theory under them in ../error-handling/SKILL.md; here is the working core.
n8n. Build a dedicated Error Workflow that begins with the Error Trigger node — it runs only when a monitored workflow fails. Wire it to Slack/email/a log row, then set it as the main flow's settings.errorWorkflow. On risky nodes (anything hitting an external API) toggle Retry On Fail (Max Tries 3–5, set a Wait between tries) and, where a single failed item shouldn't kill the run, Continue On Fail (the node emits an error object instead of halting). n8n's built-in retry is linear — for true exponential backoff you build a wait/loop yourself (recipe in references).
Make. Attach an error handler to the risky module:
Zapier. Autoreplay automatically replays failed steps, up to 5 retries per step — but it's account-wide and turns OFF for a Zap once that Zap is published with its own custom error handling. Filters gate a Zap so it only proceeds when data is the right shape. Paths give if/then branching, including a fallback branch on error.
| Concern | n8n | Make | Zapier |
|---|---|---|---|
| Auto-retry | Retry On Fail (Max Tries 3–5, linear) | Break → Incomplete Executions auto-retry | Autoreplay (5/step, account-wide) |
| Don't halt on one bad item | Continue On Fail | Ignore / Resume | Filter to skip |
| Branch / fallback | IF + Error Workflow | router + Resume | Paths |
| Failure alert | Error Trigger → Slack/email | error handler → notify module | published Zap error notification |
| Exponential backoff | manual wait/loop | manual | not native |
Flows commonly run twice for one event: providers deliver webhooks at-least-once, and retries replay. If your flow does a non-idempotent write (create a charge, send an email, insert a row), a double-fire means a double charge or a duplicate record.
Fix: dedup on a stable key (the event id / external id) before any non-idempotent action.
Bad: webhook → create Notion row (Stripe retries the event → two rows)
Good: webhook → lookup event_id in store →
filter "not seen" → create Notion row → save event_idIf n8n is chosen, produce an importable workflow JSON the user can paste into Import from File/Clipboard. It must have a non-empty nodes array (including a trigger node), a connections object, and settings.errorWorkflow pointing at the Error Workflow. Reference credentials by the n8n credential store, never paste secrets inline. Full schema and a minimal trigger→action→error example: references/n8n-workflow-json.md.
If Make or Zapier is chosen, produce a numbered build sheet — neither has a portable export you can hand over. One row per step: # | app | action | field mapping (source → target) | error directive. End with the trigger type and the dedup key.
Run scripts/verify.sh on any JSON you emit: read-only, no network, no credentials — it parses the file and checks a non-empty nodes array, a connections object, and ≥1 trigger node (exits 0 on an empty target).
| Anti-pattern | Why it bites | Do instead |
|---|---|---|
| No error path | First API hiccup, the flow dies silently; you find out from an angry customer | Wire the platform's error handler + a real alert before shipping |
| Polling when a webhook exists | 1–15 min stale, burns runs on empty checks | Use the push/webhook trigger |
| 12-step branching logic crammed into Zapier | Task billing explodes; logic gets unmaintainable | Move complex/high-volume logic to n8n |
| Blind field mapping | email ≠ the field the next step calls email; data silently lands empty | Pin a sample, map from real output keys |
| Non-idempotent write, no dedup | At-least-once delivery → double charge / duplicate row | Dedup on event id before the write |
| Secrets pasted inline in a node | Leaked in exports, unrotatable, shared everywhere | Use the platform credential store, reference by name |
| One mega-flow doing everything | Unreadable, untestable, one failure nukes all | Split: trigger → sub-flow per concern |
| Choosing platform by familiarity | Bill 10× higher than the right unit; "my automation bill exploded" | Pick by billing unit (task vs op vs execution) up front |
© ericrisco, 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 (scripts, references) in skills/automation-flows of ericrisco/rsc-harness.
Open the folder on GitHubat commit e3d5b33
Automation Flows 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 |
|---|---|---|---|---|---|---|
| Automation Flows this skillericrisco/rsc-harness | 167 | — | ~2.9k | Automated safety check: Pass | MIT | |
| n8n Expression Syntaxczlonkowski/n8n-skills | 6.4k | — | ~5.2k | Automated safety check: Pass | MIT | |
| N8n Trigger Testing Strategiesproffesor-for-testing/agentic-qe | 494 | — | ~3.7k | Automated safety check: Pass | MIT | |
| Finta Webhooks Eventsjeremylongshore/tons-of-skills-marketplace | 2.8k | — | ~871 | Automated safety check: Pass | MIT | |
| Automation InstructionsdeusXmachina-dev/memorylane | 121 | — | ~1.1k | Automated safety check: Pass | GPL-3.0 | |
| N8n Expression Syntaxdavila7/claude-code-templates | 32k | 4 repos | ~2.4k | Automated safety check: Pass | MIT |
czlonkowski/n8n-skills
Validates and fixes n8n's double-curly-brace expressions, covering $json, $node, and the webhook body-wrapping mistake.
proffesor-for-testing/agentic-qe
Webhook testing, schedule validation, event-driven triggers, and polling mechanism testing for n8n workflows.
jeremylongshore/tons-of-skills-marketplace
Automate Finta pipeline events with Zapier and email triggers.
deusXmachina-dev/memorylane
Write step-by-step automation instructions for a workflow, tailored to your tool (Claude, n8n or Zapier).
davila7/claude-code-templates
Validate n8n expression syntax and fix common errors. An agent skill from davila7/claude-code-templates.
tech-leads-club/agent-skills
Designs go-to-market automation and AI agent workflows for revenue teams, built on the idea that architecture and context matter more than any single tool.
ericrisco/rsc-harness
A skill your agent uses when designing or analyzing a controlled experiment — falsifiable hypothesis, sample size from an MDE, reading significance/CI/power, CUPED, or rescuing tests that won't go…
ericrisco/rsc-harness
A skill your agent uses when making a web UI conform to WCAG 2.2 Level AA — axe-core or Lighthouse a11y violations, keyboard operability, focus management, ARIA roles/names/live regions, contrast…
ericrisco/rsc-harness
A skill your agent uses when running or fixing paid acquisition on Google or Meta — campaign structure (Performance Max, Demand Gen, Search, Advantage+), platform-fit creative, budget/scaling rules…
ericrisco/rsc-harness
A skill your agent uses when measuring whether an LLM or agent system actually got better and gating merges on it: golden sets, fixing an inflated LLM-as-judge, scoring RAG (faithfulness, contextual…
ericrisco/rsc-harness
A skill your agent uses when a creative goal must become a finished media file: pick and order generative-media models per modality — AI voiceover, image-to-video clips, score — then glue them with…
ericrisco/rsc-harness
A skill your agent uses when instrumenting product or web analytics — GA4/PostHog SDK wiring, event taxonomy, funnels, double-counted events, consent gating, PII scrubbing.
Categories
A skill your agent uses when building or fixing a no-code automation on n8n, Make, or Zapier — trigger to multi-app steps with data mapping, dedup, retries and an error path — or picking the…. Automation Flows is an agent skill from ericrisco/rsc-harness. Use when building or fixing a no-code automation on n8n, Make, or Zapier — trigger to multi-app steps with data mapping, dedup, retries and an error path — or picking the platform by billing unit (task vs credit vs execution).
Automation Flows fits situations like: fixing a no-code automation on n8n; zapier — trigger to multi-app steps with data mapping; retries and an error path —; picking the platform by billing unit (task vs credit vs execution).
Run `npx skills add ericrisco/rsc-harness --skill automation-flows -a claude-code`. Or copy the skill folder (skills/automation-flows in ericrisco/rsc-harness) into .claude/skills/automation-flows in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ericrisco/rsc-harness --skill automation-flows -a codex`. Or copy the skill folder (skills/automation-flows in ericrisco/rsc-harness) into .agents/skills/automation-flows 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 ericrisco/rsc-harness --skill automation-flows -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/automation-flows, .gemini/skills/automation-flows, .github/skills/automation-flows and .opencode/skills/automation-flows in your project.
Going by SKILL.md and its folder, Automation Flows needs a shell for the scripts in its folder. Our summary lists: A Bash shell.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. 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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Automation Flows is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.9k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.9k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Automation Flows: n8n Expression Syntax (czlonkowski/n8n-skills, 6.4k stars), N8n Trigger Testing Strategies (proffesor-for-testing/agentic-qe, 494 stars), Finta Webhooks Events (jeremylongshore/tons-of-skills-marketplace, 2.8k stars) and Automation Instructions (deusXmachina-dev/memorylane, 121 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ericrisco (a GitHub user) maintains it in ericrisco/rsc-harness, which has 167 GitHub stars. The repository holds 227 skills in this directory. The repository was last updated on October 7, 2026.
Source: ericrisco/rsc-harness on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.