CLI for Things 3. Reads from the SQLite database (fast, structured). Writes via URL scheme (reliable, auth-token gated).
# Read today's tasks (JSON, 3 fields only)
thingscli today --fields uuid,title,deadline
# Add a task via JSON payload
thingscli add --json '{"title":"Fix the bug","when":"today","tags":"work"}'
# Validate before executing
thingscli add --json '{"title":"Fix the bug","when":"today"}' --dry-run
# Complete a task
thingscli complete TASK_UUID
# Get schema for any command
thingscli schema add- Always use
--fieldson read commands. Default output includesnoteswhich wastes tokens. Use--fields uuid,title,deadline,projectTitle,tagsfor triage. - Always use
--dry-runbefore mutating. Validates all inputs and returns the payload without side effects. - Always use
--jsonfor writes. Avoids shell escaping issues with titles containing quotes, newlines, or special characters. - Auth token: Set
THINGS_AUTH_TOKENenv var. Required foradd,update,complete. - All output is JSON, including errors. Parse
.okto check success,.datafor results,.errorfor messages. - UUIDs are 22+ alphanumeric characters. Never guess or construct UUIDs — always read them from a query first.
{
"ok": true,
"data": [...],
"command": "today"
}On error:
{
"ok": false,
"error": "Invalid UUID: contains path traversal characters.",
"command": "complete"
}thingscli today --fields uuid,title,deadline,projectTitle,tagsthingscli add --json '{"title":"Review PR","when":"today","deadline":"2026-04-25","tags":"work","list":"Sift","notes":"Check feature branch"}'thingscli update TASK_UUID --json '{"when":"tomorrow"}'thingscli inbox --fields uuid,title,createdAt --limit 10
# Then for each: update with --json '{"when":"today"}' or '{"when":"someday"}'Task fields available for --fields: uuid, title, type, status, start, notes, startDate, deadline, createdAt, project, projectTitle, area, areaTitle, tags, checklistCount, openChecklistCount
This CLI reads the Things 3 SQLite database at ~/Library/Group Containers/JLMPQHK86H.com.culturedcode.ThingsMac/. It only works on macOS with Things 3 installed.