Tags let you split your project into independent workstreams. Each tag gets its own task list, so you can work on feature-auth, feature-payments, and bugfixes without them interfering with each other.
# Create a new tag
tm add-tag feature-auth
# Create a tag from your current Git branch name
tm add-tag --from-branch feature/auth
# Switch to a tag — all commands now operate on this tag's tasks
tm use-tag feature-auth
# List all tags with progress stats
tm tags
The tm tags output shows task counts, completion percentage, and how many tasks are ready to work on for each tag.
# Rename a tag
tm rename-tag old-name new-name
# Copy all tasks from one tag to another
tm copy-tag source-tag destination-tag
# Delete a tag
tm delete-tag feature-auth
When priorities shift, move tasks between workstreams without losing context:
# Move task 5 from backlog to the active feature tag
tm move --from=5 --from-tag=backlog --to-tag=feature-1
# Move a task and pull its dependencies along
tm move --from=5 --from-tag=backlog --to-tag=feature-1 --with-dependencies
# Move multiple tasks at once
tm move --from=5,6,7 --from-tag=backlog --to-tag=feature-1
If a task ID already exists in the destination tag, Taskmaster will suggest how to resolve the conflict.
See the full picture across all your workstreams:
# List ready tasks across every tag
tm list --ready --all-tags
# List all tags that have work available
tm tags --ready
Each tag stores its tasks in a separate file (tasks.json for the default tag, tasks_feature-auth.json for named tags). Complexity reports are also tag-specific, so analysis stays relevant to each workstream.
Tags are ideal for: