@caoscompanybr/merlin 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (762) hide show
  1. package/.claude/CLAUDE.md +216 -0
  2. package/.claude/hooks/README-license-gate.md +45 -0
  3. package/.claude/hooks/auto-summarize.js +47 -0
  4. package/.claude/hooks/context-monitor.js +60 -0
  5. package/.claude/hooks/doc-sync.js +111 -0
  6. package/.claude/hooks/license-gate.cjs +59 -0
  7. package/.claude/hooks/session-reset.js +27 -0
  8. package/.claude/hooks/thoughts-indexer.js +80 -0
  9. package/.claude/rules/merlin-constitution.md +27 -0
  10. package/.merlin-core/commands/README.md +19 -0
  11. package/.merlin-core/commands/founder-mode.md +51 -0
  12. package/.merlin-core/commands/git/commit.md +35 -0
  13. package/.merlin-core/commands/git/describe-pr.md +43 -0
  14. package/.merlin-core/commands/git/safe-commit.md +182 -0
  15. package/.merlin-core/commands/implementation/implement-plan.md +129 -0
  16. package/.merlin-core/commands/implementation/oneshot.md +63 -0
  17. package/.merlin-core/commands/implementation/tdd.md +152 -0
  18. package/.merlin-core/commands/planning/create-plan.md +184 -0
  19. package/.merlin-core/commands/planning/iterate-plan.md +45 -0
  20. package/.merlin-core/commands/planning/validate-plan.md +48 -0
  21. package/.merlin-core/commands/research/analyze-issue.md +155 -0
  22. package/.merlin-core/commands/research/research-codebase.md +157 -0
  23. package/.merlin-core/commands/review/adversarial-review.md +112 -0
  24. package/.merlin-core/commands/review/check.md +91 -0
  25. package/.merlin-core/commands/review/debug.md +135 -0
  26. package/.merlin-core/commands/review/doubts.md +178 -0
  27. package/.merlin-core/commands/review/engineering-audit.md +87 -0
  28. package/.merlin-core/commands/review/local-review.md +48 -0
  29. package/.merlin-core/commands/review/verify-goals.md +83 -0
  30. package/.merlin-core/commands/session/capture-feedback.md +74 -0
  31. package/.merlin-core/commands/session/capture-learning.md +155 -0
  32. package/.merlin-core/commands/session/check-objectives.md +85 -0
  33. package/.merlin-core/commands/session/conclude.md +125 -0
  34. package/.merlin-core/commands/session/create-handoff.md +88 -0
  35. package/.merlin-core/commands/session/create-objective.md +111 -0
  36. package/.merlin-core/commands/session/create-process.md +105 -0
  37. package/.merlin-core/commands/session/create-reminder.md +86 -0
  38. package/.merlin-core/commands/session/fast-start.md +261 -0
  39. package/.merlin-core/commands/session/recall-learnings.md +79 -0
  40. package/.merlin-core/commands/session/recall-processes.md +74 -0
  41. package/.merlin-core/commands/session/resume-handoff.md +51 -0
  42. package/.merlin-core/commands/session/run-process.md +53 -0
  43. package/.merlin-core/commands/special/beauty.md +89 -0
  44. package/.merlin-core/commands/special/common-ground.md +114 -0
  45. package/.merlin-core/commands/special/elicit.md +98 -0
  46. package/.merlin-core/commands/special/party.md +66 -0
  47. package/.merlin-core/commands/special/scrape.md +78 -0
  48. package/.merlin-core/commands/special/skill-audit.md +128 -0
  49. package/.merlin-core/commands/special/start-here.md +132 -0
  50. package/.merlin-core/constitution.md +442 -0
  51. package/.merlin-core/core/README.md +19 -0
  52. package/.merlin-core/core/alkimia/README.md +20 -0
  53. package/.merlin-core/core/alkimia/context/context-tracker.js +209 -0
  54. package/.merlin-core/core/alkimia/domain/domain-loader.js +215 -0
  55. package/.merlin-core/core/alkimia/engine.js +284 -0
  56. package/.merlin-core/core/alkimia/layers/l0-constitution.js +47 -0
  57. package/.merlin-core/core/alkimia/layers/l1-global.js +58 -0
  58. package/.merlin-core/core/alkimia/layers/l2-agent.js +58 -0
  59. package/.merlin-core/core/alkimia/layers/l3-workflow.js +54 -0
  60. package/.merlin-core/core/alkimia/layers/l4-task.js +45 -0
  61. package/.merlin-core/core/alkimia/layers/l5-squad.js +161 -0
  62. package/.merlin-core/core/alkimia/layers/l6-skill.js +520 -0
  63. package/.merlin-core/core/alkimia/layers/l7-star-command.js +87 -0
  64. package/.merlin-core/core/alkimia/layers/layer-processor.js +78 -0
  65. package/.merlin-core/core/alkimia/mandate.js +46 -0
  66. package/.merlin-core/core/alkimia/memory/doc-sync.js +201 -0
  67. package/.merlin-core/core/alkimia/memory/document-sharder.js +272 -0
  68. package/.merlin-core/core/alkimia/memory/git-history-retriever.js +225 -0
  69. package/.merlin-core/core/alkimia/memory/memory-bridge.js +97 -0
  70. package/.merlin-core/core/alkimia/memory/session-analyzer.js +400 -0
  71. package/.merlin-core/core/alkimia/memory/thoughts-indexer.js +477 -0
  72. package/.merlin-core/core/alkimia/memory/thoughts-provider.js +603 -0
  73. package/.merlin-core/core/alkimia/output/formatter.js +464 -0
  74. package/.merlin-core/core/alkimia/security/content-sanitizer.js +140 -0
  75. package/.merlin-core/core/alkimia/skill-importer.js +440 -0
  76. package/.merlin-core/core/alkimia/squads/default/.synapse/manifest +17 -0
  77. package/.merlin-core/core/alkimia/utils/frontmatter.js +321 -0
  78. package/.merlin-core/core/alkimia/utils/tokens.js +24 -0
  79. package/.merlin-core/core/approval/README.md +16 -0
  80. package/.merlin-core/core/approval/approval-engine.js +380 -0
  81. package/.merlin-core/core/approval/channels/cli-channel.js +50 -0
  82. package/.merlin-core/core/config/README.md +17 -0
  83. package/.merlin-core/core/config/config-cache.js +182 -0
  84. package/.merlin-core/core/config/config-loader.js +279 -0
  85. package/.merlin-core/core/config/config-resolver.js +411 -0
  86. package/.merlin-core/core/config/env-interpolator.js +123 -0
  87. package/.merlin-core/core/config/merge-utils.js +102 -0
  88. package/.merlin-core/core/config/schemas/core-config.schema.json +41 -0
  89. package/.merlin-core/core/config/schemas/framework-config.schema.json +24 -0
  90. package/.merlin-core/core/config/schemas/local-config.schema.json +23 -0
  91. package/.merlin-core/core/config/schemas/project-config.schema.json +189 -0
  92. package/.merlin-core/core/docs-consistency.js +140 -0
  93. package/.merlin-core/core/events/event-bus.js +344 -0
  94. package/.merlin-core/core/events/hook-handler.js +419 -0
  95. package/.merlin-core/core/execution/README.md +17 -0
  96. package/.merlin-core/core/execution/attempt-journal.js +380 -0
  97. package/.merlin-core/core/execution/autonomous-build-loop.js +637 -0
  98. package/.merlin-core/core/execution/build-orchestrator.js +296 -0
  99. package/.merlin-core/core/execution/build-state-manager.js +196 -0
  100. package/.merlin-core/core/execution/context-injector.js +204 -0
  101. package/.merlin-core/core/execution/cron-engine.js +247 -0
  102. package/.merlin-core/core/execution/cron-expression.js +148 -0
  103. package/.merlin-core/core/execution/env-preflight.js +423 -0
  104. package/.merlin-core/core/execution/guardrail-engine.js +745 -0
  105. package/.merlin-core/core/execution/heartbeat-engine.js +198 -0
  106. package/.merlin-core/core/execution/model-router.js +282 -0
  107. package/.merlin-core/core/execution/parallel-executor.js +378 -0
  108. package/.merlin-core/core/execution/parallel-monitor.js +201 -0
  109. package/.merlin-core/core/execution/party-session.js +311 -0
  110. package/.merlin-core/core/execution/rate-limit-manager.js +152 -0
  111. package/.merlin-core/core/execution/result-aggregator.js +215 -0
  112. package/.merlin-core/core/execution/semantic-merge-engine.js +320 -0
  113. package/.merlin-core/core/execution/subagent-dispatcher.js +721 -0
  114. package/.merlin-core/core/execution/success-verifier.js +227 -0
  115. package/.merlin-core/core/execution/task-metadata.js +105 -0
  116. package/.merlin-core/core/execution/team-executor.js +195 -0
  117. package/.merlin-core/core/execution/two-tier-editor.js +290 -0
  118. package/.merlin-core/core/execution/version-snapshot.js +294 -0
  119. package/.merlin-core/core/execution/wave-executor.js +224 -0
  120. package/.merlin-core/core/health-check/health-engine.js +415 -0
  121. package/.merlin-core/core/licensing/activation.js +281 -0
  122. package/.merlin-core/core/licensing/crc.js +103 -0
  123. package/.merlin-core/core/licensing/entitlement.js +99 -0
  124. package/.merlin-core/core/licensing/fingerprint.js +104 -0
  125. package/.merlin-core/core/licensing/gate.js +133 -0
  126. package/.merlin-core/core/licensing/hmac.js +42 -0
  127. package/.merlin-core/core/licensing/key.js +144 -0
  128. package/.merlin-core/core/licensing/license.js +212 -0
  129. package/.merlin-core/core/mcp/README.md +16 -0
  130. package/.merlin-core/core/mcp/browser-capability.js +191 -0
  131. package/.merlin-core/core/mcp/capability-mapper.js +92 -0
  132. package/.merlin-core/core/mcp/mcp-connector.js +278 -0
  133. package/.merlin-core/core/mcp/mcp-registry.js +101 -0
  134. package/.merlin-core/core/orchestration/README.md +17 -0
  135. package/.merlin-core/core/orchestration/agent-invoker.js +456 -0
  136. package/.merlin-core/core/orchestration/condition-evaluator.js +250 -0
  137. package/.merlin-core/core/orchestration/decision-tree.js +192 -0
  138. package/.merlin-core/core/orchestration/executor-assignment.js +372 -0
  139. package/.merlin-core/core/orchestration/gate-evaluator.js +653 -0
  140. package/.merlin-core/core/orchestration/intent-classifier.js +579 -0
  141. package/.merlin-core/core/orchestration/lock-manager.js +308 -0
  142. package/.merlin-core/core/orchestration/master-orchestrator.js +363 -0
  143. package/.merlin-core/core/orchestration/phase-tool-masks.js +194 -0
  144. package/.merlin-core/core/orchestration/recovery-handler.js +402 -0
  145. package/.merlin-core/core/orchestration/reflect-checkpoint.js +431 -0
  146. package/.merlin-core/core/orchestration/session-state.js +430 -0
  147. package/.merlin-core/core/orchestration/skill-dispatcher.js +255 -0
  148. package/.merlin-core/core/orchestration/step-loader.js +226 -0
  149. package/.merlin-core/core/orchestration/workflow-executor.js +864 -0
  150. package/.merlin-core/core/process/executor.js +231 -0
  151. package/.merlin-core/core/process/process-file.js +50 -0
  152. package/.merlin-core/core/process/secret-scan.js +86 -0
  153. package/.merlin-core/core/process/signature.js +77 -0
  154. package/.merlin-core/core/quality-gates/README.md +17 -0
  155. package/.merlin-core/core/quality-gates/layer1-precommit.js +110 -0
  156. package/.merlin-core/core/quality-gates/layer2-pr-automation.js +116 -0
  157. package/.merlin-core/core/quality-gates/layer3-human-review.js +133 -0
  158. package/.merlin-core/core/registry/service-registry.js +140 -0
  159. package/.merlin-core/core-config.yaml +159 -0
  160. package/.merlin-core/development/README.md +17 -0
  161. package/.merlin-core/development/agents/README.md +16 -0
  162. package/.merlin-core/development/agents/analyst.md +214 -0
  163. package/.merlin-core/development/agents/architect.md +166 -0
  164. package/.merlin-core/development/agents/data-engineer.md +154 -0
  165. package/.merlin-core/development/agents/dev.md +203 -0
  166. package/.merlin-core/development/agents/devops.md +236 -0
  167. package/.merlin-core/development/agents/grimorio.md +125 -0
  168. package/.merlin-core/development/agents/merlin-master.md +173 -0
  169. package/.merlin-core/development/agents/meta.md +190 -0
  170. package/.merlin-core/development/agents/pm.md +145 -0
  171. package/.merlin-core/development/agents/po.md +172 -0
  172. package/.merlin-core/development/agents/qa.md +275 -0
  173. package/.merlin-core/development/agents/researcher.md +218 -0
  174. package/.merlin-core/development/agents/scout.md +179 -0
  175. package/.merlin-core/development/agents/sm.md +148 -0
  176. package/.merlin-core/development/agents/ux.md +169 -0
  177. package/.merlin-core/development/agents/web-researcher.md +203 -0
  178. package/.merlin-core/development/checklists/adversarial-review-checklist.md +70 -0
  179. package/.merlin-core/development/checklists/operations-ci-checklist.md +40 -0
  180. package/.merlin-core/development/checklists/operations-deploy-checklist.md +54 -0
  181. package/.merlin-core/development/checklists/operations-publish-checklist.md +47 -0
  182. package/.merlin-core/development/checklists/source-verification-checklist.md +38 -0
  183. package/.merlin-core/development/templates/HEARTBEAT-template.md +46 -0
  184. package/.merlin-core/development/templates/ears-requirements-template.md +93 -0
  185. package/.merlin-core/development/templates/handoff-template.md +50 -0
  186. package/.merlin-core/development/templates/prd-template.md +62 -0
  187. package/.merlin-core/development/templates/research-template.md +53 -0
  188. package/.merlin-core/development/templates/spec-template.md +84 -0
  189. package/.merlin-core/development/workflows/brownfield-discovery.yaml +166 -0
  190. package/.merlin-core/development/workflows/brownfield-service.yaml +52 -0
  191. package/.merlin-core/development/workflows/development-cycle.yaml +57 -0
  192. package/.merlin-core/development/workflows/epic-orchestration.yaml +47 -0
  193. package/.merlin-core/development/workflows/folloni-funnel.yaml +177 -0
  194. package/.merlin-core/development/workflows/greenfield-fullstack.yaml +167 -0
  195. package/.merlin-core/development/workflows/greenfield-service.yaml +56 -0
  196. package/.merlin-core/development/workflows/qa-loop.yaml +115 -0
  197. package/.merlin-core/development/workflows/spec-pipeline.yaml +185 -0
  198. package/.merlin-core/development/workflows/steps/folloni-01-research.yaml +35 -0
  199. package/.merlin-core/development/workflows/steps/folloni-02-architecture.yaml +41 -0
  200. package/.merlin-core/development/workflows/steps/folloni-03-implementation.yaml +52 -0
  201. package/.merlin-core/development/workflows/story-development-cycle.yaml +67 -0
  202. package/.merlin-core/docs/GUIDE.md +413 -0
  203. package/.merlin-core/docs/merlin-commands-guide-pt.md +183 -0
  204. package/.merlin-core/framework-config.yaml +148 -0
  205. package/.merlin-core/hooks/README.md +16 -0
  206. package/.merlin-core/hooks/precompact-memory-flush.js +69 -0
  207. package/.merlin-core/hooks/pretooluse-remote-approve.js +113 -0
  208. package/.merlin-core/hooks/spikes/spike-b-hook.js +70 -0
  209. package/.merlin-core/hooks/spikes/spike-b-stub.js +70 -0
  210. package/.merlin-core/index.js +91 -0
  211. package/.merlin-core/local-config.yaml.template +31 -0
  212. package/.merlin-core/mcp-servers/lsp-bridge/index.js +397 -0
  213. package/.merlin-core/modules/scraping/module.json +23 -0
  214. package/.merlin-core/project-config.yaml +89 -0
  215. package/.merlin-core/schemas/README.md +18 -0
  216. package/.merlin-core/schemas/agent-hook-schema.json +152 -0
  217. package/.merlin-core/schemas/agent-schema.json +31 -0
  218. package/.merlin-core/schemas/command-schema.json +18 -0
  219. package/.merlin-core/schemas/feedback-schema.json +36 -0
  220. package/.merlin-core/schemas/handoff-schema.json +19 -0
  221. package/.merlin-core/schemas/learning-schema.json +51 -0
  222. package/.merlin-core/schemas/module.schema.json +124 -0
  223. package/.merlin-core/schemas/must-haves-schema.json +95 -0
  224. package/.merlin-core/schemas/objective-schema.json +23 -0
  225. package/.merlin-core/schemas/plan-schema.json +20 -0
  226. package/.merlin-core/schemas/process-schema.json +82 -0
  227. package/.merlin-core/schemas/reminder-schema.json +20 -0
  228. package/.merlin-core/schemas/skill-eval-schema.json +92 -0
  229. package/.merlin-core/schemas/skill-schema.json +77 -0
  230. package/.merlin-core/schemas/workflow-schema.json +38 -0
  231. package/.merlin-core/skills/README.md +16 -0
  232. package/.merlin-core/skills/domain/azure-cloud/SKILL.md +211 -0
  233. package/.merlin-core/skills/domain/azure-cloud/references/appinsights-instrumentation.md +63 -0
  234. package/.merlin-core/skills/domain/azure-cloud/references/azure-compliance.md +99 -0
  235. package/.merlin-core/skills/domain/azure-cloud/references/azure-cost-optimization.md +419 -0
  236. package/.merlin-core/skills/domain/azure-cloud/references/azure-deploy.md +82 -0
  237. package/.merlin-core/skills/domain/azure-cloud/references/azure-diagnostics.md +130 -0
  238. package/.merlin-core/skills/domain/azure-cloud/references/azure-prepare.md +134 -0
  239. package/.merlin-core/skills/domain/azure-cloud/references/azure-quotas.md +290 -0
  240. package/.merlin-core/skills/domain/azure-cloud/references/azure-rbac.md +11 -0
  241. package/.merlin-core/skills/domain/azure-cloud/references/azure-resource-lookup.md +97 -0
  242. package/.merlin-core/skills/domain/azure-cloud/references/azure-resource-visualizer.md +178 -0
  243. package/.merlin-core/skills/domain/azure-cloud/references/azure-storage.md +91 -0
  244. package/.merlin-core/skills/domain/azure-cloud/references/azure-validate.md +58 -0
  245. package/.merlin-core/skills/domain/azure-cloud/references/entra-app-registration.md +192 -0
  246. package/.merlin-core/skills/domain/browser-automation/SKILL.md +311 -0
  247. package/.merlin-core/skills/domain/browser-automation/references/agent-browser-skill.md +632 -0
  248. package/.merlin-core/skills/domain/browser-automation/references/authentication.md +308 -0
  249. package/.merlin-core/skills/domain/browser-automation/references/commands.md +266 -0
  250. package/.merlin-core/skills/domain/browser-automation/references/profiling.md +120 -0
  251. package/.merlin-core/skills/domain/browser-automation/references/proxy-support.md +194 -0
  252. package/.merlin-core/skills/domain/browser-automation/references/session-management.md +194 -0
  253. package/.merlin-core/skills/domain/browser-automation/references/snapshot-refs.md +196 -0
  254. package/.merlin-core/skills/domain/browser-automation/references/video-recording.md +173 -0
  255. package/.merlin-core/skills/domain/browser-automation/templates/authenticated-session.sh +105 -0
  256. package/.merlin-core/skills/domain/browser-automation/templates/capture-workflow.sh +69 -0
  257. package/.merlin-core/skills/domain/browser-automation/templates/form-automation.sh +62 -0
  258. package/.merlin-core/skills/domain/digital-marketing/SKILL.md +292 -0
  259. package/.merlin-core/skills/domain/digital-marketing/references/content-strategy.md +320 -0
  260. package/.merlin-core/skills/domain/digital-marketing/references/copy-formats.md +298 -0
  261. package/.merlin-core/skills/domain/digital-marketing/references/copy-methodology.md +180 -0
  262. package/.merlin-core/skills/domain/digital-marketing/references/email-sequences.md +135 -0
  263. package/.merlin-core/skills/domain/digital-marketing/references/launch-strategy.md +213 -0
  264. package/.merlin-core/skills/domain/digital-marketing/references/pricing-strategy.md +160 -0
  265. package/.merlin-core/skills/domain/digital-marketing/references/programmatic-seo.md +237 -0
  266. package/.merlin-core/skills/domain/digital-marketing/references/revops-lifecycle.md +170 -0
  267. package/.merlin-core/skills/domain/digital-marketing/references/revops-operations.md +167 -0
  268. package/.merlin-core/skills/domain/digital-marketing/references/schema-markup.md +190 -0
  269. package/.merlin-core/skills/domain/digital-marketing/references/strategy-frameworks.md +324 -0
  270. package/.merlin-core/skills/domain/digital-marketing/references/traffic-management.md +350 -0
  271. package/.merlin-core/skills/domain/expo-native-ui/SKILL.md +348 -0
  272. package/.merlin-core/skills/domain/expo-native-ui/references/animations.md +220 -0
  273. package/.merlin-core/skills/domain/expo-native-ui/references/api-routes.md +361 -0
  274. package/.merlin-core/skills/domain/expo-native-ui/references/cicd-workflows.md +84 -0
  275. package/.merlin-core/skills/domain/expo-native-ui/references/controls.md +266 -0
  276. package/.merlin-core/skills/domain/expo-native-ui/references/data-fetching.md +553 -0
  277. package/.merlin-core/skills/domain/expo-native-ui/references/deployment-stores.md +1353 -0
  278. package/.merlin-core/skills/domain/expo-native-ui/references/deployment.md +183 -0
  279. package/.merlin-core/skills/domain/expo-native-ui/references/dev-client.md +166 -0
  280. package/.merlin-core/skills/domain/expo-native-ui/references/dom-components.md +410 -0
  281. package/.merlin-core/skills/domain/expo-native-ui/references/form-sheet.md +253 -0
  282. package/.merlin-core/skills/domain/expo-native-ui/references/gradients.md +117 -0
  283. package/.merlin-core/skills/domain/expo-native-ui/references/icons.md +218 -0
  284. package/.merlin-core/skills/domain/expo-native-ui/references/media.md +245 -0
  285. package/.merlin-core/skills/domain/expo-native-ui/references/platform-native.md +75 -0
  286. package/.merlin-core/skills/domain/expo-native-ui/references/route-structure.md +229 -0
  287. package/.merlin-core/skills/domain/expo-native-ui/references/search.md +249 -0
  288. package/.merlin-core/skills/domain/expo-native-ui/references/storage.md +121 -0
  289. package/.merlin-core/skills/domain/expo-native-ui/references/tabs.md +433 -0
  290. package/.merlin-core/skills/domain/expo-native-ui/references/tailwind-native.md +473 -0
  291. package/.merlin-core/skills/domain/expo-native-ui/references/toolbar-and-headers.md +284 -0
  292. package/.merlin-core/skills/domain/expo-native-ui/references/upgrading-guides.md +674 -0
  293. package/.merlin-core/skills/domain/expo-native-ui/references/upgrading.md +127 -0
  294. package/.merlin-core/skills/domain/expo-native-ui/references/visual-effects.md +199 -0
  295. package/.merlin-core/skills/domain/expo-native-ui/references/webgpu-three.md +605 -0
  296. package/.merlin-core/skills/domain/expo-native-ui/references/zoom-transitions.md +161 -0
  297. package/.merlin-core/skills/domain/marketing-ops/SKILL.md +117 -0
  298. package/.merlin-core/skills/domain/marketing-ops/references/_index.md +78 -0
  299. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ad-creative/references/generative-tools.md +19 -0
  300. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ad-creative/references/platform-specs.md +19 -0
  301. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ad-creative.md +251 -0
  302. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ads/references/ad-copy-templates.md +19 -0
  303. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ads/references/audience-targeting.md +19 -0
  304. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ads/references/conversion-tracking.md +19 -0
  305. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ads/references/platform-setup-checklists.md +19 -0
  306. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ads.md +322 -0
  307. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ai-seo/references/content-patterns.md +19 -0
  308. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ai-seo/references/content-types.md +19 -0
  309. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ai-seo/references/platform-ranking-factors.md +19 -0
  310. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ai-seo.md +388 -0
  311. package/.merlin-core/skills/domain/marketing-ops/references/acquire/aso/references/apple-specs.md +19 -0
  312. package/.merlin-core/skills/domain/marketing-ops/references/acquire/aso/references/benchmarks.md +19 -0
  313. package/.merlin-core/skills/domain/marketing-ops/references/acquire/aso/references/google-play-specs.md +19 -0
  314. package/.merlin-core/skills/domain/marketing-ops/references/acquire/aso/references/report-template.md +19 -0
  315. package/.merlin-core/skills/domain/marketing-ops/references/acquire/aso/references/scoring-criteria.md +19 -0
  316. package/.merlin-core/skills/domain/marketing-ops/references/acquire/aso.md +316 -0
  317. package/.merlin-core/skills/domain/marketing-ops/references/acquire/co-marketing.md +305 -0
  318. package/.merlin-core/skills/domain/marketing-ops/references/acquire/community-marketing.md +169 -0
  319. package/.merlin-core/skills/domain/marketing-ops/references/acquire/competitor-profiling/references/templates.md +19 -0
  320. package/.merlin-core/skills/domain/marketing-ops/references/acquire/competitor-profiling/references/tool-reference.md +19 -0
  321. package/.merlin-core/skills/domain/marketing-ops/references/acquire/competitor-profiling.md +442 -0
  322. package/.merlin-core/skills/domain/marketing-ops/references/acquire/competitors/references/content-architecture.md +19 -0
  323. package/.merlin-core/skills/domain/marketing-ops/references/acquire/competitors/references/templates.md +19 -0
  324. package/.merlin-core/skills/domain/marketing-ops/references/acquire/competitors.md +281 -0
  325. package/.merlin-core/skills/domain/marketing-ops/references/acquire/content-strategy.md +16 -0
  326. package/.merlin-core/skills/domain/marketing-ops/references/acquire/directory-submissions/references/directory-list.md +19 -0
  327. package/.merlin-core/skills/domain/marketing-ops/references/acquire/directory-submissions/references/positioning-variations.md +19 -0
  328. package/.merlin-core/skills/domain/marketing-ops/references/acquire/directory-submissions/references/submission-tracker-template.md +19 -0
  329. package/.merlin-core/skills/domain/marketing-ops/references/acquire/directory-submissions.md +396 -0
  330. package/.merlin-core/skills/domain/marketing-ops/references/acquire/free-tools/references/tool-types.md +19 -0
  331. package/.merlin-core/skills/domain/marketing-ops/references/acquire/free-tools.md +196 -0
  332. package/.merlin-core/skills/domain/marketing-ops/references/acquire/image/references/ai-image-prompting.md +19 -0
  333. package/.merlin-core/skills/domain/marketing-ops/references/acquire/image.md +352 -0
  334. package/.merlin-core/skills/domain/marketing-ops/references/acquire/launch.md +18 -0
  335. package/.merlin-core/skills/domain/marketing-ops/references/acquire/lead-magnets/references/benchmarks.md +19 -0
  336. package/.merlin-core/skills/domain/marketing-ops/references/acquire/lead-magnets/references/format-guide.md +19 -0
  337. package/.merlin-core/skills/domain/marketing-ops/references/acquire/lead-magnets.md +333 -0
  338. package/.merlin-core/skills/domain/marketing-ops/references/acquire/programmatic-seo.md +16 -0
  339. package/.merlin-core/skills/domain/marketing-ops/references/acquire/schema.md +16 -0
  340. package/.merlin-core/skills/domain/marketing-ops/references/acquire/seo-audit/references/ai-writing-detection.md +19 -0
  341. package/.merlin-core/skills/domain/marketing-ops/references/acquire/seo-audit/references/international-seo.md +19 -0
  342. package/.merlin-core/skills/domain/marketing-ops/references/acquire/seo-audit.md +546 -0
  343. package/.merlin-core/skills/domain/marketing-ops/references/acquire/site-architecture/references/mermaid-templates.md +19 -0
  344. package/.merlin-core/skills/domain/marketing-ops/references/acquire/site-architecture/references/navigation-patterns.md +19 -0
  345. package/.merlin-core/skills/domain/marketing-ops/references/acquire/site-architecture/references/site-type-templates.md +19 -0
  346. package/.merlin-core/skills/domain/marketing-ops/references/acquire/site-architecture.md +371 -0
  347. package/.merlin-core/skills/domain/marketing-ops/references/acquire/social/references/platform-limits.md +19 -0
  348. package/.merlin-core/skills/domain/marketing-ops/references/acquire/social/references/platforms.md +19 -0
  349. package/.merlin-core/skills/domain/marketing-ops/references/acquire/social/references/post-templates.md +19 -0
  350. package/.merlin-core/skills/domain/marketing-ops/references/acquire/social/references/reverse-engineering.md +19 -0
  351. package/.merlin-core/skills/domain/marketing-ops/references/acquire/social/references/short-form-video.md +19 -0
  352. package/.merlin-core/skills/domain/marketing-ops/references/acquire/social.md +431 -0
  353. package/.merlin-core/skills/domain/marketing-ops/references/acquire/video/references/ai-video-prompting.md +19 -0
  354. package/.merlin-core/skills/domain/marketing-ops/references/acquire/video.md +353 -0
  355. package/.merlin-core/skills/domain/marketing-ops/references/activate/ab-testing/references/sample-size-guide.md +19 -0
  356. package/.merlin-core/skills/domain/marketing-ops/references/activate/ab-testing/references/test-templates.md +19 -0
  357. package/.merlin-core/skills/domain/marketing-ops/references/activate/ab-testing.md +379 -0
  358. package/.merlin-core/skills/domain/marketing-ops/references/activate/analytics/references/event-library.md +19 -0
  359. package/.merlin-core/skills/domain/marketing-ops/references/activate/analytics/references/ga4-implementation.md +19 -0
  360. package/.merlin-core/skills/domain/marketing-ops/references/activate/analytics/references/gtm-implementation.md +19 -0
  361. package/.merlin-core/skills/domain/marketing-ops/references/activate/analytics.md +323 -0
  362. package/.merlin-core/skills/domain/marketing-ops/references/activate/copy-editing.md +18 -0
  363. package/.merlin-core/skills/domain/marketing-ops/references/activate/copywriting.md +18 -0
  364. package/.merlin-core/skills/domain/marketing-ops/references/activate/cro/references/experiments.md +19 -0
  365. package/.merlin-core/skills/domain/marketing-ops/references/activate/cro/references/form.md +19 -0
  366. package/.merlin-core/skills/domain/marketing-ops/references/activate/cro.md +211 -0
  367. package/.merlin-core/skills/domain/marketing-ops/references/activate/emails.md +18 -0
  368. package/.merlin-core/skills/domain/marketing-ops/references/activate/paywalls/references/experiments.md +19 -0
  369. package/.merlin-core/skills/domain/marketing-ops/references/activate/paywalls.md +255 -0
  370. package/.merlin-core/skills/domain/marketing-ops/references/activate/popups.md +518 -0
  371. package/.merlin-core/skills/domain/marketing-ops/references/activate/pricing.md +18 -0
  372. package/.merlin-core/skills/domain/marketing-ops/references/activate/sales-enablement/references/deck-frameworks.md +19 -0
  373. package/.merlin-core/skills/domain/marketing-ops/references/activate/sales-enablement/references/demo-scripts.md +19 -0
  374. package/.merlin-core/skills/domain/marketing-ops/references/activate/sales-enablement/references/objection-library.md +19 -0
  375. package/.merlin-core/skills/domain/marketing-ops/references/activate/sales-enablement/references/one-pager-templates.md +19 -0
  376. package/.merlin-core/skills/domain/marketing-ops/references/activate/sales-enablement.md +371 -0
  377. package/.merlin-core/skills/domain/marketing-ops/references/activate/signup.md +406 -0
  378. package/.merlin-core/skills/domain/marketing-ops/references/expand/co-marketing.md +18 -0
  379. package/.merlin-core/skills/domain/marketing-ops/references/expand/community-marketing.md +18 -0
  380. package/.merlin-core/skills/domain/marketing-ops/references/expand/referrals/references/affiliate-programs.md +19 -0
  381. package/.merlin-core/skills/domain/marketing-ops/references/expand/referrals/references/program-examples.md +19 -0
  382. package/.merlin-core/skills/domain/marketing-ops/references/expand/referrals.md +278 -0
  383. package/.merlin-core/skills/domain/marketing-ops/references/foundation/customer-research/references/source-guides.md +425 -0
  384. package/.merlin-core/skills/domain/marketing-ops/references/foundation/customer-research.md +284 -0
  385. package/.merlin-core/skills/domain/marketing-ops/references/foundation/marketing-ideas/references/ideas-by-category.md +216 -0
  386. package/.merlin-core/skills/domain/marketing-ops/references/foundation/marketing-ideas.md +188 -0
  387. package/.merlin-core/skills/domain/marketing-ops/references/foundation/marketing-psychology.md +532 -0
  388. package/.merlin-core/skills/domain/marketing-ops/references/foundation/product-marketing.md +276 -0
  389. package/.merlin-core/skills/domain/marketing-ops/references/retain/churn-prevention/references/cancel-flow-patterns.md +19 -0
  390. package/.merlin-core/skills/domain/marketing-ops/references/retain/churn-prevention/references/dunning-playbook.md +19 -0
  391. package/.merlin-core/skills/domain/marketing-ops/references/retain/churn-prevention.md +442 -0
  392. package/.merlin-core/skills/domain/marketing-ops/references/retain/onboarding/references/experiments.md +19 -0
  393. package/.merlin-core/skills/domain/marketing-ops/references/retain/onboarding.md +243 -0
  394. package/.merlin-core/skills/domain/marketing-ops/references/retain/revops-lifecycle.md +18 -0
  395. package/.merlin-core/skills/domain/marketing-ops/references/retain/revops-operations.md +18 -0
  396. package/.merlin-core/skills/domain/n8n-automation/SKILL.md +149 -0
  397. package/.merlin-core/skills/domain/n8n-automation/references/code-javascript.md +3744 -0
  398. package/.merlin-core/skills/domain/n8n-automation/references/code-python.md +3293 -0
  399. package/.merlin-core/skills/domain/n8n-automation/references/expression-syntax.md +1662 -0
  400. package/.merlin-core/skills/domain/n8n-automation/references/mcp-tools-expert.md +2111 -0
  401. package/.merlin-core/skills/domain/n8n-automation/references/node-configuration.md +2523 -0
  402. package/.merlin-core/skills/domain/n8n-automation/references/validation-expert.md +2491 -0
  403. package/.merlin-core/skills/domain/n8n-automation/references/workflow-patterns.md +4624 -0
  404. package/.merlin-core/skills/domain/ops-manual/SKILL.md +225 -0
  405. package/.merlin-core/skills/domain/ops-manual/references/elicitation-questions.md +141 -0
  406. package/.merlin-core/skills/domain/ops-manual/references/external-skills-registry.md +63 -0
  407. package/.merlin-core/skills/domain/ops-manual/references/operations-template.yaml +132 -0
  408. package/.merlin-core/skills/domain/remotion-best-practices/SKILL.md +99 -0
  409. package/.merlin-core/skills/domain/remotion-best-practices/rules/3d.md +86 -0
  410. package/.merlin-core/skills/domain/remotion-best-practices/rules/animations.md +27 -0
  411. package/.merlin-core/skills/domain/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
  412. package/.merlin-core/skills/domain/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
  413. package/.merlin-core/skills/domain/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +108 -0
  414. package/.merlin-core/skills/domain/remotion-best-practices/rules/assets.md +78 -0
  415. package/.merlin-core/skills/domain/remotion-best-practices/rules/audio.md +172 -0
  416. package/.merlin-core/skills/domain/remotion-best-practices/rules/calculate-metadata.md +131 -0
  417. package/.merlin-core/skills/domain/remotion-best-practices/rules/can-decode.md +75 -0
  418. package/.merlin-core/skills/domain/remotion-best-practices/rules/charts.md +68 -0
  419. package/.merlin-core/skills/domain/remotion-best-practices/rules/compositions.md +154 -0
  420. package/.merlin-core/skills/domain/remotion-best-practices/rules/display-captions.md +126 -0
  421. package/.merlin-core/skills/domain/remotion-best-practices/rules/extract-frames.md +229 -0
  422. package/.merlin-core/skills/domain/remotion-best-practices/rules/fonts.md +152 -0
  423. package/.merlin-core/skills/domain/remotion-best-practices/rules/get-audio-duration.md +58 -0
  424. package/.merlin-core/skills/domain/remotion-best-practices/rules/get-video-dimensions.md +68 -0
  425. package/.merlin-core/skills/domain/remotion-best-practices/rules/get-video-duration.md +58 -0
  426. package/.merlin-core/skills/domain/remotion-best-practices/rules/gifs.md +144 -0
  427. package/.merlin-core/skills/domain/remotion-best-practices/rules/images.md +134 -0
  428. package/.merlin-core/skills/domain/remotion-best-practices/rules/import-srt-captions.md +67 -0
  429. package/.merlin-core/skills/domain/remotion-best-practices/rules/lottie.md +70 -0
  430. package/.merlin-core/skills/domain/remotion-best-practices/rules/maps.md +414 -0
  431. package/.merlin-core/skills/domain/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
  432. package/.merlin-core/skills/domain/remotion-best-practices/rules/measuring-text.md +143 -0
  433. package/.merlin-core/skills/domain/remotion-best-practices/rules/parameters.md +109 -0
  434. package/.merlin-core/skills/domain/remotion-best-practices/rules/sequencing.md +118 -0
  435. package/.merlin-core/skills/domain/remotion-best-practices/rules/tailwind.md +11 -0
  436. package/.merlin-core/skills/domain/remotion-best-practices/rules/text-animations.md +20 -0
  437. package/.merlin-core/skills/domain/remotion-best-practices/rules/timing.md +179 -0
  438. package/.merlin-core/skills/domain/remotion-best-practices/rules/transcribe-captions.md +19 -0
  439. package/.merlin-core/skills/domain/remotion-best-practices/rules/transitions.md +137 -0
  440. package/.merlin-core/skills/domain/remotion-best-practices/rules/transparent-videos.md +106 -0
  441. package/.merlin-core/skills/domain/remotion-best-practices/rules/trimming.md +51 -0
  442. package/.merlin-core/skills/domain/remotion-best-practices/rules/videos.md +171 -0
  443. package/.merlin-core/skills/domain/resend-email/SKILL.md +377 -0
  444. package/.merlin-core/skills/general/adversarial-review/SKILL.md +144 -0
  445. package/.merlin-core/skills/general/api-design/SKILL.md +513 -0
  446. package/.merlin-core/skills/general/apify-scrape/SKILL.md +137 -0
  447. package/.merlin-core/skills/general/apify-scrape/scripts/apify-scrape.sh +68 -0
  448. package/.merlin-core/skills/general/backup/SKILL.md +87 -0
  449. package/.merlin-core/skills/general/blkskrn/SKILL.md +392 -0
  450. package/.merlin-core/skills/general/blkskrn/references/animation-patterns.md +521 -0
  451. package/.merlin-core/skills/general/blkskrn/references/design-system.md +637 -0
  452. package/.merlin-core/skills/general/blkskrn/references/html-templates.md +440 -0
  453. package/.merlin-core/skills/general/blkskrn/references/presenter-template.md +45 -0
  454. package/.merlin-core/skills/general/blkskrn/references/slide-types.md +424 -0
  455. package/.merlin-core/skills/general/blkskrn/scripts/canvas-manager.js +502 -0
  456. package/.merlin-core/skills/general/blkskrn/scripts/presenter.js +90 -0
  457. package/.merlin-core/skills/general/blkskrn/templates/presenter.html +273 -0
  458. package/.merlin-core/skills/general/blkskrn/templates/slide-base.html +277 -0
  459. package/.merlin-core/skills/general/blkskrn/templates/viewer.html +165 -0
  460. package/.merlin-core/skills/general/browser-takeover/SKILL.md +53 -0
  461. package/.merlin-core/skills/general/claude-api/SKILL.md +90 -0
  462. package/.merlin-core/skills/general/code-javascript/SKILL.md +268 -0
  463. package/.merlin-core/skills/general/code-python/SKILL.md +424 -0
  464. package/.merlin-core/skills/general/code-style/SKILL.md +97 -0
  465. package/.merlin-core/skills/general/code-typescript/SKILL.md +361 -0
  466. package/.merlin-core/skills/general/cold-email/SKILL.md +164 -0
  467. package/.merlin-core/skills/general/cold-email/references/benchmarks.md +18 -0
  468. package/.merlin-core/skills/general/cold-email/references/follow-up-sequences.md +18 -0
  469. package/.merlin-core/skills/general/cold-email/references/frameworks.md +18 -0
  470. package/.merlin-core/skills/general/cold-email/references/personalization.md +18 -0
  471. package/.merlin-core/skills/general/cold-email/references/subject-lines.md +18 -0
  472. package/.merlin-core/skills/general/container-security/SKILL.md +462 -0
  473. package/.merlin-core/skills/general/context-management/SKILL.md +79 -0
  474. package/.merlin-core/skills/general/copy-editing/SKILL.md +501 -0
  475. package/.merlin-core/skills/general/copy-editing/references/checklist.md +18 -0
  476. package/.merlin-core/skills/general/copy-editing/references/content-refresh.md +18 -0
  477. package/.merlin-core/skills/general/copy-editing/references/plain-english-alternatives.md +18 -0
  478. package/.merlin-core/skills/general/copywriting/SKILL.md +294 -0
  479. package/.merlin-core/skills/general/copywriting/references/copy-frameworks.md +392 -0
  480. package/.merlin-core/skills/general/copywriting/references/natural-transitions.md +276 -0
  481. package/.merlin-core/skills/general/database/SKILL.md +561 -0
  482. package/.merlin-core/skills/general/database/references/postgres-concurrency.md +182 -0
  483. package/.merlin-core/skills/general/database/references/postgres-connections.md +97 -0
  484. package/.merlin-core/skills/general/database/references/postgres-data-patterns.md +159 -0
  485. package/.merlin-core/skills/general/database/references/postgres-monitoring.md +136 -0
  486. package/.merlin-core/skills/general/database/references/postgres-rls.md +140 -0
  487. package/.merlin-core/skills/general/database-provision/SKILL.md +56 -0
  488. package/.merlin-core/skills/general/deploy/SKILL.md +65 -0
  489. package/.merlin-core/skills/general/design-inspiration/SKILL.md +146 -0
  490. package/.merlin-core/skills/general/design-palette/SKILL.md +99 -0
  491. package/.merlin-core/skills/general/design-palette/references/full-palettes.md +144 -0
  492. package/.merlin-core/skills/general/design-system/SKILL.md +94 -0
  493. package/.merlin-core/skills/general/design-typography/SKILL.md +115 -0
  494. package/.merlin-core/skills/general/design-typography/references/full-pairings.md +144 -0
  495. package/.merlin-core/skills/general/design-ux-patterns/SKILL.md +155 -0
  496. package/.merlin-core/skills/general/design-ux-patterns/references/charts-data-guidelines.md +197 -0
  497. package/.merlin-core/skills/general/design-ux-patterns/references/landing-patterns.md +199 -0
  498. package/.merlin-core/skills/general/design-ux-patterns/references/professional-ui-checklist.md +56 -0
  499. package/.merlin-core/skills/general/design-ux-patterns/references/style-catalog.md +89 -0
  500. package/.merlin-core/skills/general/design-ux-patterns/references/ux-guidelines.md +837 -0
  501. package/.merlin-core/skills/general/discover-cloud/SKILL.md +108 -0
  502. package/.merlin-core/skills/general/doc-sync/SKILL.md +52 -0
  503. package/.merlin-core/skills/general/document-sharding/SKILL.md +53 -0
  504. package/.merlin-core/skills/general/docx/SKILL.md +418 -0
  505. package/.merlin-core/skills/general/docx/references/windows-setup.md +27 -0
  506. package/.merlin-core/skills/general/docx/scripts/__init__.py +1 -0
  507. package/.merlin-core/skills/general/docx/scripts/accept_changes.py +135 -0
  508. package/.merlin-core/skills/general/docx/scripts/comment.py +318 -0
  509. package/.merlin-core/skills/general/docx/scripts/office/__init__.py +0 -0
  510. package/.merlin-core/skills/general/docx/scripts/office/helpers/__init__.py +0 -0
  511. package/.merlin-core/skills/general/docx/scripts/office/helpers/merge_runs.py +199 -0
  512. package/.merlin-core/skills/general/docx/scripts/office/helpers/simplify_redlines.py +197 -0
  513. package/.merlin-core/skills/general/docx/scripts/office/pack.py +159 -0
  514. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  515. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  516. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  517. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  518. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  519. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  520. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  521. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  522. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  523. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  524. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  525. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  526. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  527. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  528. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  529. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  530. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  531. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  532. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  533. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  534. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  535. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  536. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  537. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  538. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  539. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  540. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  541. package/.merlin-core/skills/general/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  542. package/.merlin-core/skills/general/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  543. package/.merlin-core/skills/general/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  544. package/.merlin-core/skills/general/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  545. package/.merlin-core/skills/general/docx/scripts/office/schemas/mce/mc.xsd +75 -0
  546. package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  547. package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  548. package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  549. package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  550. package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  551. package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  552. package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  553. package/.merlin-core/skills/general/docx/scripts/office/soffice.py +183 -0
  554. package/.merlin-core/skills/general/docx/scripts/office/unpack.py +132 -0
  555. package/.merlin-core/skills/general/docx/scripts/office/validate.py +111 -0
  556. package/.merlin-core/skills/general/docx/scripts/office/validators/__init__.py +15 -0
  557. package/.merlin-core/skills/general/docx/scripts/office/validators/base.py +847 -0
  558. package/.merlin-core/skills/general/docx/scripts/office/validators/docx.py +446 -0
  559. package/.merlin-core/skills/general/docx/scripts/office/validators/pptx.py +275 -0
  560. package/.merlin-core/skills/general/docx/scripts/office/validators/redlining.py +247 -0
  561. package/.merlin-core/skills/general/docx/scripts/templates/comments.xml +3 -0
  562. package/.merlin-core/skills/general/docx/scripts/templates/commentsExtended.xml +3 -0
  563. package/.merlin-core/skills/general/docx/scripts/templates/commentsExtensible.xml +3 -0
  564. package/.merlin-core/skills/general/docx/scripts/templates/commentsIds.xml +3 -0
  565. package/.merlin-core/skills/general/docx/scripts/templates/people.xml +3 -0
  566. package/.merlin-core/skills/general/elicitation/SKILL.md +188 -0
  567. package/.merlin-core/skills/general/engineering-audit/SKILL.md +122 -0
  568. package/.merlin-core/skills/general/find-and-edit/SKILL.md +102 -0
  569. package/.merlin-core/skills/general/first-party-docs/SKILL.md +51 -0
  570. package/.merlin-core/skills/general/frontend-design/SKILL.md +204 -0
  571. package/.merlin-core/skills/general/guardrails/SKILL.md +144 -0
  572. package/.merlin-core/skills/general/image-gen/SKILL.md +49 -0
  573. package/.merlin-core/skills/general/learning-capture/SKILL.md +192 -0
  574. package/.merlin-core/skills/general/lgpd-compliance-audit/SKILL.md +448 -0
  575. package/.merlin-core/skills/general/load-testing/SKILL.md +114 -0
  576. package/.merlin-core/skills/general/load-testing/docker/Dockerfile.dashboard +21 -0
  577. package/.merlin-core/skills/general/load-testing/docker/docker-compose.locust.yml +39 -0
  578. package/.merlin-core/skills/general/load-testing/requirements.txt +1 -0
  579. package/.merlin-core/skills/general/load-testing/scripts/compare_baseline.py +172 -0
  580. package/.merlin-core/skills/general/load-testing/scripts/run_local.py +245 -0
  581. package/.merlin-core/skills/general/load-testing/templates/load_shape_stepped.py +35 -0
  582. package/.merlin-core/skills/general/load-testing/templates/locustfile_dashboard.py +47 -0
  583. package/.merlin-core/skills/general/load-testing/templates/threshold_hook.py +36 -0
  584. package/.merlin-core/skills/general/mage-beauty/SKILL.md +89 -0
  585. package/.merlin-core/skills/general/mage-beauty/references/anti-patterns.md +148 -0
  586. package/.merlin-core/skills/general/mage-beauty/references/color-and-contrast.md +87 -0
  587. package/.merlin-core/skills/general/mage-beauty/references/interaction-design.md +99 -0
  588. package/.merlin-core/skills/general/mage-beauty/references/motion-design.md +90 -0
  589. package/.merlin-core/skills/general/mage-beauty/references/remotion-bridge.md +187 -0
  590. package/.merlin-core/skills/general/mage-beauty/references/responsive-and-multi-format.md +98 -0
  591. package/.merlin-core/skills/general/mage-beauty/references/spatial-design.md +88 -0
  592. package/.merlin-core/skills/general/mage-beauty/references/typography.md +60 -0
  593. package/.merlin-core/skills/general/mage-beauty/references/verb-adapt.md +102 -0
  594. package/.merlin-core/skills/general/mage-beauty/references/verb-animate.md +97 -0
  595. package/.merlin-core/skills/general/mage-beauty/references/verb-audit.md +99 -0
  596. package/.merlin-core/skills/general/mage-beauty/references/verb-bolder.md +94 -0
  597. package/.merlin-core/skills/general/mage-beauty/references/verb-cinematic.md +128 -0
  598. package/.merlin-core/skills/general/mage-beauty/references/verb-clarify.md +107 -0
  599. package/.merlin-core/skills/general/mage-beauty/references/verb-colorize.md +106 -0
  600. package/.merlin-core/skills/general/mage-beauty/references/verb-critique.md +88 -0
  601. package/.merlin-core/skills/general/mage-beauty/references/verb-delight.md +98 -0
  602. package/.merlin-core/skills/general/mage-beauty/references/verb-distill.md +97 -0
  603. package/.merlin-core/skills/general/mage-beauty/references/verb-harden.md +79 -0
  604. package/.merlin-core/skills/general/mage-beauty/references/verb-layout.md +104 -0
  605. package/.merlin-core/skills/general/mage-beauty/references/verb-onboard.md +98 -0
  606. package/.merlin-core/skills/general/mage-beauty/references/verb-optimize.md +124 -0
  607. package/.merlin-core/skills/general/mage-beauty/references/verb-overdrive.md +105 -0
  608. package/.merlin-core/skills/general/mage-beauty/references/verb-polish.md +91 -0
  609. package/.merlin-core/skills/general/mage-beauty/references/verb-quieter.md +95 -0
  610. package/.merlin-core/skills/general/mage-beauty/references/verb-rebrand.md +127 -0
  611. package/.merlin-core/skills/general/mage-beauty/references/verb-shape.md +160 -0
  612. package/.merlin-core/skills/general/mage-beauty/references/verb-typeset.md +109 -0
  613. package/.merlin-core/skills/general/mage-beauty/references/voice-and-microcopy.md +137 -0
  614. package/.merlin-core/skills/general/mcp-builder/SKILL.md +92 -0
  615. package/.merlin-core/skills/general/network-debug/SKILL.md +51 -0
  616. package/.merlin-core/skills/general/next-best-practices/SKILL.md +177 -0
  617. package/.merlin-core/skills/general/next-best-practices/references/async-patterns.md +87 -0
  618. package/.merlin-core/skills/general/next-best-practices/references/bundling.md +182 -0
  619. package/.merlin-core/skills/general/next-best-practices/references/data-patterns.md +306 -0
  620. package/.merlin-core/skills/general/next-best-practices/references/debug-tricks.md +125 -0
  621. package/.merlin-core/skills/general/next-best-practices/references/directives.md +74 -0
  622. package/.merlin-core/skills/general/next-best-practices/references/error-handling.md +232 -0
  623. package/.merlin-core/skills/general/next-best-practices/references/file-conventions.md +141 -0
  624. package/.merlin-core/skills/general/next-best-practices/references/font.md +257 -0
  625. package/.merlin-core/skills/general/next-best-practices/references/functions.md +108 -0
  626. package/.merlin-core/skills/general/next-best-practices/references/hydration-error.md +88 -0
  627. package/.merlin-core/skills/general/next-best-practices/references/image.md +179 -0
  628. package/.merlin-core/skills/general/next-best-practices/references/metadata.md +296 -0
  629. package/.merlin-core/skills/general/next-best-practices/references/parallel-routes.md +298 -0
  630. package/.merlin-core/skills/general/next-best-practices/references/route-handlers.md +146 -0
  631. package/.merlin-core/skills/general/next-best-practices/references/rsc-boundaries.md +164 -0
  632. package/.merlin-core/skills/general/next-best-practices/references/runtime-selection.md +40 -0
  633. package/.merlin-core/skills/general/next-best-practices/references/scripts.md +141 -0
  634. package/.merlin-core/skills/general/next-best-practices/references/self-hosting.md +384 -0
  635. package/.merlin-core/skills/general/next-best-practices/references/suspense-boundaries.md +67 -0
  636. package/.merlin-core/skills/general/next-steps/SKILL.md +43 -0
  637. package/.merlin-core/skills/general/party-mode/SKILL.md +57 -0
  638. package/.merlin-core/skills/general/pdf/SKILL.md +298 -0
  639. package/.merlin-core/skills/general/pdf/references/forms.md +312 -0
  640. package/.merlin-core/skills/general/pdf/references/reference.md +640 -0
  641. package/.merlin-core/skills/general/pdf/references/windows-setup.md +40 -0
  642. package/.merlin-core/skills/general/pdf/scripts/check_bounding_boxes.py +65 -0
  643. package/.merlin-core/skills/general/pdf/scripts/check_fillable_fields.py +11 -0
  644. package/.merlin-core/skills/general/pdf/scripts/convert_pdf_to_images.py +33 -0
  645. package/.merlin-core/skills/general/pdf/scripts/create_validation_image.py +37 -0
  646. package/.merlin-core/skills/general/pdf/scripts/extract_form_field_info.py +122 -0
  647. package/.merlin-core/skills/general/pdf/scripts/extract_form_structure.py +115 -0
  648. package/.merlin-core/skills/general/pdf/scripts/fill_fillable_fields.py +98 -0
  649. package/.merlin-core/skills/general/pdf/scripts/fill_pdf_form_with_annotations.py +107 -0
  650. package/.merlin-core/skills/general/pptx/SKILL.md +133 -0
  651. package/.merlin-core/skills/general/pptx/references/editing.md +213 -0
  652. package/.merlin-core/skills/general/pptx/references/pptxgenjs.md +581 -0
  653. package/.merlin-core/skills/general/pptx/references/windows-setup.md +27 -0
  654. package/.merlin-core/skills/general/pptx/scripts/__init__.py +0 -0
  655. package/.merlin-core/skills/general/pptx/scripts/add_slide.py +195 -0
  656. package/.merlin-core/skills/general/pptx/scripts/clean.py +286 -0
  657. package/.merlin-core/skills/general/pptx/scripts/thumbnail.py +289 -0
  658. package/.merlin-core/skills/general/property-testing/SKILL.md +214 -0
  659. package/.merlin-core/skills/general/purge-leaked-secret/SKILL.md +383 -0
  660. package/.merlin-core/skills/general/reflection/SKILL.md +100 -0
  661. package/.merlin-core/skills/general/secret-safe-commit/SKILL.md +246 -0
  662. package/.merlin-core/skills/general/secret-safe-commit/templates/.gitleaks.toml +91 -0
  663. package/.merlin-core/skills/general/secret-safe-commit/templates/.pre-commit-config.yaml +57 -0
  664. package/.merlin-core/skills/general/secret-safe-commit/templates/secret-scan.yml +48 -0
  665. package/.merlin-core/skills/general/semantic-search/SKILL.md +79 -0
  666. package/.merlin-core/skills/general/skill-creator/SKILL.md +342 -0
  667. package/.merlin-core/skills/general/skill-creator/agents/analyzer.md +283 -0
  668. package/.merlin-core/skills/general/skill-creator/agents/comparator.md +211 -0
  669. package/.merlin-core/skills/general/skill-creator/agents/grader.md +227 -0
  670. package/.merlin-core/skills/general/skill-creator/assets/eval_review.html +146 -0
  671. package/.merlin-core/skills/general/skill-creator/eval-viewer/generate_review.py +471 -0
  672. package/.merlin-core/skills/general/skill-creator/eval-viewer/viewer.html +1325 -0
  673. package/.merlin-core/skills/general/skill-creator/references/schemas.md +439 -0
  674. package/.merlin-core/skills/general/skill-creator/scripts/__init__.py +0 -0
  675. package/.merlin-core/skills/general/skill-creator/scripts/aggregate_benchmark.py +401 -0
  676. package/.merlin-core/skills/general/skill-creator/scripts/generate_report.py +326 -0
  677. package/.merlin-core/skills/general/skill-creator/scripts/improve_description.py +247 -0
  678. package/.merlin-core/skills/general/skill-creator/scripts/package_skill.py +136 -0
  679. package/.merlin-core/skills/general/skill-creator/scripts/quick_validate.py +103 -0
  680. package/.merlin-core/skills/general/skill-creator/scripts/run_eval.py +310 -0
  681. package/.merlin-core/skills/general/skill-creator/scripts/run_loop.py +328 -0
  682. package/.merlin-core/skills/general/skill-creator/scripts/utils.py +47 -0
  683. package/.merlin-core/skills/general/start-here/SKILL.md +63 -0
  684. package/.merlin-core/skills/general/start-here/recipes.json +758 -0
  685. package/.merlin-core/skills/general/start-here/recipes.schema.json +57 -0
  686. package/.merlin-core/skills/general/static-analysis/SKILL.md +151 -0
  687. package/.merlin-core/skills/general/tailwind-design-system/SKILL.md +201 -0
  688. package/.merlin-core/skills/general/tailwind-design-system/references/advanced-v4.md +152 -0
  689. package/.merlin-core/skills/general/tailwind-design-system/references/component-patterns.md +353 -0
  690. package/.merlin-core/skills/general/teach-method/SKILL.md +86 -0
  691. package/.merlin-core/skills/general/team-execution/SKILL.md +67 -0
  692. package/.merlin-core/skills/general/testing/SKILL.md +412 -0
  693. package/.merlin-core/skills/general/token-economy/SKILL.md +55 -0
  694. package/.merlin-core/skills/general/vps-security-hardening/SKILL.md +406 -0
  695. package/.merlin-core/skills/general/web-quality/SKILL.md +180 -0
  696. package/.merlin-core/skills/general/webapp-testing/SKILL.md +153 -0
  697. package/.merlin-core/skills/general/webapp-testing/scripts/screenshot_compare.py +72 -0
  698. package/.merlin-core/skills/general/webapp-testing/scripts/with_server.py +103 -0
  699. package/.merlin-core/skills/general/xlsx/SKILL.md +167 -0
  700. package/.merlin-core/skills/general/xlsx/references/nodejs-sheetjs-styled-reports.md +141 -0
  701. package/.merlin-core/skills/general/xlsx/references/windows-setup.md +17 -0
  702. package/.merlin-core/skills/general/xlsx/scripts/recalc.py +184 -0
  703. package/.merlin-core/skills/general/xlsx/scripts/styled-report.js +130 -0
  704. package/.merlin-core/skills/general/yolo-mode/SKILL.md +60 -0
  705. package/.merlin-core/skills/general/youtube-transcript/SKILL.md +177 -0
  706. package/.merlin-core/skills/general/youtube-transcript/scripts/fetch_transcript.py +188 -0
  707. package/.merlin-core/skills/general/youtube-transcript/scripts/gladia_transcribe.mjs +230 -0
  708. package/.merlin-core/tools/commands/activate.js +72 -0
  709. package/.merlin-core/tools/commands/archive-thoughts.js +181 -0
  710. package/.merlin-core/tools/commands/backup.js +156 -0
  711. package/.merlin-core/tools/commands/certify-process.js +196 -0
  712. package/.merlin-core/tools/commands/convert.js +87 -0
  713. package/.merlin-core/tools/commands/cron.js +147 -0
  714. package/.merlin-core/tools/commands/disable.js +73 -0
  715. package/.merlin-core/tools/commands/doc-sync.js +127 -0
  716. package/.merlin-core/tools/commands/eval-skill.js +193 -0
  717. package/.merlin-core/tools/commands/frontmatter.js +49 -0
  718. package/.merlin-core/tools/commands/heartbeat.js +43 -0
  719. package/.merlin-core/tools/commands/index-thoughts.js +35 -0
  720. package/.merlin-core/tools/commands/install-remote-approve.js +184 -0
  721. package/.merlin-core/tools/commands/install.js +81 -0
  722. package/.merlin-core/tools/commands/lib/__verify__/diff-reports.js +170 -0
  723. package/.merlin-core/tools/commands/lib/fs-safe.js +186 -0
  724. package/.merlin-core/tools/commands/lib/preflight.js +607 -0
  725. package/.merlin-core/tools/commands/lib/preserve.js +232 -0
  726. package/.merlin-core/tools/commands/lib/project-config.template.yaml +69 -0
  727. package/.merlin-core/tools/commands/lib/report.js +231 -0
  728. package/.merlin-core/tools/commands/lib/settings-merge.js +134 -0
  729. package/.merlin-core/tools/commands/license.js +52 -0
  730. package/.merlin-core/tools/commands/list.js +125 -0
  731. package/.merlin-core/tools/commands/migrate-alkimia.js +271 -0
  732. package/.merlin-core/tools/commands/modules.js +68 -0
  733. package/.merlin-core/tools/commands/provision.js +83 -0
  734. package/.merlin-core/tools/commands/prune-feedback.js +114 -0
  735. package/.merlin-core/tools/commands/run-process.js +28 -0
  736. package/.merlin-core/tools/commands/state.js +79 -0
  737. package/.merlin-core/tools/commands/sync-bridges.js +197 -0
  738. package/.merlin-core/tools/commands/upgrade.js +1135 -0
  739. package/.merlin-core/tools/commands/validate-recipes.js +218 -0
  740. package/.merlin-core/tools/commands/validate.js +159 -0
  741. package/.merlin-core/tools/commands/yolo.js +82 -0
  742. package/.merlin-core/tools/compose-rules.mjs +179 -0
  743. package/.merlin-core/tools/disable-module.mjs +150 -0
  744. package/.merlin-core/tools/lib/deployer.mjs +131 -0
  745. package/.merlin-core/tools/lib/modules-activation.mjs +225 -0
  746. package/.merlin-core/tools/merlin-tools.js +153 -0
  747. package/.merlin-core/tools/migrate-frontmatter-v3.js +192 -0
  748. package/.merlin-core/tools/modules-catalog.mjs +174 -0
  749. package/.merlin-core/tools/provision-module.mjs +191 -0
  750. package/.merlin-core/tools/verify-module.mjs +99 -0
  751. package/.merlin-core/tools/vps-security-audit.sh +234 -0
  752. package/INSTALL.md +312 -0
  753. package/LICENSE +118 -0
  754. package/PRIVACY-LICENSING.md +65 -0
  755. package/README.md +391 -0
  756. package/bin/README.md +15 -0
  757. package/bin/convert-to-merlin.sh +109 -0
  758. package/bin/fleet-patch-hooks.sh +144 -0
  759. package/bin/fleet-patch-v3-fixes.sh +127 -0
  760. package/bin/merlin-init.js +232 -0
  761. package/bin/merlin.js +321 -0
  762. package/package.json +127 -0
