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.2.1.tar.gz (281.1 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.2.1-py3-none-any.whl (36.7 kB view details)

Uploaded Python 3

File details

Details for the file thunter-0.2.1.tar.gz.

File metadata

  • Download URL: thunter-0.2.1.tar.gz
  • Upload date:
  • Size: 281.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for thunter-0.2.1.tar.gz
Algorithm Hash digest
SHA256 5297187cb03687eac03c35888272fa21e0836efe001f8825b68da6ed36f6d190
MD5 79c0405f741b11e6720dd54a9962c436
BLAKE2b-256 7625873f5fdecf55f019ebc4905e8fed97f0abd79eab9a0f4cef71c7d6830341

See more details on using hashes here.

File details

Details for the file thunter-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: thunter-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 36.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for thunter-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 774aad6e6a2a3bac28fba6d72d7c607cd6bb1fe1ad21bffba966c3eea17d3241
MD5 c5905690a602ff2d8905cef96c40c101
BLAKE2b-256 aa3f551536162d1d6a62194c274cf99ae03476af9cd0936f1954eff777c36494

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