Todo CLI
A powerful command-line todo manager with time tracking, project management, and comprehensive reporting.
TL;DR
# Install from PyPI
pip install agile-todo-cli
# Add a task and start tracking time
todo add "My first task"
todo start 1
# When done
todo stop
todo done 1
# See all your todos
todo list
# Launch interactive KANBAN board
todo kanban -i
That's it! You're tracking tasks with time. Run todo --help for more.
Features
- ✅ Task Management - Add, edit, delete, and organize tasks
- ⏱️ Time Tracking - Track time spent on tasks with start/stop timers
- 📁 Project Organization - Group tasks into projects with full CRUD operations
- 🔍 Smart Filtering - Filter tasks by project, status, priority, and tags
- 📊 Reports - Daily, weekly, and project-based time reports
- 📤 Export - Export to JSON, CSV, or Markdown
- 🎨 Interactive Mode - Full-featured TUI for task management
- 📋 KANBAN Board - Visual board with vim-style navigation (
todo kanban -i) - 🔄 Cycle Management - Sprint/iteration tracking with check-ins
- 🌳 Subtasks - Hierarchical task relationships with tree view
- ⚙️ Configurable - Customize priorities, date formats, colors, and more
- 🚀 Performance - Optimized database queries with comprehensive indexing
- 🧪 Well-Tested - 90% test coverage with 500+ tests
Installation
# Install from PyPI
pip install agile-todo-cli
# Or install from source
pip install -e .
For existing users: If you have an existing todo database, it will be automatically migrated to the new schema. See MIGRATION_GUIDE.md for details.
Quick Start
Basic Task Management
# Add a task
todo add "Write documentation"
# Add with priority and tags
todo add "Fix bug #123" -p p0 --tags bug urgent
# Add with due date
todo add "Submit report" --due 2025-12-31
# List all active tasks
todo list
# List with filters
todo list --status doing
todo list --project myapp
# Mark as done
todo done 1
Project Management
# Create a project
todo project create "My App" --description "Mobile app development" --color cyan
# List all projects
todo project list
# Show project details and statistics
todo project show "My App"
# Add tasks to a project
todo add "Design login screen" -P "My App"
# Filter tasks by project
todo list --project "My App"
# Archive a project
todo project archive "My App"
# Delete a project (tasks remain unassigned)
todo project delete "My App"
Time Tracking
# Start tracking time on a task
todo start 1
# Check what's currently being tracked
todo active
# Stop tracking
todo stop
# View time spent when marking done
todo done 1
Reports
# Daily report (time spent today)
todo report daily
# Weekly report (time spent this week)
todo report weekly
# Project overview (all projects with stats)
todo report project
# Specific project report
todo report project "My App"
Export
# Export to JSON
todo export json todos.json
# Export to CSV
todo export csv todos.csv
# Export to Markdown
todo export md todos.md
# Export specific project
todo export json myapp.json --project "My App"
Commands
Task Commands
-
add- Add a new todotodo add "Task description" [-p PRIORITY] [-P PROJECT] [--tags TAG...] [--due DATE]
-
list- List todos with optional filterstodo list [--project PROJECT] [--status STATUS] [--all]
-
show- Show detailed information about a todotodo show <id>
-
done- Mark todo as completetodo done <id>
-
delete- Delete a todotodo delete <id> [--force]
-
edit- Edit a todo's propertiestodo edit <id> [--task TEXT] [--priority PRIORITY] [--project PROJECT] [--tags TAG...]
-
status- Change todo status (todo/doing/done)todo status <id> <status>
Project Commands
-
project create- Create a new projecttodo project create <name> [--description TEXT] [--color COLOR]
-
project list- List all projects with statisticstodo project list [--archived]
-
project show- Show project details and task breakdowntodo project show <name>
-
project edit- Edit project propertiestodo project edit <name> [--name NEW_NAME] [--description TEXT] [--color COLOR]
-
project archive- Archive a project (hide from active list)todo project archive <name>
-
project unarchive- Restore an archived projecttodo project unarchive <name>
-
project delete- Delete a project (tasks become unassigned)todo project delete <name>
Time Tracking Commands
-
start- Start time tracking on a tasktodo start <id>
-
stop- Stop time trackingtodo stop [<id>]
-
active- Show currently tracking tasktodo active
Reporting & Export
-
report- Generate time reportstodo report daily [--date DATE] todo report weekly [--date DATE] todo report project [PROJECT_NAME]
-
export- Export todos to various formatstodo export <format> [output_file] [--project PROJECT] [--include-done]
Supported formats:
json,csv,md/markdown
Other Commands
-
stats- Show overall statisticstodo stats -
interactive- Launch interactive mode (TUI)todo interactive -
config- View or modify configurationtodo config show todo config set <key> <value> todo config path
-
version- Show version informationtodo version
Configuration
Customize Todo CLI behavior through the config file (~/.config/todo-cli/config.yaml):
# Default priority for new tasks (p0, p1, p2, p3)
default_priority: p2
# Date format (YYYY-MM-DD, MM/DD/YYYY, DD/MM/YYYY)
date_format: YYYY-MM-DD
# Time format (24h, 12h)
time_format: 24h
# Color scheme (auto, none)
color_scheme: auto
# Confirm before deleting tasks
confirm_delete: true
# Auto-start timer when adding tasks
auto_start_on_add: false
# Show completed tasks in list by default
show_completed_in_list: false
View and modify configuration:
# Show all configuration
todo config show
# Set a value
todo config set default_priority p1
todo config set confirm_delete false
# Show config file location
todo config path
Interactive Mode
Launch a full-featured terminal UI with todo interactive:
- Menu-driven interface - Navigate with arrow keys
- All commands available - Add, edit, delete, start/stop timers
- Real-time updates - See changes immediately
- Keyboard shortcuts - Fast command execution
- Command aliases -
lfor list,dfor done, etc.
KANBAN Board
Launch the interactive KANBAN board with todo kanban -i or todo kanban --interactive:
┌─────────────┬─────────────┬─────────────┬─────────────┬─────────────┐
│ Backlog │ Todo │ In Progress │ Review │ Done │
├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤
│ 🔴 #1 Task │ 🟡 #3 Task │ 🔵 #5 Task │ │ ⚪ #7 Task │
│ 🟡 #2 Task │ 🔵 #4 Task │ │ │ │
└─────────────┴─────────────┴─────────────┴─────────────┴─────────────┘
Keyboard Shortcuts
| Key | Action |
|---|---|
h / ← |
Move to previous column |
l / → |
Move to next column |
j / ↓ |
Select next task |
k / ↑ |
Select previous task |
Enter |
Move task to next column |
m |
Move task to specific column |
r |
Refresh board |
d |
Toggle done column visibility |
? |
Show help |
q / Esc |
Quit |
Filtering
# Filter by project
todo kanban -i --project "My App"
# Filter by priority
todo kanban -i --priority p0
# Filter by tags
todo kanban -i --tags urgent bug
# Show done column
todo kanban -i --show-done
CLI View (Non-Interactive)
# View KANBAN board in terminal (static view)
todo kanban
# Move task to column
todo kanban move 1 in-progress
# Show column counts
todo kanban --counts
Cycle Management
Organize work into time-boxed cycles (sprints/iterations):
# Start a new cycle
todo cycle start "Sprint 1" --duration 14
# Check in on a cycle (daily standup)
todo cycle check-in --notes "Completed auth module"
# List all cycles
todo cycle list
# Show current cycle status
todo cycle status
# Complete a cycle
todo cycle complete
# View cycle report
todo cycle report "Sprint 1"
Cycle Workflow
- Start - Begin a new cycle with a name and duration
- Check-in - Record daily progress and notes
- Complete - End the cycle and generate summary
- Report - Review cycle metrics and task completion
Database & Migrations
Todo CLI uses SQLite for data storage with automatic schema migrations.
Default database location: ~/.local/share/todo-cli/todos.db
Automatic migrations: When you upgrade Todo CLI, your database is automatically migrated to the latest schema version. Backups are created before each migration.
For existing users: See MIGRATION_GUIDE.md for details on upgrading from older versions.
Performance
Todo CLI is designed for speed:
- ✅ List 1000 tasks: <100ms
- ✅ Filter by project: <100ms
- ✅ Project statistics: <200ms
- ✅ Comprehensive database indexing for optimal query performance
See docs/performance.md for detailed benchmarks.
Development
Running Tests
# Run all tests
pytest
# Run with coverage
pytest --cov=todo_cli --cov-report=term-missing
# Run specific test file
pytest tests/test_projects.py
# Run performance benchmarks
pytest tests/test_performance.py
Contributing
See CONTRIBUTING.md for development setup, testing guidelines, and contribution workflow.
Project Structure
todo-cli/
├── todo_cli/ # Main package
│ ├── main.py # CLI entry point and commands
│ ├── database.py # Database operations
│ ├── projects.py # Project management
│ ├── kanban.py # KANBAN board logic
│ ├── kanban_tui.py # KANBAN interactive TUI (Textual)
│ ├── cycles.py # Cycle/sprint management
│ ├── subtasks.py # Subtask relationships
│ ├── migrations.py # Database migrations
│ ├── models.py # Data models
│ ├── config.py # Configuration management
│ ├── display.py # Terminal output formatting
│ ├── reports.py # Report generation
│ ├── export.py # Export functionality
│ └── interactive.py # Interactive mode
├── tests/ # Test suite (500+ tests, 90% coverage)
├── docs/ # Documentation
│ ├── architecture.md # System architecture and design
│ └── performance.md # Performance benchmarks
├── README.md # This file
├── CONTRIBUTING.md # Development guide
└── MIGRATION_GUIDE.md # Migration instructions
Roadmap
Epic 1: Foundation ✅ (Complete)
- ✅ Project management with full CRUD operations
- ✅ Database schema v1 with migrations
- ✅ Smart filtering by project, status, priority
- ✅ Performance optimization and benchmarking
- ✅ Comprehensive test coverage (87%)
Epic 2: Sub-tasks ✅ (Complete)
- ✅ Hierarchical task relationships
- ✅ Tree view for task lists (
--treeflag) - ✅ Parent-child task dependencies
- ✅ Subtask progress tracking
Epic 3: KANBAN Board ✅ (Complete)
- ✅ Visual board view (Backlog/Todo/In Progress/Review/Done)
- ✅ Interactive TUI with vim-style navigation
- ✅ Task movement between columns
- ✅ Filtering by project, priority, tags
Epic 4: Cycles & Sprints ✅ (Complete)
- ✅ Sprint/iteration management
- ✅ Cycle-based task organization
- ✅ Daily check-ins with notes
- ✅ Cycle reports and statistics
Future (Planned)
- Recurring tasks
- Calendar integration
- Cloud sync
- Team collaboration
License
See LICENSE file for details.
Support
- Documentation: See docs/ directory
- Issues: Report bugs or request features via GitHub Issues
- Contributing: See CONTRIBUTING.md
Changelog
v1.1.0 (2025-12-27)
New Features:
- Interactive KANBAN Board - Full TUI with vim-style navigation (
todo kanban -i)- 5-column workflow: Backlog → Todo → In Progress → Review → Done
- Keyboard shortcuts: h/j/k/l navigation, Enter to advance, m to move
- Filter by project, priority, or tags
- Cycle Management - Sprint/iteration tracking
- Start, check-in, complete, and report on cycles
- Daily standup notes and progress tracking
- Subtask Support - Hierarchical task relationships
- Tree view with
--treeflag - Parent-child task dependencies
- Subtask progress indicators
- Tree view with
Improvements:
- 500+ tests with 90% coverage
- Enhanced KANBAN column management
- Cycle-based task organization
v1.1.0-alpha (Epic 1 Release)
New Features:
- Project management with create, list, show, edit, archive, delete operations
- Project-based task filtering with
--projectflag - Database schema v1 with automatic migrations
- Comprehensive performance optimizations (all queries <200ms)
- Project statistics and reporting
Improvements:
- Added 313+ tests with 87% coverage
- Comprehensive database indexing for optimal performance
- Enhanced filtering capabilities (project + status combinations)
- Backward compatibility with legacy project strings
Migration:
- Existing databases automatically migrated to v1 schema
- Legacy project strings converted to project references
- See MIGRATION_GUIDE.md for details
Built with ❤️ using Python, Typer, and Rich.
Metadata
Release files for agile-todo-cli 1.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| agile_todo_cli-1.2.0.tar.gz | 2.3 MB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| agile_todo_cli-1.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 2.4 MB
Release files / agile_todo_cli-1.2.0.tar.gz
| Download URL | agile_todo_cli-1.2.0.tar.gz |
|---|---|
| Size | 2.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9d9659ab5d476d5d63e366a66de49be3b012983ba07236396bde542648447af1
|
|
BLAKE2b-256 checksum How to use checksums |
4ec2c86700930fd1f4a24a8ac0852b4f84fc6aa3ac1d60de27fd845e08fbe445
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.11
|
Release files / agile_todo_cli-1.2.0-py3-none-any.whl
| Download URL | agile_todo_cli-1.2.0-py3-none-any.whl |
|---|---|
| Size | 72.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4edde9d50580ccb3c554c70496b290938ce5984a0f043891bd78ee71b7ab032f
|
|
BLAKE2b-256 checksum How to use checksums |
088cafa3f586c78bf4c7731befa2c1874904645c58965b1299a462526a271c8a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.11
|
Security for agile-todo-cli 1.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.