URI: 
       Staying Organized with todo.txt and the todo CLI
       
       Published on : 2026-04-17 12:40
       
       Keeping track of tasks shouldn't require a complex system. 
       Sometimes, a simple text file is all you need. That's where 
       todo.txt and the todo CLI shine.
       
       What is todo.txt?
       ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
       todo.txt is a plain text-based task management system. Each task 
       lives on its own line in a file called todo.txt. No databases, no 
       lock in, just simple, portable text.
       
            - Buy groceries
            - Finish blog post +writing
            - Call Alice @phone
       
       Why use the todo CLI?
       ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
       The todo CLI is a command-line tool that helps you manage your 
       todo.txt file efficiently. It adds structure without sacrificing 
       simplicity. Benefits:
       
        * Fast and keyboard-driven
        * Works anywhere (local, SSH, containers)
        * Easy to version control
        * Completely transparent format
       
       Getting Started
       ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
  HTML  Install the CLI (varies by system)
       
       then initialize your todo list:
       
           todo.sh add "Write first task"
       
       List your tasks:
       
           todo.sh ls
       
       Mark a task as done:
       
           todo.sh do 1
       
       That's it - you're already using it.
       
       Organizing Tasks
       ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
        Projects with +
        ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
       Use +project to group tasks:
       
           todo.sh add "Fix login bug +website"
           todo.sh add "Write landing page +website"
       
        Contexts with @
        ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
       Use @context to indicate where, who or how a task gets done:
       
           todo.sh add "Email client @work"
           todo.sh add "Buy milk @errands"
       
        Priorities
        ‾‾‾‾‾‾‾‾‾‾
       Add priorities like (A), (B):
       
           todo.sh add "(A) Finish report"
       
        Searching and Filtering
        ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
       You can quickly filter tasks:
       
           todo.sh list +website
           todo.sh list @work
       
       This makes it easy to focus on what matters right now.
       
       Highlighting Due and Overdue Tasks
       ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
       One small tweak made a big difference in my workflow: 
       automatically showing urgent tasks whenever I open a terminal.
       
       Here's the function I use:
       
           todo_check() {
               today=$(date +%Y-%m-%d)
               # Process the output of todo.sh line by line
               t ls | while read -r line; do
               # Extract the date in [] if it exists
               if [[ "$line" =~ ([0−9]4−[0−9]2−[0−9]2) ]]; then
                   due_date="${BASH_REMATCH[1]}"
                   if [[ "$due_date" < "$today" ]]; then
                       # Overdue: Red
                       echo -e "\e[1;31m$line\e[0m"
                   elif [[ "$due_date" == "$today" ]]; then
                       # Due Today: Yellow
                       echo -e "\e[1;33m$line\e[0m"
                   fi
               fi
               done
           }
       
       How it works
       ‾‾‾‾‾‾‾‾‾‾‾‾
        * it grabs today's date in YYYY-MM-DD format
        * scans each task for a date (like [2026-04-10])
        * compares it with today
        * highlights overdue tasks in red
        * highlights tasks due today in yellow
       
       Running it automatically
       ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
       To make this part of my daily flow, I call it whenever I start 
       a new terminal. Add this to your shell config (~/.bashrc, 
       ~/.zshrc, etc.):
       
           todo_check
       
       Here's another post in which I describe how I organize my .bashrc
       with imports from other files:
       
   DIR  How I Organize My .bashrc with Imports
       
       Screenshots of this function in action
       ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
   IMG  Adding tasks
       
       In the above screenshot you can see I use t add. That's because I h
       
           alias t='/home/sava/.config/todo/todo.sh'
       
   IMG  Showing overdue tasks
       
       As you can see, whenever I fire up a new terminal tasks overdue 
       are shown in red and today's tasks are shown in yellow.
       
       Now every new terminal session gives me a quick, visual reminder 
       of what actually needs attention - no extra commands required.
       
       Why It Works
       ‾‾‾‾‾‾‾‾‾‾‾‾
       The power of todo.txt comes from constraints:
       
        * no over-engineering
        * no distractions
        * just tasks
       
       Because it's plain text, you can:
       
        * sync it with Git
        * edit it in any editor
        * script around it
       
       Tips for Daily Use
       ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
        * keep it open in a terminal tab
        * review tasks in the morning
        * archive completed tasks regularly
        * don't overcomplicate your tagging
       
       Final Thoughts
       ‾‾‾‾‾‾‾‾‾‾‾‾‾‾
       If you're tired of bloated productivity apps, give todo.txt a try. 
       It's minimal, flexible, and surprisingly powerful.
       
  HTML  Todo.txt If you want to get it done, first write it down
       
       Sometimes, the best tool is just a text file and a few well 
       placed shell functions.
       
   DIR  Back to my phlog