I previously answered this same question over in unix & linux. RPosting the answer again, for record.
Before I dive into the working details, note that recurrence is not well-designed. What I bring is empirical observations and liable to change with a rework.
TLDR; How do I use and make sense of recurrence
task add recur:<duration> due:<first task due date> until:<delete first task by date> wait:<date when task will appear> "my task"
Example:
task add recur:daily due:9:00 until:12:00 wait:5:00 eat breakfast
- Eat breakfast at 9:00 AM
- Hide task until 5:00 AM
- Remove task by lunch time
- Create a new occurrence everyday
Details
Recurrence requires a due attribute (enforced with a validation check).
Recurrence can also use until and wait attributes, if they exist.
Recurrence does not use scheduled.
And there is a mask attribute, that tracks which instance of the reoccurence the task is.
When a new recurring instance is created:
new task due = parent due + recur * mask
- identical math for both
until and wait
scheduled is copied wholesale from the parent task. In practice, this unexpected behaviour won't break your workflow, just affects filters and skews urgency. I call this out because it took me a very long time to discover this was not working as expected.
Every time taskwarrior runs, it checks to see if it's time to create the next occurrence. The psuedo-equation is:
now >= due + recur * (mask + 1)`
Note, there is a config value, rc.recurrence.limit, that can be used to tell taskwarrior to create even more occurrences further out.
You can expect the next occurrence to be created at the due date of the previous.