can1357/oh-my-pi · error

no tasks matched the requested filters

Error message

no tasks matched the requested filters

What it means

After loading the dataset and applying include/exclude filters, main requires at least one task to run (unless --list was passed). If the filter set matches zero tasks, the run would silently do nothing, so it throws instead.

Source

Thrown at packages/metaharness/src/tb/cli.ts:348

		startedAt,
		finishedAt: Date.now(),
	};
}

export async function main(argv: string[]): Promise<void> {
	const config = parseArgs(argv);
	if (config.help) {
		console.log(HELP);
		return;
	}
	fs.mkdirSync(config.jobsDir, { recursive: true });
	const tasksDir = await resolveDataset(config.dataset, path.join(config.jobsDir, "_dataset"));
	const tasks = await loadTasks(tasksDir, { include: config.include, exclude: config.exclude });
	if (config.list) {
		for (const task of tasks) console.log(task.name);
		return;
	}
	if (tasks.length === 0) throw new Error("no tasks matched the requested filters");

	const providers = [...new Set(config.models.map(model => model.slice(0, model.indexOf("/"))))];
	const gateway: GatewayConfig = {
		url: config.gatewayUrl,
		token: config.gatewayToken,
		providers,
		openrouterVariant: config.openrouterVariant,
	};
	await probeGateway(config.gatewayUrl);
	console.log(`vmon: checking ${config.vmonUrl}`);
	await preflightVmon(config.vmonUrl, config.vmonToken);
	const vmon: VmonConfig = {
		url: config.vmonUrl,
		token: config.vmonToken,
		arch: "x64",
	};
	const binaries = await prepareAgentBinaries({
		arches: [vmon.arch],

View on GitHub (pinned to 9690622007)

Solutions

  1. Run with --list to print available task names and adjust filters
  2. Fix or remove --include/--exclude patterns so at least one task matches
  3. Verify the dataset was resolved to the expected version (task names may differ)

Example fix

// before
tb run --dataset ./tb-tasks --include 'old-task-name'
// after
tb run --dataset ./tb-tasks --list   # find real names
tb run --dataset ./tb-tasks --include 'hello-world'
Defensive patterns

Strategy: validation

Validate before calling

const tasks = await loadTasks(tasksDir, { include, exclude });
if (tasks.length === 0) {
  console.error("No tasks matched; available:", (await loadTasks(tasksDir, {})).map(t => t.name));
  process.exit(1);
}

Prevention

When it happens

Trigger: Calling main with --include/--exclude patterns that match no task names in the resolved dataset, e.g. --include 'nonexistent-*' or an exclude that filters out everything.

Common situations: Task names renamed upstream in the Terminal-Bench repo; overly specific include globs; exclude patterns left over from a previous run; pointing --dataset at a different/older dataset.

Related errors


AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31). Data as JSON: /api/errors/6e8d545d50526bd1. Report an issue: GitHub.