TaskWarrior-inspired CLI for managing tasks as markdown files in git repositories
TaskRepo is a powerful command-line task management tool that combines the best of TaskWarrior's workflow with the simplicity of markdown and the collaboration features of git.
- Git-backed storage: All tasks are stored as markdown files in git repositories
- TaskWarrior-inspired: Familiar workflow with priorities, tags, dependencies, and due dates
- Rich metadata: YAML frontmatter for structured task data
- Link associations: Attach URLs to tasks (GitHub issues, PRs, emails, documentation, etc.)
- Interactive TUI: User-friendly prompts with autocomplete and validation
- Multiple repositories: Organize tasks across different projects or contexts
- GitHub integration: Associate tasks with GitHub user handles
- Beautiful output: Rich terminal formatting with tables and colors
- Version control: Full git history and collaboration capabilities
Browse and manage tasks with the interactive Terminal User Interface featuring color-coded statuses, task details panel, and keyboard shortcuts.
# Tap the HenriquesLab formulas repository
brew tap henriqueslab/formulas
# Install TaskRepo
brew install taskrepoUpdating:
brew update
brew upgrade taskrepoBenefits: Simple installation, automatic dependency management (Python 3.12, git, gh), easy updates
# Install pipx if you haven't already
python3 -m pip install --user pipx
python3 -m pipx ensurepath
# Install TaskRepo
pipx install taskrepoBenefits: Isolated environment, global CLI access, easy updates with pipx upgrade taskrepo
# Install uv if you haven't already
curl -LsSf https://astral.sh/uv/install.sh | sh
# Install TaskRepo
uv tool install taskrepoBenefits: Very fast installation, modern Python tooling, automatic environment management
pip install taskrepoNote: May conflict with other packages. Consider using pipx or uv instead.
Note: You can use either
tsk(short alias) ortaskrepo(full command). Examples below usetskfor brevity.
tsk initThis creates a configuration file at ~/.taskreporc and sets up the parent directory for task repositories (default: ~/tasks).
tsk create-repo work
tsk create-repo personalRepositories are stored as tasks-{name} directories with git initialization.
# Interactive mode (default)
tsk add
# Non-interactive mode
tsk add -r work -t "Fix authentication bug" -p backend --priority H --assignees @alice,@bob --tags bug,security
# With associated links (GitHub issues, emails, docs, etc.)
tsk add -r work -t "Fix authentication bug" -p backend --links https://github.com/org/repo/issues/123,https://mail.google.com/mail/u/0/#inbox/abc# List all tasks
tsk list
# Filter by repository
tsk list --repo work
# Filter by status, priority, or project
tsk list --status pending --priority H
tsk list --project backend
# Show completed tasks
tsk list --all# Mark task as done
tsk done 001
# Edit a task
tsk edit 001
# Sync with git remote
tsk sync
tsk sync --repo work # Sync specific repositorytsk init- Initialize TaskRepo configurationtsk config- Show current configurationtsk create-repo <name>- Create a new task repositorytsk repos- List all task repositories
tsk add- Add a new task (interactive)tsk list- List tasks with filterstsk edit <id>- Edit a tasktsk done <id>- Mark task as completedtsk delete <id>- Delete a task
tsk sync- Pull and push all repositoriestsk sync --repo <name>- Sync specific repositorytsk sync --no-push- Pull only, don't push
Configuration is stored in ~/.taskreporc:
parent_dir: ~/tasks
default_priority: M
default_status: pending
default_assignee: null # Optional: GitHub handle (e.g., @username)
default_editor: null # Optional: Text editor (e.g., vim, nano, code)
sort_by:
- priority
- dueWhen editing tasks with tsk edit, the editor is selected in this order:
- CLI flag:
tsk edit 123 --editor nano - Environment variable:
$EDITOR - Config file:
default_editorin~/.taskreporc - Fallback:
vim
~/tasks/
tasks-work/
.git/
tasks/
task-001.md
task-002.md
task-003.md
tasks-personal/
.git/
tasks/
task-001.md
tasks-opensource/
.git/
tasks/
task-001.md
For comprehensive documentation, including:
- Complete CLI reference with all commands and options
- Task file format and field specifications
- Advanced features like conflict resolution, dependencies, and GitHub integration
- Configuration guides and examples
- Troubleshooting and community support
Visit the official documentation at taskrepo.henriqueslab.org
tsk add \
--repo work \
--title "Fix memory leak in worker process" \
--priority H \
--project backend \
--assignees @alice,@bob \
--tags bug,performance \
--due "2025-11-01" \
--description "Memory usage grows unbounded in background worker"tsk list --priority H --status pendingtsk list --assignee @aliceEDITOR=vim tsk edit 001
# Or with custom editor
tsk edit 001 --editor code# Clone repository
git clone https://github.com/henriqueslab/TaskRepo.git
cd TaskRepo
# Install with dev dependencies
uv sync --extra dev
# Install pre-commit hooks (optional but recommended)
uv run pre-commit install# Run all tests
uv run pytest tests/ -v
# Run with coverage
uv run pytest tests/ -v --cov=taskrepo --cov-report=term-missing
# Run specific test types
uv run pytest tests/unit -v # Unit tests only
uv run pytest tests/integration -v # Integration tests only# Format code
uv run ruff format .
# Lint code
uv run ruff check .
# Type checking
uv run mypy src/taskrepo
# Run all quality checks (what CI runs)
uv run ruff format --check .
uv run ruff check .
uv run mypy src/taskrepo
uv run pytest tests/ -vWe use pre-commit to ensure code quality before commits:
# Install hooks
uv run pre-commit install
# Run manually on all files
uv run pre-commit run --all-files
# Skip hooks for a specific commit (use sparingly)
git commit --no-verifyThe following checks run automatically on commit:
- ruff format: Code formatting
- ruff: Linting and import sorting
- mypy: Static type checking
- trailing-whitespace: Remove trailing spaces
- end-of-file-fixer: Ensure files end with newline
- check-yaml/toml: Validate config files
TaskRepo uses GitHub Actions for continuous integration and deployment:
Runs on every push and pull request to main:
-
Lint & Type Check (Python 3.11)
- Code formatting check with ruff
- Linting with ruff
- Type checking with mypy
-
Tests (Python 3.10, 3.11, 3.12)
- Unit tests
- Integration tests
- Matrix testing across Python versions
-
Coverage Report (Python 3.11)
- Full test suite with coverage measurement
- Coverage report uploaded as artifact
-
Build Verification (Python 3.11)
- Package build (wheel + sdist)
- Metadata verification
- Build artifacts uploaded for inspection
Automatically triggered when you push a version tag (e.g., v0.2.0):
-
Validation
- Verify tag version matches
__version__.py - Check CHANGELOG.md has entry for this version
- Run full test suite
- Verify tag version matches
-
PyPI Publishing
- Build package (wheel + sdist)
- Publish to PyPI using OIDC trusted publishing (secure, no API tokens needed)
-
GitHub Release
- Extract release notes from CHANGELOG.md
- Create GitHub release with auto-generated notes
- Attach wheel and sdist as release assets
To create a new release:
-
Update version in
src/taskrepo/__version__.py:__version__ = "0.2.0"
-
Update CHANGELOG.md with release notes:
## [0.2.0] - 2025-10-25 ### Added - New feature X - New feature Y ### Fixed - Bug fix Z
-
Commit changes:
git add src/taskrepo/__version__.py CHANGELOG.md git commit -m "chore: bump version to 0.2.0" git push -
Create and push tag:
git tag v0.2.0 git push origin v0.2.0
-
Monitor release:
- GitHub Actions will automatically run the release workflow
- Check Actions tab for progress
- Package will be published to PyPI
- GitHub release will be created with artifacts
Dependencies are automatically monitored by Dependabot:
- Python dependencies updated weekly
- GitHub Actions updated weekly
- PRs are auto-labeled and grouped for easier review
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes with tests
- Run the test suite
- Submit a pull request
MIT License - see LICENSE for details.
- Inspired by TaskWarrior
- Built with Click, prompt_toolkit, and Rich
- Package management by UV
- Dependency validation and visualization
- Task templates
- Recurrence support
- Time tracking
- Export to other formats (JSON, CSV, HTML)
- GitHub integration (create issues from tasks)
- Task search with advanced queries
- Statistics and reporting
- Shell completion (bash, zsh, fish)
- Web UI for task visualization

