Taskwarrior
I use Taskwarrior daily, but have a love-hate relationship with it after running into sharp edges and quirks several times. Hopefully this doesn&#x27;t come across as too harsh as Taskwarrior is good as a command line utility for tracking one-off personal tasks -- maybe the best and I recommend it for that limited case -- but it has some warts that anyone newly looking into it should be aware of:<p>The recurrence system is listed as an &quot;advanced topic&quot; in the documentation. I gave up on trying to make heads or tails of recurrence in TimeWarrior after fighting with it for years and having way too many times where I had meant to make a change to just a particular single task, and then having unexpected changes to several tasks in a series, or to the template task, or having just that particular instance changed but then the recurrence ends up creating new tasks in a funny way, etc.  I once had a particular edit to a reoccurring task create hundreds of instances the next time I looked at the task list.<p>Continuing on with recurring tasks, The Taskwarrior documentation notes &quot;you never directly interact with... the template task. It is hidden for a reason. Instead, you interact with the recurring task instances&quot; Hope you don&#x27;t want make a change to future instances without changing any current instances. You can do it, but it&#x27;s unnecessarily cumbersome.<p>Ultimately, I&#x27;ve actually found it easier to run a script outside of TW on an hourly basis that checks for the last completed task with a particular user defined field for each task that I want to recur, then creates a new instance if needed. This works nicely as there&#x27;s no longer any linkage within TW between individual tasks in a &quot;series&quot;, preventing a change from copying from from one to the others, and it&#x27;s impossible to accidentally make a change to the &quot;template&quot; since the template is no longer a record within TW at all. I do note that the facts that there are python (and other) libraries that make this trivial and that it&#x27;s possible to define fields on a task this way are notable strengths of TaskWarrior. Nonetheless, the fantastic CLI ergonomics for one-time tasks are just missing for things that happen more than once. That a template for a task is itself a task record seems like some really bad conceptual confusion in the design, and extremely kludgy.<p>A quick look at sibling comments or a general web search for discussion about TaskWarrior recurrence issues will show problems with recurrence are not uncommon.<p>The units used for the length of time in the urgency calculation for things like task age, due date are unintuitive and there is no explanation of this rather important point in the documentation (<a href="https:&#x2F;&#x2F;taskwarrior.org&#x2F;docs&#x2F;urgency.html" rel="nofollow">https:&#x2F;&#x2F;taskwarrior.org&#x2F;docs&#x2F;urgency.html</a> for reference). As a specific example, I have a task entered 5 weeks ago which task info tells me is an age of 0.107, while a task entered 23 hours ago has an age of 0.003. This kind-of looks like 1 per year, but why? Also, time to due date is definitely not 1 per year. It also looks like age has a ceiling of 1 since this value appears for very old tasks, and that time to due date is similarly limited, but again, not documented.<p>The built-in reports are kind of nice, and the fact that you can define your own &quot;reports&quot; (really task lists with custom columns) is also nice, but it&#x27;d be even better to be able to be able to just throw SQL directly at it. There&#x27;s a TaskWarrior-inspired utility &quot;Tasklite&quot; that does just this by storing tasks in SQLite, although I haven&#x27;t tried it myself yet. The Tasklite criticism of TaskWarrior is also worth considering: <a href="https:&#x2F;&#x2F;tasklite.org&#x2F;differences_taskwarrior.html" rel="nofollow">https:&#x2F;&#x2F;tasklite.org&#x2F;differences_taskwarrior.html</a><p>You can get tasks out of Taskwarrior in JSON format with &quot;task export&quot; and there are scripts to further transform this into other formats, but you need to do an extra step to import this into another tool for any analysis you might want to do.<p>Reports like ghistory.daily and ghistory.weekly can get long and unwieldy. There are ways to deal with this, but it&#x27;s annoying, and makes me question if the developers themselves are using these reports on a list of completed tasks going back several years or not.<p>Taskserver is another area that seems poorly thought-out and over-engineered, similar to recurrence, and I&#x27;d caution anyone considering using Taskwarrior on more than one computer to look over the Taskserver Setup guide at <a href="https:&#x2F;&#x2F;gothenburgbitfactory.github.io&#x2F;taskserver-setup&#x2F;" rel="nofollow">https:&#x2F;&#x2F;gothenburgbitfactory.github.io&#x2F;taskserver-setup&#x2F;</a> while noting the following:<p>* Just copying the files around between Taskwarrior instances e.g. with Syncthing or something like that mostly works, but a lot of tools&#x2F;attempts at mobile apps for TaskWarrior rely on having TaskServer. The sync issues noted in various places by using a file-level sync like this are definitely possible, but the practical implication for a task list that most likely belongs to a single individual is questionable.<p>* Per the guide, &quot;There are two &#x27;D&#x27;s in TASKDDATA, and omitting one is a common mistake&quot; in reference to an environmental variable defined, as far as I can tell, entirely within this document. Naming things is hard and this is admittedly a small detail, but why not remove the pitfall rather than just warning about it?<p>* You will need a CA certificate to &quot;to sign and verify the other certs&quot; -- &quot;The command below will generate all the certs and keys for the server, but this uses self-signed certificates, and this is not recommended for production use. This is for personal use, and this may be acceptable for you, but if not, you will need to purchase a proper certificate and key, backed by a certificate authority.&quot;<p>* &quot;Certificates coming from Let&#x27;s encrypt have <i>not</i> been successfully used by anyone. Please remember that Let&#x27;s encrypt only generates servers, but we need a client certificate as well.&quot;<p>* This is rather a lot of work just to be able to _add tasks on your phone_ while you&#x27;re away from your desk or even just to sync tasks between what might be two or three desktops, and it&#x27;s pretty clear they had more of an &quot;enterprise environment&quot; or a hosting service like InThe.AM in mind when they wrote it. Regarding that particular service, it is open-source but &quot;Setting this up locally as a clone of Inthe.AM is, unfortunately, not supported&quot; - <a href="https:&#x2F;&#x2F;intheam.readthedocs.io&#x2F;en&#x2F;latest&#x2F;" rel="nofollow">https:&#x2F;&#x2F;intheam.readthedocs.io&#x2F;en&#x2F;latest&#x2F;</a><p>By contrast, there&#x27;s another project dstack which is also Taskwarrior-inspired but &quot;uses git to synchronize instead of a special protocol&quot; at <a href="https:&#x2F;&#x2F;github.com&#x2F;naggie&#x2F;dstask" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;naggie&#x2F;dstask</a> -- this is also something I haven&#x27;t tried it myself yet but it looks interesting, although doesn&#x27;t itself help with getting tasks on&#x2F;off a phone as far as I know.