Skip to main content

Snap Status PyPI version

Breaking changes

Starting from v2.0.0, Letsdo has this configuration changes:

  • the configuration file name changes from $HOME/.letsdo to $HOME/.letsdo.yaml
  • the data file name changes from <data_directory>/letsdo-data to <data_directory>/letsdo-history

If you have old data and configuration, just change the names accordingly and all will work as before.

Letsdo, the CLI time-tracker

Letsdo helps you to be more focused and productive tracking the time you spend on your work activities.

Features

Have a look at the help message:

$ letsdo
Usage:
    lets do     <name>... [--time=<time>]
    lets see    [all|config] [--detailed|--day-by-day] [--ascii| --dot-list] [-p|--project] [<query>...]
    lets edit
    lets cancel
    lets stop   [<time>...]
    lets goto   <newtask>...
    lets track  <name>...
    lets config
    lets autocomplete

options:
    -a, --ascii       Print report table in ASCII characters
    -t, --time=<time> Change the start/stop time of the task on the fly

examples:
    lets see            # show today's activities
    lets see yesterday  # show yesterday's activities
    lets see 2018-07    # show 2018 July's activities
    lets see last July  # same as above (if we're still in 2019)
    lets see +project   # show activities with +project tag (+project is autocompleted with TAB)
    lets see something  # show activities whose description has he word 'something'
    lets see this week
    lets see last month
    lets see 2019
    ...

First of all, we do not want to waste time typing too much. Letsdo is the name of the package and you can use it as well as command line interface, but all the interface is designed to be as informal as possible, so you are encouraged to use lets instead.

That said, when you do not know what to do, just write lets see, this command shows the current status of your task, whether you're doing something or not

$ lets see

When you're ready to start with something just type lets do followed by a short description.

$ lets do write a good readme
task 'write a good readme' started at 2020-10-04 11:38:00

Contexts, and Projects are supported in form of words starting with @, or + signs respectively.

$ lets do +myproject write a good readme
task '+myproject write a good readme' started at 2020-10-04 11:38:00

You can edit the current task's name or starting time, cancel it or stop it.

$ lets stop
stopped task '+myproject write a good readme @github' after 0 hours, 40 minutes
$ lets do foo
task 'foo' started at 2020-10-04 12:30:00
$ lets cancel
Cancelled task
{
    "name": "foo",
    "start": "2020-10-04 12:30:58.404926"
}

If you forgot to stop the task on time, you can adjust it giving an absolute or relative time:

$ lets stop 11:02
$ lets stop 10 minutes ago

Once stopped, the task is saved in your history, that by default is located under your HOME directory in a file called 'letsdo-data'.

Don't you like the default location? let's have a look at the config sub-command:

$ lets config

config opens the configuration file (HOME/.letsdo.yaml) with two configurable fields

color: true
data_directory: /home/username/

An optional hooks_directory field can also be set:

color: true
data_directory: /home/username/
hooks_directory: /home/username/.letsdo-hooks/

Hooks

Letsdo supports hooks similarly to Taskwarrior. A hook is any executable script placed in the directory defined by hooks_directory in .letsdo.yaml. If hooks_directory is not set, the feature is silently ignored.

Hook scripts are called with two arguments:

  1. The event name: start when a task has just started, stop when a task has just stopped.
  2. The full description of the task.

Example hook script (~/.letsdo-hooks/notify):

#!/bin/sh
event="$1"
task="$2"
notify-send "letsdo" "$event: $task"

All executable files in hooks_directory are called in alphabetical order on each event.

Let's see now the history: you can rapidly have a look at today and yesterday work done by typing:

$ lets see today
$ lets see yesterday

If you want to see the work done in another date, just write the date:

$ lets see 2017-07-13

a partial date will do as well, just keep the same order: Year first, then Month and Day

$ lets see 17-07-13

you can even use only '07-13' if you have not yet tracked data in different years.

The same way, you can look at all the work done in a particular month:

e.g in July 2017

$ lets see 17-07

or all your tasks:

$ lets see all

or again, a specific project or all the tasks that share a pattern:

$ lets see +myproject

As you can see, tasks are reported along with an ID, so you can re-start the same task again using its ID:

$ lets do 10

or if you just want to start again the last task you stopped

$ lets do last

Do you switch often among tasks? Do not need to stop and start again, just goto using description or ID again:

$ lets goto new project
$ lets goto 3

Finally, you can configure autocompletion to let Letsdo suggest your flags, contexts and projects' names, type lets config autocomplete and follow the instructions.

Licence

Letsdo is release under the MIT license. See LICENSE file for more details.

Contributions

I am really happy to consider any PR that can make Letsdo better.

Metadata

Release files for letsdo 2.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for letsdo 2.1.0
File Size Uploaded
letsdo-2.1.0.tar.gz 33.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for letsdo 2.1.0
File Interpreter ABI Platform
letsdo-2.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 65.8 kB

Release files / letsdo-2.1.0.tar.gz

Download URL letsdo-2.1.0.tar.gz
Size 33.5 kB
Tags Source
SHA-256 checksum
How to use checksums
1bf68defa9a1e6f166348506866b0d5565bcbc269e7814383ae9c3744c66a97a
BLAKE2b-256 checksum
How to use checksums
54e27d784f8f2fb01cbc9b6d1fa8fa39255d41ebac4fefe9b853599ae3b6ddf0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 10, 2026.

Transparency log

Release files / letsdo-2.1.0-py3-none-any.whl

Download URL letsdo-2.1.0-py3-none-any.whl
Size 32.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d92528baf7dfdb64ab64e79f56096d9bac5647bd3aca907e8c3caa86bad670c6
BLAKE2b-256 checksum
How to use checksums
a655f317ede9ce9c6b2e5f64d3d7444ad0d65698ebf55022adab594978ea0071
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 10, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2.1.0 This release

2 release files

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

0.7.4

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.3.4

1 release file

0.3.3

1 release file

0.3.2

1 release file

0.3.1

1 release file

0.3.0

1 release file

0.2.2

1 release file

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page