eyaltoledano/claude-task-master · error · Error

File storage does not support updateTaskWithPrompt…

Error message

File storage does not support updateTaskWithPrompt. Client-side AI logic must process the prompt before calling updateTask().

What it means

FileStorage is a local-file adapter and deliberately does not implement AI-driven task updating. updateTaskWithPrompt() is an unsupported operation for this backend: the caller (client-side AI logic) must process the prompt itself (e.g. via an AI provider) and then persist the result with the plain updateTask() method.

Solutions

  1. Detect adapter capability before calling, or branch on storage type
  2. Process the prompt with your AI integration client-side, then call updateTask() with the resulting task data
  3. Use an AI-enabled storage/API adapter if prompt-driven updates are required
  4. Wrap the call in a try/catch and fall back to manual updateTask() flow

Example fix

// before
await storage.updateTaskWithPrompt('5', 'add auth tests');
// after
const result = await aiProvider.processTaskPrompt('5', 'add auth tests');
await storage.updateTask('5', result.updatedTask);
Defensive patterns

Strategy: fallback

Validate before calling

// Feature-detect prompt support before calling
function supportsPromptUpdate(s: unknown): boolean {
  return typeof (s as FileStorage).updateTaskWithPrompt === 'function' &&
    !(s instanceof FileStorage); // FileStorage always throws
}
if (!supportsPromptUpdate(storage)) { /* use manual AI + updateTask flow */ }

Type guard

function isUnsupportedPromptOpError(e: unknown): e is Error {
  return e instanceof Error && e.message.includes('does not support updateTaskWithPrompt');
}

Try / catch

try {
  await storage.updateTaskWithPrompt(id, prompt);
} catch (e) {
  if (isUnsupportedPromptOpError(e)) {
    const updated = await aiProvider.processTaskPrompt(id, prompt);
    await storage.updateTask(id, updated);
  } else throw e;
}

Prevention

When it happens

Trigger: Calling storage.updateTaskWithPrompt() on a FileStorage adapter instance, e.g. an app configured with file storage but invoking the AI-prompt API surface unconditionally, or code written against an API-backed storage adapter being reused with the file adapter.

Common situations: Switching storage backends from an API/AI-enabled adapter to local file storage without changing the update flow, or generic storage-agnostic code paths that call prompt-based methods without feature detection.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


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

Appendix: source

Thrown at packages/tm-core/src/modules/storage/adapters/file-storage/file-storage.ts:422

			...existingTask,
			...updates,
			...(mergedSubtasks && { subtasks: mergedSubtasks }),
			id: String(taskId) // Keep consistent with normalizeTaskIds
		};
		await this.saveTasks(tasks, tag);
	}

	/**
	 * Update task with AI-powered prompt
	 * For file storage, this should NOT be called - client must handle AI processing first
	 */
	async updateTaskWithPrompt(
		_taskId: string,
		_prompt: string,
		_tag?: string,
		_options?: { useResearch?: boolean; mode?: 'append' | 'update' | 'rewrite' }
	): Promise<void> {
		throw new Error(
			'File storage does not support updateTaskWithPrompt. ' +
				'Client-side AI logic must process the prompt before calling updateTask().'
		);
	}

	/**
	 * Expand task into subtasks with AI-powered generation
	 * For file storage, this should NOT be called - client must handle AI processing first
	 */
	async expandTaskWithPrompt(
		_taskId: string,
		_tag?: string,
		_options?: {
			numSubtasks?: number;
			useResearch?: boolean;
			additionalContext?: string;
			force?: boolean;
		}

View on GitHub (pinned to c0c98d367c)