{"id":"49cda385-0f4c-4b5c-b2a7-a414b3f83c7b","shortId":"YhCVqh","kind":"skill","title":"workflow-architect","tagline":"Design production-grade n8n workflows from requirements. Use this skill whenever the user wants to build, design, architect, or plan an n8n workflow or automation — including phrases like \"build me a workflow\", \"design an automation\", \"create an n8n flow\", \"how should I structure","description":"# n8n Workflow Architect\n\nYou are designing a **production n8n workflow**, not a demo. The workflow must survive real data, real failures, and real volume.\n\n## Core principles (apply every time)\n\n1. **Real node names, not guesses.** n8n is strict about capitalization and spacing. Use `Google Sheets` not `Googlesheets`. `HTTP Request` not `HttpRequest`. `Webhook` not `webhook trigger`. If unsure, say so — don't invent.\n\n2. **Expression syntax is `={{ $json.field }}`.** The leading `=` marks the whole field as an expression. Without it, n8n treats the value as a literal string. This is the #1 hallucination source.\n\n3. **Every external call needs an error branch.** Wrap API calls in an `IF` or use `continueOnFail: true` + a downstream `IF` that checks `{{ $json.error }}`. Never assume third parties don't fail.\n\n4. **Idempotency by default.** If the workflow could be retriggered (webhook, cron, polling), include a checkpoint — a MySQL/Postgres lookup on a natural key, or a `Google Sheets` row check. Reference the `mysql-checkpointing` skill for the pattern.\n\n5. **Sub-workflows for reuse.** If logic exceeds ~8 nodes or is called from multiple places (e.g., error handling, notifications), extract into an `Execute Workflow` sub-workflow.\n\n## Workflow design process\n\nFollow these steps in order. Skipping steps produces demo-quality output.\n\n### Step 1: Clarify the trigger\n\nAsk (or infer) exactly ONE trigger type:\n\n| Trigger | Use when |\n|---|---|\n| `Webhook` | External system pushes events (Stripe, Meta, custom APIs) |\n| `Schedule Trigger` | Recurring jobs (daily reports, hourly polls) |\n| `Manual Trigger` | Admin-triggered, testing |\n| `Form Trigger` | User-facing intake |\n| `Chat Trigger` | Conversational agents |\n| `Execute Workflow Trigger` | Called by another workflow |\n\nWebhooks in production need: signature verification (HMAC), idempotency key extraction, and a 200 response within 3s (use `Respond to Webhook` early, process async).\n\n### Step 2: Map the happy path\n\nDraft the node sequence as a numbered list BEFORE writing JSON. Each node gets:\n- Node type (exact n8n name)\n- Purpose (one sentence)\n- Key config (the one or two parameters that matter)\n\nExample:\n```\n1. Webhook (POST /stripe-events) — receives Stripe events\n2. Code — verify HMAC signature against STRIPE_SIGNING_SECRET header\n3. IF — branch on signature valid\n4. Respond to Webhook — return 200 immediately (no payload)\n5. MySQL — SELECT from processed_webhooks WHERE event_id = {{ $('Webhook').item.json.body.id }}\n...\n```\n\n### Step 3: Add error paths\n\nFor EACH external call node, answer:\n- What failure modes exist? (timeout, 4xx, 5xx, rate limit, malformed response)\n- What's the recovery? (retry with backoff, fallback vendor, dead-letter queue, alert)\n\nCommon patterns:\n- **Retry with backoff**: `Wait` node (exponential: 2^n seconds) → loop back via `Execute Workflow` calling itself with a retry counter\n- **Fallback vendor**: `IF` on error → alternative vendor node (e.g., WhatsApp fails → Twilio SMS)\n- **Dead letter**: Error → `MySQL` insert into `failed_jobs` table with payload + error message\n\n### Step 4: Wire the LLM steps correctly\n\nIf using LLMs (Claude, OpenAI, Groq), reference the `chain-llm-pattern` skill for multi-step reasoning. Key rules:\n\n- Use the **LangChain nodes** (`AI Agent`, `Basic LLM Chain`, `Information Extractor`) for structured outputs, NOT raw `HTTP Request` to the LLM API — the LangChain nodes handle JSON parsing, retries, and token accounting.\n- For JSON outputs, use `Information Extractor` with an explicit schema, not \"please return JSON\" in a system prompt.\n- Set `maxTokens` explicitly — n8n defaults can silently truncate.\n- Pin an example input during development (right-click node → \"Pin Data\") so downstream nodes have stable schemas to build against.\n\n### Step 5: Output\n\nProduce the workflow as valid n8n workflow JSON. Structure:\n\n```json\n{\n  \"name\": \"Workflow Name\",\n  \"nodes\": [...],\n  \"connections\": {...},\n  \"settings\": { \"executionOrder\": \"v1\" }\n}\n```\n\nEvery node needs `id` (UUID), `name` (unique in workflow), `type` (exact n8n type), `typeVersion` (integer), `position` ([x, y]), and `parameters` (node-specific config).\n\nUse `typeVersion: 1` as a safe default unless you know a newer version is required.\n\nFor connections, `main` is the default output — branching nodes (`IF`, `Switch`) have multiple output indices.\n\nIf the user asked for a description rather than importable JSON, produce a clean numbered list matching Step 2 format and offer to generate JSON.\n\n## Anti-patterns to refuse\n\nDo NOT produce workflows that:\n- Store credentials inline (always use n8n credential references: `{{ $credentials.apiKey }}`)\n- Poll an API every minute when a webhook exists\n- Use `Function` nodes for logic that has a purpose-built node (e.g., `Split In Batches`, `Merge`, `Item Lists`)\n- Return raw LLM output to end users without validation\n- Assume a list/array is always populated (always handle empty arrays)\n\n## When the user's request is vague\n\nDon't guess — ask ONE consolidated clarifying question covering:\n- Trigger source + frequency\n- External services involved\n- What happens on failure (silent drop? alert? retry?)\n- Data destination\n\nOne question, not five. Move fast.\n\n## Reference files\n\n- `references/node-catalog.md` — curated list of battle-tested nodes for common tasks\n- `references/expressions-cheatsheet.md` — n8n expression syntax, common patterns, gotchas","tags":["workflow","architect","n8n","claude","skills","masteranime","agent-skills","agentic-ai","agentic-workflow","automation","claude-ai","claude-code"],"capabilities":["skill","source-masteranime","skill-workflow-architect","topic-agent-skills","topic-agentic-ai","topic-agentic-workflow","topic-automation","topic-claude","topic-claude-ai","topic-claude-code","topic-claude-skills","topic-large-language-model","topic-llm","topic-mcp","topic-mcp-server"],"categories":["n8n-claude-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/masteranime/n8n-claude-skills/workflow-architect","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add masteranime/n8n-claude-skills","source_repo":"https://github.com/masteranime/n8n-claude-skills","install_from":"skills.sh"}},"qualityScore":"0.463","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 26 github stars · SKILL.md body (5,442 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:05:05.654Z","embedding":null,"createdAt":"2026-04-26T01:03:23.942Z","updatedAt":"2026-05-18T19:05:05.654Z","lastSeenAt":"2026-05-18T19:05:05.654Z","tsv":"'/stripe-events':372 '1':77,137,254,369,649 '2':110,332,376,456,695 '200':320,397 '3':140,386,413 '3s':323 '4':171,392,497 '4xx':428 '5':209,401,603 '5xx':429 '8':218 'account':554 'add':414 'admin':288 'admin-trigg':287 'agent':300,528 'ai':527 'alert':447,796 'altern':475 'alway':715,762,764 'anoth':306 'answer':422 'anti':703 'anti-pattern':702 'api':149,276,544,723 'appli':74 'architect':3,22,50 'array':767 'ask':258,680,778 'assum':165,758 'async':330 'autom':29,39 'back':460 'backoff':440,452 'basic':529 'batch':745 'battl':813 'battle-test':812 'branch':147,388,669 'build':20,33,600 'built':740 'call':143,150,222,304,420,464 'capit':87 'chain':512,531 'chain-llm-pattern':511 'chat':297 'check':162,199 'checkpoint':186,204 'clarifi':255,781 'claud':506 'clean':690 'click':589 'code':377 'common':448,817,823 'config':360,646 'connect':619,663 'consolid':780 'continueonfail':156 'convers':299 'core':72 'correct':502 'could':178 'counter':469 'cover':783 'creat':40 'credenti':713,718 'credentials.apikey':720 'cron':182 'curat':809 'custom':275 'daili':281 'data':66,592,798 'dead':444,483 'dead-lett':443 'default':174,577,653,667 'demo':60,250 'demo-qu':249 'descript':683 'design':4,21,37,53,239 'destin':799 'develop':586 'downstream':159,594 'draft':337 'drop':795 'e.g':226,478,742 'earli':328 'empti':766 'end':754 'error':146,227,415,474,485,494 'event':272,375,408 'everi':75,141,623,724 'exact':261,353,633 'exampl':368,583 'exceed':217 'execut':233,301,462 'executionord':621 'exist':426,729 'explicit':563,575 'exponenti':455 'express':111,123,821 'extern':142,269,419,787 'extract':230,317 'extractor':533,560 'face':295 'fail':170,480,489 'failur':68,424,793 'fallback':441,470 'fast':805 'field':120 'file':807 'five':803 'flow':43 'follow':241 'form':291 'format':696 'frequenc':786 'function':731 'generat':700 'get':350 'googl':91,196 'googlesheet':94 'gotcha':825 'grade':7 'groq':508 'guess':82,777 'hallucin':138 'handl':228,548,765 'happen':791 'happi':335 'header':385 'hmac':314,379 'hour':283 'http':95,539 'httprequest':98 'id':409,626 'idempot':172,315 'immedi':398 'import':686 'includ':30,184 'indic':676 'infer':260 'inform':532,559 'inlin':714 'input':584 'insert':487 'intak':296 'integ':637 'invent':109 'involv':789 'item':747 'item.json.body.id':411 'job':280,490 'json':347,549,556,568,612,614,687,701 'json.error':163 'json.field':114 'key':193,316,359,521 'know':656 'langchain':525,546 'lead':116 'letter':445,484 'like':32 'limit':431 'list':344,692,748,810 'list/array':760 'liter':132 'llm':500,513,530,543,751 'llms':505 'logic':216,734 'lookup':189 'loop':459 'main':664 'malform':432 'manual':285 'map':333 'mark':117 'match':693 'matter':367 'maxtoken':574 'merg':746 'messag':495 'meta':274 'minut':725 'mode':425 'move':804 'multi':518 'multi-step':517 'multipl':224,674 'must':63 'mysql':203,402,486 'mysql-checkpoint':202 'mysql/postgres':188 'n':457 'n8n':8,26,42,48,56,83,126,354,576,610,634,717,820 'name':80,355,615,617,628 'natur':192 'need':144,311,625 'never':164 'newer':658 'node':79,219,339,349,351,421,454,477,526,547,590,595,618,624,644,670,732,741,815 'node-specif':643 'notif':229 'number':343,691 'offer':698 'one':262,357,362,779,800 'openai':507 'order':245 'output':252,536,557,604,668,675,752 'paramet':365,642 'pars':550 'parti':167 'path':336,416 'pattern':208,449,514,704,824 'payload':400,493 'phrase':31 'pin':581,591 'place':225 'plan':24 'pleas':566 'poll':183,284,721 'popul':763 'posit':638 'post':371 'principl':73 'process':240,329,405 'produc':248,605,688,709 'product':6,55,310 'production-grad':5 'prompt':572 'purpos':356,739 'purpose-built':738 'push':271 'qualiti':251 'question':782,801 'queue':446 'rate':430 'rather':684 'raw':538,750 'real':65,67,70,78 'reason':520 'receiv':373 'recoveri':437 'recur':279 'refer':200,509,719,806 'references/expressions-cheatsheet.md':819 'references/node-catalog.md':808 'refus':706 'report':282 'request':96,540,772 'requir':11,661 'respond':325,393 'respons':321,433 'retri':438,450,468,551,797 'retrigg':180 'return':396,567,749 'reus':214 'right':588 'right-click':587 'row':198 'rule':522 'safe':652 'say':105 'schedul':277 'schema':564,598 'second':458 'secret':384 'select':403 'sentenc':358 'sequenc':340 'servic':788 'set':573,620 'sheet':92,197 'sign':383 'signatur':312,380,390 'silent':579,794 'skill':14,205,515 'skill-workflow-architect' 'skip':246 'sms':482 'sourc':139,785 'source-masteranime' 'space':89 'specif':645 'split':743 'stabl':597 'step':243,247,253,331,412,496,501,519,602,694 'store':712 'strict':85 'string':133 'stripe':273,374,382 'structur':47,535,613 'sub':211,236 'sub-workflow':210,235 'surviv':64 'switch':672 'syntax':112,822 'system':270,571 'tabl':491 'task':818 'test':290,814 'third':166 'time':76 'timeout':427 'token':553 'topic-agent-skills' 'topic-agentic-ai' 'topic-agentic-workflow' 'topic-automation' 'topic-claude' 'topic-claude-ai' 'topic-claude-code' 'topic-claude-skills' 'topic-large-language-model' 'topic-llm' 'topic-mcp' 'topic-mcp-server' 'treat':127 'trigger':102,257,263,265,278,286,289,292,298,303,784 'true':157 'truncat':580 'twilio':481 'two':364 'type':264,352,632,635 'typevers':636,648 'uniqu':629 'unless':654 'unsur':104 'use':12,90,155,266,324,504,523,558,647,716,730 'user':17,294,679,755,770 'user-fac':293 'uuid':627 'v1':622 'vagu':774 'valid':391,609,757 'valu':129 'vendor':442,471,476 'verif':313 'verifi':378 'version':659 'via':461 'volum':71 'wait':453 'want':18 'webhook':99,101,181,268,308,327,370,395,406,410,728 'whatsapp':479 'whenev':15 'whole':119 'wire':498 'within':322 'without':124,756 'workflow':2,9,27,36,49,57,62,177,212,234,237,238,302,307,463,607,611,616,631,710 'workflow-architect':1 'wrap':148 'write':346 'x':639 'y':640","prices":[{"id":"0011ca0b-8f4a-4dbb-9217-ac74faeab45f","listingId":"49cda385-0f4c-4b5c-b2a7-a414b3f83c7b","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"masteranime","category":"n8n-claude-skills","install_from":"skills.sh"},"createdAt":"2026-04-26T01:03:23.942Z"}],"sources":[{"listingId":"49cda385-0f4c-4b5c-b2a7-a414b3f83c7b","source":"github","sourceId":"masteranime/n8n-claude-skills/workflow-architect","sourceUrl":"https://github.com/masteranime/n8n-claude-skills/tree/main/skills/workflow-architect","isPrimary":false,"firstSeenAt":"2026-04-26T01:03:23.942Z","lastSeenAt":"2026-05-18T19:05:05.654Z"}],"details":{"listingId":"49cda385-0f4c-4b5c-b2a7-a414b3f83c7b","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"masteranime","slug":"workflow-architect","github":{"repo":"masteranime/n8n-claude-skills","stars":26,"topics":["agent-skills","agentic-ai","agentic-workflow","automation","claude","claude-ai","claude-code","claude-skills","large-language-model","llm","mcp","mcp-server","n8n","n8n-workflow","workflow","workflow-automation"],"license":"mit","html_url":"https://github.com/masteranime/n8n-claude-skills","pushed_at":"2026-04-26T10:24:01Z","description":"Production Claude Code skills for n8n from a Verified Creator's 100+ workflows","skill_md_sha":"7e1169d35a0679ab373d200403157a792dd25b04","skill_md_path":"skills/workflow-architect/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/masteranime/n8n-claude-skills/tree/main/skills/workflow-architect"},"layout":"multi","source":"github","category":"n8n-claude-skills","frontmatter":{"name":"workflow-architect","description":"Design production-grade n8n workflows from requirements. Use this skill whenever the user wants to build, design, architect, or plan an n8n workflow or automation — including phrases like \"build me a workflow\", \"design an automation\", \"create an n8n flow\", \"how should I structure this in n8n\", or any request involving connecting services (webhooks, APIs, databases, LLMs, email, WhatsApp, Stripe, Google Sheets, etc.) through n8n. Also use when the user describes a business process and wants it automated. Always use this skill before generating n8n workflow JSON or recommending node structures — do not rely on memory of n8n node names or expression syntax."},"skills_sh_url":"https://skills.sh/masteranime/n8n-claude-skills/workflow-architect"},"updatedAt":"2026-05-18T19:05:05.654Z"}}