Install
openclaw skills install @alexarevalo9/ticktickInclude Inbox tasks and habits in complete TickTick Today queries.
openclaw skills install @alexarevalo9/ticktickDrive TickTick from the shell with the exec tool, using ticktick — the official CLI wrapping TickTick Open API v1.
This runs on a headless Debian server: no browser, no display. Local time is America/Guayaquil (UTC-5, no DST).
Run ticktick auth status.
{baseDir}/references/setup.md. Never run ticktick auth login; it waits on a browser that does not exist here and hangs the turn until it times out.Never run ticktick auth logout unless explicitly asked — the token can only be replaced through manual browser steps.
Task titles come from user messages and get interpolated into shell commands. A title containing backticks, $(...), ;, or && becomes executable if passed unquoted. Always wrap user-supplied text in single quotes, escaping any embedded single quote as '\'':
ticktick task create --title 'Pagar la luz' --project <projectId>
Never paste a raw message straight into a command string. This is a server with shell access; a task titled foo; rm -rf ~ should create a task with a silly name, not delete a home directory.
Users speak in names ("agrégalo a Trabajo"); every command wants a hex ID. So the first action in a session is nearly always:
ticktick project list --json
Reuse that result for the rest of the session — projects rarely change, and re-listing every turn adds a round-trip the user waits through on Telegram. Re-run only if a project seems missing or was just created.
Match names case-insensitively, tolerating accents and partial matches. One plausible match → use it. Several → show them and ask. None → say so and list what exists, rather than inventing an ID; a fabricated hex string produces a cryptic API error instead of a useful "that project doesn't exist".
Tasks with no project live in Inbox. In the current CLI, Inbox is not reliably returned by project list. Never assume a list of project IDs covers Inbox; for account-wide task reads, prefer commands without a --projects restriction when supported.
The CLI passes datetimes straight to the API. A bare 2026-08-09T09:00:00 or one ending in +0000 lands five hours off for this user. Always write -0500 and set the timezone:
--due-date '2026-08-09T09:00:00-0500' --time-zone 'America/Guayaquil'
Use --all-day with a midnight-local time for all-day tasks. Resolve "mañana", "el viernes", "en dos semanas" against today's date before building the command — the CLI does no natural-language date parsing.
Priority is numeric and skips values: 0 none, 1 low, 3 medium, 5 high. There is no 2 or 4.
Status: 0 open, 2 completed, -1 abandoned.
# Read
ticktick project list --json # all projects
ticktick project data <projectId> --json # project + its OPEN tasks + columns
ticktick task get <projectId> <taskId> --json
# Create
ticktick task create --title 'Buy milk' --project <projectId>
ticktick task create --title 'Team sync' --project <projectId> \
--priority 3 --due-date '2026-08-11T15:00:00-0500' \
--time-zone 'America/Guayaquil' --tags work,meetings
# Update — taskId appears twice, positional AND --id
ticktick task update <taskId> --id <taskId> --project <projectId> --title 'New title'
# Finish / remove
ticktick task complete <projectId> <taskId>
ticktick task delete <projectId> <taskId> # destructive, see below
# Move between projects
ticktick task move --from <srcProjectId> --to <dstProjectId> --task <taskId>
# Query
ticktick task filter --projects <id1>,<id2> --status 0 \
--start-date '2026-08-08T00:00:00-0500' --end-date '2026-08-08T23:59:59-0500'
ticktick task completed --projects <projectId> --start-date '...' --end-date '...'
# Tags
ticktick tag list
ticktick tag create --name urgent --label urgent
--json works on every command. Use it whenever parsing; use plain output only when showing it verbatim, which is rare.
Habits, focus/pomodoro records, comments, project groups and kanban columns are supported too. Full flag tables, field meanings, reminder syntax (TRIGGER:-PT60M) and recurrence syntax (RRULE:FREQ=WEEKLY;BYDAY=MO,WE) live in {baseDir}/references/cli-reference.md — read it when the request goes beyond the commands above.
There is no today command. Reconstruct the complete Today view, including scheduled tasks, all-day tasks, untimed Inbox tasks due today, project tasks due today, and habits:
--projects:
ticktick task filter --status 0 \
--start-date '<today>T00:00:00-0500' \
--end-date '<today>T23:59:59-0500' --json
--projects restriction from project list; that silently excludes Inbox in the current CLI.ticktick habit list --json. For active habits scheduled today, use ticktick habit checkins --habits <id1>,<id2> --from <YYYYMMDD> --to <YYYYMMDD> --json to report today's checked/unchecked state.For "overdue", query tasks without --projects, set --start-date a year back, and set --end-date to now.
The CLI has no title search. Resolve it:
ticktick project data <projectId> --json, match on title.task filter --status 0 across all projects, match there.Capture both taskId and projectId when found; every mutation needs both.
task update with a new --due-date. Keep the existing time-of-day unless a new one was given — "pásalo al viernes" means the same hour on Friday, not midnight.
task delete is irreversible and there is no recovery command here. Ask first, always, even when the instruction seems unambiguous.
Completing is reversible, so just do it when asked.
For anything touching multiple tasks — "limpia lo viejo", "borra todo en Archivo" — show the list first (numbered, title + due date), get confirmation, then execute. Vague bulk instructions are where an agent quietly destroys a week of someone's planning.
Replies land on Telegram, in a narrow phone window:
Listo — 'Llamar al dentista' creada en Personal, vence mañana 10:00.{baseDir}/references/setup.md); do not attempt auth login.project list --json once, then retry. Still failing → tell the user instead of probing further.Say what actually happened. "No pude crear la tarea, el token expiró" is useful; "algo salió mal" sends the user to SSH into the server themselves.