A minimalist, interactive command-line task manager built with Python.
Project description
odot
A minimalist, interactive command-line task manager built with Python.
Features
- Interactive prompts — arrow-key navigable menus when you omit an argument
- Rich output — clean, formatted tables via the
richlibrary - Filtering & sorting — slice your task list by status, category, priority, or date
- Import / export — move tasks between machines with JSON
- Reports — generate Markdown or HTML reports with one command
- Local first — SQLite-backed, zero-configuration, works offline
Installation
# uv (recommended)
uv tool install odot
# pipx
pipx install odot
# pip
pip install odot
Quick Start
odot init-db # create the local database
odot add "Buy groceries" -p 2 -c home # add a task
odot list # view all tasks
odot list --todo --sort priority # open tasks, sorted by priority
The database defaults to
~/.odot/db.sqlite. Override with theODOT_DB_PATHenvironment variable.
Usage
Managing Tasks
odot add "Submit quarterly report" -p 3 -c work # add
odot show # interactive detail view
odot update # interactive update
odot update 1 --content "Revised name" --done # explicit update
odot rm # interactive delete
odot rm 1 --force # skip confirmation
Searching & Filtering
odot search "groceries"
odot list --done # completed tasks only
odot list -c work --todo # open work tasks
odot list --sort priority --reverse # descending priority
Import, Export & Reports
odot export backup.json --todo # export open tasks
odot import backup.json # append from file
odot import backup.json --clear # replace all tasks
odot report tasks.md --sort priority # Markdown report
odot report work.html --todo -c work # filtered HTML report
Bulk Operations
odot clean # remove completed tasks (prompts for confirmation)
odot clean --force # skip confirmation
odot purge # remove all tasks (prompts for confirmation)
odot purge --force # skip confirmation
Development
git clone https://github.com/jkomalley/odot.git && cd odot
uv sync
just test # run pytest
just test-cov # enforce 100% coverage
just check # ruff + ty + tests
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 odot-0.2.1.tar.gz.
File metadata
- Download URL: odot-0.2.1.tar.gz
- Upload date:
- Size: 9.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
23ff9d7a16bcf08b57764da13ad362c7c9a61790851b52e1301cff9fef649821
|
|
| MD5 |
00d389100f064c728a56bc0cd8c059ec
|
|
| BLAKE2b-256 |
7ffdad180420f2dd9c2b8bfaa4d4da3a064826f52105dfec57e11c48eecfa4bd
|
Provenance
The following attestation bundles were made for odot-0.2.1.tar.gz:
Publisher:
release.yml on jkomalley/odot
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
odot-0.2.1.tar.gz -
Subject digest:
23ff9d7a16bcf08b57764da13ad362c7c9a61790851b52e1301cff9fef649821 - Sigstore transparency entry: 1047493892
- Sigstore integration time:
-
Permalink:
jkomalley/odot@59c8ba6569b2b0a014a0d213305f6bd3c989b2a7 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/jkomalley
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@59c8ba6569b2b0a014a0d213305f6bd3c989b2a7 -
Trigger Event:
push
-
Statement type:
File details
Details for the file odot-0.2.1-py3-none-any.whl.
File metadata
- Download URL: odot-0.2.1-py3-none-any.whl
- Upload date:
- Size: 11.5 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 |
32afd7e42a5a32e506eb7e0f42dabfef836cbc7c3a3a54f26fd57ccad0b3b9e2
|
|
| MD5 |
bf293c1b544e4fd6e4bce5bd219977d2
|
|
| BLAKE2b-256 |
d11490b606396e984ec4bb1a70ba0359fd229330eb33538b811a905491ad67de
|
Provenance
The following attestation bundles were made for odot-0.2.1-py3-none-any.whl:
Publisher:
release.yml on jkomalley/odot
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
odot-0.2.1-py3-none-any.whl -
Subject digest:
32afd7e42a5a32e506eb7e0f42dabfef836cbc7c3a3a54f26fd57ccad0b3b9e2 - Sigstore transparency entry: 1047493903
- Sigstore integration time:
-
Permalink:
jkomalley/odot@59c8ba6569b2b0a014a0d213305f6bd3c989b2a7 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/jkomalley
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@59c8ba6569b2b0a014a0d213305f6bd3c989b2a7 -
Trigger Event:
push
-
Statement type: