Manages TODO tasks using the todo CLI. Use this skill when the user wants to create, list, update, complete, delete, or search TODOs, manage task priorities and due dates, check overdue items, or configure the todo notification daemon. Handles all task management workflows.
You are an expert at managing TODO tasks using the todo CLI tool.
Before running any commands, verify todo is available:
which todo || todo version
If todo is not found, help the user install it:
From GitHub releases (recommended):
# Determine platform
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m); [ "$ARCH" = "x86_64" ] && ARCH="amd64"; [ "$ARCH" = "aarch64" ] && ARCH="arm64"
VERSION=$(curl -s https://api.github.com/repos/vivek/todod/releases/latest | grep tag_name | cut -d '"' -f 4)
# Download and install
curl -L "https://github.com/vivek/todod/releases/download/${VERSION}/todo-${VERSION}-${OS}-${ARCH}.tar.gz" -o /tmp/todo.tar.gz
tar xzf /tmp/todo.tar.gz -C /tmp todo
sudo mv /tmp/todo /usr/local/bin/todo
rm /tmp/todo.tar.gz
Build from source (requires Go 1.24+):
git clone https://github.com/vivek/todod.git
cd todod
go build -o todo .
sudo mv todo /usr/local/bin/todo
After installation, confirm it works: todo version
list so the user sees the current state.-p high. If casual (e.g. "whenever", "someday", "nice to have"), use -p low. Default to -p medium.todo add "<title>" [-d "<description>"] [-p <low|medium|high>] [-D "<due_date>"]
Examples:
todo add "Deploy v2.0 to production" -p high -D "2026-03-10T14:00:00Z"
todo add "Write unit tests for auth" -d "Cover login, logout, and token refresh" -p medium
todo add "Read Go blog post" -p low
todo list # Active tasks (pending + in-progress), sorted by priority then due date
todo list -a # All tasks including done
todo list -p high # Only high priority
todo list -s in-progress # Only in-progress
todo list -s pending -p high # Pending + high priority
todo show <id>
todo edit <id> [-t "<new_title>"] [-d "<new_description>"] [-p <priority>] [-s <status>] [-D "<due_date>"]
todo edit <id> -D "" # Clear the due date
todo done <id>
todo delete <id>
todo config set ntfy_url "<ntfy_topic_url>" # ntfy push notifications
todo config set postback_url "<webhook_url>" # generic webhook
todo config get ntfy_url
todo config get postback_url
todo daemon # Start daemon (checks every 60s)
todo daemon -i 30 # Check every 30 seconds
The daemon can also be run via Docker:
# From the cloned todod repo directory:
docker compose up -d # Start
docker compose logs -f # View logs
docker compose down # Stop
todo accepts these date formats for the -D flag:
| User says | Convert to | Flag value |
|---|---|---|
| "tomorrow" | Next day, midnight local | 2026-03-05 (calculate from current date) |
| "next Monday" | The coming Monday | 2026-03-09 (calculate from current date) |
| "March 10" | That date | 2026-03-10 |
| "March 10 at 2pm" | Date + time local | 2026-03-10 14:00 |
| "in 3 days" | Current date + 3 | Calculate and use YYYY-MM-DD |
| "end of week" | Coming Friday | Calculate and use YYYY-MM-DD |
| "end of month" | Last day of current month | Calculate and use YYYY-MM-DD |
| Explicit ISO | Pass through | 2026-03-10T14:00:00Z |
Always calculate the actual date from the current date/time before passing to todo. Use date command if needed to compute relative dates:
date -d "+3 days" +%Y-%m-%d # 3 days from now
date -d "next friday" +%Y-%m-%d # Next Friday
add command with appropriate flagslist to show the updated task listlist commandlist first to find the IDedit command with only the changed fieldsshow <id> to confirm the changeslist firstdone <id>list to show remaining taskslist firstdelete <id>list to show remaining taskslist and examine the due dates in the outputlist -a to get all tasksTwo channels are supported — configure one or both:
config set ntfy_url "https://ntfy.sh/<topic>"config set postback_url "<url>"Steps:
config set ntfy_url "<url>", suggest installing the ntfy app and subscribing to the topicconfig set postback_url "<url>"todo daemon or docker compose up -d (from the cloned repo directory)When the user wants to operate on multiple tasks (e.g. "mark all high priority as in-progress"), iterate through the tasks:
list with appropriate filters to get IDslist result| Status | Meaning |
|---|---|
pending | Not yet started (default for new tasks) |
in-progress | Currently being worked on |
done | Completed |
| Priority | When to use |
|---|---|
high | Urgent, blockers, deadlines today/tomorrow, user says "urgent"/"critical"/"ASAP" |
medium | Normal tasks, default |
low | Nice-to-have, "whenever", "someday", low impact |
list -a to help find the correct tasktodo binary must be in $PATH — see Setup section above if not found~/.local/share/todo/todo.dblist command hides done tasks by default — use -a to see them