Simple CLI tool to plan your work. Tasks are stored locally in a .gitdo/ folder.
pip install gitdo$ gitdo [command] [options]init: Initialize a new GitDo projectadd <task>: Add a new task to your projectlist: List tasks (by default shows pending and in-progress tasks)--status/-s <status>: Filter by status (pending, inprogress, completed)--all/-a: Show all tasks regardless of status
start <task_id>: Mark a task as in progresscomplete <task_id>: Mark a task as completedremove <task_id>: Remove a task from your projectimport-md <file_path>: Import tasks from a markdown file--skip-duplicates: Skip tasks with duplicate titles--dry-run: Preview tasks without importing
Tasks can have one of three statuses:
pending: Task has been created but not startedinprogress: Task is currently being worked oncompleted: Task has been finished
# Initialize GitDo in your project
$ gitdo init
✓ GitDo initialized successfully!
# Add some tasks
$ gitdo add "Implement user authentication"
✓ Added task: Implement user authentication
ID: a1b2c3d4
$ gitdo add "Write unit tests"
✓ Added task: Write unit tests
ID: e5f6g7h8
$ gitdo add "Update documentation"
✓ Added task: Update documentation
ID: i9j0k1l2
# List all pending and in-progress tasks (default)
$ gitdo list
# Start working on a task
$ gitdo start a1b2
✓ Task a1b2 marked as in progress!
# List only in-progress tasks
$ gitdo list --status inprogress
# Complete a task (you can use just the first few characters of the ID)
$ gitdo complete a1b2
✓ Task a1b2 marked as completed!
# List all tasks including completed ones
$ gitdo list --all
# List only completed tasks
$ gitdo list --status completed
# Remove a task
$ gitdo remove e5f6
✓ Task e5f6 removed!
# Import tasks from a markdown file
$ gitdo import-md tasks.md
✓ Imported 5 task(s)
# Preview tasks before importing
$ gitdo import-md tasks.md --dry-runThis project uses uv for dependency management.
-
Install uv:
curl -LsSf https://astral.sh/uv/install.sh | sh -
Clone the repository:
git clone https://github.com/yourusername/gitdo.git cd gitdo -
Install dependencies:
uv sync --extra dev
# Run all tests
uv run pytest
# Run with coverage
uv run pytest --cov=gitdo --cov-report=html
# Run specific test file
uv run pytest tests/test_cli.py
# Run tests in watch mode (requires pytest-watch)
uv run ptwThis project uses Ruff for linting and formatting:
# Check code
uv run ruff check .
# Format code
uv run ruff format .
# Check and fix
uv run ruff check --fix .gitdo/
├── src/
│ └── gitdo/
│ ├── __init__.py
│ ├── cli.py # CLI interface
│ ├── models.py # Data models
│ └── storage.py # Storage handling
├── tests/
│ ├── conftest.py # Pytest fixtures
│ ├── test_cli.py # CLI tests
│ ├── test_models.py # Model tests
│ └── test_storage.py # Storage tests
├── pyproject.toml # Project configuration
└── README.md
This project uses GitHub Actions for automated publishing to PyPI. Releases are triggered by pushing version tags.
Use the release script to create a new version:
# Create a new release (e.g., 0.2.0)
./scripts/release.sh 0.2.0
# Push to trigger the release
git push origin main --tagsThe script will:
- Update version in
pyproject.tomland__init__.py - Create a git commit
- Create a version tag (e.g.,
v0.2.0)
When you push the tag, GitHub Actions will:
- Extract version from the tag
- Build the package
- Publish to PyPI using Trusted Publishing
# Build the package locally
uv build
# Check the built package
ls -la dist/MIT