Todoist CLI
CLI client for Todoist task manager (sachaos/todoist v0.23+).
Quick Start
# List all tasks todoist list todoist l # Quick add with natural language todoist quick 'Buy milk tomorrow #Shopping @errands p1' todoist q 'Team meeting every Monday 2pm #Work' # List with filters todoist list --filter 'today & p1' todoist list --filter '#Work & @urgent' # Complete task todoist close <task-id> # Sync local cache todoist sync
Core Commands
| Command | Alias | Usage |
|---|---|---|
list | l | Show all tasks |
quick | q | Add task with natural language |
add | a | Add task (structured) |
close | c | Complete task |
modify | m | Edit task |
delete | d | Delete task |
show | - | Task details |
projects | - | List projects |
add-project | ap | Create project |
labels | - | List labels |
sync | s | Update local cache |
Adding Tasks
Before Adding: Clarify Requirements
When user requests to add a task, check if details are unclear or incomplete. Ask clarifying questions BEFORE creating the task:
- •Vague goals: "Research X" → What specifically? What's the desired outcome?
- •Missing context: "Fix bug" → Which bug? Where? What's broken?
- •Unclear scope: "Update docs" → Which docs? What needs updating?
- •No deadline mentioned for time-sensitive work: When is this needed?
- •Ambiguous priority: Is this urgent? Blocking other work?
Example: User: "Add task to research banks" You: "I can add that. To make it actionable, could you clarify:
- •What specific aspects? (fees, online banking, international transfers?)
- •What's the goal? (opening account, comparing options?)
- •Any constraints? (country-specific, business vs personal?)"
Then create a well-formed task: "Research Danish bank accounts: easy online signup, lowest fees, foreigner-friendly"
Quick Add (Recommended)
Use todoist quick for natural language:
# Basic task todoist q 'Write report' # With project and labels todoist q 'Email client #Work @email @urgent' # With date and priority todoist q 'Call dentist tomorrow at 2pm p1' # Recurring task todoist q 'Water plants every Monday #Home' # All together todoist q 'Review PRs every weekday 9am #Work @code p2'
Natural language symbols:
- •
#Project- assign to project - •
@label- add labels (multiple allowed) - •
p1-p3- priority (p1=highest, p4=none) - •Date/time -
tomorrow,next week,Jan 15,at 3pm - •Recurring -
every Monday,every 2 weeks,daily
Structured Add
Use todoist add when quick fails with special characters:
todoist add 'Task name' --project-name 'Project' --priority 1 --date 'tomorrow'
Note: add has issues with hyphens in task names. Prefer quick.
Filtering Tasks
Use --filter with todoist list:
Date Filters
--filter 'today' # Due today --filter 'tomorrow' --filter 'overdue' # or 'od' --filter 'no date' # Unscheduled --filter 'date: Jan 15' # Specific date --filter 'date before: May 5' # Before date --filter 'date after: May 5' # After date
Priority Filters
--filter 'p1' # Priority 1 (highest) --filter 'p2' # Priority 2 --filter 'p3' # Priority 3 --filter 'no priority' # No priority (p4)
Organization Filters
--filter '#Project' # Specific project --filter '##Project' # Project + subprojects --filter '@label' # With label --filter '@home*' # Wildcard labels --filter 'no labels' # Without labels
Search
--filter 'search: keyword' # Text search
Logical Operators
--filter '(today | tomorrow) & p1' # OR + AND --filter '#Work & @urgent & !@waiting' # NOT --filter '(overdue | today) & (p1 | p2)' # Grouping
Complex Examples
# High priority tasks due soon todoist list --filter '(overdue | today | tomorrow) & (p1 | p2)' # Work tasks excluding meetings todoist list --filter '#Work & !search: meeting' # Urgent home tasks todoist list --filter '#Home & @urgent'
Recurring Tasks
Absolute Recurrence (every)
Next occurrence always on specific day:
todoist q 'Standup every weekday 9am #Work' todoist q 'Review metrics every Monday 10am' todoist q 'Pay rent every 1st #Finance' todoist q 'Dentist every 6 months'
Patterns:
- •
every day,daily - •
every Monday,every Mon, Fri - •
every 2 weeks - •
every 15th(day of month) - •
every 3rd Friday - •
every last day(of month)
Relative Recurrence (every!)
Next occurrence from completion date:
todoist q 'Change air filter every! 3 months #Home' todoist q 'Review goals every! 2 weeks'
Use every! when task should recur from when you complete it, not from scheduled date.
With Boundaries
todoist q 'Daily standup every day starting next Monday' todoist q 'Summer task every week ending Aug 31' todoist q 'Trial period every day for 2 weeks'
Date Formats
One-Time Dates
today, tod, tomorrow, tom next week, next month Jan 27, 27 jan, 27/1 01/27/2026, 2026-01-27 end of month
With Time
today at 10 # 10am tomorrow at 16:00 Fri @ 7pm in the morning # 9am in the afternoon # 12pm in the evening # 7pm
Relative
in 5 days, +5 days in 3 weeks in 2 hours
Projects
# List projects todoist projects # Create project todoist add-project 'Project Name' todoist ap 'Work Stuff' --color 42 # List project tasks todoist list --filter '#ProjectName'
Common Workflows
Daily Review
# Check overdue and today's tasks todoist list --filter '(overdue | today)' # High priority items todoist list --filter '(overdue | today) & (p1 | p2)'
Weekly Planning
# Next 7 days todoist list --filter 'date before: +7 days' # By project todoist list --filter '#Work' todoist list --filter '#Personal'
Quick Capture
# Dump to inbox todoist q 'Task name' # With context todoist q 'Task #Project @label p1'
Task Management
# Complete task todoist close <id> # Delete task todoist delete <id> # Modify task todoist modify <id> --content 'New name' --priority 1
Best Practices
- •Always use
todoist quickfor adding tasks - handles natural language best - •Run
todoist syncafter external changes (web/mobile) - •Use filters extensively - more powerful than scrolling
- •Prefer
every!for maintenance tasks - recur from completion, not schedule - •Use project tags in quick add -
#Projectfaster than--project-name - •Combine filters -
(overdue | today) & p1 & #Work - •Wildcards for label families -
@home*matches@home-repair,@home-garden
Global Flags
Add to any command:
--color # Colorize output --namespace # Show parent tasks hierarchically --indent # Indent subtasks --project-namespace # Show parent project structure --csv # CSV export
Config
Location: ~/.config/todoist/config.json
{
"token": "your_api_token",
"color": "true"
}
Get token from: Todoist Settings → Integrations → Developer → API token