Skip to content

Task Schema Reference

Switch to Zen Mode

The tasks.json file has the following root structure:

{
"$schema": "https://mutsumi.dev/schema/v1.json",
"version": 1,
"tasks": []
}
FieldTypeRequiredDefaultValidation
$schemastringNoValid URL. For editor hints only; Mutsumi does not fetch it.
versionintegerYesMust be 1. Future versions may change the schema.
tasksTask[]No[]Array of task objects.
skipped_countintegerNo0
PropertyValue
Typestring
RequiredYes
Default
ValidationNon-empty string. UUIDv7 format recommended but not enforced.
"id": "01JQ8X7K3M0000000000000001"

UUIDv7 encodes a millisecond-precision timestamp, making IDs naturally sortable by creation time. Both agents and the TUI can generate IDs independently without coordination.

PropertyValue
Typestring
RequiredYes
Default
ValidationNon-empty string. Recommended 120 characters max.
"title": "Refactor Auth module"
PropertyValue
Typestring
RequiredNo
Default"pending"
ValidationMust be "pending" or "done". Unknown values trigger a warning badge.
"status": "pending"

When toggled to "done", Mutsumi auto-fills completed_at. When toggled back to "pending", completed_at is cleared.

PropertyValue
Typestring
RequiredNo
Default"inbox"
ValidationMust be one of "day", "week", "month", "inbox".
"scope": "day"

Scope determines which tab the task appears under. If omitted, scope is auto-derived from due_date. If neither scope nor due_date is set, the task falls to "inbox".

Resolution order: manual scope > due_date derivation > fallback "inbox".

PropertyValue
Typestring
RequiredNo
Default"normal"
ValidationMust be one of "high", "normal", "low".
"priority": "high"

Displayed as stars in the TUI: high = 3 stars, normal = 2 stars, low = 1 star. Tasks are grouped by priority within each scope tab.

PropertyValue
Typestring[]
RequiredNo
Default[]
ValidationArray of strings. No constraints on tag values.
"tags": ["dev", "backend", "urgent"]

Tags are displayed in the task row (space permitting) and are searchable via the / search bar.

PropertyValue
TypeTask[]
RequiredNo
Default[]
ValidationArray of task objects following the same schema (recursive).
"children": [
{
"id": "01JQ8X7K4N...",
"title": "Install PyJWT",
"status": "done",
"children": []
}
]

Nesting is unlimited at the data layer. The TUI renders 3 levels by default; deeper levels are collapsed.

PropertyValue
Typestring
RequiredNo
DefaultAuto-generated on creation
ValidationISO 8601 datetime string.
"created_at": "2026-03-21T08:00:00Z"
PropertyValue
Typestring
RequiredNo
Default
ValidationISO 8601 date string (date only, no time).
"due_date": "2026-03-25"

Used for scope auto-derivation when scope is not manually set. Overdue tasks (past due_date) are escalated to the Today tab and rendered with an overdue color indicator.

PropertyValue
Typestring
RequiredNo
Default
ValidationISO 8601 datetime string.
"completed_at": "2026-03-21T14:30:00Z"

Auto-filled when status changes to "done". Cleared when status changes back to "pending".

PropertyValue
Typestring
RequiredNo
Default
ValidationFree-form string. Markdown content is supported in the detail panel.
"description": "Change session-based auth to JWT.\nNeed to modify both middleware and routing layer."

Displayed in the detail panel (press Enter to expand).

Any field not listed above is a custom field. Mutsumi’s Pydantic model uses extra="allow", which means:

  • Custom fields are read from tasks.json and stored in memory
  • Custom fields are preserved through every read-modify-write cycle
  • Custom fields are never deleted or modified by Mutsumi
  • Custom fields can be displayed by adding them to the columns config
{
"id": "01JQ...",
"title": "Train model v2",
"status": "pending",
"estimated_minutes": 120,
"energy_level": "high-focus",
"sprint": "2026-W12",
"blocked_by": "01JQ8X7K3M0000000000000005"
}
{
"$schema": "https://mutsumi.dev/schema/v1.json",
"version": 1,
"tasks": [
{
"id": "01JQ8X7K3M0000000000000001",
"title": "Refactor Auth module",
"status": "pending",
"scope": "day",
"priority": "high",
"tags": ["dev", "backend"],
"created_at": "2026-03-21T08:00:00Z",
"due_date": "2026-03-25",
"description": "Change session-based auth to JWT",
"children": [
{
"id": "01JQ8X7K3M0000000000000002",
"title": "Install PyJWT",
"status": "done",
"priority": "normal",
"tags": [],
"completed_at": "2026-03-21T09:30:00Z",
"children": []
},
{
"id": "01JQ8X7K3M0000000000000003",
"title": "Write middleware",
"status": "pending",
"priority": "normal",
"tags": [],
"children": []
}
]
},
{
"id": "01JQ8X7K3M0000000000000004",
"title": "Buy coffee beans",
"status": "pending",
"scope": "inbox",
"priority": "low",
"tags": ["life"],
"children": []
}
]
}