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/cli-tools.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.0.tar.gz (36.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.0-py3-none-any.whl (14.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: todo_cli_tool-0.1.0.tar.gz
  • Upload date:
  • Size: 36.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.0.tar.gz
Algorithm Hash digest
SHA256 88ae2ae22b684835d61fd0a7dc1e8db79fab5648ec98ca95ed36f3fe9db4aacc
MD5 2e523920d04fc32390e4c1cf12e770a3
BLAKE2b-256 dbbe6df9ff2d89466678e242b89bb0c6b95cbd4474b77910e1c7cf7a8896ae91

See more details on using hashes here.

Provenance

The following attestation bundles were made for todo_cli_tool-0.1.0.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.0-py3-none-any.whl.

File metadata

  • Download URL: todo_cli_tool-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 14.0 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5d06dbc0534934bd20f1cc8eb79b154426f0f6d0f5f18eb747162803e5bd67ee
MD5 378dee35cfeb37e5b530a0a9e0dc133f
BLAKE2b-256 477ef12d7baea23876e5e7e782eace54c666280360137854059190848247fae3

See more details on using hashes here.

Provenance

The following attestation bundles were made for todo_cli_tool-0.1.0-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