skill n8n by Dr. FIRAS
by @drfirass
AI-powered n8n workflow builder and deployer by Dr. FIRAS. Generates production-ready n8n workflow JSON from natural language, validates structure and logic,...
clawhub install n8n-autopilotπ About This Skill
name: n8n-autopilot description: > AI-powered n8n workflow builder and deployer by Dr. FIRAS. Generates production-ready n8n workflow JSON from natural language, validates structure and logic, then auto-deploys to any n8n instance via REST API. Use this skill whenever the user wants to create, build, design, generate, deploy, or publish an n8n workflow β even from a plain description like "automate my Stripe payments to Slack". Also triggers when the user pastes n8n workflow JSON for review, debugging, optimization, or redeployment. Covers: workflow generation, structural validation, auto-deployment, activation, execution monitoring, and performance diagnostics. LinkedIn: https://www.linkedin.com/in/doctor-firass/ metadata: {"openclaw":{"emoji":"π","requires":{"env":["N8N_API_KEY","N8N_BASE_URL"]},"primaryEnv":"N8N_API_KEY"}}
n8n Autopilot β AI Workflow Builder & Deployer
> By Dr. FIRAS β LinkedIn
Build complete n8n workflows from natural language, validate them, and deploy them to your n8n instance β all in one step. No placeholders, no TODOs, no manual assembly required.
Golden Rules
ALWAYS:
1. Generate every node with real, configured parameters (URLs, paths, expressions)
2. Wire all connections explicitly in the connections object
3. Include exactly one trigger node per workflow
4. Assign node positions for a clean canvas layout (~200 px spacing)
5. Validate the workflow before presenting it to the user
6. Offer to deploy automatically when N8N_API_KEY is configured
NEVER:
url, path, or jsCode fields emptySetup
Two environment variables are needed:
| Variable | Where to find it |
|---|---|
| N8N_API_KEY | n8n UI β Settings β API β Create API Key |
| N8N_BASE_URL | Your instance URL, e.g. https://n8n.example.com |
Set them via OpenClaw settings (~/.config/openclaw/settings.json):
{
"skills": {
"n8n-autopilot": {
"env": {
"N8N_API_KEY": "your-key",
"N8N_BASE_URL": "https://your-n8n.example.com"
}
}
}
}
Verify connectivity:
python3 scripts/n8n_deploy.py ping
Workflow Generation Pipeline
Follow these steps for every workflow request:
Step 1 β Understand the intent
Determine four things before writing JSON:
If the request is clear, skip to generation. Do not over-ask.
Step 2 β Plan the node chain
Map the flow mentally:
Trigger β [Ingest] β [Transform] β [Branch?] β [Act] β [Respond/Store]
Step 3 β Generate the JSON
Use the WorkflowForge builder (see scripts/workflow_forge.py) or write
raw JSON. Output a single valid JSON object ready for n8n's "Import from JSON".
Step 4 β Self-validate
Run through the validation checklist below. Fix every issue before showing the user. You can also call:
python3 scripts/workflow_inspector.py check --file workflow.json
Step 5 β Deploy (if API is configured)
python3 scripts/n8n_deploy.py push --file workflow.json
python3 scripts/n8n_deploy.py push --file workflow.json --activate
Step 6 β Explain
Provide a brief node-by-node table and import/credential instructions.
JSON Skeleton
{
"name": "Descriptive Workflow Name",
"nodes": [],
"connections": {},
"active": false,
"settings": { "executionOrder": "v1" }
}
Node structure
{
"id": "unique-uuid-v4",
"name": "Human Readable Name",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4,
"position": [500, 300],
"parameters": { ... },
"credentials": { "httpHeaderAuth": { "id": "1", "name": "My Auth" } }
}
Connection structure
{
"connections": {
"Source Node Name": {
"main": [
[{ "node": "Target Node Name", "type": "main", "index": 0 }]
]
}
}
}
main = array of arrays (outer = output index, inner = targets)Node Catalog (Quick Ref)
Triggers
| Type | Ver | Purpose | |------|-----|---------| |n8n-nodes-base.manualTrigger | 1 | Testing / manual runs |
| n8n-nodes-base.webhook | 2 | HTTP webhook receiver |
| n8n-nodes-base.scheduleTrigger | 1 | Cron / interval |Logic & Transform
| Type | Ver | Purpose | |------|-----|---------| |n8n-nodes-base.code | 2 | JavaScript / Python |
| n8n-nodes-base.set | 3 | Map / rename / add fields |
| n8n-nodes-base.if | 2 | Conditional branch |
| n8n-nodes-base.switch | 3 | Multi-way routing |
| n8n-nodes-base.merge | 3 | Combine streams |
| n8n-nodes-base.splitInBatches | 3 | Loop / batch |
| n8n-nodes-base.noOp | 1 | No-op terminus |HTTP & Response
| Type | Ver | Purpose | |------|-----|---------| |n8n-nodes-base.httpRequest | 4 | Any REST call |
| n8n-nodes-base.respondToWebhook | 1 | Webhook reply |Popular Integrations
| Type | Ver | Purpose | |------|-----|---------| |n8n-nodes-base.slack | 2 | Slack messages |
| n8n-nodes-base.gmail | 2 | Gmail |
| n8n-nodes-base.googleSheets | 4 | Google Sheets |
| n8n-nodes-base.notion | 2 | Notion |
| n8n-nodes-base.postgres | 2 | PostgreSQL |
| n8n-nodes-base.telegram | 2 | Telegram |AI / LLM
| Type | Ver | Purpose | |------|-----|---------| |@n8n/n8n-nodes-langchain.openAi | 1 | OpenAI completions |
| @n8n/n8n-nodes-langchain.lmChatOpenAi | 1 | OpenAI chat model |For full credential mapping, see references/node-catalog.md.
Expression Cheat Sheet
| Pattern | Meaning |
|---------|---------|
| ={{ $json.field }} | Current item field |
| ={{ $json["field-name"] }} | Hyphenated field |
| ={{ $node["Name"].json.field }} | Upstream node field |
| ={{ $input.all() }} | All items (Code node) |
| ={{ $input.first().json.f }} | First item field |
| ={{ $now.toISO() }} | Current ISO timestamp |
| ={{ $vars.MY_VAR }} | Environment variable |
Validation Checklist
Before outputting any workflow, verify:
Structure:
nodes array exists and is non-emptyconnections covers every non-terminal nodeid, name, type, typeVersion, position, parametersIntegrity:
url, path, jsCode)Graph:
Credentials:
credentials blockExpressions:
={{ ... }} references point to fields that upstream nodes produceCLI Reference
Deployment (n8n_deploy.py)
# Connectivity check
python3 scripts/n8n_deploy.py pingList workflows
python3 scripts/n8n_deploy.py ls [--active]Push (create) a workflow
python3 scripts/n8n_deploy.py push --file workflow.json [--activate]Inspect a deployed workflow
python3 scripts/n8n_deploy.py inspect --id Activate / deactivate
python3 scripts/n8n_deploy.py on --id
python3 scripts/n8n_deploy.py off --id Trigger manual execution
python3 scripts/n8n_deploy.py run --id [--payload '{"key":"val"}']View recent executions
python3 scripts/n8n_deploy.py history --id [--limit 10]Execution details
python3 scripts/n8n_deploy.py exec-detail --id Execution statistics
python3 scripts/n8n_deploy.py stats --id [--days 7]Delete workflow
python3 scripts/n8n_deploy.py rm --id
Validation & Diagnostics (workflow_inspector.py)
# Validate a local file
python3 scripts/workflow_inspector.py check --file workflow.jsonValidate a deployed workflow
python3 scripts/workflow_inspector.py check --id Full diagnostic report (structure + performance)
python3 scripts/workflow_inspector.py diagnose --id [--days 14]Optimization suggestions only
python3 scripts/workflow_inspector.py optimize --id
Programmatic Builder (workflow_forge.py)
# Build from a recipe YAML and deploy
python3 scripts/workflow_forge.py build --recipe recipe.yaml --deployExport as JSON
python3 scripts/workflow_forge.py build --recipe recipe.yaml --output wf.json
Optimization Heuristics
Apply when generating workflows:
1. Fan-out over chaining: independent API calls should branch in parallel,
not run sequentially.
2. Batch large datasets: use splitInBatches instead of Code-node loops.
3. Error paths: add an Error Trigger or IF-based error branch for
workflows with external API calls.
4. Timeouts: set executionTimeout in settings for long-running flows.
5. Avoid duplicate fetches: fetch once, reshape with Set/Code.
6. Split at 15 nodes: suggest sub-workflows via Execute Workflow node.
Output Formatting
Every workflow response must include:
1. A one-sentence summary of the workflow's purpose 2. The complete JSON in a fenced code block 3. A node explanation table:
| # | Node | Type | What it does | |---|------|------|--------------| | 1 | Webhook Trigger | webhook | Receives POST requests | | 2 | Parse Input | set | Extracts email and name |
4. Import instructions: "Open n8n β Workflows β Import from JSON β paste" 5. Credentials the user must configure post-import 6. (If API is configured) an offer to auto-deploy
Common Flow Patterns
Webhook β Transform β Respond
Webhook β Set (extract) β Code (transform) β Respond to Webhook
Schedule β Fetch β Store
Schedule β HTTP Request (fetch) β Code (process) β Google Sheets (append)
Webhook β Branch β Multi-action
Webhook β IF β true: Slack notify β NoOp
false: Email alert β NoOp
Polling with error handling
Schedule β HTTP Request β IF (ok?) β true: Process β Store
false: Slack error alert
File Layout
n8n-autopilot/
βββ SKILL.md # This file
βββ README.md # Project overview
βββ scripts/
β βββ n8n_deploy.py # API client + deployment CLI
β βββ workflow_forge.py # Programmatic workflow builder
β βββ workflow_inspector.py # Validation + diagnostics
βββ references/
βββ node-catalog.md # Node types & credential mapping
Troubleshooting
| Symptom | Fix |
|---------|-----|
| N8N_API_KEY not set | Export the variable or add to OpenClaw settings |
| HTTP 401 Unauthorized | Regenerate API key in n8n Settings β API |
| Connection refused | Check N8N_BASE_URL β include protocol and port |
| Validation: cycle detected | Break circular connections; use sub-workflows |
| Execution timeout | Add executionTimeout in settings; optimize slow nodes |
| Rate limit (429) | Insert Wait nodes; use batch processing |
βοΈ Configuration
Two environment variables are needed:
| Variable | Where to find it |
|---|---|
| N8N_API_KEY | n8n UI β Settings β API β Create API Key |
| N8N_BASE_URL | Your instance URL, e.g. https://n8n.example.com |
Set them via OpenClaw settings (~/.config/openclaw/settings.json):
{
"skills": {
"n8n-autopilot": {
"env": {
"N8N_API_KEY": "your-key",
"N8N_BASE_URL": "https://your-n8n.example.com"
}
}
}
}
Verify connectivity:
python3 scripts/n8n_deploy.py ping
π Tips & Best Practices
| Symptom | Fix |
|---------|-----|
| N8N_API_KEY not set | Export the variable or add to OpenClaw settings |
| HTTP 401 Unauthorized | Regenerate API key in n8n Settings β API |
| Connection refused | Check N8N_BASE_URL β include protocol and port |
| Validation: cycle detected | Break circular connections; use sub-workflows |
| Execution timeout | Add executionTimeout in settings; optimize slow nodes |
| Rate limit (429) | Insert Wait nodes; use batch processing |