Encrypted monthly CLI todo manager with shell-session passphrase cache
Project description
todoctl
A CLI-first, encrypted monthly todo manager for nerdy engineers and architects.
Overview
todoctl is designed for people who prefer:
- terminal-first workflows
- structured but lightweight task tracking
- full control over their data
- encryption by default
It is not a replacement for a team collaboration tool. It is a personal productivity tool.
Features
- 🔐 Password-based encryption (scrypt + ChaCha20-Poly1305)
- 📅 Monthly task separation
- 🧠 Status-driven workflow (OPEN, DOING, SIDE, DONE)
- 🧾 Stable task IDs
- 🧹 Automatic sorting
- ✍️ Native
vim/$EDITORediting - 🧩 Shell integration (auto-installed)
- ⚡ Shell completion (auto-installed)
- 🔄 Session-based password caching
- 💾 Backup support
- 🧼 Clean uninstall (
todo purge --uninstall)
Installation (macOS & Linux – user-wide)
The recommended way to install todoctl is via pipx.
This works on both macOS and Linux and installs the tool user-wide.
1. Install pipx
macOS:
brew install pipx
pipx ensurepath
Ubuntu / Debian:
sudo apt update
sudo apt install pipx
pipx ensurepath
Reload your shell:
exec $SHELL
2. Install todoctl
From PyPI (recommended):
pipx install todoctl
Or directly from GitHub:
pipx install git+https://github.com/epik0r/todoctl.git
3. Verify installation
todo --help
Notes
-
The
todocommand is installed into:~/.local/bin
-
If the command is not found:
pipx ensurepath exec $SHELL
-
pipx uses isolated environments internally, but for you the tool behaves like a normal global CLI.
Installation dev
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
First Run Behavior
On the first real todo command (e.g. todo init), the tool automatically installs:
- shell session integration
- shell completion (bash or zsh)
- vim integration (if
vimorviis available)
⚠️ Important: Shell completion will only be active after:
- opening a new terminal, or
- reloading your shell config:
source ~/.bashrc
# or
source ~/.zshrc
Usage
Initialize
todo init
List tasks
todo list
todo list 03
todo list 2026-03
Edit tasks (recommended workflow)
todo edit
Add a task
todo add "Implement API integration"
Change status
todo doing 1
todo done 1
todo open 1
todo side 1
Remove a task
todo remove 3
Rollover tasks
todo rollover 03 04
Backup
todo backup
Doctor
todo doctor
Purge
todo purge --yes
todo purge --yes --uninstall
Security Model
- scrypt + ChaCha20-Poly1305
- no plaintext storage
- session-scoped cache
Session Cache
- valid per shell
- expires after TTL (default 8h)
- no cross-terminal sharing
Troubleshooting
cat ~/.local/share/todoctl/bootstrap.log
License
GPLv3
Project details
Release history Release notifications | RSS feed
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 todoctl-1.0.2.tar.gz.
File metadata
- Download URL: todoctl-1.0.2.tar.gz
- Upload date:
- Size: 35.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d9a6b47f2b876f3f08f1c14102535b92276b31b2a0a9fb04a6bbf03cc1398045
|
|
| MD5 |
5e13ba427975ced7e4360336763d6d94
|
|
| BLAKE2b-256 |
66f3f81ba4b3a185a909bc666c63d8da9b53ec85af22a25f05d092e505bcb4e1
|
Provenance
The following attestation bundles were made for todoctl-1.0.2.tar.gz:
Publisher:
python-publish.yml on epik0r/todoctl
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
todoctl-1.0.2.tar.gz -
Subject digest:
d9a6b47f2b876f3f08f1c14102535b92276b31b2a0a9fb04a6bbf03cc1398045 - Sigstore transparency entry: 1149096089
- Sigstore integration time:
-
Permalink:
epik0r/todoctl@683f3a30de81cc10c0fc2f8bdd1ed3f929b38895 -
Branch / Tag:
refs/tags/v1.0.2 - Owner: https://github.com/epik0r
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@683f3a30de81cc10c0fc2f8bdd1ed3f929b38895 -
Trigger Event:
push
-
Statement type:
File details
Details for the file todoctl-1.0.2-py3-none-any.whl.
File metadata
- Download URL: todoctl-1.0.2-py3-none-any.whl
- Upload date:
- Size: 37.7 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 |
1ef228550c70db61a2f50ac6cc08c61767e4c8096ad90f8158807681ea03dda3
|
|
| MD5 |
afb4bbd8966888ec54f8a060c1a8f395
|
|
| BLAKE2b-256 |
f83d3b4cc6830822e119869864692065c513d8fefef775f1afc9d7338de23f73
|
Provenance
The following attestation bundles were made for todoctl-1.0.2-py3-none-any.whl:
Publisher:
python-publish.yml on epik0r/todoctl
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
todoctl-1.0.2-py3-none-any.whl -
Subject digest:
1ef228550c70db61a2f50ac6cc08c61767e4c8096ad90f8158807681ea03dda3 - Sigstore transparency entry: 1149096126
- Sigstore integration time:
-
Permalink:
epik0r/todoctl@683f3a30de81cc10c0fc2f8bdd1ed3f929b38895 -
Branch / Tag:
refs/tags/v1.0.2 - Owner: https://github.com/epik0r
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@683f3a30de81cc10c0fc2f8bdd1ed3f929b38895 -
Trigger Event:
push
-
Statement type: