[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CTZS49KJBBSMAVC32VMV6E":3,"skill-same:01M6CTZS49KJBBSMAVC32VMV6E":86},{"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":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":48,"repositoryHomepageUrl":48,"ownerHtmlUrl":49,"ownerBlogUrl":6,"ownerDescription":50,"updatedAt":51,"install":52,"resources":65},"01M6CTZS49KJBBSMAVC32VMV6E","n8n-code-javascript",null,"Write JavaScript code in n8n Code nodes. Use when writing JavaScript in n8n, using $input\u002F$json\u002F$node syntax, making HTTP requests with $helpers, working with dates using DateTime, troubleshooting Code node errors, or choosing between Code node modes.","Sam-06060\u002Fjarvis-assistant","Sam-06060","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F208600848?v=4","01M6CRKT7C7FXD21V6HXF293S0","Samson Frank Ganta","01M6CRKTBEKYFD8YX5Z1GT99EE",6,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fn8n-code-javascript\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],"javascript","code","n8n code javascript","n8n","writing","http","json","troubleshooting","node","syntax","write","use","Nodes","community","2026-11-10 10:12:30",false,"---\nname: n8n-code-javascript\ndescription: Write JavaScript code in n8n Code nodes. Use when writing JavaScript in n8n, using $input\u002F$json\u002F$node syntax, making HTTP requests with $helpers, working with dates using DateTime, troubleshooting Code node errors, or choosing between Code node modes.\nrisk: unknown\nsource: community\n---\n\n# JavaScript Code Node\n\nExpert guidance for writing JavaScript code in n8n Code nodes.\n\n---\n\n## Quick Start\n\n```javascript\n\u002F\u002F Basic template for Code nodes\nconst items = $input.all();\n\n\u002F\u002F Process data\nconst processed = items.map(item => ({\n  json: {\n    ...item.json,\n    processed: true,\n    timestamp: new Date().toISOString()\n  }\n}));\n\nreturn processed;\n```\n\n### Essential Rules\n\n1. **Choose \"Run Once for All Items\" mode** (recommended for most use cases)\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. **Built-ins available**: $helpers.httpRequest(), DateTime (Luxon), $jmespath()\n\n---\n\n## Mode Selection Guide\n\nThe Code node offers two execution modes. 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\n- **Best for**: Aggregation, filtering, batch processing, transformations, API calls with all data\n- **Performance**: Faster for multiple items (single execution)\n\n```javascript\n\u002F\u002F Example: Calculate total from all items\nconst allItems = $input.all();\nconst total = allItems.reduce((sum, item) => sum + (item.json.amount || 0), 0);\n\nreturn [{\n  json: {\n    total,\n    count: allItems.length,\n    average: total \u002F allItems.length\n  }\n}];\n```\n\n**When to use:**\n- ✅ Comparing items across the dataset\n- ✅ Calculating totals, averages, or statistics\n- ✅ Sorting or ranking items\n- ✅ Deduplication\n- ✅ Building aggregated reports\n- ✅ Combining data from multiple items\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`\n- **Best for**: Item-specific logic, independent operations, per-item validation\n- **Performance**: Slower for large datasets (multiple executions)\n\n```javascript\n\u002F\u002F Example: Add processing timestamp to each item\nconst item = $input.item;\n\nreturn [{\n  json: {\n    ...item.json,\n    processed: true,\n    processedAt: new Date().toISOString()\n  }\n}];\n```\n\n**When to use:**\n- ✅ Each item needs independent API call\n- ✅ Per-item validation with different error handling\n- ✅ Item-specific transformations based on item properties\n- ✅ When items must be processed separately for business logic\n\n**Decision Shortcut:**\n- **Need to look at multiple items?** → Use \"All Items\" mode\n- **Each item completely independent?** → Use \"Each Item\" mode\n- **Not sure?** → Use \"All Items\" mode (you can always loop inside)\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```javascript\n\u002F\u002F Get all items from previous node\nconst allItems = $input.all();\n\n\u002F\u002F Filter, map, reduce as needed\nconst valid = allItems.filter(item => item.json.status === 'active');\nconst mapped = valid.map(item => ({\n  json: {\n    id: item.json.id,\n    name: item.json.name\n  }\n}));\n\nreturn mapped;\n```\n\n### Pattern 2: $input.first() - Very Common\n\n**Use when**: Working with single objects, API responses, first-in-first-out\n\n```javascript\n\u002F\u002F Get first item only\nconst firstItem = $input.first();\nconst data = firstItem.json;\n\nreturn [{\n  json: {\n    result: processData(data),\n    processedAt: new Date().toISOString()\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```javascript\n\u002F\u002F Current item in loop (Each Item mode only)\nconst currentItem = $input.item;\n\nreturn [{\n  json: {\n    ...currentItem.json,\n    itemProcessed: 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```javascript\n\u002F\u002F Get output from specific node\nconst webhookData = $node[\"Webhook\"].json;\nconst httpData = $node[\"HTTP Request\"].json;\n\nreturn [{\n  json: {\n    combined: {\n      webhook: webhookData,\n      api: httpData\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```javascript\n\u002F\u002F ❌ WRONG - Will return undefined\nconst name = $json.name;\nconst email = $json.email;\n\n\u002F\u002F ✅ CORRECT - Webhook data is under .body\nconst name = $json.body.name;\nconst email = $json.body.email;\n\n\u002F\u002F Or with $input\nconst webhookData = $input.first().json.body;\nconst name = webhookData.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 array of objects with `json` property\n\n### Correct Return Formats\n\n```javascript\n\u002F\u002F ✅ Single result\nreturn [{\n  json: {\n    field1: value1,\n    field2: value2\n  }\n}];\n\n\u002F\u002F ✅ Multiple results\nreturn [\n  {json: {id: 1, data: 'first'}},\n  {json: {id: 2, data: 'second'}}\n];\n\n\u002F\u002F ✅ Transformed array\nconst transformed = $input.all()\n  .filter(item => item.json.valid)\n  .map(item => ({\n    json: {\n      id: item.json.id,\n      processed: true\n    }\n  }));\nreturn transformed;\n\n\u002F\u002F ✅ Empty result (when no data to return)\nreturn [];\n\n\u002F\u002F ✅ Conditional return\nif (shouldProcess) {\n  return [{json: processedData}];\n} else {\n  return [];\n}\n```\n\n### Incorrect Return Formats\n\n```javascript\n\u002F\u002F ❌ WRONG: Object without array wrapper\nreturn {\n  json: {field: value}\n};\n\n\u002F\u002F ❌ WRONG: Array without json wrapper\nreturn [{field: value}];\n\n\u002F\u002F ❌ WRONG: Plain string\nreturn \"processed\";\n\n\u002F\u002F ❌ WRONG: Raw data without mapping\nreturn $input.all();  \u002F\u002F Missing .map()\n\n\u002F\u002F ❌ WRONG: Incomplete structure\nreturn [{data: value}];  \u002F\u002F Should be {json: value}\n```\n\n**Why it matters**: Next nodes expect array format. Incorrect format causes workflow execution to fail.\n\n**See**: ERROR_PATTERNS.md #3 for detailed error solutions\n\n---\n\n## Common Patterns Overview\n\nBased on production workflows, here are the most useful patterns:\n\n### 1. Multi-Source Data Aggregation\nCombine data from multiple APIs, webhooks, or nodes\n\n```javascript\nconst allItems = $input.all();\nconst results = [];\n\nfor (const item of allItems) {\n  const sourceName = item.json.name || 'Unknown';\n  \u002F\u002F Parse source-specific structure\n  if (sourceName === 'API1' && item.json.data) {\n    results.push({\n      json: {\n        title: item.json.data.title,\n        source: 'API1'\n      }\n    });\n  }\n}\n\nreturn results;\n```\n\n### 2. Filtering with Regex\nExtract patterns, mentions, or keywords from text\n\n```javascript\nconst pattern = \u002F\\b([A-Z]{2,5})\\b\u002Fg;\nconst matches = {};\n\nfor (const item of $input.all()) {\n  const text = item.json.text;\n  const found = text.match(pattern);\n\n  if (found) {\n    found.forEach(match => {\n      matches[match] = (matches[match] || 0) + 1;\n    });\n  }\n}\n\nreturn [{json: {matches}}];\n```\n\n### 3. Data Transformation & Enrichment\nMap fields, normalize formats, add computed fields\n\n```javascript\nconst items = $input.all();\n\nreturn items.map(item => {\n  const data = item.json;\n  const nameParts = data.name.split(' ');\n\n  return {\n    json: {\n      first_name: nameParts[0],\n      last_name: nameParts.slice(1).join(' '),\n      email: data.email,\n      created_at: new Date().toISOString()\n    }\n  };\n});\n```\n\n### 4. Top N Filtering & Ranking\nSort and limit results\n\n```javascript\nconst items = $input.all();\n\nconst topItems = items\n  .sort((a, b) => (b.json.score || 0) - (a.json.score || 0))\n  .slice(0, 10);\n\nreturn topItems.map(item => ({json: item.json}));\n```\n\n### 5. Aggregation & Reporting\nSum, count, group data\n\n```javascript\nconst items = $input.all();\nconst total = items.reduce((sum, item) => sum + (item.json.amount || 0), 0);\n\nreturn [{\n  json: {\n    total,\n    count: items.length,\n    average: total \u002F items.length,\n    timestamp: new Date().toISOString()\n  }\n}];\n```\n\n**See**: COMMON_PATTERNS.md for 10 detailed production patterns\n\n---\n\n## Error Prevention - Top 5 Mistakes\n\n### #1: Empty Code or Missing Return (Most Common)\n\n```javascript\n\u002F\u002F ❌ WRONG: No return statement\nconst items = $input.all();\n\u002F\u002F ... processing code ...\n\u002F\u002F Forgot to return!\n\n\u002F\u002F ✅ CORRECT: Always return data\nconst items = $input.all();\n\u002F\u002F ... processing ...\nreturn items.map(item => ({json: item.json}));\n```\n\n### #2: Expression Syntax Confusion\n\n```javascript\n\u002F\u002F ❌ WRONG: Using n8n expression syntax in code\nconst value = \"{{ $json.field }}\";\n\n\u002F\u002F ✅ CORRECT: Use JavaScript template literals\nconst value = `${$json.field}`;\n\n\u002F\u002F ✅ CORRECT: Direct access\nconst value = $input.first().json.field;\n```\n\n### #3: Incorrect Return Wrapper\n\n```javascript\n\u002F\u002F ❌ WRONG: Returning object instead of array\nreturn {json: {result: 'success'}};\n\n\u002F\u002F ✅ CORRECT: Array wrapper required\nreturn [{json: {result: 'success'}}];\n```\n\n### #4: Missing Null Checks\n\n```javascript\n\u002F\u002F ❌ WRONG: Crashes if field doesn't exist\nconst value = item.json.user.email;\n\n\u002F\u002F ✅ CORRECT: Safe access with optional chaining\nconst value = item.json?.user?.email || 'no-email@example.com';\n\n\u002F\u002F ✅ CORRECT: Guard clause\nif (!item.json.user) {\n  return [];\n}\nconst value = item.json.user.email;\n```\n\n### #5: Webhook Body Nesting\n\n```javascript\n\u002F\u002F ❌ WRONG: Direct access to webhook data\nconst email = $json.email;\n\n\u002F\u002F ✅ CORRECT: Webhook data under .body\nconst email = $json.body.email;\n```\n\n**See**: ERROR_PATTERNS.md for comprehensive error guide\n\n---\n\n## Built-in Functions & Helpers\n\n### $helpers.httpRequest()\n\nMake HTTP requests from within code:\n\n```javascript\nconst response = await $helpers.httpRequest({\n  method: 'GET',\n  url: 'https:\u002F\u002Fapi.example.com\u002Fdata',\n  headers: {\n    'Authorization': 'Bearer token',\n    'Content-Type': 'application\u002Fjson'\n  }\n});\n\nreturn [{json: {data: response}}];\n```\n\n### DateTime (Luxon)\n\nDate and time operations:\n\n```javascript\n\u002F\u002F Current time\nconst now = DateTime.now();\n\n\u002F\u002F Format dates\nconst formatted = now.toFormat('yyyy-MM-dd');\nconst iso = now.toISO();\n\n\u002F\u002F Date arithmetic\nconst tomorrow = now.plus({days: 1});\nconst lastWeek = now.minus({weeks: 1});\n\nreturn [{\n  json: {\n    today: formatted,\n    tomorrow: tomorrow.toFormat('yyyy-MM-dd')\n  }\n}];\n```\n\n### $jmespath()\n\nQuery JSON structures:\n\n```javascript\nconst data = $input.first().json;\n\n\u002F\u002F Filter array\nconst adults = $jmespath(data, 'users[?age >= `18`]');\n\n\u002F\u002F Extract fields\nconst names = $jmespath(data, 'users[*].name');\n\nreturn [{json: {adults, names}}];\n```\n\n**See**: BUILTIN_FUNCTIONS.md for complete reference\n\n---\n\n## Best Practices\n\n### 1. Always Validate Input Data\n\n```javascript\nconst items = $input.all();\n\n\u002F\u002F Check if data exists\nif (!items || items.length === 0) {\n  return [];\n}\n\n\u002F\u002F Validate structure\nif (!items[0].json) {\n  return [{json: {error: 'Invalid input format'}}];\n}\n\n\u002F\u002F Continue processing...\n```\n\n### 2. Use Try-Catch for Error Handling\n\n```javascript\ntry {\n  const response = await $helpers.httpRequest({\n    url: 'https:\u002F\u002Fapi.example.com\u002Fdata'\n  });\n\n  return [{json: {success: true, data: response}}];\n} catch (error) {\n  return [{\n    json: {\n      success: false,\n      error: error.message\n    }\n  }];\n}\n```\n\n### 3. Prefer Array Methods Over Loops\n\n```javascript\n\u002F\u002F ✅ GOOD: Functional approach\nconst processed = $input.all()\n  .filter(item => item.json.valid)\n  .map(item => ({json: {id: item.json.id}}));\n\n\u002F\u002F ❌ SLOWER: Manual loop\nconst processed = [];\nfor (const item of $input.all()) {\n  if (item.json.valid) {\n    processed.push({json: {id: item.json.id}});\n  }\n}\n```\n\n### 4. Filter Early, Process Late\n\n```javascript\n\u002F\u002F ✅ GOOD: Filter first to reduce processing\nconst processed = $input.all()\n  .filter(item => item.json.status === 'active')  \u002F\u002F Reduce dataset first\n  .map(item => expensiveTransformation(item));  \u002F\u002F Then transform\n\n\u002F\u002F ❌ WASTEFUL: Transform everything, then filter\nconst processed = $input.all()\n  .map(item => expensiveTransformation(item))  \u002F\u002F Wastes CPU\n  .filter(item => item.json.status === 'active');\n```\n\n### 5. Use Descriptive Variable Names\n\n```javascript\n\u002F\u002F ✅ GOOD: Clear intent\nconst activeUsers = $input.all().filter(item => item.json.active);\nconst totalRevenue = activeUsers.reduce((sum, user) => sum + user.json.revenue, 0);\n\n\u002F\u002F ❌ BAD: Unclear purpose\nconst a = $input.all().filter(item => item.json.active);\nconst t = a.reduce((s, u) => s + u.json.revenue, 0);\n```\n\n### 6. Debug with console.log()\n\n```javascript\n\u002F\u002F Debug statements appear in browser console\nconst items = $input.all();\nconsole.log(`Processing ${items.length} items`);\n\nfor (const item of items) {\n  console.log('Item data:', item.json);\n  \u002F\u002F Process...\n}\n\nreturn result;\n```\n\n---\n\n## When to Use Code Node\n\nUse Code node when:\n- ✅ Complex transformations requiring multiple steps\n- ✅ Custom calculations or business logic\n- ✅ Recursive operations\n- ✅ API response parsing with complex structure\n- ✅ Multi-step conditionals\n- ✅ Data aggregation across items\n\nConsider 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**Code node excels at**: Complex logic that would require chaining many simple nodes\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 JavaScript 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 (JavaScript vs Python)\n- Understanding property dependencies\n\n**n8n Workflow Patterns**:\n- Code nodes in transformation step\n- Webhook → Code → API pattern\n- Error handling in workflows\n\n**n8n Validation Expert**:\n- Validate Code node configuration\n- Handle validation errors\n- Auto-fix common issues\n\n---\n\n## Quick Reference Checklist\n\nBefore deploying Code nodes, verify:\n\n- [ ] **Code is not empty** - Must have meaningful logic\n- [ ] **Return statement exists** - Must return array of objects\n- [ ] **Proper return format** - Each item: `{json: {...}}`\n- [ ] **Data access correct** - Using `$input.all()`, `$input.first()`, or `$input.item`\n- [ ] **No n8n expressions** - Use JavaScript template literals: `` `${value}` ``\n- [ ] **Error handling** - Guard clauses for null\u002Fundefined inputs\n- [ ] **Webhook data** - Access via `.body` if from webhook\n- [ ] **Mode selection** - \"All Items\" for most cases\n- [ ] **Performance** - Prefer map\u002Ffilter over manual loops\n- [ ] **Output consistent** - All code paths return same structure\n\n---\n\n## Additional Resources\n\n### Related Files\n- DATA_ACCESS.md - Comprehensive data access patterns\n- COMMON_PATTERNS.md - 10 production-tested patterns\n- ERROR_PATTERNS.md - Top 5 errors and solutions\n- BUILTIN_FUNCTIONS.md - Complete built-in reference\n\n### n8n Documentation\n- Code Node Guide: https:\u002F\u002Fdocs.n8n.io\u002Fcode\u002Fcode-node\u002F\n- Built-in Methods: https:\u002F\u002Fdocs.n8n.io\u002Fcode-examples\u002Fmethods-variables-reference\u002F\n- Luxon Documentation: https:\u002F\u002Fmoment.github.io\u002Fluxon\u002F\n\n---\n\n**Ready to write JavaScript in n8n Code nodes!** Start with simple transformations, use the error patterns guide to avoid common mistakes, and reference the pattern library for production-ready examples.\n","# JavaScript Code Node\n\nExpert guidance for writing JavaScript code in n8n Code nodes.\n\n---\n\n## Quick Start\n\n```javascript\n\u002F\u002F Basic template for Code nodes\nconst items = $input.all();\n\n\u002F\u002F Process data\nconst processed = items.map(item => ({\n  json: {\n    ...item.json,\n    processed: true,\n    timestamp: new Date().toISOString()\n  }\n}));\n\nreturn processed;\n```\n\n### Essential Rules\n\n1. **Choose \"Run Once for All Items\" mode** (recommended for most use cases)\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. **Built-ins available**: $helpers.httpRequest(), DateTime (Luxon), $jmespath()\n\n---\n\n## Mode Selection Guide\n\nThe Code node offers two execution modes. 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\n- **Best for**: Aggregation, filtering, batch processing, transformations, API calls with all data\n- **Performance**: Faster for multiple items (single execution)\n\n```javascript\n\u002F\u002F Example: Calculate total from all items\nconst allItems = $input.all();\nconst total = allItems.reduce((sum, item) => sum + (item.json.amount || 0), 0);\n\nreturn [{\n  json: {\n    total,\n    count: allItems.length,\n    average: total \u002F allItems.length\n  }\n}];\n```\n\n**When to use:**\n- ✅ Comparing items across the dataset\n- ✅ Calculating totals, averages, or statistics\n- ✅ Sorting or ranking items\n- ✅ Deduplication\n- ✅ Building aggregated reports\n- ✅ Combining data from multiple items\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`\n- **Best for**: Item-specific logic, independent operations, per-item validation\n- **Performance**: Slower for large datasets (multiple executions)\n\n```javascript\n\u002F\u002F Example: Add processing timestamp to each item\nconst item = $input.item;\n\nreturn [{\n  json: {\n    ...item.json,\n    processed: true,\n    processedAt: new Date().toISOString()\n  }\n}];\n```\n\n**When to use:**\n- ✅ Each item needs independent API call\n- ✅ Per-item validation with different error handling\n- ✅ Item-specific transformations based on item properties\n- ✅ When items must be processed separately for business logic\n\n**Decision Shortcut:**\n- **Need to look at multiple items?** → Use \"All Items\" mode\n- **Each item completely independent?** → Use \"Each Item\" mode\n- **Not sure?** → Use \"All Items\" mode (you can always loop inside)\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```javascript\n\u002F\u002F Get all items from previous node\nconst allItems = $input.all();\n\n\u002F\u002F Filter, map, reduce as needed\nconst valid = allItems.filter(item => item.json.status === 'active');\nconst mapped = valid.map(item => ({\n  json: {\n    id: item.json.id,\n    name: item.json.name\n  }\n}));\n\nreturn mapped;\n```\n\n### Pattern 2: $input.first() - Very Common\n\n**Use when**: Working with single objects, API responses, first-in-first-out\n\n```javascript\n\u002F\u002F Get first item only\nconst firstItem = $input.first();\nconst data = firstItem.json;\n\nreturn [{\n  json: {\n    result: processData(data),\n    processedAt: new Date().toISOString()\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```javascript\n\u002F\u002F Current item in loop (Each Item mode only)\nconst currentItem = $input.item;\n\nreturn [{\n  json: {\n    ...currentItem.json,\n    itemProcessed: 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```javascript\n\u002F\u002F Get output from specific node\nconst webhookData = $node[\"Webhook\"].json;\nconst httpData = $node[\"HTTP Request\"].json;\n\nreturn [{\n  json: {\n    combined: {\n      webhook: webhookData,\n      api: httpData\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```javascript\n\u002F\u002F ❌ WRONG - Will return undefined\nconst name = $json.name;\nconst email = $json.email;\n\n\u002F\u002F ✅ CORRECT - Webhook data is under .body\nconst name = $json.body.name;\nconst email = $json.body.email;\n\n\u002F\u002F Or with $input\nconst webhookData = $input.first().json.body;\nconst name = webhookData.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 array of objects with `json` property\n\n### Correct Return Formats\n\n```javascript\n\u002F\u002F ✅ Single result\nreturn [{\n  json: {\n    field1: value1,\n    field2: value2\n  }\n}];\n\n\u002F\u002F ✅ Multiple results\nreturn [\n  {json: {id: 1, data: 'first'}},\n  {json: {id: 2, data: 'second'}}\n];\n\n\u002F\u002F ✅ Transformed array\nconst transformed = $input.all()\n  .filter(item => item.json.valid)\n  .map(item => ({\n    json: {\n      id: item.json.id,\n      processed: true\n    }\n  }));\nreturn transformed;\n\n\u002F\u002F ✅ Empty result (when no data to return)\nreturn [];\n\n\u002F\u002F ✅ Conditional return\nif (shouldProcess) {\n  return [{json: processedData}];\n} else {\n  return [];\n}\n```\n\n### Incorrect Return Formats\n\n```javascript\n\u002F\u002F ❌ WRONG: Object without array wrapper\nreturn {\n  json: {field: value}\n};\n\n\u002F\u002F ❌ WRONG: Array without json wrapper\nreturn [{field: value}];\n\n\u002F\u002F ❌ WRONG: Plain string\nreturn \"processed\";\n\n\u002F\u002F ❌ WRONG: Raw data without mapping\nreturn $input.all();  \u002F\u002F Missing .map()\n\n\u002F\u002F ❌ WRONG: Incomplete structure\nreturn [{data: value}];  \u002F\u002F Should be {json: value}\n```\n\n**Why it matters**: Next nodes expect array format. Incorrect format causes workflow execution to fail.\n\n**See**: ERROR_PATTERNS.md #3 for detailed error solutions\n\n---\n\n## Common Patterns Overview\n\nBased on production workflows, here are the most useful patterns:\n\n### 1. Multi-Source Data Aggregation\nCombine data from multiple APIs, webhooks, or nodes\n\n```javascript\nconst allItems = $input.all();\nconst results = [];\n\nfor (const item of allItems) {\n  const sourceName = item.json.name || 'Unknown';\n  \u002F\u002F Parse source-specific structure\n  if (sourceName === 'API1' && item.json.data) {\n    results.push({\n      json: {\n        title: item.json.data.title,\n        source: 'API1'\n      }\n    });\n  }\n}\n\nreturn results;\n```\n\n### 2. Filtering with Regex\nExtract patterns, mentions, or keywords from text\n\n```javascript\nconst pattern = \u002F\\b([A-Z]{2,5})\\b\u002Fg;\nconst matches = {};\n\nfor (const item of $input.all()) {\n  const text = item.json.text;\n  const found = text.match(pattern);\n\n  if (found) {\n    found.forEach(match => {\n      matches[match] = (matches[match] || 0) + 1;\n    });\n  }\n}\n\nreturn [{json: {matches}}];\n```\n\n### 3. Data Transformation & Enrichment\nMap fields, normalize formats, add computed fields\n\n```javascript\nconst items = $input.all();\n\nreturn items.map(item => {\n  const data = item.json;\n  const nameParts = data.name.split(' ');\n\n  return {\n    json: {\n      first_name: nameParts[0],\n      last_name: nameParts.slice(1).join(' '),\n      email: data.email,\n      created_at: new Date().toISOString()\n    }\n  };\n});\n```\n\n### 4. Top N Filtering & Ranking\nSort and limit results\n\n```javascript\nconst items = $input.all();\n\nconst topItems = items\n  .sort((a, b) => (b.json.score || 0) - (a.json.score || 0))\n  .slice(0, 10);\n\nreturn topItems.map(item => ({json: item.json}));\n```\n\n### 5. Aggregation & Reporting\nSum, count, group data\n\n```javascript\nconst items = $input.all();\nconst total = items.reduce((sum, item) => sum + (item.json.amount || 0), 0);\n\nreturn [{\n  json: {\n    total,\n    count: items.length,\n    average: total \u002F items.length,\n    timestamp: new Date().toISOString()\n  }\n}];\n```\n\n**See**: COMMON_PATTERNS.md for 10 detailed production patterns\n\n---\n\n## Error Prevention - Top 5 Mistakes\n\n### #1: Empty Code or Missing Return (Most Common)\n\n```javascript\n\u002F\u002F ❌ WRONG: No return statement\nconst items = $input.all();\n\u002F\u002F ... processing code ...\n\u002F\u002F Forgot to return!\n\n\u002F\u002F ✅ CORRECT: Always return data\nconst items = $input.all();\n\u002F\u002F ... processing ...\nreturn items.map(item => ({json: item.json}));\n```\n\n### #2: Expression Syntax Confusion\n\n```javascript\n\u002F\u002F ❌ WRONG: Using n8n expression syntax in code\nconst value = \"{{ $json.field }}\";\n\n\u002F\u002F ✅ CORRECT: Use JavaScript template literals\nconst value = `${$json.field}`;\n\n\u002F\u002F ✅ CORRECT: Direct access\nconst value = $input.first().json.field;\n```\n\n### #3: Incorrect Return Wrapper\n\n```javascript\n\u002F\u002F ❌ WRONG: Returning object instead of array\nreturn {json: {result: 'success'}};\n\n\u002F\u002F ✅ CORRECT: Array wrapper required\nreturn [{json: {result: 'success'}}];\n```\n\n### #4: Missing Null Checks\n\n```javascript\n\u002F\u002F ❌ WRONG: Crashes if field doesn't exist\nconst value = item.json.user.email;\n\n\u002F\u002F ✅ CORRECT: Safe access with optional chaining\nconst value = item.json?.user?.email || 'no-email@example.com';\n\n\u002F\u002F ✅ CORRECT: Guard clause\nif (!item.json.user) {\n  return [];\n}\nconst value = item.json.user.email;\n```\n\n### #5: Webhook Body Nesting\n\n```javascript\n\u002F\u002F ❌ WRONG: Direct access to webhook data\nconst email = $json.email;\n\n\u002F\u002F ✅ CORRECT: Webhook data under .body\nconst email = $json.body.email;\n```\n\n**See**: ERROR_PATTERNS.md for comprehensive error guide\n\n---\n\n## Built-in Functions & Helpers\n\n### $helpers.httpRequest()\n\nMake HTTP requests from within code:\n\n```javascript\nconst response = await $helpers.httpRequest({\n  method: 'GET',\n  url: 'https:\u002F\u002Fapi.example.com\u002Fdata',\n  headers: {\n    'Authorization': 'Bearer token',\n    'Content-Type': 'application\u002Fjson'\n  }\n});\n\nreturn [{json: {data: response}}];\n```\n\n### DateTime (Luxon)\n\nDate and time operations:\n\n```javascript\n\u002F\u002F Current time\nconst now = DateTime.now();\n\n\u002F\u002F Format dates\nconst formatted = now.toFormat('yyyy-MM-dd');\nconst iso = now.toISO();\n\n\u002F\u002F Date arithmetic\nconst tomorrow = now.plus({days: 1});\nconst lastWeek = now.minus({weeks: 1});\n\nreturn [{\n  json: {\n    today: formatted,\n    tomorrow: tomorrow.toFormat('yyyy-MM-dd')\n  }\n}];\n```\n\n### $jmespath()\n\nQuery JSON structures:\n\n```javascript\nconst data = $input.first().json;\n\n\u002F\u002F Filter array\nconst adults = $jmespath(data, 'users[?age >= `18`]');\n\n\u002F\u002F Extract fields\nconst names = $jmespath(data, 'users[*].name');\n\nreturn [{json: {adults, names}}];\n```\n\n**See**: BUILTIN_FUNCTIONS.md for complete reference\n\n---\n\n## Best Practices\n\n### 1. Always Validate Input Data\n\n```javascript\nconst items = $input.all();\n\n\u002F\u002F Check if data exists\nif (!items || items.length === 0) {\n  return [];\n}\n\n\u002F\u002F Validate structure\nif (!items[0].json) {\n  return [{json: {error: 'Invalid input format'}}];\n}\n\n\u002F\u002F Continue processing...\n```\n\n### 2. Use Try-Catch for Error Handling\n\n```javascript\ntry {\n  const response = await $helpers.httpRequest({\n    url: 'https:\u002F\u002Fapi.example.com\u002Fdata'\n  });\n\n  return [{json: {success: true, data: response}}];\n} catch (error) {\n  return [{\n    json: {\n      success: false,\n      error: error.message\n    }\n  }];\n}\n```\n\n### 3. Prefer Array Methods Over Loops\n\n```javascript\n\u002F\u002F ✅ GOOD: Functional approach\nconst processed = $input.all()\n  .filter(item => item.json.valid)\n  .map(item => ({json: {id: item.json.id}}));\n\n\u002F\u002F ❌ SLOWER: Manual loop\nconst processed = [];\nfor (const item of $input.all()) {\n  if (item.json.valid) {\n    processed.push({json: {id: item.json.id}});\n  }\n}\n```\n\n### 4. Filter Early, Process Late\n\n```javascript\n\u002F\u002F ✅ GOOD: Filter first to reduce processing\nconst processed = $input.all()\n  .filter(item => item.json.status === 'active')  \u002F\u002F Reduce dataset first\n  .map(item => expensiveTransformation(item));  \u002F\u002F Then transform\n\n\u002F\u002F ❌ WASTEFUL: Transform everything, then filter\nconst processed = $input.all()\n  .map(item => expensiveTransformation(item))  \u002F\u002F Wastes CPU\n  .filter(item => item.json.status === 'active');\n```\n\n### 5. Use Descriptive Variable Names\n\n```javascript\n\u002F\u002F ✅ GOOD: Clear intent\nconst activeUsers = $input.all().filter(item => item.json.active);\nconst totalRevenue = activeUsers.reduce((sum, user) => sum + user.json.revenue, 0);\n\n\u002F\u002F ❌ BAD: Unclear purpose\nconst a = $input.all().filter(item => item.json.active);\nconst t = a.reduce((s, u) => s + u.json.revenue, 0);\n```\n\n### 6. Debug with console.log()\n\n```javascript\n\u002F\u002F Debug statements appear in browser console\nconst items = $input.all();\nconsole.log(`Processing ${items.length} items`);\n\nfor (const item of items) {\n  console.log('Item data:', item.json);\n  \u002F\u002F Process...\n}\n\nreturn result;\n```\n\n---\n\n## When to Use Code Node\n\nUse Code node when:\n- ✅ Complex transformations requiring multiple steps\n- ✅ Custom calculations or business logic\n- ✅ Recursive operations\n- ✅ API response parsing with complex structure\n- ✅ Multi-step conditionals\n- ✅ Data aggregation across items\n\nConsider 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**Code node excels at**: Complex logic that would require chaining many simple nodes\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 JavaScript 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 (JavaScript vs Python)\n- Understanding property dependencies\n\n**n8n Workflow Patterns**:\n- Code nodes in transformation step\n- Webhook → Code → API pattern\n- Error handling in workflows\n\n**n8n Validation Expert**:\n- Validate Code node configuration\n- Handle validation errors\n- Auto-fix common issues\n\n---\n\n## Quick Reference Checklist\n\nBefore deploying Code nodes, verify:\n\n- [ ] **Code is not empty** - Must have meaningful logic\n- [ ] **Return statement exists** - Must return array of objects\n- [ ] **Proper return format** - Each item: `{json: {...}}`\n- [ ] **Data access correct** - Using `$input.all()`, `$input.first()`, or `$input.item`\n- [ ] **No n8n expressions** - Use JavaScript template literals: `` `${value}` ``\n- [ ] **Error handling** - Guard clauses for null\u002Fundefined inputs\n- [ ] **Webhook data** - Access via `.body` if from webhook\n- [ ] **Mode selection** - \"All Items\" for most cases\n- [ ] **Performance** - Prefer map\u002Ffilter over manual loops\n- [ ] **Output consistent** - All code paths return same structure\n\n---\n\n## Additional Resources\n\n### Related Files\n- DATA_ACCESS.md - Comprehensive data access patterns\n- COMMON_PATTERNS.md - 10 production-tested patterns\n- ERROR_PATTERNS.md - Top 5 errors and solutions\n- BUILTIN_FUNCTIONS.md - Complete built-in reference\n\n### n8n Documentation\n- Code Node Guide: https:\u002F\u002Fdocs.n8n.io\u002Fcode\u002Fcode-node\u002F\n- Built-in Methods: https:\u002F\u002Fdocs.n8n.io\u002Fcode-examples\u002Fmethods-variables-reference\u002F\n- Luxon Documentation: https:\u002F\u002Fmoment.github.io\u002Fluxon\u002F\n\n---\n\n**Ready to write JavaScript in n8n Code nodes!** Start with simple transformations, use the error patterns guide to avoid common mistakes, and reference the pattern library for production-ready examples.\n",{"name":5,"risk":43,"source":37,"description":7},"unknown","main","a50a3aa6b39fb0e1b7db88bef1bfc9c93606e126","modules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fn8n-code-javascript",0,"https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant","https:\u002F\u002Fgithub.com\u002FSam-06060","Mobile Application Developer | Kotlin | Flutter, KMP, Swfit, Android,Swift UI | Building at Saar It Resources | Creator of Jarvis (AI Assistant)","2026-06-23 05:13:38",{"source":8,"skillName":5,"commands":53,"prompt":63,"zipAvailable":64},[54,57,60],{"tool":55,"command":56},"npx","npx skills add Sam-06060\u002Fjarvis-assistant --skill n8n-code-javascript",{"tool":58,"command":59},"bunx","bunx skills add Sam-06060\u002Fjarvis-assistant --skill n8n-code-javascript",{"tool":61,"command":62},"pnpm","pnpm dlx skills add Sam-06060\u002Fjarvis-assistant --skill n8n-code-javascript","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fn8n-code-javascript\u002FSKILL.md",true,[66,72,78,82],{"path":67,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":70,"sourceHtmlUrl":71},"bmad-skill-manifest.yaml","REFERENCE","参考文档",12,"https:\u002F\u002Fgithub.com\u002Fcodeasice\u002Fagentcore-presentation\u002Fblob\u002Fmaster\u002F_bmad\u002Fcis\u002Fskills\u002Fbmad-cis-design-thinking\u002Fbmad-skill-manifest.yaml",{"path":73,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":77},"design-methods.csv","ASSET","资产文件",6412,"https:\u002F\u002Fgithub.com\u002Fcodeasice\u002Fagentcore-presentation\u002Fblob\u002Fmaster\u002F_bmad\u002Fcis\u002Fskills\u002Fbmad-cis-design-thinking\u002Fdesign-methods.csv",{"path":79,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":80,"sourceHtmlUrl":81},"template.md",1278,"https:\u002F\u002Fgithub.com\u002Fcodeasice\u002Fagentcore-presentation\u002Fblob\u002Fmaster\u002F_bmad\u002Fcis\u002Fskills\u002Fbmad-cis-design-thinking\u002Ftemplate.md",{"path":83,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":84,"sourceHtmlUrl":85},"workflow.md",8045,"https:\u002F\u002Fgithub.com\u002Fcodeasice\u002Fagentcore-presentation\u002Fblob\u002Fmaster\u002F_bmad\u002Fcis\u002Fskills\u002Fbmad-cis-design-thinking\u002Fworkflow.md",[87,100,116,143,162,189],{"skillNo":88,"name":89,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":97,"publishedAt":38},"01M6GDRVS6FXX3ESH0C9DW01C0","test_skill","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fscratch\u002Ftest_skill\u002FSKILL.md",[92],{"categoryNo":93,"categoryName":94,"taxonomyType":95,"taxonomyTypeDesc":96},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[98,99],"Test Skill","test",{"skillNo":101,"name":102,"nameZh":6,"description":103,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":106,"publishedAt":38},"01M6GDRQ40HX22MA6XWC31RHHK","zustand-store-ts","Create Zustand stores following established patterns with proper TypeScript types and middleware.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzustand-store-ts\u002FSKILL.md",[],[107,108,109,110,111,112,113,37,114,115],"zustand store ts","zustand","store","with","types","middleware","patterns","create","typescript",{"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":125,"publishedAt":38},"01M6GDRKEA0WE670SPFWX5GKCN","zoom-automation","Automate Zoom meeting creation, management, recordings, webinars, and participant tracking via Rube MCP (Composio). Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzoom-automation\u002FSKILL.md",[122],{"categoryNo":123,"categoryName":124,"taxonomyType":95,"taxonomyTypeDesc":96},"01JBSEEDCAT000000000000023","Skill与智能体开发",[126,127,128,129,130,131,132,133,134,135,136,137,138,139,37,140,141,142],"automation","zoom automation","zoom","first","Tools","search","MCP","via","meeting","automate","critical","creation","webinars","composio","recordings","management","tracking",{"skillNo":144,"name":145,"nameZh":6,"description":146,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":150,"publishedAt":38},"01M6GDRFS1452PC71JQ38S24HR","zoho-crm-automation","Automate Zoho CRM tasks via Rube MCP (Composio): create\u002Fupdate records, search contacts, manage leads, and convert leads. Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzoho-crm-automation\u002FSKILL.md",[149],{"categoryNo":123,"categoryName":124,"taxonomyType":95,"taxonomyTypeDesc":96},[151,126,152,153,154,155,156,37,131,157,139,158,136,135,130,159,114,160,132,161],"crm automation","zoho crm","crm","zoho crm automation","zoho","leads","contacts","records","update","tasks","manage",{"skillNo":163,"name":164,"nameZh":6,"description":165,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":166,"categories":167,"keywords":171,"publishedAt":38},"01M6GDRCKQBAVTGHX5XBH26KPZ","zod-validation-expert","Expert in Zod — TypeScript-first schema validation. Covers parsing, custom errors, refinements, type inference, and integration with React Hook Form, Next.js, and tRPC.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzod-validation-expert\u002FSKILL.md",[168],{"categoryNo":169,"categoryName":170,"taxonomyType":95,"taxonomyTypeDesc":96},"01JBSEEDCAT000000000000009","前端开发",[172,173,174,175,176,115,177,178,179,180,181,182,110,183,184,185,186,37,187,188],"expert","zod","zod validation expert","validation","react","safe","parsing","errors","schema validation","react hook form","hook","trpc","form","type","next","schema","Next.js",{"skillNo":190,"name":191,"nameZh":6,"description":192,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":193,"categories":194,"keywords":196,"publishedAt":38},"01M6GDR658B08K4MY0RWD4A6EH","zeroize-audit","Detects missing zeroization of sensitive data in source code and identifies zeroization removed by compiler optimizations, with assembly-level analysis, and control-flow verification. Use for auditing C\u002FC++\u002FRust code handling secrets, keys, passwords, or other sensitive data.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzeroize-audit\u002FSKILL.md",[195],{"categoryNo":123,"categoryName":124,"taxonomyType":95,"taxonomyTypeDesc":96},[197,198,34,199,200,201,202,203,37,204,205,206,207,208,209,210,211,25,212,132],"zeroize audit","audit","passwords","get","project","c++","activate","assembly","read","Bash","secrets","analysis","data","flow","verification","rust"]