A CLI To Do list w/ time tracking.
Project description
Thunter
thunter, or task hunter, is a CLI To Do list with time tracking.
The purpose of thunter is to get better at time estimation, hence why you cannot create a task without a time estimate.
I made ths CLI tool so that I could piggy back off my pre-existing git workflows to estimate and track time spent on tasks. See git/thunter workflow for git hooks and aliases you can use to do the same.
Installation
Via pip
pip install thunter
Or via uv
uv tool install thunter
Usage
The thunter CLI tool has commands for:
create- create a new task and estimate it's lengthworkon/stopto start and stop tracking time spent on a taskthunter workon --create <task_name>will create the task if needed and then start tracking time on it
finish/restartto mark a task as completed or to undo that action and restart itestimateto update your estimateeditto edit any aspect of a task, including it's historyrmto delete/remove tasksdbwill start a sqlite3 session with the thunter database.tasksandhistoryare the 2 tables
Configuration options
Environment variables (see settings.py):
EDITOR- editor to use forthunter editcommandTHUNTER_DIRECTORY- directory to store thunter files, e.g. the sqlite database of tasksTHUNTER_DATABASE_NAME- filename of the databaseTHUNTER_SILENT- silent all console output. set to true, 1, yes, or y. Useful for scripting. Commands all have the--silentoption as well for the same effect.DEBUG- get stack traces on errors. Useful for development
My git/thunter workflow
With the below hook and aliases:
- checking out a branch will start tracking time spent on it
- checking out
mainwill stop tracking time - deleting a branch will mark the task as finished
post-checkout
#!/bin/bash
branch_name=$(git rev-parse --abbrev-ref HEAD)
is_branch_switch=$3
if [[ "$is_branch_switch" == "1" ]]; then
if [[ "$branch_name" == "main" || "$branch_name" == "master" ]]; then
# `hash thunter 2>/dev/null` is a check for the existence of thunter before calling it
hash thunter 2>/dev/null && thunter stop
else
# `< /dev/tty` is needed to accept the user's time estimate input
hash thunter 2>/dev/null && thunter workon --create "$branch_name" < /dev/tty
fi
fi
Git Aliases
## ~/.gitconfig
[alias]
s = "!git status && hash thunter 2>/dev/null && if [ \"$(git rev-parse --abbrev-ref HEAD)\" = \"main\" ]; then THUNTER_SILENT=1 thunter stop; else THUNTER_SILENT=1 thunter workon --create $(git rev-parse --abbrev-ref HEAD); fi"
bd = ! git branch -d $1 && hash thunter 2>/dev/null && THUNTER_SILENT=1 thunter finish
bdd = ! git branch -D $1 && hash thunter 2>/dev/null && THUNTER_SILENT=1 thunter finish
Coming Soon
thunter analyze command that will give options for some basic data analysis on how accurate your time estimates are.
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 thunter-0.1.0.tar.gz.
File metadata
- Download URL: thunter-0.1.0.tar.gz
- Upload date:
- Size: 279.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1c5044a815836127189eec7e27cbc713590e68917828f2015a018a502d40d89b
|
|
| MD5 |
742779db22ede52868a14d1a0e588a70
|
|
| BLAKE2b-256 |
28cd4e8952b122f3880eef4942c2635093399549914966b5d27cd5bfe827c4af
|
File details
Details for the file thunter-0.1.0-py3-none-any.whl.
File metadata
- Download URL: thunter-0.1.0-py3-none-any.whl
- Upload date:
- Size: 36.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7f3b1c550f28218b098bf913d57e06f0974d3e70f25a8dca58efeae9ee1e3f06
|
|
| MD5 |
522de0d9562b050c755c623c7d6227b2
|
|
| BLAKE2b-256 |
e11760df7710360b4a345b1143dc8e6eb5345c9517299364adf68083b65282eb
|