update_task
Modify an existing task's details, including title, description, estimates, dates, priority, assignees, and acceptance criteria.
Instructions
Update task details like title, description, estimates, or acceptance criteria.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | New title for the task | |
| task_id | Yes | The ID of the task to update | |
| due_date | No | New due date as YYYY-MM-DD. Pass an empty string to clear it. | |
| priority | No | New priority level (0-5, higher is more important) | |
| blocked_by | No | REPLACES the full set of tasks this task is blocked by. Pass [] to clear all of them. Every id must be a task in the same product; a circular chain (A blocked by B blocked by A) is rejected. While any of these is not done, the task shows as blocked whatever its stored status says. | |
| sort_order | No | Position among the project's tasks (lower sorts first). Drives the order returned by list_tasks and the board/list views. | |
| start_date | No | New start date as YYYY-MM-DD. Pass an empty string to clear it. | |
| description | No | New description | |
| is_milestone | No | Mark this task as a milestone, drawn differently on the Gantt view. Pass false to unmark it. | |
| github_pr_url | No | URL of the GitHub Pull Request implementing this task. Used to fetch the PR diff for AI verification and to match incoming CI status back to this task. Pass an empty string to clear it. | |
| blocked_reason | No | Free-text reason shown next to a manually-set Blocked status ("waiting on the client"). Cleared automatically when the task leaves the blocked status. | |
| assignee_user_id | No | User ID to assign the task to, REPLACING THE WHOLE assignee set (every non-active assignment row is deleted, active workers spared) — use this only when you want exactly one owner. Must be a member of the same account. Pass an empty string to unassign everyone (active workers still spared). To ADD a second assignee without touching the first, use add_assignee instead; to remove just one, use remove_assignee. | |
| estimated_minutes | No | New time estimate in minutes | |
| verification_mode | No | Gate this task's own completion. "manual" (default) allows a plain status change to done. "ai_review" or "all" BLOCK marking the task done (403 VERIFICATION_REQUIRED) until ai_completion_score reaches 0.8 — run "Verify with AI" first. "ci_required" or "all" BLOCK it until a PR is linked (github_pr_url) with passing CI. Setting this arms a real check against your own future attempt to close the task. | |
| required_ci_checks | No | Which named CI checks (matched case-insensitively as a substring of the check name) must pass for "ci_required"/"all" verification_mode to consider CI satisfied — e.g. ["build","test"]. Read by GET /api/tasks/:id/ci-status's resolveRequiredChecks (app/functions/api/tasks/[id]/ci-status.js:13-32), NOT by the GitHub webhook handler, which sets ci_status unconditionally from whichever single check/workflow event just arrived regardless of this field. Stored as a JSON array. Pass an empty array to require every check; this tool has no way to clear the column back to "inherit from project" (the REST API reserves that for an empty string, which this array-typed field cannot send). | |
| acceptance_criteria | No | New acceptance criteria |