eyaltoledano/claude-task-master · warning · TaskMasterError
NOT_IMPLEMENTED
NOT_IMPLEMENTED
Error message
Tag creation is not supported with API storage. Please create briefs through Hamster Studio.
What it means
ApiStorage.createTag unconditionally throws a TaskMasterError with code NOT_IMPLEMENTED because API storage models tags as Hamster briefs, which cannot be created programmatically. Users must create briefs in Hamster Studio (web interface). Any internal flow that tries to create a tag via API storage (saveTasks, saveMetadata, appendTasks, renameTag, copyTag) will hit this.
Source
Thrown at packages/tm-core/src/modules/storage/adapters/api-storage.ts:742
}
}
/**
* Get all available tags
*/
async getAllTags(): Promise<string[]> {
return this.listTags();
}
/**
* Create a new tag (brief)
* Not supported with API storage - users must create briefs via web interface
*/
async createTag(
tagName: string,
_options?: { copyFrom?: string; description?: string }
): Promise<void> {
throw new TaskMasterError(
'Tag creation is not supported with API storage. Please create briefs through Hamster Studio.',
ERROR_CODES.NOT_IMPLEMENTED,
{ storageType: 'api', operation: 'createTag', tagName }
);
}
/**
* Delete all tasks for a tag
*/
async deleteTag(tag: string): Promise<void> {
await this.ensureInitialized();
try {
await this.retryOperation(() =>
this.repository.deleteTag(this.projectId, tag)
);
this.tagsCache.delete(tag);View on GitHub (pinned to c0c98d367c)
Solutions
- Create the brief in Hamster Studio first, then select it and use it as the tag
- Detect NOT_IMPLEMENTED and surface the guidance message to users instead of retrying
- Restructure scripts to operate only on existing briefs when using API storage
- Use local/file storage if programmatic tag creation is required
Example fix
// before
await storage.createTag('my-brief');
// after
const tags = await storage.listTags();
if (!tags.includes('my-brief')) {
throw new Error('Create the brief "my-brief" in Hamster Studio first, then re-run');
} Defensive patterns
Strategy: fallback
Validate before calling
const tags = await storage.listTags();
if (!tags.includes(tagName)) throw new Error(`Brief '${tagName}' must be created in Hamster Studio before use with API storage`); Type guard
function isNotImplemented(e: unknown): e is TaskMasterError {
return e instanceof TaskMasterError && e.code === 'NOT_IMPLEMENTED';
} Try / catch
try {
await storage.createTag(name);
} catch (e) {
if (e instanceof TaskMasterError && e.code === 'NOT_IMPLEMENTED') {
console.warn('Create briefs via Hamster Studio, then re-run with the existing brief selected');
return;
}
throw e;
} Prevention
- Never call createTag on ApiStorage; provision briefs in Hamster Studio
- Check storage type before running tag-creating workflows
- Pre-flight verify the tag exists with listTags before operations that create-on-miss (saveMetadata/appendTasks)
- Fall back to file storage if programmatic tag creation is a hard requirement
When it happens
Trigger: Directly calling storage.createTag(name) on an ApiStorage instance; renameTag/copyTag implementations that create the destination tag; saveMetadata/appendTasks with a tag absent from the cache and absent on the server (createTag fallback path).
Common situations: Porting file-storage workflows that freely create tags to API storage; scripted brief provisioning; copying a tag set from local storage to the API backend.
Related errors
- Failed to get tasks for brief ${brief.id}:
- API_ERROR
- API request failed: ${response.status} - ${errorText}
- ${result.message} || Update failed for task ${taskId}. The s
- Task ${taskId} not found
AI-assisted analysis of eyaltoledano/claude-task-master@c0c98d367c (2026-08-29).
Data as JSON: /api/errors/d3acacf929cabec6.
Report an issue: GitHub.