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 from scratch. If the structure already exists as a workflow pack, use a pack run instead. Non-UUID ids create new records and can be referenced by other upserts in the same request.
{
"scope": { "type": "personal" },
"upserts": [
{ "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 upserts, 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 upsert is invalid.
New tracks require title. Existing tracks (UUID id) use PATCH semantics: omitted fields keep their current value.
Reviews
A review (also referred to as a Learning Review) is a generated, read-only analysis of one or more tasks or goals. It collects the target tracks, linked goals/tasks, child/dependency tasks, logs, and source workflow/context packs to extract reusable learning and suggest next actions (e.g., creating/updating a pack or suggesting a change).
When reviews appear
Epismo may return a lightweight review object containing basic stats during status updates when a track reaches a reviewable outcome:
| Track type | Trigger status | Why it matters |
|---|---|---|
task |
done |
Extract local execution notes and reusable steps. |
goal |
completed |
Capture successful processes and decision criteria. |
goal |
postponed |
Capture assumptions, risks, and lessons from a pivot or delay. |
For a detailed Markdown review containing in-depth generated content, run a manual review using the API (POST /v1/tracks/review) or the CLI (epismo track review). Detailed reviews consume credits based on AI token usage, whereas lightweight status-update reviews are free.
See Logs for the comment/activity timeline attached to a track.