Skip to main content

A CLI tool for managing personal TODOs across life categories and project directories

Project description

todo-cli-tool

A fast, project-aware CLI for managing personal TODOs across your life.


GitHub Repo stars License PyPI CI

Manage TODOs from the terminal with priorities, life categories, and automatic project detection. Integrates with Claude Code via per-project .todos.md files and CLAUDE.md pointers.

Features

  • Life Categories: Organize TODOs across Work, Family, Health, Hobbies, and custom categories.
  • Priority System: Five priority levels (Critical to None) with color-coded Rich output.
  • Project-Aware: Auto-detects your project from the working directory — no flags needed.
  • Claude Code Integration: Auto-generates .todos.md and updates CLAUDE.md so your AI assistant always knows your TODOs.
  • Beautiful Output: Rich-powered tables and detail panels with overdue highlighting.
  • Single YAML Store: All TODOs in one file (~/.todo/todos.yml) — easy to backup, sync, or inspect.

Demo

$ todo add "Implement auth middleware" -p 1 -c Work -dd 2026-04-01 -t backend,auth
Created TODO [a3f7b2]: Implement auth middleware

$ todo list
┏━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃ ID       ┃ Pri        ┃ Title                      ┃ Category     ┃ Status       ┃ Due            ┃
┡━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ a3f7b2   │ Critical   │ Implement auth middleware   │ Work         │ todo         │ 2026-04-01     │
└──────────┴────────────┴────────────────────────────┴──────────────┴──────────────┴────────────────┘

$ todo done a3f7b2
Marked [a3f7b2] as done

Tech Stack

Getting Started

Prerequisites

  • Python 3.11 or higher
  • uv (recommended) or pip

Install from PyPI

pipx install todo-cli-tool

Or install from source

git clone https://github.com/lucasluize-tech/cli-todo.git
cd cli-tools
uv venv --python 3.13
source .venv/bin/activate
uv pip install -e .

Add todo to your PATH

Symlink the binary so it's available globally, without needing to activate the venv:

ln -sf "$(pwd)/.venv/bin/todo" ~/.local/bin/todo

Make sure ~/.local/bin is in your PATH. Then you can run todo from anywhere.

Verify the installation

todo --help

Usage

Managing TODOs

# Add a TODO with priority, category, due date, and tags
todo add "Buy groceries" -p 2 -c Family -dd 2026-04-15 -t errands

# List all TODOs
todo list -a

# List TODOs for the current project (auto-detected)
todo list

# Filter by category, priority, status, or tag
todo list -c Work -p 1
todo list --tag backend

# Show full details of a TODO
todo show a3f7b2

# Edit a TODO
todo edit a3f7b2 --title "New title" -p 3

# Mark as in-progress or done
todo start a3f7b2
todo done a3f7b2

# Archive completed TODOs
todo archive a3f7b2
todo archive --all-done

# Delete a TODO (with confirmation)
todo delete a3f7b2

Configuration

Project Roots (important!)

Project roots are parent directories that contain your projects. The tool uses these to auto-detect which project you're working in based on your current directory.

By default, ~/projects and ~/work are configured. If your projects live elsewhere, add your own roots:

# List configured project roots
todo config roots list

# Add a project root
todo config roots add ~/code
todo config roots add ~/personal

# Remove a project root
todo config roots remove ~/work

How it works: If ~/projects is a root and you run todo add from ~/projects/my-app, the tool detects my-app as the project. TODOs are tagged with this project and a .todos.md file is generated at ~/projects/my-app/.todos.md.

If your cwd is not inside any configured root, no project is detected and no .todos.md is generated.

Categories and Defaults

# List categories
todo config categories list

# Add/remove categories
todo config categories add "Pets"
todo config categories remove "Social"

# Set defaults
todo config defaults set priority 2
todo config defaults set category "Family"

Project Integration

# Regenerate .todos.md and CLAUDE.md for the current project
todo generate

# Regenerate for all projects
todo generate -a

When you run todo add or todo done from within a configured project root, the tool automatically:

  1. Detects the project from your working directory
  2. Regenerates .todos.md at the project root
  3. Updates the CLAUDE.md pointer with open TODO counts

Project Structure

cli-tools/
├── src/todo/
│   ├── cli.py          # Typer app, command definitions
│   ├── models.py       # Pydantic models (Todo, Config)
│   ├── store.py        # YAML read/write, file locking
│   ├── renderer.py     # Rich output formatting
│   ├── project.py      # Project detection, .todos.md generation
│   ├── config.py       # User config management
│   └── sync.py         # Cloud sync interface (stub)
├── tests/              # 109 tests, 84% coverage
├── .github/workflows/  # CI + Release pipelines
└── pyproject.toml

Contributing

This is an open-source project and contributions are welcome.

Fork the repository, make your changes, and open a pull request. Please ensure tests pass before submitting:

uv run pytest
uv run ruff check src/ tests/
uv run ruff format --check src/ tests/

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

todo_cli_tool-0.1.1.tar.gz (37.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

todo_cli_tool-0.1.1-py3-none-any.whl (14.3 kB view details)

Uploaded Python 3

File details

Details for the file todo_cli_tool-0.1.1.tar.gz.

File metadata

  • Download URL: todo_cli_tool-0.1.1.tar.gz
  • Upload date:
  • Size: 37.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for todo_cli_tool-0.1.1.tar.gz
Algorithm Hash digest
SHA256 ca93e53ea5c00b9fbfdd41502f538dc554d7ff9866b85cee636771795a7d7368
MD5 0ab0a115c02da75d28f4df8d840b5e38
BLAKE2b-256 c88818761292db7a682dfd7ec9dffd6f8d00daf6fea72cd3b37e2f193d8e70c4

See more details on using hashes here.

Provenance

The following attestation bundles were made for todo_cli_tool-0.1.1.tar.gz:

Publisher: release.yml on lucasluize-tech/cli-todo

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file todo_cli_tool-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: todo_cli_tool-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 14.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for todo_cli_tool-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c6f22f8b6c0bb8d9adf122048b6c2ab28032269cb9314847f89acc63a66fb820
MD5 3a8fcc348fb898dac7f58fdf21ae87cf
BLAKE2b-256 63461a4346d307761002488db2fa0dc8c101a3027cdc01541260b4d29cf1e161

See more details on using hashes here.

Provenance

The following attestation bundles were made for todo_cli_tool-0.1.1-py3-none-any.whl:

Publisher: release.yml on lucasluize-tech/cli-todo

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page