Tasks
Tasks are the universal verb of the brain: every commitment, follow-up, and unit of work the assistant should keep track of. They live in the same database as memories and CRM rows, so the assistant reads, writes, and reasons over them without crossing a service boundary.
Shape of a task
A v1 task is intentionally narrow: title, status, optional assignee, optional due date, tags, an optional parent for sub-tasks, and a free-form external_ref for synced rows. No typed priority / description / estimate columns: sprint estimation and ordering go into a single attributes JSONB bag (added by migration 161). Workspace-scoped; tasks die with their workspace.
Status
Five states: todo, in_progress, blocked, done, archived. listTasks excludes archived by default. There is no deleteTask in v1: soft-delete via status='archived' covers it without confirmation prompts.
Assignees
assignee_id is an FK to workspace_members, not users. When a teammate leaves the workspace, the assignee clears (SET NULL) but the work survives. The assistant resolves a named teammate via the listWorkspaceMembers tool.
Chat tools
Six tools, on for every primary and standard assistant by default, off for kind='app' assistants like the Threads distribution app. Toggle the whole group from Assistant Settings → Capabilities → Tasks. Same allow/ask/block enum lives on the underlying capability so future promotion to ask-mode needs no migration.
saveTask · getTask · listTasks · updateTask · closeTask · reopenTask
Tasks vs scheduled tasks
Workspace Tasks are durable forward-commitments visible to every workspace member and to the assistant. Scheduled tasks (see Tools & tasks) are cron-style jobs that fire on a timer to run an assistant turn. Different primitives; the assistant can use one to remember to schedule the other.