Aggregate TODO deadlines across multiple projects into a single agenda-style CLI view.
Project description
todo-hub
todo-hub is a lightweight CLI tool that aggregates TODO tasks across multiple projects and presents them as a deadline-focused agenda.
It scans TODO.md files from different repositories and shows tasks grouped by urgency with a clean, colorized terminal view.
Perfect for developers managing many small projects.
Features
- Scan TODO files across multiple projects
- Parse tasks written as Markdown checkboxes
- Detect deadlines using
@YYYY-MM-DD - Group tasks by urgency:
- Overdue
- This week
- Later
- Unscheduled
- Agenda-style weekly view
- Colorized terminal output
- Deterministic color for each project
- Simple configuration via
config.toml - Fast and dependency-light
Installation
Recommended (using pipx)
pipx installs CLI tools in isolated environments and makes them available globally.
pipx install todo-hub
Then run:
todo-hub
If pipx is not installed:
python -m pip install --user pipx
pipx ensurepath
Using pip
You can also install with pip, although pipx is recommended for CLI tools.
pip install todo-hub
Development Installation
For development or testing from the repository:
git clone https://github.com/cwahyu/todo-hub.git
cd todo-hub
pipx install -e .
Usage
Run:
todo-hub
Example output:
Overdue:
- [ ] fix parser @2026-03-10 (-4d) #mudita
This week:
Today
- [ ] finish CLI @2026-03-14 (0d) #todo-hub
Tomorrow
- [ ] improve parser @2026-03-15 (1d) #mudita
Mar 16
- [ ] refactor scanner @2026-03-16 (2d) #todo-hub
Later:
- [ ] redesign module @2026-03-25 (11d) #todo-hub
Unscheduled:
- [ ] research API #blog
TODO Format
todo-hub scans Markdown files named:
TODO.md
todo.md
Tasks must follow this format:
- [ ] implement feature @2026-04-01
Deadline syntax:
@YYYY-MM-DD
Examples:
- [ ] finish CLI @2026-03-20
- [ ] refactor parser @2026-03-21
- [ ] improve documentation
Completed tasks are ignored:
- [x] finished task
Configuration
Projects are defined in config.toml.
Example:
[[project]]
name = "mudita"
path = "~/projects/mudita"
[[project]]
name = "todo-hub"
path = "~/projects/todo-hub"
Each project path will be scanned recursively for TODO.md.
Project Structure
todo-hub/
├── src/
│ └── todohub/
│ ├── main.py
│ ├── config.py
│ ├── scanner.py
│ ├── parser.py
│ ├── scheduler.py
│ ├── presenter.py
│ └── models.py
├── tests/
├── pyproject.toml
└── README.md
Architecture pipeline:
config → scan → parse → schedule → present
Development
Install dependencies:
poetry install
Run the CLI:
poetry run todo-hub
Run tests:
pytest
Why todo-hub?
Many developers maintain multiple repositories with scattered TODO lists.
todo-hub provides a single unified view of upcoming work across all projects.
Instead of searching through repositories, you can simply run:
todo-hub
and immediately see what needs attention.
Philosophy
todo-hub is designed around a few simple principles.
Deadlines over task lists
Most TODO tools focus on managing tasks inside a single project.
todo-hub focuses on deadlines across projects.
The goal is to answer one question quickly:
What needs my attention today?
Instead of browsing multiple repositories, todo-hub aggregates tasks into a single agenda-style view.
Plain text first
Tasks are stored in simple Markdown files:
TODO.md
This keeps the workflow:
- transparent
- version-controlled
- editor-friendly
- portable across tools
No databases, no lock-in.
Minimal syntax
todo-hub only requires two simple conventions:
task description @YYYY-MM-DD
Example:
implement CLI @2026-03-20
Everything else is optional.
Works with existing repositories
todo-hub does not require special project setup.
It simply scans for:
TODO.md
todo.md
in configured project folders.
This makes it easy to adopt gradually across existing repositories.
Fast feedback
The tool is designed for a quick daily check:
todo-hub
Output is grouped by urgency:
Overdue
This week
Later
Unscheduled
This makes it easy to see what requires attention immediately.
Terminal-first workflow
todo-hub is designed for a simple, distraction-free terminal workflow.
Instead of interactive dashboards or complex interfaces, it produces clean, linear output that can be scanned quickly in a terminal window.
The focus is on clarity and speed:
- fast startup
- minimal dependencies
- readable, plain-text output
- color used only to highlight urgency
The goal is to make it easy to run:
todo-hub
and immediately see what needs attention today.
Small and maintainable
The project architecture is intentionally minimal:
config → scan → parse → schedule → present
Each module has a single responsibility, making the codebase easy to understand and extend.
License
MIT License
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file todo_hub-0.2.0.tar.gz.
File metadata
- Download URL: todo_hub-0.2.0.tar.gz
- Upload date:
- Size: 7.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
de83c71958f1623d64ee1df2c245ccd5b1c7b45595dea4677d96ad72954d8778
|
|
| MD5 |
da60da1e56ded9c2c71846e63450f072
|
|
| BLAKE2b-256 |
5eeff7eda201954aba5f75a2a5a150a96e4fbaf236f97c2e0182960a59328101
|
Provenance
The following attestation bundles were made for todo_hub-0.2.0.tar.gz:
Publisher:
publish.yml on cwahyu/todo-hub
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
todo_hub-0.2.0.tar.gz -
Subject digest:
de83c71958f1623d64ee1df2c245ccd5b1c7b45595dea4677d96ad72954d8778 - Sigstore transparency entry: 1107844118
- Sigstore integration time:
-
Permalink:
cwahyu/todo-hub@57a422c6b89ec1166bb961f4255c0e7622fb20a8 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/cwahyu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@57a422c6b89ec1166bb961f4255c0e7622fb20a8 -
Trigger Event:
push
-
Statement type:
File details
Details for the file todo_hub-0.2.0-py3-none-any.whl.
File metadata
- Download URL: todo_hub-0.2.0-py3-none-any.whl
- Upload date:
- Size: 9.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2c4d58744e9289c2e247e4024ed25d84190da7bcf4b0ca6ad1e29f3534c78a77
|
|
| MD5 |
359e470fa8db5f72540d9304c3183925
|
|
| BLAKE2b-256 |
780f0a6db207dfb81a060797c8ceb4b32d036951dc2ee67df1e6cc909003a0d1
|
Provenance
The following attestation bundles were made for todo_hub-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on cwahyu/todo-hub
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
todo_hub-0.2.0-py3-none-any.whl -
Subject digest:
2c4d58744e9289c2e247e4024ed25d84190da7bcf4b0ca6ad1e29f3534c78a77 - Sigstore transparency entry: 1107844124
- Sigstore integration time:
-
Permalink:
cwahyu/todo-hub@57a422c6b89ec1166bb961f4255c0e7622fb20a8 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/cwahyu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@57a422c6b89ec1166bb961f4255c0e7622fb20a8 -
Trigger Event:
push
-
Statement type: