n8n-io/n8n · warning

AGENT_STATIC_PROMPT

AGENT_STATIC_PROMPT

Error message

'${node.name}' has no expression in its prompt. Parameter values must start with '=' to evaluate correctly as expressions. For example '={{ $json.input }}'.

What it means

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 '='.

Source

Thrown at packages/@n8n/workflow-sdk/src/workflow-builder/plugins/validators/chain-llm-validator.ts:60

		}

		const promptType = params.promptType as string | undefined;

		// Only check when promptType is 'define' (explicit prompt definition)
		if (promptType !== 'define') {
			return issues;
		}

		// Check: Static prompt (no expression)
		const text = params.text;
		const hasValidExpression = containsExpression(text);
		const hasMalformedExpression = containsMalformedExpression(text);

		// Only warn about static prompt if there's NO expression at all
		// (MISSING_EXPRESSION_PREFIX will handle malformed expressions)
		if (!text || (!hasValidExpression && !hasMalformedExpression)) {
			issues.push({
				code: 'AGENT_STATIC_PROMPT',
				message: `'${node.name}' has no expression in its prompt. Parameter values must start with '=' to evaluate correctly as expressions. For example '={{ $json.input }}'.`,
				severity: 'warning',
				nodeName: node.name,
			});
		}

		return issues;
	},
};

View on GitHub (pinned to 5ac6606e81)

Solutions

  1. Prefix the prompt with '=' and reference input data, e.g. '={{ $json.input }}'.
  2. If the prompt is genuinely static, acknowledge the warning is benign.
  3. Switch to promptType 'define' with an explicit expression for dynamic data.

Example fix

// before
chainLlm({ text: 'Answer the question' })
// after
chainLlm({ text: '={{ $json.input }}' })
Defensive patterns

Strategy: validation

Validate before calling

function isExpression(value: unknown): boolean {
  return typeof value === 'string' && value.startsWith('=');
}
if (!isExpression(chainLlmParams.text)) {
  // warn: prompt will not evaluate as an expression
}

Prevention

When it happens

Trigger: Configuring a Chain LLM node with text: 'Answer the question' (no '=' prefix), or an empty text, expecting it to consume upstream data.

Common situations: Static placeholder prompts left during prototyping; copy-paste from a non-n8n template; expecting $json auto-injection without an expression.

Related errors


AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12). Data as JSON: /api/errors/bf5d584a852fba9c. Report an issue: GitHub.