n8n-io/n8n · error · Error

--source langtracer requires --suite <slug>

Error message

--source langtracer requires --suite <slug>

What it means

Thrown by `loadTestCases()` in data/source.ts when `args.source === 'langtracer'` but `args.suite` is unset. The LangTracer provider needs a suite slug to know which suite of recorded cases to pull; without it the request is ambiguous and the provider would return either everything or nothing. The disk source (default) does not need a suite, which is why the check is gated on the source.

Source

Thrown at packages/@n8n/instance-ai/evaluations/data/source.ts:15

// Test-case source selector — `disk` (default) or `langtracer`, both returning the
// same WorkflowTestCaseWithFile[] so the rest of the pipeline is source-agnostic.

import { loadAgentEvalTestCasesWithFiles } from './agents';
import { loadWorkflowTestCasesWithFiles, type WorkflowTestCaseWithFile } from './workflows';
import type { CliArgs } from '../cli/args';
import type { EvalLogger } from '../harness/logger';
import { loadTestCasesFromLangTracer } from '../langtracer/provider';

export async function loadTestCases(
	args: CliArgs,
	logger: EvalLogger,
): Promise<WorkflowTestCaseWithFile[]> {
	if (args.source === 'langtracer') {
		if (!args.suite) throw new Error('--source langtracer requires --suite <slug>');
		return await loadTestCasesFromLangTracer({
			suite: args.suite,
			filter: args.filter,
			exclude: args.exclude,
			tier: args.tier,
			logger,
		});
	}

	const cases = [
		...loadWorkflowTestCasesWithFiles(args.filter, args.exclude),
		...loadAgentEvalTestCasesWithFiles(args.filter, args.exclude),
	];
	const { tier } = args;
	if (!tier) return cases;

	const matched = cases.filter(({ testCase }) => testCase.datasets.includes(tier));
	if (matched.length === 0) {

View on GitHub (pinned to 5ac6606e81)

Solutions

  1. Add `--suite <suite-slug>` alongside `--source langtracer`. The slug is the LangTracer suite identifier your team configured.
  2. If you didn't mean to use LangTracer, drop `--source langtracer` (the default `disk` source loads local JSON cases).
  3. Confirm the suite slug exists upstream in LangTracer before re-running; an unknown slug will fail later in the provider, not here.

Example fix

// before
$ node eval.ts --source langtracer
// after
$ node eval.ts --source langtracer --suite my-team-suite
Defensive patterns

Strategy: validation

Validate before calling

function validateArgs(args: CliArgs): void {
  if (args.source === 'langtracer' && !args.suite) {
    throw new Error('--source langtracer requires --suite <slug>');
  }
}

Prevention

When it happens

Trigger: Run the workflow/agent eval CLI with `--source langtracer` but forget `--suite <slug>`. Typo the flag as `--suites` or `--suite-name`. Set the suite via an env var that the CLI doesn't actually read (the CLI only reads `--suite`).

Common situations: Switching from local disk cases to a LangTracer suite for the first time. A wrapper script that conditionally passes `--source langtracer` but forgets to also pass `--suite`.

Related errors


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