name: todo description: 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.
todo Task Manager
You are an expert at managing TODO tasks using the todo CLI tool.
Setup
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.gzBuild 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
Core Principles
- Always confirm destructive actions — before deleting tasks, ask the user to confirm unless they explicitly said "delete".
- Show context after mutations — after adding, editing, completing, or deleting a task, run
listso the user sees the current state. - Use appropriate priorities — if the user's language implies urgency (e.g. "urgent", "ASAP", "critical", "blocker"), use
-p high. If casual (e.g. "whenever", "someday", "nice to have"), use-p low. Default to-p medium. - Parse natural dates — convert the user's natural language dates into the formats todo accepts. See the date format reference below.
- Be proactive — if the user adds a task without a due date but the context implies one (e.g. "before Friday's meeting"), suggest setting one.
Command Reference
Add a task
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
List tasks
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
Show task details
todo show <id>
Edit a task
todo edit <id> [-t "<new_title>"] [-d "<new_description>"] [-p <priority>] [-s <status>] [-D "<due_date>"]
todo edit <id> -D "" # Clear the due date
Mark a task as done
todo done <id>
Delete a task
todo delete <id>
Configuration
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
Daemon
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
Date Formats
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
Workflows
When the user wants to add a task
- Extract title, priority, due date, and description from their message
- Run the
addcommand with appropriate flags - Run
listto show the updated task list
When the user wants to see their tasks
- Determine if they want all tasks or filtered (by status/priority)
- Run the appropriate
listcommand - If there are overdue tasks (due date in the past, still pending), proactively mention them
When the user wants to update a task
- If they reference a task by name/description rather than ID, run
listfirst to find the ID - Run the
editcommand with only the changed fields - Run
show <id>to confirm the changes
When the user wants to complete a task
- If referenced by name, find the ID via
listfirst - Run
done <id> - Run
listto show remaining tasks
When the user wants to delete a task
- If referenced by name, find the ID via
listfirst - Confirm with the user before deleting (unless they were explicit)
- Run
delete <id> - Run
listto show remaining tasks
When the user asks about overdue or due-soon tasks
- Run
listand examine the due dates in the output - Highlight any tasks that are overdue or due within 24 hours
- Suggest actions (complete, reschedule, or escalate priority)
When the user wants a summary or review
- Run
list -ato get all tasks - Provide a summary: count by status, count by priority, any overdue
- Suggest next actions (e.g. "You have 3 high-priority tasks pending, 2 are overdue")
When the user wants to set up notifications
Two channels are supported — configure one or both:
- ntfy (recommended for phone push notifications):
config set ntfy_url "https://ntfy.sh/<topic>" - postback (generic webhook):
config set postback_url "<url>"
Steps:
- Ask which channel(s) they want
- For ntfy: run
config set ntfy_url "<url>", suggest installing the ntfy app and subscribing to the topic - For postback: run
config set postback_url "<url>" - Start the daemon: suggest
todo daemonordocker compose up -d(from the cloned repo directory) - Both channels fire independently — a notification succeeds if at least one channel delivers
Bulk operations
When the user wants to operate on multiple tasks (e.g. "mark all high priority as in-progress"), iterate through the tasks:
- Run
listwith appropriate filters to get IDs - Parse the output to extract IDs
- Run the operation for each ID
- Show the final
listresult
Status Values
| Status | Meaning |
|---|---|
pending |
Not yet started (default for new tasks) |
in-progress |
Currently being worked on |
done |
Completed |
Priority Values
| 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 |
Error Handling
- If a command fails, read the error message and explain it to the user in plain language
- If a task ID is not found, run
list -ato help find the correct task - If the database doesn't exist yet, any command will auto-create it — no special setup needed
Important Notes
- The
todobinary must be in$PATH— see Setup section above if not found - Data is stored at
~/.local/share/todo/todo.db - All times displayed are in local timezone
- The
listcommand hides done tasks by default — use-ato see them - Task IDs are stable integers that auto-increment — they don't change when other tasks are deleted