[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M716M4W4M5FXG8W2FMZ75B3M":3,"skill-same:01M716M4W4M5FXG8W2FMZ75B3M":69},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":14,"repositoryHtmlUrl":52,"repositoryHomepageUrl":6,"ownerHtmlUrl":53,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":54,"install":55,"resources":68},"01M716M4W4M5FXG8W2FMZ75B3M","n8n-code-python",null,"Write Python code in n8n Code nodes. Use when writing Python in n8n, using _input\u002F_json\u002F_node syntax, working with standard library, or need to understand Python limitations in n8n Code nodes.","sapsapshen\u002Fai-memory-router","sapsapshen","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F20347959?v=4","01M6XDQEF1DP50DKF37H81J3J5","shenmian","01M6XDQEJPE41Y3DT2763X8ZJN",0,"MIT","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Fn8n-code-python\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"python","code","n8n code python","n8n","when","writing","standard","unknown","python code","with","input","writing python","community","Nodes","use","write","syntax","node","json","library","2026-11-10 10:12:30",false,"---\nname: n8n-code-python\ndescription: Write Python code in n8n Code nodes. Use when writing Python in n8n, using _input\u002F_json\u002F_node syntax, working with standard library, or need to understand Python limitations in n8n Code nodes.\nrisk: unknown\nsource: community\n---\n\n# Python Code Node (Beta)\n\nExpert guidance for writing Python code in n8n Code nodes.\n\n---\n\n## ⚠️ Important: JavaScript First\n\n**Recommendation**: Use **JavaScript for 95% of use cases**. Only use Python when:\n- You need specific Python standard library functions\n- You're significantly more comfortable with Python syntax\n- You're doing data transformations better suited to Python\n\n**Why JavaScript is preferred:**\n- Full n8n helper functions ($helpers.httpRequest, etc.)\n- Luxon DateTime library for advanced date\u002Ftime operations\n- No external library limitations\n- Better n8n documentation and community support\n\n---\n\n## Quick Start\n\n```python\n# Basic template for Python Code nodes\nitems = _input.all()\n\n# Process data\nprocessed = []\nfor item in items:\n    processed.append({\n        \"json\": {\n            **item[\"json\"],\n            \"processed\": True,\n            \"timestamp\": datetime.now().isoformat()\n        }\n    })\n\nreturn processed\n```\n\n### Essential Rules\n\n1. **Consider JavaScript first** - Use Python only when necessary\n2. **Access data**: `_input.all()`, `_input.first()`, or `_input.item`\n3. **CRITICAL**: Must return `[{\"json\": {...}}]` format\n4. **CRITICAL**: Webhook data is under `_json[\"body\"]` (not `_json` directly)\n5. **CRITICAL LIMITATION**: **No external libraries** (no requests, pandas, numpy)\n6. **Standard library only**: json, datetime, re, base64, hashlib, urllib.parse, math, random, statistics\n\n---\n\n## Mode Selection Guide\n\nSame as JavaScript - choose based on your use case:\n\n### Run Once for All Items (Recommended - Default)\n\n**Use this mode for:** 95% of use cases\n\n- **How it works**: Code executes **once** regardless of input count\n- **Data access**: `_input.all()` or `_items` array (Native mode)\n- **Best for**: Aggregation, filtering, batch processing, transformations\n- **Performance**: Faster for multiple items (single execution)\n\n```python\n# Example: Calculate total from all items\nall_items = _input.all()\ntotal = sum(item[\"json\"].get(\"amount\", 0) for item in all_items)\n\nreturn [{\n    \"json\": {\n        \"total\": total,\n        \"count\": len(all_items),\n        \"average\": total \u002F len(all_items) if all_items else 0\n    }\n}]\n```\n\n### Run Once for Each Item\n\n**Use this mode for:** Specialized cases only\n\n- **How it works**: Code executes **separately** for each input item\n- **Data access**: `_input.item` or `_item` (Native mode)\n- **Best for**: Item-specific logic, independent operations, per-item validation\n- **Performance**: Slower for large datasets (multiple executions)\n\n```python\n# Example: Add processing timestamp to each item\nitem = _input.item\n\nreturn [{\n    \"json\": {\n        **item[\"json\"],\n        \"processed\": True,\n        \"processed_at\": datetime.now().isoformat()\n    }\n}]\n```\n\n---\n\n## Python Modes: Beta vs Native\n\nn8n offers two Python execution modes:\n\n### Python (Beta) - Recommended\n- **Use**: `_input`, `_json`, `_node` helper syntax\n- **Best for**: Most Python use cases\n- **Helpers available**: `_now`, `_today`, `_jmespath()`\n- **Import**: `from datetime import datetime`\n\n```python\n# Python (Beta) example\nitems = _input.all()\nnow = _now  # Built-in datetime object\n\nreturn [{\n    \"json\": {\n        \"count\": len(items),\n        \"timestamp\": now.isoformat()\n    }\n}]\n```\n\n### Python (Native) (Beta)\n- **Use**: `_items`, `_item` variables only\n- **No helpers**: No `_input`, `_now`, etc.\n- **More limited**: Standard Python only\n- **Use when**: Need pure Python without n8n helpers\n\n```python\n# Python (Native) example\nprocessed = []\n\nfor item in _items:\n    processed.append({\n        \"json\": {\n            \"id\": item[\"json\"].get(\"id\"),\n            \"processed\": True\n        }\n    })\n\nreturn processed\n```\n\n**Recommendation**: Use **Python (Beta)** for better n8n integration.\n\n---\n\n## Data Access Patterns\n\n### Pattern 1: _input.all() - Most Common\n\n**Use when**: Processing arrays, batch operations, aggregations\n\n```python\n# Get all items from previous node\nall_items = _input.all()\n\n# Filter, transform as needed\nvalid = [item for item in all_items if item[\"json\"].get(\"status\") == \"active\"]\n\nprocessed = []\nfor item in valid:\n    processed.append({\n        \"json\": {\n            \"id\": item[\"json\"][\"id\"],\n            \"name\": item[\"json\"][\"name\"]\n        }\n    })\n\nreturn processed\n```\n\n### Pattern 2: _input.first() - Very Common\n\n**Use when**: Working with single objects, API responses\n\n```python\n# Get first item only\nfirst_item = _input.first()\ndata = first_item[\"json\"]\n\nreturn [{\n    \"json\": {\n        \"result\": process_data(data),\n        \"processed_at\": datetime.now().isoformat()\n    }\n}]\n```\n\n### Pattern 3: _input.item - Each Item Mode Only\n\n**Use when**: In \"Run Once for Each Item\" mode\n\n```python\n# Current item in loop (Each Item mode only)\ncurrent_item = _input.item\n\nreturn [{\n    \"json\": {\n        **current_item[\"json\"],\n        \"item_processed\": True\n    }\n}]\n```\n\n### Pattern 4: _node - Reference Other Nodes\n\n**Use when**: Need data from specific nodes in workflow\n\n```python\n# Get output from specific node\nwebhook_data = _node[\"Webhook\"][\"json\"]\nhttp_data = _node[\"HTTP Request\"][\"json\"]\n\nreturn [{\n    \"json\": {\n        \"combined\": {\n            \"webhook\": webhook_data,\n            \"api\": http_data\n        }\n    }\n}]\n```\n\n**See**: DATA_ACCESS.md for comprehensive guide\n\n---\n\n## Critical: Webhook Data Structure\n\n**MOST COMMON MISTAKE**: Webhook data is nested under `[\"body\"]`\n\n```python\n# ❌ WRONG - Will raise KeyError\nname = _json[\"name\"]\nemail = _json[\"email\"]\n\n# ✅ CORRECT - Webhook data is under [\"body\"]\nname = _json[\"body\"][\"name\"]\nemail = _json[\"body\"][\"email\"]\n\n# ✅ SAFER - Use .get() for safe access\nwebhook_data = _json.get(\"body\", {})\nname = webhook_data.get(\"name\")\n```\n\n**Why**: Webhook node wraps all request data under `body` property. This includes POST data, query parameters, and JSON payloads.\n\n**See**: DATA_ACCESS.md for full webhook structure details\n\n---\n\n## Return Format Requirements\n\n**CRITICAL RULE**: Always return list of dictionaries with `\"json\"` key\n\n### Correct Return Formats\n\n```python\n# ✅ Single result\nreturn [{\n    \"json\": {\n        \"field1\": value1,\n        \"field2\": value2\n    }\n}]\n\n# ✅ Multiple results\nreturn [\n    {\"json\": {\"id\": 1, \"data\": \"first\"}},\n    {\"json\": {\"id\": 2, \"data\": \"second\"}}\n]\n\n# ✅ List comprehension\ntransformed = [\n    {\"json\": {\"id\": item[\"json\"][\"id\"], \"processed\": True}}\n    for item in _input.all()\n    if item[\"json\"].get(\"valid\")\n]\nreturn transformed\n\n# ✅ Empty result (when no data to return)\nreturn []\n\n# ✅ Conditional return\nif should_process:\n    return [{\"json\": processed_data}]\nelse:\n    return []\n```\n\n### Incorrect Return Formats\n\n```python\n# ❌ WRONG: Dictionary without list wrapper\nreturn {\n    \"json\": {\"field\": value}\n}\n\n# ❌ WRONG: List without json wrapper\nreturn [{\"field\": value}]\n\n# ❌ WRONG: Plain string\nreturn \"processed\"\n\n# ❌ WRONG: Incomplete structure\nreturn [{\"data\": value}]  # Should be {\"json\": value}\n```\n\n**Why it matters**: Next nodes expect list format. Incorrect format causes workflow execution to fail.\n\n**See**: ERROR_PATTERNS.md #2 for detailed error solutions\n\n---\n\n## Critical Limitation: No External Libraries\n\n**MOST IMPORTANT PYTHON LIMITATION**: Cannot import external packages\n\n### What's NOT Available\n\n```python\n# ❌ NOT AVAILABLE - Will raise ModuleNotFoundError\nimport requests  # ❌ No\nimport pandas  # ❌ No\nimport numpy  # ❌ No\nimport scipy  # ❌ No\nfrom bs4 import BeautifulSoup  # ❌ No\nimport lxml  # ❌ No\n```\n\n### What IS Available (Standard Library)\n\n```python\n# ✅ AVAILABLE - Standard library only\nimport json  # ✅ JSON parsing\nimport datetime  # ✅ Date\u002Ftime operations\nimport re  # ✅ Regular expressions\nimport base64  # ✅ Base64 encoding\u002Fdecoding\nimport hashlib  # ✅ Hashing functions\nimport urllib.parse  # ✅ URL parsing\nimport math  # ✅ Math functions\nimport random  # ✅ Random numbers\nimport statistics  # ✅ Statistical functions\n```\n\n### Workarounds\n\n**Need HTTP requests?**\n- ✅ Use **HTTP Request node** before Code node\n- ✅ Or switch to **JavaScript** and use `$helpers.httpRequest()`\n\n**Need data analysis (pandas\u002Fnumpy)?**\n- ✅ Use Python **statistics** module for basic stats\n- ✅ Or switch to **JavaScript** for most operations\n- ✅ Manual calculations with lists and dictionaries\n\n**Need web scraping (BeautifulSoup)?**\n- ✅ Use **HTTP Request node** + **HTML Extract node**\n- ✅ Or switch to **JavaScript** with regex\u002Fstring methods\n\n**See**: STANDARD_LIBRARY.md for complete reference\n\n---\n\n## Common Patterns Overview\n\nBased on production workflows, here are the most useful Python patterns:\n\n### 1. Data Transformation\nTransform all items with list comprehensions\n\n```python\nitems = _input.all()\n\nreturn [\n    {\n        \"json\": {\n            \"id\": item[\"json\"].get(\"id\"),\n            \"name\": item[\"json\"].get(\"name\", \"Unknown\").upper(),\n            \"processed\": True\n        }\n    }\n    for item in items\n]\n```\n\n### 2. Filtering & Aggregation\nSum, filter, count with built-in functions\n\n```python\nitems = _input.all()\ntotal = sum(item[\"json\"].get(\"amount\", 0) for item in items)\nvalid_items = [item for item in items if item[\"json\"].get(\"amount\", 0) > 0]\n\nreturn [{\n    \"json\": {\n        \"total\": total,\n        \"count\": len(valid_items)\n    }\n}]\n```\n\n### 3. String Processing with Regex\nExtract patterns from text\n\n```python\nimport re\n\nitems = _input.all()\nemail_pattern = r'\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b'\n\nall_emails = []\nfor item in items:\n    text = item[\"json\"].get(\"text\", \"\")\n    emails = re.findall(email_pattern, text)\n    all_emails.extend(emails)\n\n# Remove duplicates\nunique_emails = list(set(all_emails))\n\nreturn [{\n    \"json\": {\n        \"emails\": unique_emails,\n        \"count\": len(unique_emails)\n    }\n}]\n```\n\n### 4. Data Validation\nValidate and clean data\n\n```python\nitems = _input.all()\nvalidated = []\n\nfor item in items:\n    data = item[\"json\"]\n    errors = []\n\n    # Validate fields\n    if not data.get(\"email\"):\n        errors.append(\"Email required\")\n    if not data.get(\"name\"):\n        errors.append(\"Name required\")\n\n    validated.append({\n        \"json\": {\n            **data,\n            \"valid\": len(errors) == 0,\n            \"errors\": errors if errors else None\n        }\n    })\n\nreturn validated\n```\n\n### 5. Statistical Analysis\nCalculate statistics with statistics module\n\n```python\nfrom statistics import mean, median, stdev\n\nitems = _input.all()\nvalues = [item[\"json\"].get(\"value\", 0) for item in items if \"value\" in item[\"json\"]]\n\nif values:\n    return [{\n        \"json\": {\n            \"mean\": mean(values),\n            \"median\": median(values),\n            \"stdev\": stdev(values) if len(values) > 1 else 0,\n            \"min\": min(values),\n            \"max\": max(values),\n            \"count\": len(values)\n        }\n    }]\nelse:\n    return [{\"json\": {\"error\": \"No values found\"}}]\n```\n\n**See**: COMMON_PATTERNS.md for 10 detailed Python patterns\n\n---\n\n## Error Prevention - Top 5 Mistakes\n\n### #1: Importing External Libraries (Python-Specific!)\n\n```python\n# ❌ WRONG: Trying to import external library\nimport requests  # ModuleNotFoundError!\n\n# ✅ CORRECT: Use HTTP Request node or JavaScript\n# Add HTTP Request node before Code node\n# OR switch to JavaScript and use $helpers.httpRequest()\n```\n\n### #2: Empty Code or Missing Return\n\n```python\n# ❌ WRONG: No return statement\nitems = _input.all()\n# Processing...\n# Forgot to return!\n\n# ✅ CORRECT: Always return data\nitems = _input.all()\n# Processing...\nreturn [{\"json\": item[\"json\"]} for item in items]\n```\n\n### #3: Incorrect Return Format\n\n```python\n# ❌ WRONG: Returning dict instead of list\nreturn {\"json\": {\"result\": \"success\"}}\n\n# ✅ CORRECT: List wrapper required\nreturn [{\"json\": {\"result\": \"success\"}}]\n```\n\n### #4: KeyError on Dictionary Access\n\n```python\n# ❌ WRONG: Direct access crashes if missing\nname = _json[\"user\"][\"name\"]  # KeyError!\n\n# ✅ CORRECT: Use .get() for safe access\nname = _json.get(\"user\", {}).get(\"name\", \"Unknown\")\n```\n\n### #5: Webhook Body Nesting\n\n```python\n# ❌ WRONG: Direct access to webhook data\nemail = _json[\"email\"]  # KeyError!\n\n# ✅ CORRECT: Webhook data under [\"body\"]\nemail = _json[\"body\"][\"email\"]\n\n# ✅ BETTER: Safe access with .get()\nemail = _json.get(\"body\", {}).get(\"email\", \"no-email\")\n```\n\n**See**: ERROR_PATTERNS.md for comprehensive error guide\n\n---\n\n## Standard Library Reference\n\n### Most Useful Modules\n\n```python\n# JSON operations\nimport json\ndata = json.loads(json_string)\njson_output = json.dumps({\"key\": \"value\"})\n\n# Date\u002Ftime\nfrom datetime import datetime, timedelta\nnow = datetime.now()\ntomorrow = now + timedelta(days=1)\nformatted = now.strftime(\"%Y-%m-%d\")\n\n# Regular expressions\nimport re\nmatches = re.findall(r'\\d+', text)\ncleaned = re.sub(r'[^\\w\\s]', '', text)\n\n# Base64 encoding\nimport base64\nencoded = base64.b64encode(data).decode()\ndecoded = base64.b64decode(encoded)\n\n# Hashing\nimport hashlib\nhash_value = hashlib.sha256(text.encode()).hexdigest()\n\n# URL parsing\nimport urllib.parse\nparams = urllib.parse.urlencode({\"key\": \"value\"})\nparsed = urllib.parse.urlparse(url)\n\n# Statistics\nfrom statistics import mean, median, stdev\naverage = mean([1, 2, 3, 4, 5])\n```\n\n**See**: STANDARD_LIBRARY.md for complete reference\n\n---\n\n## Best Practices\n\n### 1. Always Use .get() for Dictionary Access\n\n```python\n# ✅ SAFE: Won't crash if field missing\nvalue = item[\"json\"].get(\"field\", \"default\")\n\n# ❌ RISKY: Crashes if field doesn't exist\nvalue = item[\"json\"][\"field\"]\n```\n\n### 2. Handle None\u002FNull Values Explicitly\n\n```python\n# ✅ GOOD: Default to 0 if None\namount = item[\"json\"].get(\"amount\") or 0\n\n# ✅ GOOD: Check for None explicitly\ntext = item[\"json\"].get(\"text\")\nif text is None:\n    text = \"\"\n```\n\n### 3. Use List Comprehensions for Filtering\n\n```python\n# ✅ PYTHONIC: List comprehension\nvalid = [item for item in items if item[\"json\"].get(\"active\")]\n\n# ❌ VERBOSE: Manual loop\nvalid = []\nfor item in items:\n    if item[\"json\"].get(\"active\"):\n        valid.append(item)\n```\n\n### 4. Return Consistent Structure\n\n```python\n# ✅ CONSISTENT: Always list with \"json\" key\nreturn [{\"json\": result}]  # Single result\nreturn results  # Multiple results (already formatted)\nreturn []  # No results\n```\n\n### 5. Debug with print() Statements\n\n```python\n# Debug statements appear in browser console (F12)\nitems = _input.all()\nprint(f\"Processing {len(items)} items\")\nprint(f\"First item: {items[0] if items else 'None'}\")\n```\n\n---\n\n## When to Use Python vs JavaScript\n\n### Use Python When:\n- ✅ You need `statistics` module for statistical operations\n- ✅ You're significantly more comfortable with Python syntax\n- ✅ Your logic maps well to list comprehensions\n- ✅ You need specific standard library functions\n\n### Use JavaScript When:\n- ✅ You need HTTP requests ($helpers.httpRequest())\n- ✅ You need advanced date\u002Ftime (DateTime\u002FLuxon)\n- ✅ You want better n8n integration\n- ✅ **For 95% of use cases** (recommended)\n\n### Consider Other Nodes When:\n- ❌ Simple field mapping → Use **Set** node\n- ❌ Basic filtering → Use **Filter** node\n- ❌ Simple conditionals → Use **IF** or **Switch** node\n- ❌ HTTP requests only → Use **HTTP Request** node\n\n---\n\n## Integration with Other Skills\n\n### Works With:\n\n**n8n Expression Syntax**:\n- Expressions use `{{ }}` syntax in other nodes\n- Code nodes use Python directly (no `{{ }}`)\n- When to use expressions vs code\n\n**n8n MCP Tools Expert**:\n- How to find Code node: `search_nodes({query: \"code\"})`\n- Get configuration help: `get_node_essentials(\"nodes-base.code\")`\n- Validate code: `validate_node_operation()`\n\n**n8n Node Configuration**:\n- Mode selection (All Items vs Each Item)\n- Language selection (Python vs JavaScript)\n- Understanding property dependencies\n\n**n8n Workflow Patterns**:\n- Code nodes in transformation step\n- When to use Python vs JavaScript in patterns\n\n**n8n Validation Expert**:\n- Validate Code node configuration\n- Handle validation errors\n- Auto-fix common issues\n\n**n8n Code JavaScript**:\n- When to use JavaScript instead\n- Comparison of JavaScript vs Python features\n- Migration from Python to JavaScript\n\n---\n\n## Quick Reference Checklist\n\nBefore deploying Python Code nodes, verify:\n\n- [ ] **Considered JavaScript first** - Using Python only when necessary\n- [ ] **Code is not empty** - Must have meaningful logic\n- [ ] **Return statement exists** - Must return list of dictionaries\n- [ ] **Proper return format** - Each item: `{\"json\": {...}}`\n- [ ] **Data access correct** - Using `_input.all()`, `_input.first()`, or `_input.item`\n- [ ] **No external imports** - Only standard library (json, datetime, re, etc.)\n- [ ] **Safe dictionary access** - Using `.get()` to avoid KeyError\n- [ ] **Webhook data** - Access via `[\"body\"]` if from webhook\n- [ ] **Mode selection** - \"All Items\" for most cases\n- [ ] **Output consistent** - All code paths return same structure\n\n---\n\n## Additional Resources\n\n### Related Files\n- DATA_ACCESS.md - Comprehensive Python data access patterns\n- COMMON_PATTERNS.md - 10 Python patterns for n8n\n- ERROR_PATTERNS.md - Top 5 errors and solutions\n- STANDARD_LIBRARY.md - Complete standard library reference\n\n### n8n Documentation\n- Code Node Guide: https:\u002F\u002Fdocs.n8n.io\u002Fcode\u002Fcode-node\u002F\n- Python in n8n: https:\u002F\u002Fdocs.n8n.io\u002Fcode\u002Fbuiltin\u002Fpython-modules\u002F\n\n---\n\n**Ready to write Python in n8n Code nodes - but consider JavaScript first!** Use Python for specific needs, reference the error patterns guide to avoid common mistakes, and leverage the standard library effectively.\n","# Python Code Node (Beta)\n\nExpert guidance for writing Python code in n8n Code nodes.\n\n---\n\n## ⚠️ Important: JavaScript First\n\n**Recommendation**: Use **JavaScript for 95% of use cases**. Only use Python when:\n- You need specific Python standard library functions\n- You're significantly more comfortable with Python syntax\n- You're doing data transformations better suited to Python\n\n**Why JavaScript is preferred:**\n- Full n8n helper functions ($helpers.httpRequest, etc.)\n- Luxon DateTime library for advanced date\u002Ftime operations\n- No external library limitations\n- Better n8n documentation and community support\n\n---\n\n## Quick Start\n\n```python\n# Basic template for Python Code nodes\nitems = _input.all()\n\n# Process data\nprocessed = []\nfor item in items:\n    processed.append({\n        \"json\": {\n            **item[\"json\"],\n            \"processed\": True,\n            \"timestamp\": datetime.now().isoformat()\n        }\n    })\n\nreturn processed\n```\n\n### Essential Rules\n\n1. **Consider JavaScript first** - Use Python only when necessary\n2. **Access data**: `_input.all()`, `_input.first()`, or `_input.item`\n3. **CRITICAL**: Must return `[{\"json\": {...}}]` format\n4. **CRITICAL**: Webhook data is under `_json[\"body\"]` (not `_json` directly)\n5. **CRITICAL LIMITATION**: **No external libraries** (no requests, pandas, numpy)\n6. **Standard library only**: json, datetime, re, base64, hashlib, urllib.parse, math, random, statistics\n\n---\n\n## Mode Selection Guide\n\nSame as JavaScript - choose based on your use case:\n\n### Run Once for All Items (Recommended - Default)\n\n**Use this mode for:** 95% of use cases\n\n- **How it works**: Code executes **once** regardless of input count\n- **Data access**: `_input.all()` or `_items` array (Native mode)\n- **Best for**: Aggregation, filtering, batch processing, transformations\n- **Performance**: Faster for multiple items (single execution)\n\n```python\n# Example: Calculate total from all items\nall_items = _input.all()\ntotal = sum(item[\"json\"].get(\"amount\", 0) for item in all_items)\n\nreturn [{\n    \"json\": {\n        \"total\": total,\n        \"count\": len(all_items),\n        \"average\": total \u002F len(all_items) if all_items else 0\n    }\n}]\n```\n\n### Run Once for Each Item\n\n**Use this mode for:** Specialized cases only\n\n- **How it works**: Code executes **separately** for each input item\n- **Data access**: `_input.item` or `_item` (Native mode)\n- **Best for**: Item-specific logic, independent operations, per-item validation\n- **Performance**: Slower for large datasets (multiple executions)\n\n```python\n# Example: Add processing timestamp to each item\nitem = _input.item\n\nreturn [{\n    \"json\": {\n        **item[\"json\"],\n        \"processed\": True,\n        \"processed_at\": datetime.now().isoformat()\n    }\n}]\n```\n\n---\n\n## Python Modes: Beta vs Native\n\nn8n offers two Python execution modes:\n\n### Python (Beta) - Recommended\n- **Use**: `_input`, `_json`, `_node` helper syntax\n- **Best for**: Most Python use cases\n- **Helpers available**: `_now`, `_today`, `_jmespath()`\n- **Import**: `from datetime import datetime`\n\n```python\n# Python (Beta) example\nitems = _input.all()\nnow = _now  # Built-in datetime object\n\nreturn [{\n    \"json\": {\n        \"count\": len(items),\n        \"timestamp\": now.isoformat()\n    }\n}]\n```\n\n### Python (Native) (Beta)\n- **Use**: `_items`, `_item` variables only\n- **No helpers**: No `_input`, `_now`, etc.\n- **More limited**: Standard Python only\n- **Use when**: Need pure Python without n8n helpers\n\n```python\n# Python (Native) example\nprocessed = []\n\nfor item in _items:\n    processed.append({\n        \"json\": {\n            \"id\": item[\"json\"].get(\"id\"),\n            \"processed\": True\n        }\n    })\n\nreturn processed\n```\n\n**Recommendation**: Use **Python (Beta)** for better n8n integration.\n\n---\n\n## Data Access Patterns\n\n### Pattern 1: _input.all() - Most Common\n\n**Use when**: Processing arrays, batch operations, aggregations\n\n```python\n# Get all items from previous node\nall_items = _input.all()\n\n# Filter, transform as needed\nvalid = [item for item in all_items if item[\"json\"].get(\"status\") == \"active\"]\n\nprocessed = []\nfor item in valid:\n    processed.append({\n        \"json\": {\n            \"id\": item[\"json\"][\"id\"],\n            \"name\": item[\"json\"][\"name\"]\n        }\n    })\n\nreturn processed\n```\n\n### Pattern 2: _input.first() - Very Common\n\n**Use when**: Working with single objects, API responses\n\n```python\n# Get first item only\nfirst_item = _input.first()\ndata = first_item[\"json\"]\n\nreturn [{\n    \"json\": {\n        \"result\": process_data(data),\n        \"processed_at\": datetime.now().isoformat()\n    }\n}]\n```\n\n### Pattern 3: _input.item - Each Item Mode Only\n\n**Use when**: In \"Run Once for Each Item\" mode\n\n```python\n# Current item in loop (Each Item mode only)\ncurrent_item = _input.item\n\nreturn [{\n    \"json\": {\n        **current_item[\"json\"],\n        \"item_processed\": True\n    }\n}]\n```\n\n### Pattern 4: _node - Reference Other Nodes\n\n**Use when**: Need data from specific nodes in workflow\n\n```python\n# Get output from specific node\nwebhook_data = _node[\"Webhook\"][\"json\"]\nhttp_data = _node[\"HTTP Request\"][\"json\"]\n\nreturn [{\n    \"json\": {\n        \"combined\": {\n            \"webhook\": webhook_data,\n            \"api\": http_data\n        }\n    }\n}]\n```\n\n**See**: DATA_ACCESS.md for comprehensive guide\n\n---\n\n## Critical: Webhook Data Structure\n\n**MOST COMMON MISTAKE**: Webhook data is nested under `[\"body\"]`\n\n```python\n# ❌ WRONG - Will raise KeyError\nname = _json[\"name\"]\nemail = _json[\"email\"]\n\n# ✅ CORRECT - Webhook data is under [\"body\"]\nname = _json[\"body\"][\"name\"]\nemail = _json[\"body\"][\"email\"]\n\n# ✅ SAFER - Use .get() for safe access\nwebhook_data = _json.get(\"body\", {})\nname = webhook_data.get(\"name\")\n```\n\n**Why**: Webhook node wraps all request data under `body` property. This includes POST data, query parameters, and JSON payloads.\n\n**See**: DATA_ACCESS.md for full webhook structure details\n\n---\n\n## Return Format Requirements\n\n**CRITICAL RULE**: Always return list of dictionaries with `\"json\"` key\n\n### Correct Return Formats\n\n```python\n# ✅ Single result\nreturn [{\n    \"json\": {\n        \"field1\": value1,\n        \"field2\": value2\n    }\n}]\n\n# ✅ Multiple results\nreturn [\n    {\"json\": {\"id\": 1, \"data\": \"first\"}},\n    {\"json\": {\"id\": 2, \"data\": \"second\"}}\n]\n\n# ✅ List comprehension\ntransformed = [\n    {\"json\": {\"id\": item[\"json\"][\"id\"], \"processed\": True}}\n    for item in _input.all()\n    if item[\"json\"].get(\"valid\")\n]\nreturn transformed\n\n# ✅ Empty result (when no data to return)\nreturn []\n\n# ✅ Conditional return\nif should_process:\n    return [{\"json\": processed_data}]\nelse:\n    return []\n```\n\n### Incorrect Return Formats\n\n```python\n# ❌ WRONG: Dictionary without list wrapper\nreturn {\n    \"json\": {\"field\": value}\n}\n\n# ❌ WRONG: List without json wrapper\nreturn [{\"field\": value}]\n\n# ❌ WRONG: Plain string\nreturn \"processed\"\n\n# ❌ WRONG: Incomplete structure\nreturn [{\"data\": value}]  # Should be {\"json\": value}\n```\n\n**Why it matters**: Next nodes expect list format. Incorrect format causes workflow execution to fail.\n\n**See**: ERROR_PATTERNS.md #2 for detailed error solutions\n\n---\n\n## Critical Limitation: No External Libraries\n\n**MOST IMPORTANT PYTHON LIMITATION**: Cannot import external packages\n\n### What's NOT Available\n\n```python\n# ❌ NOT AVAILABLE - Will raise ModuleNotFoundError\nimport requests  # ❌ No\nimport pandas  # ❌ No\nimport numpy  # ❌ No\nimport scipy  # ❌ No\nfrom bs4 import BeautifulSoup  # ❌ No\nimport lxml  # ❌ No\n```\n\n### What IS Available (Standard Library)\n\n```python\n# ✅ AVAILABLE - Standard library only\nimport json  # ✅ JSON parsing\nimport datetime  # ✅ Date\u002Ftime operations\nimport re  # ✅ Regular expressions\nimport base64  # ✅ Base64 encoding\u002Fdecoding\nimport hashlib  # ✅ Hashing functions\nimport urllib.parse  # ✅ URL parsing\nimport math  # ✅ Math functions\nimport random  # ✅ Random numbers\nimport statistics  # ✅ Statistical functions\n```\n\n### Workarounds\n\n**Need HTTP requests?**\n- ✅ Use **HTTP Request node** before Code node\n- ✅ Or switch to **JavaScript** and use `$helpers.httpRequest()`\n\n**Need data analysis (pandas\u002Fnumpy)?**\n- ✅ Use Python **statistics** module for basic stats\n- ✅ Or switch to **JavaScript** for most operations\n- ✅ Manual calculations with lists and dictionaries\n\n**Need web scraping (BeautifulSoup)?**\n- ✅ Use **HTTP Request node** + **HTML Extract node**\n- ✅ Or switch to **JavaScript** with regex\u002Fstring methods\n\n**See**: STANDARD_LIBRARY.md for complete reference\n\n---\n\n## Common Patterns Overview\n\nBased on production workflows, here are the most useful Python patterns:\n\n### 1. Data Transformation\nTransform all items with list comprehensions\n\n```python\nitems = _input.all()\n\nreturn [\n    {\n        \"json\": {\n            \"id\": item[\"json\"].get(\"id\"),\n            \"name\": item[\"json\"].get(\"name\", \"Unknown\").upper(),\n            \"processed\": True\n        }\n    }\n    for item in items\n]\n```\n\n### 2. Filtering & Aggregation\nSum, filter, count with built-in functions\n\n```python\nitems = _input.all()\ntotal = sum(item[\"json\"].get(\"amount\", 0) for item in items)\nvalid_items = [item for item in items if item[\"json\"].get(\"amount\", 0) > 0]\n\nreturn [{\n    \"json\": {\n        \"total\": total,\n        \"count\": len(valid_items)\n    }\n}]\n```\n\n### 3. String Processing with Regex\nExtract patterns from text\n\n```python\nimport re\n\nitems = _input.all()\nemail_pattern = r'\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b'\n\nall_emails = []\nfor item in items:\n    text = item[\"json\"].get(\"text\", \"\")\n    emails = re.findall(email_pattern, text)\n    all_emails.extend(emails)\n\n# Remove duplicates\nunique_emails = list(set(all_emails))\n\nreturn [{\n    \"json\": {\n        \"emails\": unique_emails,\n        \"count\": len(unique_emails)\n    }\n}]\n```\n\n### 4. Data Validation\nValidate and clean data\n\n```python\nitems = _input.all()\nvalidated = []\n\nfor item in items:\n    data = item[\"json\"]\n    errors = []\n\n    # Validate fields\n    if not data.get(\"email\"):\n        errors.append(\"Email required\")\n    if not data.get(\"name\"):\n        errors.append(\"Name required\")\n\n    validated.append({\n        \"json\": {\n            **data,\n            \"valid\": len(errors) == 0,\n            \"errors\": errors if errors else None\n        }\n    })\n\nreturn validated\n```\n\n### 5. Statistical Analysis\nCalculate statistics with statistics module\n\n```python\nfrom statistics import mean, median, stdev\n\nitems = _input.all()\nvalues = [item[\"json\"].get(\"value\", 0) for item in items if \"value\" in item[\"json\"]]\n\nif values:\n    return [{\n        \"json\": {\n            \"mean\": mean(values),\n            \"median\": median(values),\n            \"stdev\": stdev(values) if len(values) > 1 else 0,\n            \"min\": min(values),\n            \"max\": max(values),\n            \"count\": len(values)\n        }\n    }]\nelse:\n    return [{\"json\": {\"error\": \"No values found\"}}]\n```\n\n**See**: COMMON_PATTERNS.md for 10 detailed Python patterns\n\n---\n\n## Error Prevention - Top 5 Mistakes\n\n### #1: Importing External Libraries (Python-Specific!)\n\n```python\n# ❌ WRONG: Trying to import external library\nimport requests  # ModuleNotFoundError!\n\n# ✅ CORRECT: Use HTTP Request node or JavaScript\n# Add HTTP Request node before Code node\n# OR switch to JavaScript and use $helpers.httpRequest()\n```\n\n### #2: Empty Code or Missing Return\n\n```python\n# ❌ WRONG: No return statement\nitems = _input.all()\n# Processing...\n# Forgot to return!\n\n# ✅ CORRECT: Always return data\nitems = _input.all()\n# Processing...\nreturn [{\"json\": item[\"json\"]} for item in items]\n```\n\n### #3: Incorrect Return Format\n\n```python\n# ❌ WRONG: Returning dict instead of list\nreturn {\"json\": {\"result\": \"success\"}}\n\n# ✅ CORRECT: List wrapper required\nreturn [{\"json\": {\"result\": \"success\"}}]\n```\n\n### #4: KeyError on Dictionary Access\n\n```python\n# ❌ WRONG: Direct access crashes if missing\nname = _json[\"user\"][\"name\"]  # KeyError!\n\n# ✅ CORRECT: Use .get() for safe access\nname = _json.get(\"user\", {}).get(\"name\", \"Unknown\")\n```\n\n### #5: Webhook Body Nesting\n\n```python\n# ❌ WRONG: Direct access to webhook data\nemail = _json[\"email\"]  # KeyError!\n\n# ✅ CORRECT: Webhook data under [\"body\"]\nemail = _json[\"body\"][\"email\"]\n\n# ✅ BETTER: Safe access with .get()\nemail = _json.get(\"body\", {}).get(\"email\", \"no-email\")\n```\n\n**See**: ERROR_PATTERNS.md for comprehensive error guide\n\n---\n\n## Standard Library Reference\n\n### Most Useful Modules\n\n```python\n# JSON operations\nimport json\ndata = json.loads(json_string)\njson_output = json.dumps({\"key\": \"value\"})\n\n# Date\u002Ftime\nfrom datetime import datetime, timedelta\nnow = datetime.now()\ntomorrow = now + timedelta(days=1)\nformatted = now.strftime(\"%Y-%m-%d\")\n\n# Regular expressions\nimport re\nmatches = re.findall(r'\\d+', text)\ncleaned = re.sub(r'[^\\w\\s]', '', text)\n\n# Base64 encoding\nimport base64\nencoded = base64.b64encode(data).decode()\ndecoded = base64.b64decode(encoded)\n\n# Hashing\nimport hashlib\nhash_value = hashlib.sha256(text.encode()).hexdigest()\n\n# URL parsing\nimport urllib.parse\nparams = urllib.parse.urlencode({\"key\": \"value\"})\nparsed = urllib.parse.urlparse(url)\n\n# Statistics\nfrom statistics import mean, median, stdev\naverage = mean([1, 2, 3, 4, 5])\n```\n\n**See**: STANDARD_LIBRARY.md for complete reference\n\n---\n\n## Best Practices\n\n### 1. Always Use .get() for Dictionary Access\n\n```python\n# ✅ SAFE: Won't crash if field missing\nvalue = item[\"json\"].get(\"field\", \"default\")\n\n# ❌ RISKY: Crashes if field doesn't exist\nvalue = item[\"json\"][\"field\"]\n```\n\n### 2. Handle None\u002FNull Values Explicitly\n\n```python\n# ✅ GOOD: Default to 0 if None\namount = item[\"json\"].get(\"amount\") or 0\n\n# ✅ GOOD: Check for None explicitly\ntext = item[\"json\"].get(\"text\")\nif text is None:\n    text = \"\"\n```\n\n### 3. Use List Comprehensions for Filtering\n\n```python\n# ✅ PYTHONIC: List comprehension\nvalid = [item for item in items if item[\"json\"].get(\"active\")]\n\n# ❌ VERBOSE: Manual loop\nvalid = []\nfor item in items:\n    if item[\"json\"].get(\"active\"):\n        valid.append(item)\n```\n\n### 4. Return Consistent Structure\n\n```python\n# ✅ CONSISTENT: Always list with \"json\" key\nreturn [{\"json\": result}]  # Single result\nreturn results  # Multiple results (already formatted)\nreturn []  # No results\n```\n\n### 5. Debug with print() Statements\n\n```python\n# Debug statements appear in browser console (F12)\nitems = _input.all()\nprint(f\"Processing {len(items)} items\")\nprint(f\"First item: {items[0] if items else 'None'}\")\n```\n\n---\n\n## When to Use Python vs JavaScript\n\n### Use Python When:\n- ✅ You need `statistics` module for statistical operations\n- ✅ You're significantly more comfortable with Python syntax\n- ✅ Your logic maps well to list comprehensions\n- ✅ You need specific standard library functions\n\n### Use JavaScript When:\n- ✅ You need HTTP requests ($helpers.httpRequest())\n- ✅ You need advanced date\u002Ftime (DateTime\u002FLuxon)\n- ✅ You want better n8n integration\n- ✅ **For 95% of use cases** (recommended)\n\n### Consider Other Nodes When:\n- ❌ Simple field mapping → Use **Set** node\n- ❌ Basic filtering → Use **Filter** node\n- ❌ Simple conditionals → Use **IF** or **Switch** node\n- ❌ HTTP requests only → Use **HTTP Request** node\n\n---\n\n## Integration with Other Skills\n\n### Works With:\n\n**n8n Expression Syntax**:\n- Expressions use `{{ }}` syntax in other nodes\n- Code nodes use Python directly (no `{{ }}`)\n- When to use expressions vs code\n\n**n8n MCP Tools Expert**:\n- How to find Code node: `search_nodes({query: \"code\"})`\n- Get configuration help: `get_node_essentials(\"nodes-base.code\")`\n- Validate code: `validate_node_operation()`\n\n**n8n Node Configuration**:\n- Mode selection (All Items vs Each Item)\n- Language selection (Python vs JavaScript)\n- Understanding property dependencies\n\n**n8n Workflow Patterns**:\n- Code nodes in transformation step\n- When to use Python vs JavaScript in patterns\n\n**n8n Validation Expert**:\n- Validate Code node configuration\n- Handle validation errors\n- Auto-fix common issues\n\n**n8n Code JavaScript**:\n- When to use JavaScript instead\n- Comparison of JavaScript vs Python features\n- Migration from Python to JavaScript\n\n---\n\n## Quick Reference Checklist\n\nBefore deploying Python Code nodes, verify:\n\n- [ ] **Considered JavaScript first** - Using Python only when necessary\n- [ ] **Code is not empty** - Must have meaningful logic\n- [ ] **Return statement exists** - Must return list of dictionaries\n- [ ] **Proper return format** - Each item: `{\"json\": {...}}`\n- [ ] **Data access correct** - Using `_input.all()`, `_input.first()`, or `_input.item`\n- [ ] **No external imports** - Only standard library (json, datetime, re, etc.)\n- [ ] **Safe dictionary access** - Using `.get()` to avoid KeyError\n- [ ] **Webhook data** - Access via `[\"body\"]` if from webhook\n- [ ] **Mode selection** - \"All Items\" for most cases\n- [ ] **Output consistent** - All code paths return same structure\n\n---\n\n## Additional Resources\n\n### Related Files\n- DATA_ACCESS.md - Comprehensive Python data access patterns\n- COMMON_PATTERNS.md - 10 Python patterns for n8n\n- ERROR_PATTERNS.md - Top 5 errors and solutions\n- STANDARD_LIBRARY.md - Complete standard library reference\n\n### n8n Documentation\n- Code Node Guide: https:\u002F\u002Fdocs.n8n.io\u002Fcode\u002Fcode-node\u002F\n- Python in n8n: https:\u002F\u002Fdocs.n8n.io\u002Fcode\u002Fbuiltin\u002Fpython-modules\u002F\n\n---\n\n**Ready to write Python in n8n Code nodes - but consider JavaScript first!** Use Python for specific needs, reference the error patterns guide to avoid common mistakes, and leverage the standard library effectively.\n",{"name":5,"risk":31,"source":36,"description":7},"main","7a38d8e7073e61c16eda85681cb32fb68a8657a5","skills-store\u002Fcursor\u002Fn8n-code-python","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router","https:\u002F\u002Fgithub.com\u002Fsapsapshen","2026-04-14 21:12:12",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":67},[57,60,63],{"tool":58,"command":59},"npx","npx skills add sapsapshen\u002Fai-memory-router --skill n8n-code-python",{"tool":61,"command":62},"bunx","bunx skills add sapsapshen\u002Fai-memory-router --skill n8n-code-python",{"tool":64,"command":65},"pnpm","pnpm dlx skills add sapsapshen\u002Fai-memory-router --skill n8n-code-python","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Fn8n-code-python\u002FSKILL.md",true,[],[70,91,116,126,139,158],{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":79,"publishedAt":44},"01M71ATQRKG48SH06FQ697T5G9","wechat-search","Search WeChat Official Account articles using OpenClaw's web search and fetch capabilities with compliance-focused design.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fwechat-search-release\u002FSKILL.md",[76],{"categoryNo":77,"categoryName":78,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000037","律师与法务",[80,81,82,83,84,85,86,87,88,89,90,33],"wechat search","wechat","search","capabilities","openclaw","design","web search","compliance","web","official","fetch",{"skillNo":92,"name":93,"nameZh":6,"description":94,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":97,"publishedAt":44},"01M71ATNAVGZB35PFYM2GC5N00","trend-tap","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend tap', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-tap\u002FSKILL.md",[],[98,99,100,101,102,103,82,104,105,106,107,28,108,109,110,111,112,113,114,115],"trend","trend tap","tap","api keys","Bash","time","trending","hacker","aggregator","do","brew","live","data","google","install","read","across","api",{"skillNo":117,"name":118,"nameZh":6,"description":119,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":122,"publishedAt":44},"01M71ATJ9AM5KM15AA8PS302EB","trend-radar","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend pulse', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-radar\u002FSKILL.md",[],[123,124,98,108,109,110,111,102,82,113,125,114,115,28,106,105,104,112,103,101],"trend radar","radar","pulse",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":132,"publishedAt":44},"01M71ATGF095N3EJM9G8SD0BB5","tech-news-daily","每日科技新闻汇——从全球多个 RSS 源抓取最新科技新闻，翻译（英→中）、去重、排版成每日简报。当用户询问科技新闻、科技新鲜事、每日科技、技术动态、Daily Tech News 或类似表达时触发此技能。","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftech-news-daily\u002FSKILL.md",[],[133,134,135,136,137,138],"news","tech","tech news daily","daily","rss","翻译",{"skillNo":140,"name":141,"nameZh":6,"description":142,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":143,"categories":144,"keywords":150,"publishedAt":44},"01M71ATFAEAMQ17M70NQNY7SR8","summarize","Summarize URLs or files with the summarize CLI (web, PDFs, images, audio, YouTube).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsummarize\u002FSKILL.md",[145],{"categoryNo":146,"categoryName":147,"taxonomyType":148,"taxonomyTypeDesc":149},"01JBSEEDCAT000000000000021","资料检索与研究","SCENARIO","使用场景",[141,88,151,152,153,33,108,154,155,156,100,157,112],"Audio","cli","youtube","images","https","files","pdfs",{"skillNo":159,"name":160,"nameZh":6,"description":161,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":162,"categories":163,"keywords":164,"publishedAt":44},"01M71ATDNS3R0M4H936PACQAWZ","sonoscli","Control Sonos speakers (discover\u002Fstatus\u002Fplay\u002Fvolume\u002Fgroup).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsonoscli\u002FSKILL.md",[],[160,165,166,167,112,168,155,169,170,171,172,173],"status","play","go","latest","github","discover","control","cmd","volume"]