n8n-io/n8n · error · UserError

Seed agents "${clash.name ?? clash.agentId}" and "${entry.na

Error message

Seed agents "${clash.name ?? clash.agentId}" and "${entry.name ?? entry.agentId}" both address as "${entry.ref}" — give them names that differ by more than case, spacing or punctuation

What it means

Error "Seed agents "${clash.name ?? clash.agentId}" and "${entry.name ?? entry.agentId}" both address as "${entry.ref}" — give them names that differ by more than case, spacing or punctuation" thrown in n8n-io/n8n.

Source

Thrown at packages/@n8n/instance-ai/src/tools/orchestration/agent-target-binding.ts:142

/**
 * Same metadata `saveAgentBuilderTarget` writes, as a plain value — for eval
 * thread seeding, which has no `InstanceAiContext` to hand it. Last target wins
 * as the active one, mirroring "most recently targeted".
 */
export function agentBuilderTargetMetadata(targets: AgentBuilderTarget[]): Record<string, unknown> {
	const entries = targets.map((target) =>
		target.ref ? { ...target, ref: normalizeAgentRef(target.ref) } : target,
	);
	const registry: Record<string, AgentBuilderTarget> = {};
	for (const entry of entries) {
		if (!entry.ref) continue;
		// Two refs normalizing to one key ("Support Bot" / "support-bot") would drop
		// an entry, and a later ref lookup would then edit the surviving agent —
		// silently the wrong one. Refuse instead, like a duplicate seed workflow name.
		const clash = registry[entry.ref];
		if (clash && clash.agentId !== entry.agentId) {
			throw new UserError(
				`Seed agents "${clash.name ?? clash.agentId}" and "${entry.name ?? entry.agentId}" both address as "${entry.ref}" — give them names that differ by more than case, spacing or punctuation`,
			);
		}
		registry[entry.ref] = entry;
	}
	return {
		[METADATA_KEY]: entries[entries.length - 1],
		[REGISTRY_METADATA_KEY]: registry,
	};
}

/** Epoch ms of a seed message's `createdAt`, or 0 when it is missing/unparseable. */
function stampOf(message: Record<string, unknown>): number {
	const raw = message.createdAt;
	if (typeof raw !== 'string') return 0;
	const parsed = Date.parse(raw);
	return Number.isNaN(parsed) ? 0 : parsed;
}

View on GitHub (pinned to 5ac6606e81)

When it happens

Trigger: Thrown at packages/@n8n/instance-ai/src/tools/orchestration/agent-target-binding.ts:142 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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