eyaltoledano/claude-task-master · error · Error

File storage does not support updateTaskWithPrompt. Client-s

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.

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)

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.