A minimalist, interactive command-line task manager built with Python.
- Interactive prompts — arrow-key navigable menus when you omit an argument
- Rich output — clean, formatted tables via the
richlibrary - Filtering & sorting — slice your task list by status, category, priority, or date
- Import / export — move tasks between machines with JSON
- Reports — generate Markdown or HTML reports with one command
- Local first — SQLite-backed, zero-configuration, works offline
# uv (recommended)
uv tool install odot
# pipx
pipx install odot
# pip
pip install odotodot add "Buy groceries" -p 2 -c home # add a task (database created automatically)
odot list # view all tasks
odot list --todo --sort priority # open tasks, sorted by priorityThe database defaults to
~/.odot/db.sqlite. Override with theODOT_DB_PATHenvironment variable.
odot add "Submit quarterly report" -p 3 -c work # add
odot show # interactive detail view
odot done 1 # mark task 1 as done
odot undo 1 # re-open task 1
odot update # interactive update
odot update 1 --content "Revised name" --done # explicit update
odot rm # interactive delete
odot rm 1 --force # skip confirmationodot search "groceries"
odot list --done # completed tasks only
odot list -c work --todo # open work tasks
odot list --sort priority --reverse # descending priorityodot export backup.json --todo # export open tasks
odot import backup.json # append from file
odot import backup.json --clear # replace all tasks
odot report tasks.md --sort priority # Markdown report
odot report work.html --todo -c work # filtered HTML reportodot clean # remove completed tasks (prompts for confirmation)
odot clean --force # skip confirmation
odot purge # remove all tasks (prompts for confirmation)
odot purge --force # skip confirmationgit clone https://github.com/jkomalley/odot.git && cd odot
uv syncjust test # run pytest
just test-cov # enforce 100% coverage
just check # ruff + ty + tests