N8n pro
Build Your Own AI Employee. The complete starter kit for OpenClaw + Hermes Agent. 155 deduplicated skills, drag-and-drop workspace, case studies, install scripts.From the repository description
npx -y skills add S3YED/appie-kit --skill n8n-proAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 6 stars6 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
8.7 KB, ~2.5k tokens by cl100k_base, as published. Nobody here has run it
n8n-pro Skill
Purpose
Operate, harden, monitor, and back up the Weblyfe n8n fleet at app.n8n.weblyfe.nl. Codifies the patterns and tools built 2026-05-02 so future sessions don't have to re-derive them.
Quick reference
| Task | Tool / Command |
|---|---|
| Daily JSON backup of every workflow to git | tools/n8n-backup.py (launchd com.weblyfe.appie-1-cron.n8n-backup at 02:15) |
| Hourly health monitor + Telegram alerts | tools/n8n-health.py (launchd com.weblyfe.appie-1-cron.n8n-health every 3600s) |
| Apply retry defaults to every active workflow | tools/n8n-harden.py [--dry-run] [--workflow ID] |
| Inspect workflow JSON via API | curl -H "X-N8N-API-KEY: $KEY" https://app.n8n.weblyfe.nl/api/v1/workflows/<id> |
| List + count active workflows | curl ...?active=true&limit=100 |
| Activate / deactivate a workflow | POST /api/v1/workflows/<id>/activate (or /deactivate) |
| Update a workflow | PUT /api/v1/workflows/<id> with body {name, nodes, connections, settings} only — anything else triggers request/body must NOT have additional properties |
Configuration
API base + key live in ~/.openclaw/openclaw.json under env.vars:
N8N_BASE_URL # "app.n8n.weblyfe.nl"
N8N_API_KEY # Bearer-style token, sent as X-N8N-API-KEY header
DigitalOcean droplet: n8n-weblyfe (id 545108451, region ams3, size s-1vcpu-1gb, public IP 142.93.232.231). DO API token in ~/.openclaw/openclaw.json as DIGITALOCEAN_ACCESS_TOKEN. No SSH key registered on DO account, so direct SSH from Appie-1 to the droplet is blocked — see Notion task 354c3321-de60-8128-b1b1-df81e0ddc0ed for the manual key-add procedure.
Production-ready workflow checklist
Before declaring a workflow "foolproof," verify all of the following:
- Error handler is wired.
settings.errorWorkflowpoints to the GLOBAL ERROR HANDLER54kH3T3oXWELrCDuFKMN5. The handler auto-attaches itself to any active workflow without one (Schedule Trigger at 1am daily), so this is mostly automatic — but verify on PR. - Retries on every API node.
retryOnFail: true,maxTries: 3,waitBetweenTries: 2000minimum. Usetools/n8n-harden.py --workflow <id>to apply. - Graceful degradation on non-critical leaf nodes. Sheet appends and label-adds get
onError: continueRegularOutputorcontinueErrorOutputso a downstream service hiccup doesn't block the upstream archive. - Idempotent file naming. Drive uploads use
{sender_domain}_{email_date}_{thread_id_short}.pdfstyle — not{$now}— so retries don't create duplicates. - Subject filter is specific. A trigger with only
has:attachmentwill hit every random PDF (contracts, screenshots, your own outbound mail). Add explicit subject patterns. - Skip rules for known false positives. Stripe TECHWIZ LLC = income, skip. Outbound mail from
[email protected]= own content, skip. Embed in a Code node early in the flow. - Multi-attachment handling. If a single email might carry multiple PDFs (Tally, Midjourney), the Code node must emit one item per PDF — n8n's
Object.keys(...).find(...)only takes the first. - Folder mapping covers backfill + future. The Drive folder map should include 2024-2026 and a fallback that auto-discovers via Drive search.
- Single-account vs multi-account. Each Gmail Trigger is bound to one credential. Multi-account coverage requires either multiple Trigger nodes or a parallel pipeline (Python
tools/invoice-pipeline.pycovers all 3 accounts as backup).
Common API gotchas
- PUT body schema is strict. Send
{name, nodes, connections, settings}only. Any ofid, active, createdAt, updatedAt, versionId, tags, triggerCount, meta, staticData, isArchived, shared, homeProject, scopes, sharedWithProjects, pinData, usedCredentialscauses 400request/body must NOT have additional properties. - PUT validates credentials. If a node references
googleContactsOAuth2Api(or any other credential type) and that credential no longer exists in the workspace, PUT returns 400Cannot publish workflow: N nodes have configuration issues. Fix in the n8n UI before harden can succeed. - Pagination. List endpoints page via
nextCursor— always loop until cursor is empty. - Activate vs PUT-with-active. Use the dedicated
POST /workflows/<id>/activateendpoint; settingactive: truein PUT body is rejected (it's a read-only field on PUT).
Workflow node-type cheatsheet
API-touching (always retry):
n8n-nodes-base.gmail / .gmailTrigger
n8n-nodes-base.googleDrive / .googleSheets / .googleCalendar / .googleContacts
n8n-nodes-base.airtable / .notion / .slack / .telegram
n8n-nodes-base.httpRequest / .webhook
n8n-nodes-base.stripe / .mailerLite / .brevo / .openAi
n8n-nodes-base.tally / .tidyCal / .calendly / .intercom
@n8n/n8n-nodes-langchain.* (LLM nodes)
n8n-nodes-base.extractFromFile (PDF parsing — IO-bound)
Local logic (skip retry):
n8n-nodes-base.set / .code / .function
n8n-nodes-base.if / .switch / .merge
n8n-nodes-base.splitInBatches / .wait / .noOp
n8n-nodes-base.scheduleTrigger / .cron
n8n-nodes-base.manualTrigger / .errorTrigger
tools/n8n-harden.py enforces this split via regex patterns.
Backup + rollback procedure
Backups live at ~/clawd/n8n-backups/<workflow_id>__<slug>.json. Daily commit by tools/n8n-backup.py.
To roll back a single workflow to its prior state:
# Find the previous version
git -C ~/clawd log -p -- n8n-backups/<id>__*.json | less
# Restore from a specific commit
git -C ~/clawd show <commit>:n8n-backups/<id>__<slug>.json > /tmp/restore.json
# PUT the trimmed body back via API
python3 -c "
import json
wf = json.load(open('/tmp/restore.json'))
keep = {k: wf[k] for k in ('name','nodes','connections','settings') if k in wf}
json.dump(keep, open('/tmp/put.json','w'))
"
curl -X PUT -H 'X-N8N-API-KEY: $N8N_API_KEY' -H 'Content-Type: application/json' \
--data-binary @/tmp/put.json \
https://app.n8n.weblyfe.nl/api/v1/workflows/<id>
Health monitoring
tools/n8n-health.py (hourly):
- Failure check: queries
/executions?status=error&limit=50, filters to last 1h window, aggregates by workflow, alerts via Telegram MarkdownV2. - Silent-death check: queries last 200 executions, finds workflows with
scheduleTrigger/cronthat have NO successful run in 24h, alerts. - Cooldown: 30 min per alert key (state in
~/clawd/.cache/n8n-health-state.json) so flapping doesn't spam.
State of failing/silent workflows visible in ~/clawd/logs/n8n-health.jsonl. Common patterns:
- Whatsapp Agent | DRP failures — likely external Whatsapp API issues; check execution detail.
- GLOBAL ERROR HANDLER errors — usually a downstream issue that the handler couldn't auto-fix.
When to add a new workflow vs modify an existing one
- Add new when the trigger source is genuinely different (a new form, a new webhook URL, a new schedule). Naming convention:
{Domain} | {What it does}(e.g.,PeakSpring | Contact Form). - Modify existing when the upstream/downstream stays the same and only the body logic changes.
- Clone-then-modify when a major refactor is needed (the Gmail Invoicing v2 example): keep the original active until v2 is verified, then deactivate the original. Old workflows are kept around as inactive (don't delete) so we have history.
Authoritative refs
- Doctrine:
~/clawd/knowledge/token-reduction-system/95-token-reduction.md(output discipline + tier routing — applies to LLM nodes inside n8n flows). - This skill:
~/clawd/skills/n8n-pro/SKILL.md(you are here). - Memory pointer: auto-memory
reference_invoice_pipeline.mdcarries the fleet-wide ops summary. - Backup history:
~/clawd/n8n-backups/(47+ workflow JSONs, daily commits on master). - Tools:
tools/n8n-backup.py,tools/n8n-health.py,tools/n8n-harden.py,tools/invoice-pipeline.py.
Recent landmark events
- 2026-05-02 morning. Gmail Invoicing v1 (
caS-m8n9KKb4tHBobvSgS) had a Q2 2026 folder ID typo (Uvxqvs realUvx) plus 1x/day polling plus no archive-after-process. Patched in-place, then cloned to v2 (pgKuiPoPpmv9QKgl, "no AI"), then hardened with multi-PDF support + Stripe TECHWIZ skip + idempotent filename + tightened subject filter. v1 deactivated. Backup at commitaea94cc, post-state at353d084and8b43952. - 2026-05-02 same morning. GLOBAL ERROR HANDLER alert recipient changed from
[email protected]solo to[email protected], [email protected](both). Retry added to itsSend a messagenode. - 2026-05-02 same morning. First fleet-wide harden: 28 active workflows scanned, 20 patched (118 nodes received retry+wait defaults). 8 failed PUT validation due to missing credentials in pre-existing nodes — flagged for manual cleanup in n8n UI.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.