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.
Demo
Features
- 🔐 Password-based encryption (scrypt + ChaCha20-Poly1305, versioned blob format)
- 📅 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 (per shell, secure fallback IDs)
- 💾 Backup support (sanitized metadata, in-memory manifest)
- 🧼 Clean uninstall (
todo purge --uninstall) - 🛡 Hardened editing mode (RAM-backed temp files)
- 🍎 macOS RAM disk helper (
todo ramdisk-create)
Security Highlights
- Modern authenticated encryption (ChaCha20-Poly1305)
- Memory-hard key derivation (scrypt, versioned parameters)
- No plaintext passphrase via environment variables
- Sanitized subprocess environments (editor isolation)
- Atomic file writes to prevent corruption
- Strict path validation for storage operations
- Secure session handling with random identifiers
- Hardened editor mode with reduced persistence
⚠️ Important Recommendation
For maximum security, it is strongly recommended to enable hardened editing mode using a RAM-backed temporary directory.
On macOS:
todo ramdisk-create
On Linux, /dev/shm is typically suitable.
This ensures that decrypted todo content:
- never touches disk
- is not recoverable after editing
- avoids editor swap/backup leakage
Installation (macOS & Linux – user-wide)
The recommended way to install todoctl is via pipx.
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
pipx install todoctl
or:
pipx install git+https://github.com/epik0r/todoctl.git
3. Verify
todo --help
First Run Behavior
On first todo init, the tool installs:
- shell session integration
- shell completion
- vim integration
Then reload your shell:
source ~/.bashrc
# or
source ~/.zshrc
Usage
todo init
todo list
todo edit
todo add "Task"
todo doing 1
todo done 1
todo remove 3
todo rollover 03 04
todo backup
todo doctor
todo purge --yes
Security Model
- encrypted at rest
- no plaintext persistence (with hardened mode)
- session-scoped secrets
- configurable security level
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.9.tar.gz.
File metadata
- Download URL: todoctl-1.0.9.tar.gz
- Upload date:
- Size: 492.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 |
650d12fa4a62a11599763b4fd31619bac3e1b15d1c4df8c056a96a2dff098b7a
|
|
| MD5 |
1662c0bf92328daf4c0750f889e3b7fb
|
|
| BLAKE2b-256 |
f18e77784718ab021eaefa92656a6642f4984dfe1d6831c975bfdf3535c82aac
|
Provenance
The following attestation bundles were made for todoctl-1.0.9.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.9.tar.gz -
Subject digest:
650d12fa4a62a11599763b4fd31619bac3e1b15d1c4df8c056a96a2dff098b7a - Sigstore transparency entry: 1182203188
- Sigstore integration time:
-
Permalink:
epik0r/todoctl@1968a41e645b332f3a019478adbc782968dfb954 -
Branch / Tag:
refs/tags/v1.0.9 - Owner: https://github.com/epik0r
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@1968a41e645b332f3a019478adbc782968dfb954 -
Trigger Event:
push
-
Statement type:
File details
Details for the file todoctl-1.0.9-py3-none-any.whl.
File metadata
- Download URL: todoctl-1.0.9-py3-none-any.whl
- Upload date:
- Size: 48.8 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 |
9348118292ccc2f9dbf18daaf763a3fea5ec2ae3a52f5f531b831e8c8b91a72c
|
|
| MD5 |
37b0f71d534751872aa258a65d3f15a2
|
|
| BLAKE2b-256 |
b58b4597caa98daa5f4fdb1582f6e5c0f4bd8392029d971aa8d3643e92784c85
|
Provenance
The following attestation bundles were made for todoctl-1.0.9-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.9-py3-none-any.whl -
Subject digest:
9348118292ccc2f9dbf18daaf763a3fea5ec2ae3a52f5f531b831e8c8b91a72c - Sigstore transparency entry: 1182203193
- Sigstore integration time:
-
Permalink:
epik0r/todoctl@1968a41e645b332f3a019478adbc782968dfb954 -
Branch / Tag:
refs/tags/v1.0.9 - Owner: https://github.com/epik0r
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@1968a41e645b332f3a019478adbc782968dfb954 -
Trigger Event:
push
-
Statement type: