{"record":{"id":"bf5d584a852fba9c","repo":"n8n-io/n8n","slug":"agent-static-prompt-bf5d58","errorCode":"AGENT_STATIC_PROMPT","errorMessage":"'${node.name}' has no expression in its prompt. Parameter values must start with '=' to evaluate correctly as expressions. For example '={{ $json.input }}'.","messagePattern":"'(.+?)' has no expression in its prompt\\. Parameter values must start with '=' to evaluate correctly as expressions\\. For example '=(.+?)\\}'\\.","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"packages/@n8n/workflow-sdk/src/workflow-builder/plugins/validators/chain-llm-validator.ts","lineNumber":60,"sourceCode":"\t\t}\n\n\t\tconst promptType = params.promptType as string | undefined;\n\n\t\t// Only check when promptType is 'define' (explicit prompt definition)\n\t\tif (promptType !== 'define') {\n\t\t\treturn issues;\n\t\t}\n\n\t\t// Check: Static prompt (no expression)\n\t\tconst text = params.text;\n\t\tconst hasValidExpression = containsExpression(text);\n\t\tconst hasMalformedExpression = containsMalformedExpression(text);\n\n\t\t// Only warn about static prompt if there's NO expression at all\n\t\t// (MISSING_EXPRESSION_PREFIX will handle malformed expressions)\n\t\tif (!text || (!hasValidExpression && !hasMalformedExpression)) {\n\t\t\tissues.push({\n\t\t\t\tcode: 'AGENT_STATIC_PROMPT',\n\t\t\t\tmessage: `'${node.name}' has no expression in its prompt. Parameter values must start with '=' to evaluate correctly as expressions. For example '={{ $json.input }}'.`,\n\t\t\t\tseverity: 'warning',\n\t\t\t\tnodeName: node.name,\n\t\t\t});\n\t\t}\n\n\t\treturn issues;\n\t},\n};\n","sourceCodeStart":42,"sourceCodeEnd":70,"githubUrl":"https://github.com/n8n-io/n8n/blob/5ac6606e81f67bb9534255570cd4e86fd8101eee/packages/@n8n/workflow-sdk/src/workflow-builder/plugins/validators/chain-llm-validator.ts#L42-L70","documentation":"Warning-level validator issue (code AGENT_STATIC_PROMPT, reused by the chain-llm validator) emitted when a Chain LLM node's text prompt contains no '=' expression and no malformed '{{ }}' fragment. Without an expression the prompt cannot incorporate runtime data, so parameter values will not evaluate as expected. The message emphasizes that values must start with '='.","triggerScenarios":"Configuring a Chain LLM node with text: 'Answer the question' (no '=' prefix), or an empty text, expecting it to consume upstream data.","commonSituations":"Static placeholder prompts left during prototyping; copy-paste from a non-n8n template; expecting $json auto-injection without an expression.","solutions":["Prefix the prompt with '=' and reference input data, e.g. '={{ $json.input }}'.","If the prompt is genuinely static, acknowledge the warning is benign.","Switch to promptType 'define' with an explicit expression for dynamic data."],"exampleFix":"// before\nchainLlm({ text: 'Answer the question' })\n// after\nchainLlm({ text: '={{ $json.input }}' })","handlingStrategy":"validation","validationCode":"function isExpression(value: unknown): boolean {\n  return typeof value === 'string' && value.startsWith('=');\n}\nif (!isExpression(chainLlmParams.text)) {\n  // warn: prompt will not evaluate as an expression\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Prefix Chain LLM prompts with '=' when referencing input data.","Avoid hardcoded prompts for nodes that depend on upstream items.","Run validators as part of CI for code-generated workflows."],"tags":["chain-llm","validator","expression","prompt","ai"],"backgroundTag":null,"analyzedSha":"5ac6606e81f67bb9534255570cd4e86fd8101eee","analyzedAt":"2026-08-12T05:26:35.080Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}