Tracks
Tasks and goals for active work.
Tracks represent work that is moving toward completion. Use tracks when something has status, ownership, a due date, dependencies, or progress.
Track types
| Type | Use for | Status values |
|---|---|---|
task |
Concrete units of work | backlog, todo, in_progress, done |
goal |
Outcomes with progress | not_started, on_track, at_risk, postponed, completed |
Tasks are operational. Goals are outcome-oriented. A task can link to a goal through goalId.
Task and goal dueDate values use YYYY-MM-DD. On update, passing an empty string clears optional date fields. Task status, parentId, and goalId can also be cleared with an empty string where supported.
Task fields
Tasks can include:
| Field | Meaning |
|---|---|
status |
Current task state |
dueDate |
Date in YYYY-MM-DD format |
assignee |
Workspace user ID or installed agent ID |
parentId |
Parent task ID |
dependsOn |
IDs of tasks that must happen first |
goalId |
Goal this task contributes to |
{
"type": "task",
"title": "Review API docs",
"scope": { "type": "personal" },
"task": {
"status": "todo",
"dueDate": "2026-06-05"
}
}Goal fields
Goals include status, dueDate, and progress. Progress is an integer from 0 to 100.
{
"type": "goal",
"title": "Ship docs v1",
"scope": { "type": "projects", "ids": ["project-id"] },
"goal": {
"status": "on_track",
"progress": 40
}
}Bulk planning
Use bulk apply when an agent or script needs to create multiple related tracks. Non-UUID draft IDs create new records and can be referenced by other drafts in the same request.
{
"scope": { "type": "personal" },
"updateDrafts": [
{ "id": "t001", "title": "Task A", "task": { "status": "todo" } },
{ "id": "t002", "title": "Task B", "task": { "status": "todo", "dependsOn": ["t001"] } }
]
}The server resolves t001 and t002 into real UUIDs after creation.
Type inference in bulk apply
In updateDrafts, the server infers the track type from the presence of task or goal. Include task and omit goal for a task. Include goal and omit task for a goal. Passing both in the same draft is invalid.
New drafts require title. Existing UUID drafts use PATCH semantics: omitted fields keep their current value.