| name | task-update |
| description | Update a task's field (status, priority, tags, notes, description). Updates both SQLite and the task's TASK.md file. |
| argument-hint | <id or slug> <field> <value> |
| disable-model-invocation | true |
Task Update Skill
Updates a specific field on a task.
Instructions
-
Parse $ARGUMENTS:
- First arg: task ID (numeric) or slug (string)
- Second arg: field name — one of:
status, priority, tags, notes, description, title, issue
- Remaining args: the new value
-
Validate the field and value:
status: must be one of todo, in-progress, done, blocked
priority: must be one of critical, high, medium, low
tags: comma-separated string, stored as JSON array
notes: free-form text (appended, not replaced)
description: free-form text (replaced)
title: new title string
issue: GitHub issue number or none to unlink
-
Update SQLite:
DB_PATH="$CLAUDE_PROJECT_DIR/.claude/journal/journal.db"
TIMESTAMP=$(date -u '+%Y-%m-%d %H:%M:%S')
sqlite3 "$DB_PATH" "UPDATE tasks SET <field> = '<value>', updated_at = '$TIMESTAMP' WHERE id = <id>;"
sqlite3 "$DB_PATH" "UPDATE tasks SET started_at = '$TIMESTAMP' WHERE id = <id> AND started_at IS NULL AND status = 'in-progress';"
sqlite3 "$DB_PATH" "UPDATE tasks SET completed_at = '$TIMESTAMP' WHERE id = <id> AND status = 'done';"
-
If the task has a folder_path, also update the TASK.md frontmatter to reflect the change using the Edit tool.
-
For notes, append to the Notes section in TASK.md rather than replacing.
-
Confirm the update by showing the updated field value and timestamp.