eyaltoledano/claude-task-master · warning

No default executor available

Error message

No default executor available

What it means

executor-factory.ts getDefaultExecutor() probes installed AI CLIs (currently only Claude) and returns the detected type or null. When no supported executor binary is found on PATH, it logs 'No default executor available' and returns null, so callers have no executor to run tasks with.

Source

Thrown at packages/tm-core/src/modules/execution/executors/executor-factory.ts:49

				throw new Error(`Unknown executor type: ${options.type}`);
		}
	}

	/**
	 * Get the default executor type based on available tools
	 */
	static async getDefaultExecutor(
		projectRoot: string
	): Promise<ExecutorType | null> {
		// Check for Claude first
		const claudeExecutor = new ClaudeExecutor(projectRoot);
		if (await claudeExecutor.isAvailable()) {
			this.logger.info('Claude CLI detected as default executor');
			return 'claude';
		}

		// Could check for other executors here
		this.logger.warn('No default executor available');
		return null;
	}

	/**
	 * Get list of available executor types
	 */
	static getAvailableTypes(): ExecutorType[] {
		return ['claude', 'shell', 'custom'];
	}
}

View on GitHub (pinned to c0c98d367c)

Solutions

  1. Install the Claude CLI and verify it is on PATH (`claude --version` works)
  2. Export/extend PATH so the CLI binary is discoverable by the process
  3. Explicitly pass an executor type instead of relying on the default, after confirming that executor's CLI is installed
  4. Handle the null return by surfacing a setup message to the user rather than proceeding

Example fix

// before
const type = await factory.getDefaultExecutor();
// after
const type = await factory.getDefaultExecutor();
if (!type) throw new Error('No AI executor CLI found; install claude and ensure it is on PATH');
Defensive patterns

Strategy: fallback

Validate before calling

import { execSync } from 'child_process';
function claudeCliOnPath(): boolean {
  try { execSync('claude --version', { stdio: 'ignore' }); return true; }
  catch { return false; }
}

Type guard

function hasDefaultExecutor(t: string | null): t is Exclude<typeof t, null> {
  return t !== null;
}

Try / catch

const type = await factory.getDefaultExecutor();
if (!hasDefaultExecutor(type)) {
  throw new Error('No AI executor CLI found on PATH; install claude CLI first');
}

Prevention

When it happens

Trigger: Calling getDefaultExecutor() (e.g. when creating an executor by type) in an environment where the Claude CLI (and any other supported CLIs) are not installed or not on PATH.

Common situations: Fresh CI containers without the AI CLI installed, running inside Docker images that omit the CLI, PATH misconfigured for a local npx-style install, or an incompatible CLI version.

Related errors


AI-assisted analysis of eyaltoledano/claude-task-master@c0c98d367c (2026-08-29). Data as JSON: /api/errors/7766530825c0ef69. Report an issue: GitHub.