create_task_or_note
- Category: tasks
- Access: write
- Audience: ordinary (an ordinary user normally calls this directly)
Purpose
Creates one task or note. The everyday write entry point: a task is actionable work tracked to done, a note is durable long-form content. Call it when new work, findings, or decisions must persist beyond the current session.
Arguments
Required: title.
Optional: assignee, description, due_date, notes, parent_id, priority, project, recurring, reminder_at, section, type.
-
title: Task title (required). -
assignee. Note: Accepted by the schema but intentionally not stored at creation (oracle parity). Use assign_task afterwards, which records shared_by as the calling principal. -
description: Primary task/note body and main long-form content. Note: Primary long-form content. notes is only for auxiliary or machine-readable metadata. -
due_date: YYYY-MM-DD format or empty to skip. -
notes: Secondary/internal notes or machine-readable metadata. -
parent_id: UUID of parent task (for subtasks). -
priority: low | medium | high | critical. -
project: Project tag for grouping. -
recurring: JSON config for recurrence (e.g. '{"every":"week","day":"monday"}'). -
reminder_at: ISO datetime for reminder (e.g. '2026-03-15T14:00:00'). -
section: inbox | today | next | someday | waiting. -
type: task | note.
Result
JSON object with task_id (new UUID), title, type, and status (always not_started on creation).
Boundaries
Stored within the selected profile boundary only; visible only to principals whose project grants cover the given project. Untagged (no project) content lives in the untagged enclave and fails closed for principals without that grant. Creation never crosses profiles.
Lifecycle / side effects
Creates the task and records an audit/history event through the canonical mutation path. New tasks start not_started. No undo tool exists; later movement uses update_task (archive/cancel), which preserves history per the no-delete invariant.
Errors
Missing title is rejected by validation. Unknown arguments are rejected (strict validator). Out-of-scope project values deny generically. If the operation fails, nothing is partially created (atomic).
Example
{
"project": "shared-ops",
"section": "next",
"title": "Draft Paul pack README",
"type": "task"
}
Result shape:
{
"status": "not_started",
"task_id": "<uuid>",
"title": "Draft Paul pack README",
"type": "task"
}
task_id is assigned by the server; the placeholder stands for the returned UUID.
See also
update_task, query_tasks, assign_task, upsert_note_by_title_project.