@@ -0,0 +1,1662 @@
1
+ <!-- Adapted from czlonkowski/n8n-skills (MIT). Source files: SKILL.md, COMMON_MISTAKES.md, EXAMPLES.md -->
2
+
3
+ # n8n Expression Syntax
4
+
5
+ Expert guide for writing correct n8n expressions in workflows.
6
+
7
+ > **Cross-references:**
8
+ >
9
+ > - For Code node JavaScript (which does NOT use expressions), see [code-javascript.md](code-javascript.md)
10
+ > - For expression usage in real workflow patterns, see [workflow-patterns.md](workflow-patterns.md)
11
+
12
+ ---
13
+
14
+ ## Expression Format
15
+
16
+ All dynamic content in n8n uses **double curly braces**:
17
+
18
+ ```
19
+ {{expression}}
20
+ ```
21
+
22
+ **Examples**:
23
+
24
+ ```
25
+ ✅ {{$json.email}}
26
+ ✅ {{$json.body.name}}
27
+ ✅ {{$node["HTTP Request"].json.data}}
28
+ ❌ $json.email (no braces - treated as literal text)
29
+ ❌ {$json.email} (single braces - invalid)
30
+ ```
31
+
32
+ ---
33
+
34
+ ## Core Variables
35
+
36
+ ### $json - Current Node Output
37
+
38
+ Access data from the current node:
39
+
40
+ ```javascript
41
+ {
42
+ {
43
+ $json.fieldName;
44
+ }
45
+ }
46
+ {
47
+ {
48
+ $json["field with spaces"];
49
+ }
50
+ }
51
+ {
52
+ {
53
+ $json.nested.property;
54
+ }
55
+ }
56
+ {
57
+ {
58
+ $json.items[0].name;
59
+ }
60
+ }
61
+ ```
62
+
63
+ ### $node - Reference Other Nodes
64
+
65
+ Access data from any previous node:
66
+
67
+ ```javascript
68
+ {
69
+ {
70
+ $node["Node Name"].json.fieldName;
71
+ }
72
+ }
73
+ {
74
+ {
75
+ $node["HTTP Request"].json.data;
76
+ }
77
+ }
78
+ {
79
+ {
80
+ $node["Webhook"].json.body.email;
81
+ }
82
+ }
83
+ ```
84
+
85
+ **Important**:
86
+
87
+ - Node names **must** be in quotes
88
+ - Node names are **case-sensitive**
89
+ - Must match exact node name from workflow
90
+
91
+ ### $now - Current Timestamp
92
+
93
+ Access current date/time:
94
+
95
+ ```javascript
96
+ {
97
+ {
98
+ $now;
99
+ }
100
+ }
101
+ {
102
+ {
103
+ $now.toFormat("yyyy-MM-dd");
104
+ }
105
+ }
106
+ {
107
+ {
108
+ $now.toFormat("HH:mm:ss");
109
+ }
110
+ }
111
+ {
112
+ {
113
+ $now.plus({ days: 7 });
114
+ }
115
+ }
116
+ ```
117
+
118
+ ### $env - Environment Variables
119
+
120
+ Access environment variables:
121
+
122
+ ```javascript
123
+ {
124
+ {
125
+ $env.API_KEY;
126
+ }
127
+ }
128
+ {
129
+ {
130
+ $env.DATABASE_URL;
131
+ }
132
+ }
133
+ ```
134
+
135
+ ---
136
+
137
+ ## CRITICAL: Webhook Data Structure
138
+
139
+ **Most Common Mistake**: Webhook data is **NOT** at the root!
140
+
141
+ ### Webhook Node Output Structure
142
+
143
+ ```javascript
144
+ {
145
+ "headers": {...},
146
+ "params": {...},
147
+ "query": {...},
148
+ "body": { // USER DATA IS HERE!
149
+ "name": "John",
150
+ "email": "john@example.com",
151
+ "message": "Hello"
152
+ }
153
+ }
154
+ ```
155
+
156
+ ### Correct Webhook Data Access
157
+
158
+ ```javascript
159
+ ❌ WRONG: {{$json.name}}
160
+ ❌ WRONG: {{$json.email}}
161
+
162
+ ✅ CORRECT: {{$json.body.name}}
163
+ ✅ CORRECT: {{$json.body.email}}
164
+ ✅ CORRECT: {{$json.body.message}}
165
+ ```
166
+
167
+ **Why**: Webhook node wraps incoming data under `.body` property to preserve headers, params, and query parameters.
168
+
169
+ ---
170
+
171
+ ## Common Patterns
172
+
173
+ ### Access Nested Fields
174
+
175
+ ```javascript
176
+ // Simple nesting
177
+ {
178
+ {
179
+ $json.user.email;
180
+ }
181
+ }
182
+
183
+ // Array access
184
+ {
185
+ {
186
+ $json.data[0].name;
187
+ }
188
+ }
189
+ {
190
+ {
191
+ $json.items[0].id;
192
+ }
193
+ }
194
+
195
+ // Bracket notation for spaces
196
+ {
197
+ {
198
+ $json["field name"];
199
+ }
200
+ }
201
+ {
202
+ {
203
+ $json["user data"]["first name"];
204
+ }
205
+ }
206
+ ```
207
+
208
+ ### Reference Other Nodes
209
+
210
+ ```javascript
211
+ // Node without spaces
212
+ {
213
+ {
214
+ $node["Set"].json.value;
215
+ }
216
+ }
217
+
218
+ // Node with spaces (common!)
219
+ {
220
+ {
221
+ $node["HTTP Request"].json.data;
222
+ }
223
+ }
224
+ {
225
+ {
226
+ $node["Respond to Webhook"].json.message;
227
+ }
228
+ }
229
+
230
+ // Webhook node
231
+ {
232
+ {
233
+ $node["Webhook"].json.body.email;
234
+ }
235
+ }
236
+ ```
237
+
238
+ ### Combine Variables
239
+
240
+ ```javascript
241
+ // Concatenation (automatic)
242
+ Hello {{$json.body.name}}!
243
+
244
+ // In URLs
245
+ https://api.example.com/users/{{$json.body.user_id}}
246
+
247
+ // In object properties
248
+ {
249
+ "name": "={{$json.body.name}}",
250
+ "email": "={{$json.body.email}}"
251
+ }
252
+ ```
253
+
254
+ ---
255
+
256
+ ## When NOT to Use Expressions
257
+
258
+ ### Code Nodes
259
+
260
+ Code nodes use **direct JavaScript access**, NOT expressions!
261
+
262
+ > See [code-javascript.md](code-javascript.md) for the full Code node reference.
263
+
264
+ ```javascript
265
+ // ❌ WRONG in Code node
266
+ const email = "={{$json.email}}";
267
+ const name = "{{$json.body.name}}";
268
+
269
+ // ✅ CORRECT in Code node
270
+ const email = $json.email;
271
+ const name = $json.body.name;
272
+
273
+ // Or using Code node API
274
+ const email = $input.item.json.email;
275
+ const allItems = $input.all();
276
+ ```
277
+
278
+ ### Webhook Paths
279
+
280
+ ```javascript
281
+ // ❌ WRONG
282
+ path: "{{$json.user_id}}/webhook";
283
+
284
+ // ✅ CORRECT
285
+ path: "user-webhook"; // Static paths only
286
+ ```
287
+
288
+ ### Credential Fields
289
+
290
+ ```javascript
291
+ // ❌ WRONG
292
+ apiKey: "={{$env.API_KEY}}"
293
+
294
+ // ✅ CORRECT
295
+ Use n8n credential system, not expressions
296
+ ```
297
+
298
+ ---
299
+
300
+ ## Validation Rules
301
+
302
+ ### 1. Always Use {{}}
303
+
304
+ Expressions **must** be wrapped in double curly braces.
305
+
306
+ ```javascript
307
+ ❌ $json.field
308
+ ✅ {{$json.field}}
309
+ ```
310
+
311
+ ### 2. Use Quotes for Spaces
312
+
313
+ Field or node names with spaces require **bracket notation**:
314
+
315
+ ```javascript
316
+ ❌ {{$json.field name}}
317
+ ✅ {{$json['field name']}}
318
+
319
+ ❌ {{$node.HTTP Request.json}}
320
+ ✅ {{$node["HTTP Request"].json}}
321
+ ```
322
+
323
+ ### 3. Match Exact Node Names
324
+
325
+ Node references are **case-sensitive**:
326
+
327
+ ```javascript
328
+ ❌ {{$node["http request"].json}} // lowercase
329
+ ❌ {{$node["Http Request"].json}} // wrong case
330
+ ✅ {{$node["HTTP Request"].json}} // exact match
331
+ ```
332
+
333
+ ### 4. No Nested {{}}
334
+
335
+ Don't double-wrap expressions:
336
+
337
+ ```javascript
338
+ ❌ {{{$json.field}}}
339
+ ✅ {{$json.field}}
340
+ ```
341
+
342
+ ---
343
+
344
+ ## Data Type Handling
345
+
346
+ ### Arrays
347
+
348
+ ```javascript
349
+ // First item
350
+ {
351
+ {
352
+ $json.users[0].email;
353
+ }
354
+ }
355
+
356
+ // Array length
357
+ {
358
+ {
359
+ $json.users.length;
360
+ }
361
+ }
362
+
363
+ // Last item
364
+ {
365
+ {
366
+ $json.users[$json.users.length - 1].name;
367
+ }
368
+ }
369
+ ```
370
+
371
+ ### Objects
372
+
373
+ ```javascript
374
+ // Dot notation (no spaces)
375
+ {
376
+ {
377
+ $json.user.email;
378
+ }
379
+ }
380
+
381
+ // Bracket notation (with spaces or dynamic)
382
+ {
383
+ {
384
+ $json["user data"].email;
385
+ }
386
+ }
387
+ ```
388
+
389
+ ### Strings
390
+
391
+ ```javascript
392
+ // Concatenation (automatic)
393
+ Hello {{$json.name}}!
394
+
395
+ // String methods
396
+ {{$json.email.toLowerCase()}}
397
+ {{$json.name.toUpperCase()}}
398
+ ```
399
+
400
+ ### Numbers
401
+
402
+ ```javascript
403
+ // Direct use
404
+ {
405
+ {
406
+ $json.price;
407
+ }
408
+ }
409
+
410
+ // Math operations
411
+ {
412
+ {
413
+ $json.price * 1.1;
414
+ }
415
+ } // Add 10%
416
+ {
417
+ {
418
+ $json.quantity + 5;
419
+ }
420
+ }
421
+ ```
422
+
423
+ ---
424
+
425
+ ## Advanced Patterns
426
+
427
+ ### Conditional Content
428
+
429
+ ```javascript
430
+ // Ternary operator
431
+ {
432
+ {
433
+ $json.status === "active" ? "Active User" : "Inactive User";
434
+ }
435
+ }
436
+
437
+ // Default values
438
+ {
439
+ {
440
+ $json.email || "no-email@example.com";
441
+ }
442
+ }
443
+ ```
444
+
445
+ ### Date Manipulation
446
+
447
+ ```javascript
448
+ // Add days
449
+ {
450
+ {
451
+ $now.plus({ days: 7 }).toFormat("yyyy-MM-dd");
452
+ }
453
+ }
454
+
455
+ // Subtract hours
456
+ {
457
+ {
458
+ $now.minus({ hours: 24 }).toISO();
459
+ }
460
+ }
461
+
462
+ // Set specific date
463
+ {
464
+ {
465
+ DateTime.fromISO("2025-12-25").toFormat("MMMM dd, yyyy");
466
+ }
467
+ }
468
+ ```
469
+
470
+ ### String Manipulation
471
+
472
+ ```javascript
473
+ // Substring
474
+ {
475
+ {
476
+ $json.email.substring(0, 5);
477
+ }
478
+ }
479
+
480
+ // Replace
481
+ {
482
+ {
483
+ $json.message.replace("old", "new");
484
+ }
485
+ }
486
+
487
+ // Split and join
488
+ {
489
+ {
490
+ $json.tags.split(",").join(", ");
491
+ }
492
+ }
493
+ ```
494
+
495
+ ---
496
+
497
+ ## Debugging Expressions
498
+
499
+ ### Test in Expression Editor
500
+
501
+ 1. Click field with expression
502
+ 2. Open expression editor (click "fx" icon)
503
+ 3. See live preview of result
504
+ 4. Check for errors highlighted in red
505
+
506
+ ### Common Error Messages
507
+
508
+ **"Cannot read property 'X' of undefined"**
509
+ → Parent object doesn't exist
510
+ → Check your data path
511
+
512
+ **"X is not a function"**
513
+ → Trying to call method on non-function
514
+ → Check variable type
515
+
516
+ **Expression shows as literal text**
517
+ → Missing {{ }}
518
+ → Add curly braces
519
+
520
+ ---
521
+
522
+ ## Expression Helpers
523
+
524
+ ### Available Methods
525
+
526
+ **String**:
527
+
528
+ - `.toLowerCase()`, `.toUpperCase()`
529
+ - `.trim()`, `.replace()`, `.substring()`
530
+ - `.split()`, `.includes()`
531
+
532
+ **Array**:
533
+
534
+ - `.length`, `.map()`, `.filter()`
535
+ - `.find()`, `.join()`, `.slice()`
536
+
537
+ **DateTime** (Luxon):
538
+
539
+ - `.toFormat()`, `.toISO()`, `.toLocal()`
540
+ - `.plus()`, `.minus()`, `.set()`
541
+
542
+ **Number**:
543
+
544
+ - `.toFixed()`, `.toString()`
545
+ - Math operations: `+`, `-`, `*`, `/`, `%`
546
+
547
+ ---
548
+
549
+ ## Best Practices
550
+
551
+ ### Do
552
+
553
+ - Always use {{ }} for dynamic content
554
+ - Use bracket notation for field names with spaces
555
+ - Reference webhook data from `.body`
556
+ - Use $node for data from other nodes
557
+ - Test expressions in expression editor
558
+
559
+ ### Don't
560
+
561
+ - Don't use expressions in Code nodes
562
+ - Don't forget quotes around node names with spaces
563
+ - Don't double-wrap with extra {{ }}
564
+ - Don't assume webhook data is at root (it's under .body!)
565
+ - Don't use expressions in webhook paths or credentials
566
+
567
+ ---
568
+
569
+ ## Summary
570
+
571
+ **Essential Rules**:
572
+
573
+ 1. Wrap expressions in {{ }}
574
+ 2. Webhook data is under `.body`
575
+ 3. No {{ }} in Code nodes
576
+ 4. Quote node names with spaces
577
+ 5. Node names are case-sensitive
578
+
579
+ **Most Common Mistakes**:
580
+
581
+ - Missing {{ }} → Add braces
582
+ - `{{$json.name}}` in webhooks → Use `{{$json.body.name}}`
583
+ - `{{$json.email}}` in Code → Use `$json.email`
584
+ - `{{$node.HTTP Request}}` → Use `{{$node["HTTP Request"]}}`
585
+
586
+ ---
587
+
588
+ # Common n8n Expression Mistakes
589
+
590
+ Complete catalog of expression errors with explanations and fixes.
591
+
592
+ ---
593
+
594
+ ## 1. Missing Curly Braces
595
+
596
+ **Problem**: Expression not recognized, shows as literal text
597
+
598
+ ❌ **Wrong**:
599
+
600
+ ```
601
+ $json.email
602
+ ```
603
+
604
+ ✅ **Correct**:
605
+
606
+ ```
607
+ {{$json.email}}
608
+ ```
609
+
610
+ **Why it fails**: n8n treats text without {{ }} as a literal string. Expressions must be wrapped to be evaluated.
611
+
612
+ **How to identify**: Field shows exact text like "$json.email" instead of actual value.
613
+
614
+ ---
615
+
616
+ ## 2. Webhook Body Access
617
+
618
+ **Problem**: Undefined values when accessing webhook data
619
+
620
+ ❌ **Wrong**:
621
+
622
+ ```
623
+ {{$json.name}}
624
+ {{$json.email}}
625
+ {{$json.message}}
626
+ ```
627
+
628
+ ✅ **Correct**:
629
+
630
+ ```
631
+ {{$json.body.name}}
632
+ {{$json.body.email}}
633
+ {{$json.body.message}}
634
+ ```
635
+
636
+ **Why it fails**: Webhook node wraps incoming data under `.body` property. The root `$json` contains headers, params, query, and body.
637
+
638
+ **Webhook structure**:
639
+
640
+ ```javascript
641
+ {
642
+ "headers": {...},
643
+ "params": {...},
644
+ "query": {...},
645
+ "body": { // User data is HERE!
646
+ "name": "John",
647
+ "email": "john@example.com"
648
+ }
649
+ }
650
+ ```
651
+
652
+ **How to identify**: Webhook workflow shows "undefined" for fields that are definitely being sent.
653
+
654
+ ---
655
+
656
+ ## 3. Spaces in Field Names
657
+
658
+ **Problem**: Syntax error or undefined value
659
+
660
+ ❌ **Wrong**:
661
+
662
+ ```
663
+ {{$json.first name}}
664
+ {{$json.user data.email}}
665
+ ```
666
+
667
+ ✅ **Correct**:
668
+
669
+ ```
670
+ {{$json['first name']}}
671
+ {{$json['user data'].email}}
672
+ ```
673
+
674
+ **Why it fails**: Spaces break dot notation. JavaScript interprets space as end of property name.
675
+
676
+ **How to identify**: Error message about unexpected token, or undefined when field exists.
677
+
678
+ ---
679
+
680
+ ## 4. Spaces in Node Names
681
+
682
+ **Problem**: Cannot access other node's data
683
+
684
+ ❌ **Wrong**:
685
+
686
+ ```
687
+ {{$node.HTTP Request.json.data}}
688
+ {{$node.Respond to Webhook.json}}
689
+ ```
690
+
691
+ ✅ **Correct**:
692
+
693
+ ```
694
+ {{$node["HTTP Request"].json.data}}
695
+ {{$node["Respond to Webhook"].json}}
696
+ ```
697
+
698
+ **Why it fails**: Node names are treated as object property names and need quotes when they contain spaces.
699
+
700
+ **How to identify**: Error like "Cannot read property 'Request' of undefined"
701
+
702
+ ---
703
+
704
+ ## 5. Incorrect Node Reference Case
705
+
706
+ **Problem**: Undefined or wrong data returned
707
+
708
+ ❌ **Wrong**:
709
+
710
+ ```
711
+ {{$node["http request"].json.data}} // lowercase
712
+ {{$node["Http Request"].json.data}} // wrong capitalization
713
+ ```
714
+
715
+ ✅ **Correct**:
716
+
717
+ ```
718
+ {{$node["HTTP Request"].json.data}} // exact match
719
+ ```
720
+
721
+ **Why it fails**: Node names are **case-sensitive**. Must match exactly as shown in workflow.
722
+
723
+ **How to identify**: Undefined value even though node exists and has data.
724
+
725
+ ---
726
+
727
+ ## 6. Double Wrapping
728
+
729
+ **Problem**: Literal {{ }} appears in output
730
+
731
+ ❌ **Wrong**:
732
+
733
+ ```
734
+ {{{$json.field}}}
735
+ ```
736
+
737
+ ✅ **Correct**:
738
+
739
+ ```
740
+ {{$json.field}}
741
+ ```
742
+
743
+ **Why it fails**: Only one set of {{ }} is needed. Extra braces are treated as literal characters.
744
+
745
+ **How to identify**: Output shows "{{value}}" instead of just "value".
746
+
747
+ ---
748
+
749
+ ## 7. Array Access with Dots
750
+
751
+ **Problem**: Syntax error or undefined
752
+
753
+ ❌ **Wrong**:
754
+
755
+ ```
756
+ {{$json.items.0.name}}
757
+ {{$json.users.1.email}}
758
+ ```
759
+
760
+ ✅ **Correct**:
761
+
762
+ ```
763
+ {{$json.items[0].name}}
764
+ {{$json.users[1].email}}
765
+ ```
766
+
767
+ **Why it fails**: Array indices require brackets, not dots. Number after dot is invalid JavaScript.
768
+
769
+ **How to identify**: Syntax error or "Cannot read property '0' of undefined"
770
+
771
+ ---
772
+
773
+ ## 8. Using Expressions in Code Nodes
774
+
775
+ **Problem**: Literal string instead of value, or errors
776
+
777
+ > See [code-javascript.md](code-javascript.md) for the full Code node reference.
778
+
779
+ ❌ **Wrong (in Code node)**:
780
+
781
+ ```javascript
782
+ const email = "{{$json.email}}";
783
+ const name = "={{$json.body.name}}";
784
+ ```
785
+
786
+ ✅ **Correct (in Code node)**:
787
+
788
+ ```javascript
789
+ const email = $json.email;
790
+ const name = $json.body.name;
791
+
792
+ // Or using Code node API
793
+ const email = $input.item.json.email;
794
+ const allItems = $input.all();
795
+ ```
796
+
797
+ **Why it fails**: Code nodes have **direct access** to data. The {{ }} syntax is for expression fields in other nodes, not for JavaScript code.
798
+
799
+ **How to identify**: Literal string "{{$json.email}}" appears in Code node output instead of actual value.
800
+
801
+ ---
802
+
803
+ ## 9. Missing Quotes in $node Reference
804
+
805
+ **Problem**: Syntax error
806
+
807
+ ❌ **Wrong**:
808
+
809
+ ```
810
+ {{$node[HTTP Request].json.data}}
811
+ ```
812
+
813
+ ✅ **Correct**:
814
+
815
+ ```
816
+ {{$node["HTTP Request"].json.data}}
817
+ ```
818
+
819
+ **Why it fails**: Node names must be quoted strings inside brackets.
820
+
821
+ **How to identify**: Syntax error "Unexpected identifier"
822
+
823
+ ---
824
+
825
+ ## 10. Incorrect Property Path
826
+
827
+ **Problem**: Undefined value
828
+
829
+ ❌ **Wrong**:
830
+
831
+ ```
832
+ {{$json.data.items.name}} // items is an array
833
+ {{$json.user.email}} // user doesn't exist, it's userData
834
+ ```
835
+
836
+ ✅ **Correct**:
837
+
838
+ ```
839
+ {{$json.data.items[0].name}} // access array element
840
+ {{$json.userData.email}} // correct property name
841
+ ```
842
+
843
+ **Why it fails**: Wrong path to data. Arrays need index, property names must be exact.
844
+
845
+ **How to identify**: Check actual data structure using expression editor preview.
846
+
847
+ ---
848
+
849
+ ## 11. Using = Prefix Outside JSON
850
+
851
+ **Problem**: Literal "=" appears in output
852
+
853
+ ❌ **Wrong (in text field)**:
854
+
855
+ ```
856
+ Email: ={{$json.email}}
857
+ ```
858
+
859
+ ✅ **Correct (in text field)**:
860
+
861
+ ```
862
+ Email: {{$json.email}}
863
+ ```
864
+
865
+ **Note**: The `=` prefix is **only** needed in JSON mode or when you want to set entire field value to expression result:
866
+
867
+ ```javascript
868
+ // JSON mode (set property to expression)
869
+ {
870
+ "email": "={{$json.body.email}}"
871
+ }
872
+
873
+ // Text mode (no = needed)
874
+ Hello {{$json.body.name}}!
875
+ ```
876
+
877
+ **Why it fails**: The `=` is parsed as literal text in non-JSON contexts.
878
+
879
+ **How to identify**: Output shows "=john@example.com" instead of "john@example.com"
880
+
881
+ ---
882
+
883
+ ## 12. Expressions in Webhook Path
884
+
885
+ **Problem**: Path doesn't update, validation error
886
+
887
+ ❌ **Wrong**:
888
+
889
+ ```
890
+ path: "{{$json.user_id}}/webhook"
891
+ path: "users/={{$env.TENANT_ID}}"
892
+ ```
893
+
894
+ ✅ **Correct**:
895
+
896
+ ```
897
+ path: "my-webhook" // Static paths only
898
+ path: "user-webhook/:userId" // Use dynamic URL parameters instead
899
+ ```
900
+
901
+ **Why it fails**: Webhook paths must be static. Use dynamic URL parameters (`:paramName`) instead of expressions.
902
+
903
+ **How to identify**: Webhook path doesn't change or validation warns about invalid path.
904
+
905
+ ---
906
+
907
+ ## 13. Forgetting .json in $node Reference
908
+
909
+ **Problem**: Undefined or wrong data
910
+
911
+ ❌ **Wrong**:
912
+
913
+ ```
914
+ {{$node["HTTP Request"].data}} // Missing .json
915
+ {{$node["Webhook"].body.email}} // Missing .json
916
+ ```
917
+
918
+ ✅ **Correct**:
919
+
920
+ ```
921
+ {{$node["HTTP Request"].json.data}}
922
+ {{$node["Webhook"].json.body.email}}
923
+ ```
924
+
925
+ **Why it fails**: Node data is always under `.json` property (or `.binary` for binary data).
926
+
927
+ **How to identify**: Undefined value when you know the node has data.
928
+
929
+ ---
930
+
931
+ ## 14. String Concatenation Confusion
932
+
933
+ **Problem**: Attempting JavaScript template literals
934
+
935
+ ❌ **Wrong**:
936
+
937
+ ```
938
+ `Hello ${$json.name}!` // Template literal syntax
939
+ "Hello " + $json.name + "!" // String concatenation
940
+ ```
941
+
942
+ ✅ **Correct**:
943
+
944
+ ```
945
+ Hello {{$json.name}}! // n8n expressions auto-concatenate
946
+ ```
947
+
948
+ **Why it fails**: n8n expressions don't use JavaScript template literal syntax. Adjacent text and expressions are automatically concatenated.
949
+
950
+ **How to identify**: Literal backticks or + symbols appear in output.
951
+
952
+ ---
953
+
954
+ ## 15. Empty Expression Brackets
955
+
956
+ **Problem**: Literal {{}} in output
957
+
958
+ ❌ **Wrong**:
959
+
960
+ ```
961
+ {{}}
962
+ {{ }}
963
+ ```
964
+
965
+ ✅ **Correct**:
966
+
967
+ ```
968
+ {{$json.field}} // Include expression content
969
+ ```
970
+
971
+ **Why it fails**: Empty expression brackets have nothing to evaluate.
972
+
973
+ **How to identify**: Literal "{{ }}" text appears in output.
974
+
975
+ ---
976
+
977
+ ## Quick Reference Table
978
+
979
+ | Error | Symptom | Fix |
980
+ | ------------------ | -------------- | -------------------- |
981
+ | No {{ }} | Literal text | Add {{ }} |
982
+ | Webhook data | Undefined | Add `.body` |
983
+ | Space in field | Syntax error | Use `['field name']` |
984
+ | Space in node | Undefined | Use `["Node Name"]` |
985
+ | Wrong case | Undefined | Match exact case |
986
+ | Double {{ }} | Literal braces | Remove extra {{ }} |
987
+ | .0 array | Syntax error | Use [0] |
988
+ | {{ }} in Code | Literal string | Remove {{ }} |
989
+ | No quotes in $node | Syntax error | Add quotes |
990
+ | Wrong path | Undefined | Check data structure |
991
+ | = in text | Literal = | Remove = prefix |
992
+ | Dynamic path | Doesn't work | Use static path |
993
+ | Missing .json | Undefined | Add .json |
994
+ | Template literals | Literal text | Use {{ }} |
995
+ | Empty {{ }} | Literal braces | Add expression |
996
+
997
+ ---
998
+
999
+ ## Debugging Process
1000
+
1001
+ When expression doesn't work:
1002
+
1003
+ 1. **Check braces**: Is it wrapped in {{ }}?
1004
+ 2. **Check data source**: Is it webhook data? Add `.body`
1005
+ 3. **Check spaces**: Field or node name has spaces? Use brackets
1006
+ 4. **Check case**: Does node name match exactly?
1007
+ 5. **Check path**: Is the property path correct?
1008
+ 6. **Use expression editor**: Preview shows actual result
1009
+ 7. **Check context**: Is it a Code node? Remove {{ }}
1010
+
1011
+ ---
1012
+
1013
+ # n8n Expression Examples
1014
+
1015
+ Real working examples from n8n workflows.
1016
+
1017
+ > For workflow-level patterns and orchestration context, see [workflow-patterns.md](workflow-patterns.md).
1018
+
1019
+ ---
1020
+
1021
+ ## Example 1: Webhook Form Submission
1022
+
1023
+ **Scenario**: Form submission webhook posts to Slack
1024
+
1025
+ **Workflow**: Webhook → Slack
1026
+
1027
+ **Webhook Input** (POST):
1028
+
1029
+ ```json
1030
+ {
1031
+ "name": "John Doe",
1032
+ "email": "john@example.com",
1033
+ "company": "Acme Corp",
1034
+ "message": "Interested in your product"
1035
+ }
1036
+ ```
1037
+
1038
+ **Webhook Node Output**:
1039
+
1040
+ ```json
1041
+ {
1042
+ "headers": { "content-type": "application/json" },
1043
+ "params": {},
1044
+ "query": {},
1045
+ "body": {
1046
+ "name": "John Doe",
1047
+ "email": "john@example.com",
1048
+ "company": "Acme Corp",
1049
+ "message": "Interested in your product"
1050
+ }
1051
+ }
1052
+ ```
1053
+
1054
+ **In Slack Node** (text field):
1055
+
1056
+ ```
1057
+ New form submission!
1058
+
1059
+ Name: {{$json.body.name}}
1060
+ Email: {{$json.body.email}}
1061
+ Company: {{$json.body.company}}
1062
+ Message: {{$json.body.message}}
1063
+ ```
1064
+
1065
+ **Output**:
1066
+
1067
+ ```
1068
+ New form submission!
1069
+
1070
+ Name: John Doe
1071
+ Email: john@example.com
1072
+ Company: Acme Corp
1073
+ Message: Interested in your product
1074
+ ```
1075
+
1076
+ ---
1077
+
1078
+ ## Example 2: HTTP API to Database
1079
+
1080
+ **Scenario**: Fetch user data from API and insert into database
1081
+
1082
+ **Workflow**: Schedule → HTTP Request → Postgres
1083
+
1084
+ **HTTP Request Returns**:
1085
+
1086
+ ```json
1087
+ {
1088
+ "data": {
1089
+ "users": [
1090
+ {
1091
+ "id": 123,
1092
+ "name": "Alice Smith",
1093
+ "email": "alice@example.com",
1094
+ "role": "admin"
1095
+ }
1096
+ ]
1097
+ }
1098
+ }
1099
+ ```
1100
+
1101
+ **In Postgres Node** (INSERT statement):
1102
+
1103
+ ```sql
1104
+ INSERT INTO users (user_id, name, email, role, synced_at)
1105
+ VALUES (
1106
+ {{$json.data.users[0].id}},
1107
+ '{{$json.data.users[0].name}}',
1108
+ '{{$json.data.users[0].email}}',
1109
+ '{{$json.data.users[0].role}}',
1110
+ '{{$now.toFormat('yyyy-MM-dd HH:mm:ss')}}'
1111
+ )
1112
+ ```
1113
+
1114
+ **Result**: User inserted with current timestamp
1115
+
1116
+ ---
1117
+
1118
+ ## Example 3: Multi-Node Data Flow
1119
+
1120
+ **Scenario**: Webhook → HTTP Request → Email
1121
+
1122
+ **Workflow Structure**:
1123
+
1124
+ 1. Webhook receives order ID
1125
+ 2. HTTP Request fetches order details
1126
+ 3. Email sends confirmation
1127
+
1128
+ ### Node 1: Webhook
1129
+
1130
+ **Receives**:
1131
+
1132
+ ```json
1133
+ {
1134
+ "body": {
1135
+ "order_id": "ORD-12345"
1136
+ }
1137
+ }
1138
+ ```
1139
+
1140
+ ### Node 2: HTTP Request
1141
+
1142
+ **URL field**:
1143
+
1144
+ ```
1145
+ https://api.example.com/orders/{{$json.body.order_id}}
1146
+ ```
1147
+
1148
+ **Returns**:
1149
+
1150
+ ```json
1151
+ {
1152
+ "order": {
1153
+ "id": "ORD-12345",
1154
+ "customer": "Bob Jones",
1155
+ "total": 99.99,
1156
+ "items": ["Widget", "Gadget"]
1157
+ }
1158
+ }
1159
+ ```
1160
+
1161
+ ### Node 3: Email
1162
+
1163
+ **Subject**:
1164
+
1165
+ ```
1166
+ Order {{$node["Webhook"].json.body.order_id}} Confirmed
1167
+ ```
1168
+
1169
+ **Body**:
1170
+
1171
+ ```
1172
+ Dear {{$node["HTTP Request"].json.order.customer}},
1173
+
1174
+ Your order {{$node["Webhook"].json.body.order_id}} has been confirmed!
1175
+
1176
+ Total: ${{$node["HTTP Request"].json.order.total}}
1177
+ Items: {{$node["HTTP Request"].json.order.items.join(', ')}}
1178
+
1179
+ Thank you for your purchase!
1180
+ ```
1181
+
1182
+ **Email Result**:
1183
+
1184
+ ```
1185
+ Subject: Order ORD-12345 Confirmed
1186
+
1187
+ Dear Bob Jones,
1188
+
1189
+ Your order ORD-12345 has been confirmed!
1190
+
1191
+ Total: $99.99
1192
+ Items: Widget, Gadget
1193
+
1194
+ Thank you for your purchase!
1195
+ ```
1196
+
1197
+ ---
1198
+
1199
+ ## Example 4: Date Formatting
1200
+
1201
+ **Scenario**: Various date format outputs
1202
+
1203
+ **Current Time**: 2025-10-20 14:30:45
1204
+
1205
+ ### ISO Format
1206
+
1207
+ ```javascript
1208
+ {
1209
+ {
1210
+ $now.toISO();
1211
+ }
1212
+ }
1213
+ ```
1214
+
1215
+ **Output**: `2025-10-20T14:30:45.000Z`
1216
+
1217
+ ### Custom Date Format
1218
+
1219
+ ```javascript
1220
+ {
1221
+ {
1222
+ $now.toFormat("yyyy-MM-dd");
1223
+ }
1224
+ }
1225
+ ```
1226
+
1227
+ **Output**: `2025-10-20`
1228
+
1229
+ ### Time Only
1230
+
1231
+ ```javascript
1232
+ {
1233
+ {
1234
+ $now.toFormat("HH:mm:ss");
1235
+ }
1236
+ }
1237
+ ```
1238
+
1239
+ **Output**: `14:30:45`
1240
+
1241
+ ### Full Readable Format
1242
+
1243
+ ```javascript
1244
+ {
1245
+ {
1246
+ $now.toFormat("MMMM dd, yyyy");
1247
+ }
1248
+ }
1249
+ ```
1250
+
1251
+ **Output**: `October 20, 2025`
1252
+
1253
+ ### Date Math - Future
1254
+
1255
+ ```javascript
1256
+ {
1257
+ {
1258
+ $now.plus({ days: 7 }).toFormat("yyyy-MM-dd");
1259
+ }
1260
+ }
1261
+ ```
1262
+
1263
+ **Output**: `2025-10-27`
1264
+
1265
+ ### Date Math - Past
1266
+
1267
+ ```javascript
1268
+ {
1269
+ {
1270
+ $now.minus({ hours: 24 }).toFormat("yyyy-MM-dd HH:mm");
1271
+ }
1272
+ }
1273
+ ```
1274
+
1275
+ **Output**: `2025-10-19 14:30`
1276
+
1277
+ ---
1278
+
1279
+ ## Example 5: Array Operations
1280
+
1281
+ **Data**:
1282
+
1283
+ ```json
1284
+ {
1285
+ "users": [
1286
+ { "name": "Alice", "email": "alice@example.com" },
1287
+ { "name": "Bob", "email": "bob@example.com" },
1288
+ { "name": "Charlie", "email": "charlie@example.com" }
1289
+ ]
1290
+ }
1291
+ ```
1292
+
1293
+ ### First User
1294
+
1295
+ ```javascript
1296
+ {
1297
+ {
1298
+ $json.users[0].name;
1299
+ }
1300
+ }
1301
+ ```
1302
+
1303
+ **Output**: `Alice`
1304
+
1305
+ ### Last User
1306
+
1307
+ ```javascript
1308
+ {
1309
+ {
1310
+ $json.users[$json.users.length - 1].name;
1311
+ }
1312
+ }
1313
+ ```
1314
+
1315
+ **Output**: `Charlie`
1316
+
1317
+ ### All Emails (Join)
1318
+
1319
+ ```javascript
1320
+ {
1321
+ {
1322
+ $json.users.map((u) => u.email).join(", ");
1323
+ }
1324
+ }
1325
+ ```
1326
+
1327
+ **Output**: `alice@example.com, bob@example.com, charlie@example.com`
1328
+
1329
+ ### Array Length
1330
+
1331
+ ```javascript
1332
+ {
1333
+ {
1334
+ $json.users.length;
1335
+ }
1336
+ }
1337
+ ```
1338
+
1339
+ **Output**: `3`
1340
+
1341
+ ---
1342
+
1343
+ ## Example 6: Conditional Logic
1344
+
1345
+ **Data**:
1346
+
1347
+ ```json
1348
+ {
1349
+ "order": {
1350
+ "status": "completed",
1351
+ "total": 150
1352
+ }
1353
+ }
1354
+ ```
1355
+
1356
+ ### Ternary Operator
1357
+
1358
+ ```javascript
1359
+ {
1360
+ {
1361
+ $json.order.status === "completed" ? "Order Complete" : "Pending...";
1362
+ }
1363
+ }
1364
+ ```
1365
+
1366
+ **Output**: `Order Complete`
1367
+
1368
+ ### Default Values
1369
+
1370
+ ```javascript
1371
+ {
1372
+ {
1373
+ $json.order.notes || "No notes provided";
1374
+ }
1375
+ }
1376
+ ```
1377
+
1378
+ **Output**: `No notes provided` (if notes field doesn't exist)
1379
+
1380
+ ### Multiple Conditions
1381
+
1382
+ ```javascript
1383
+ {
1384
+ {
1385
+ $json.order.total > 100 ? "Premium Customer" : "Standard Customer";
1386
+ }
1387
+ }
1388
+ ```
1389
+
1390
+ **Output**: `Premium Customer`
1391
+
1392
+ ---
1393
+
1394
+ ## Example 7: String Manipulation
1395
+
1396
+ **Data**:
1397
+
1398
+ ```json
1399
+ {
1400
+ "user": {
1401
+ "email": "JOHN@EXAMPLE.COM",
1402
+ "message": " Hello World "
1403
+ }
1404
+ }
1405
+ ```
1406
+
1407
+ ### Lowercase
1408
+
1409
+ ```javascript
1410
+ {
1411
+ {
1412
+ $json.user.email.toLowerCase();
1413
+ }
1414
+ }
1415
+ ```
1416
+
1417
+ **Output**: `john@example.com`
1418
+
1419
+ ### Uppercase
1420
+
1421
+ ```javascript
1422
+ {
1423
+ {
1424
+ $json.user.message.toUpperCase();
1425
+ }
1426
+ }
1427
+ ```
1428
+
1429
+ **Output**: ` HELLO WORLD `
1430
+
1431
+ ### Trim
1432
+
1433
+ ```javascript
1434
+ {
1435
+ {
1436
+ $json.user.message.trim();
1437
+ }
1438
+ }
1439
+ ```
1440
+
1441
+ **Output**: `Hello World`
1442
+
1443
+ ### Substring
1444
+
1445
+ ```javascript
1446
+ {
1447
+ {
1448
+ $json.user.email.substring(0, 4);
1449
+ }
1450
+ }
1451
+ ```
1452
+
1453
+ **Output**: `JOHN`
1454
+
1455
+ ### Replace
1456
+
1457
+ ```javascript
1458
+ {
1459
+ {
1460
+ $json.user.message.replace("World", "n8n");
1461
+ }
1462
+ }
1463
+ ```
1464
+
1465
+ **Output**: ` Hello n8n `
1466
+
1467
+ ---
1468
+
1469
+ ## Example 8: Fields with Spaces
1470
+
1471
+ **Data**:
1472
+
1473
+ ```json
1474
+ {
1475
+ "user data": {
1476
+ "first name": "Jane",
1477
+ "last name": "Doe",
1478
+ "phone number": "+1234567890"
1479
+ }
1480
+ }
1481
+ ```
1482
+
1483
+ ### Bracket Notation
1484
+
1485
+ ```javascript
1486
+ {
1487
+ {
1488
+ $json["user data"]["first name"];
1489
+ }
1490
+ }
1491
+ ```
1492
+
1493
+ **Output**: `Jane`
1494
+
1495
+ ### Combined
1496
+
1497
+ ```javascript
1498
+ {
1499
+ {
1500
+ $json["user data"]["first name"];
1501
+ }
1502
+ }
1503
+ {
1504
+ {
1505
+ $json["user data"]["last name"];
1506
+ }
1507
+ }
1508
+ ```
1509
+
1510
+ **Output**: `Jane Doe`
1511
+
1512
+ ### Nested Spaces
1513
+
1514
+ ```javascript
1515
+ Contact: {
1516
+ {
1517
+ $json["user data"]["phone number"];
1518
+ }
1519
+ }
1520
+ ```
1521
+
1522
+ **Output**: `Contact: +1234567890`
1523
+
1524
+ ---
1525
+
1526
+ ## Example 9: Code Node (Direct Access)
1527
+
1528
+ **Code Node**: Transform webhook data
1529
+
1530
+ > Code nodes do NOT use `{{ }}` expressions. See [code-javascript.md](code-javascript.md) for the full reference.
1531
+
1532
+ **Input** (from Webhook node):
1533
+
1534
+ ```json
1535
+ {
1536
+ "body": {
1537
+ "items": ["apple", "banana", "cherry"]
1538
+ }
1539
+ }
1540
+ ```
1541
+
1542
+ **Code** (JavaScript):
1543
+
1544
+ ```javascript
1545
+ // Direct access (no {{ }})
1546
+ const items = $json.body.items;
1547
+
1548
+ // Transform to uppercase
1549
+ const uppercased = items.map((item) => item.toUpperCase());
1550
+
1551
+ // Return in n8n format
1552
+ return [
1553
+ {
1554
+ json: {
1555
+ original: items,
1556
+ transformed: uppercased,
1557
+ count: items.length,
1558
+ },
1559
+ },
1560
+ ];
1561
+ ```
1562
+
1563
+ **Output**:
1564
+
1565
+ ```json
1566
+ {
1567
+ "original": ["apple", "banana", "cherry"],
1568
+ "transformed": ["APPLE", "BANANA", "CHERRY"],
1569
+ "count": 3
1570
+ }
1571
+ ```
1572
+
1573
+ ---
1574
+
1575
+ ## Example 10: Environment Variables
1576
+
1577
+ **Setup**: Environment variable `API_KEY=secret123`
1578
+
1579
+ ### In HTTP Request (Headers)
1580
+
1581
+ ```javascript
1582
+ Authorization: Bearer {{$env.API_KEY}}
1583
+ ```
1584
+
1585
+ **Result**: `Authorization: Bearer secret123`
1586
+
1587
+ ### In URL
1588
+
1589
+ ```javascript
1590
+ https://api.example.com/data?key={{$env.API_KEY}}
1591
+ ```
1592
+
1593
+ **Result**: `https://api.example.com/data?key=secret123`
1594
+
1595
+ ---
1596
+
1597
+ ## Template from Real Workflow
1598
+
1599
+ **Based on n8n template #2947** (Weather to Slack)
1600
+
1601
+ ### Workflow Structure
1602
+
1603
+ Webhook → OpenStreetMap API → Weather API → Slack
1604
+
1605
+ ### Webhook Slash Command
1606
+
1607
+ **Input**: `/weather London`
1608
+
1609
+ **Webhook receives**:
1610
+
1611
+ ```json
1612
+ {
1613
+ "body": {
1614
+ "text": "London"
1615
+ }
1616
+ }
1617
+ ```
1618
+
1619
+ ### OpenStreetMap API
1620
+
1621
+ **URL**:
1622
+
1623
+ ```
1624
+ https://nominatim.openstreetmap.org/search?q={{$json.body.text}}&format=json
1625
+ ```
1626
+
1627
+ ### Weather API (NWS)
1628
+
1629
+ **URL**:
1630
+
1631
+ ```
1632
+ https://api.weather.gov/points/{{$node["OpenStreetMap"].json[0].lat}},{{$node["OpenStreetMap"].json[0].lon}}
1633
+ ```
1634
+
1635
+ ### Slack Message
1636
+
1637
+ ```
1638
+ Weather for {{$json.body.text}}:
1639
+
1640
+ Temperature: {{$node["Weather API"].json.properties.temperature.value}}°C
1641
+ Conditions: {{$node["Weather API"].json.properties.shortForecast}}
1642
+ ```
1643
+
1644
+ ---
1645
+
1646
+ ## Summary
1647
+
1648
+ **Key Patterns**:
1649
+
1650
+ 1. Webhook data is under `.body`
1651
+ 2. Use `{{}}` for expressions (except Code nodes)
1652
+ 3. Reference other nodes with `$node["Node Name"].json`
1653
+ 4. Use brackets for field names with spaces
1654
+ 5. Node names are case-sensitive
1655
+
1656
+ **Most Common Uses**:
1657
+
1658
+ - `{{$json.body.field}}` - Webhook data
1659
+ - `{{$node["Name"].json.field}}` - Other node data
1660
+ - `{{$now.toFormat('yyyy-MM-dd')}}` - Timestamps
1661
+ - `{{$json.array[0].field}}` - Array access
1662
+ - `{{$json.field || 'default'}}` - Default values