Skip to main content

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 length
  • workon / stop to start and stop tracking time spent on a task
    • thunter workon --create <task_name> will create the task if needed and then start tracking time on it
  • finish / restart to mark a task as completed or to undo that action and restart it
  • estimate to update your estimate
  • edit to edit any aspect of a task, including it's history
  • rm to delete/remove tasks
  • db will start a sqlite3 session with the thunter database. tasks and history are the 2 tables

Configuration options

Environment variables (see settings.py):

  • EDITOR - editor to use for thunter edit command
  • THUNTER_DIRECTORY - directory to store thunter files, e.g. the sqlite database of tasks
  • THUNTER_DATABASE_NAME - filename of the database
  • THUNTER_SILENT - silent all console output. set to true, 1, yes, or y. Useful for scripting. Commands all have the --silent option 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 main will 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

thunter-0.1.0.tar.gz (279.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

thunter-0.1.0-py3-none-any.whl (36.7 kB view details)

Uploaded Python 3

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

Hashes for thunter-0.1.0.tar.gz
Algorithm Hash digest
SHA256 1c5044a815836127189eec7e27cbc713590e68917828f2015a018a502d40d89b
MD5 742779db22ede52868a14d1a0e588a70
BLAKE2b-256 28cd4e8952b122f3880eef4942c2635093399549914966b5d27cd5bfe827c4af

See more details on using hashes here.

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

Hashes for thunter-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7f3b1c550f28218b098bf913d57e06f0974d3e70f25a8dca58efeae9ee1e3f06
MD5 522de0d9562b050c755c623c7d6227b2
BLAKE2b-256 e11760df7710360b4a345b1143dc8e6eb5345c9517299364adf68083b65282eb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page