n8n-io/n8n · error · Error
Failed to parse workflow code after 3 consecutive attempts.
Error message
Failed to parse workflow code after 3 consecutive attempts.
What it means
The code-builder agent loop keeps a counter of consecutive failures to parse the LLM's generated workflow code. When that counter reaches the hard cap of 3, checkConsecutiveParseErrors aborts the whole run instead of burning more LLM iterations on unparseable output. It signals persistent model output quality problems (invalid syntax, malformed JSON, truncated code), not a transient hiccup.
Solutions
- Inspect the last generated sourceCode captured in agent state to see exactly why parsing failed
- Retry the run: transient model degradation can produce a burst of bad outputs
- Switch to a stronger/more capable build model if failures recur
- Check that the parser configuration (grammar, wrap/sanitize steps) matches the code format the prompt requests
- Lower workflow complexity of the request — very large workflows can truncate model output mid-code
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at packages/@n8n/ai-workflow-builder.ee/src/code-builder/code-builder-agent.ts:539 when the library encounters an invalid state.
Common situations: See trigger scenarios.
Understand the failure class
- Parsing and encoding errors: unexpected token, malformed input — why parsers reject input and how to find the real culprit.
AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12).
Data as JSON: /api/errors/bd329d5cacbdf388.
Report an issue: GitHub.
Appendix: source
Thrown at packages/@n8n/ai-workflow-builder.ee/src/code-builder/code-builder-agent.ts:539
} catch (error) {
await parentRunManager?.handleChainError(error);
throw error;
}
return {
workflow: state.workflow,
parseDuration: state.parseDuration,
sourceCode: state.sourceCode,
iteration: state.iteration,
};
}
/**
* Check if we've hit the consecutive parse error limit
*/
private checkConsecutiveParseErrors(count: number): void {
if (count >= 3) {
throw new Error('Failed to parse workflow code after 3 consecutive attempts.');
}
}
/**
* Process a single iteration of the agentic loop
*/
private async *processIteration(params: {
llmResult: { hasToolCalls: boolean; response: AIMessage };
messages: BaseMessage[];
currentWorkflow?: WorkflowJSON;
textEditorEnabled: boolean;
textEditorHandler?: TextEditorHandler;
textEditorToolHandler?: TextEditorToolHandler;
state: AgenticLoopState;
}): AsyncGenerator<StreamOutput, { shouldBreak: boolean }, unknown> {
const {
llmResult,
messages,View on GitHub (pinned to 5ac6606e81)