Agenda Task
A right-pane widget for the start/due dates, duration and recurrence of a note, or of a whole tree
multi-selection at once, plus an Actions section with Complete Task and a row of reschedule buttons.
Split out from the original agenda addon (whose Overview widget is now agenda-overview@beatlink)
so Task can be installed, updated, and configured independently — the two addons share no code or
settings.
Dates and Duration and Actions are collapsible disclosures, open by default. Recurrence is a single button reading the current rule back in plain English ("Every 2 weeks on Monday", or "Does not repeat"); clicking it opens the recurrence picker in a popover. The pane scrolls vertically when its sections outgrow the window.
The picker and the rule handling (plain-English text, the next occurrence on completion, reschedule
dates) come from recurrence-input 3.1.0, kept in this folder as recurrence-input.js, a verbatim copy
of the npm release (its source repository no longer exists). The picker covers every RFC 5545 rule
part (several times a day, several days or weekdays of the month, and "only the last of those"),
using recurrence-input's standard feature set, which leaves out the raw More options section; editing
a rule keeps anything it does not show exactly as written.
A task whose times differ by day, such as 14:00 on weekends and 18:00 on weekdays, can have several
rules: "Add another rule" in the picker adds one, and the label then holds one standard RRULE: line
per rule. Completing or rescheduling the task takes the earliest next date across them, and the
iCalendar feed writes each line as its own RRULE. RFC 5545 discourages more than one RRULE per
event, so some calendar apps show only the first rule; Trilium itself uses all of them. Rules are stored in floating local time, so an end date is written without a Z, as the
iCalendar feed's floating start times require; older rules with a Z still read the same.
How it works
The widget appears in the right pane on any note whose type is marked actionable (#agendaTaskWidget
inheritable label, set by the item's template). It edits four kinds of note labels — start/due
datetime, duration, recurrence — via configurable label names, plus fires agenda:tasksChanged after
any change so agenda-overview@beatlink's widget (if installed) re-files the note.
Working on several tasks at once
Select notes in the tree (alt-click, or shift-click for a range) and the widget retargets at that
whole selection, the way area-picker@beatlink and template-picker@beatlink do: the header counts
what it will write to ("Task (3 notes)"), every field writes to all of them, and Complete Task and
the reschedule buttons run over each in turn. Notes in the selection that aren't tasks are dropped,
so the widget only ever writes task labels to notes marked actionable. With nothing selected it stays
on the active note.
A field whose targets disagree reads — Mixed — and stays that way until a value is chosen, which
then applies to all of them.
Completing a task with a recurrence rolls its start date forward instead of leaving it done; the
reschedule buttons offer a configurable set of quick date jumps (fixed days-from-now or a recurrence
rule evaluated from now). The stock set is Today, Tomorrow, Next Weekend (FREQ=WEEKLY;BYDAY=SA) and
End of Month (FREQ=MONTHLY;BYMONTHDAY=-1).
Configuration
Task owns its own settings note (taskSchema.json/taskDefaults.json/taskConfig.json) tagged #agendaTaskConfig — the label
names it reads/writes (start/due date/time, duration, recurrence) and the reschedule buttons' option
registry. Its own Task Settings page (TAM's "Addon Settings" button) is the only place that edits
it.
Independence from the other agenda addons
Task used to live inside the original agenda addon (task/ folder), sharing its settings note. The
two are now fully decoupled in both directions: neither ships the other's code, neither reads the
other's settings note, and neither declares the other as a TAM dependency. Either one runs on its own.
What they still share is a vocabulary, not a wire:
| Convention | Who writes it | Who reads it |
|---|---|---|
| start/due datetime + recurrence label names | this addon | agenda-overview@beatlink and agenda-myday@beatlink, each from their own copy of the setting |
durationDisplay / recurrenceDisplay |
this addon | agenda-overview@beatlink's overview columns, if installed |
agenda:tasksChanged (api.triggerEvent) |
this addon, after any change | agenda-overview@beatlink, if installed |
#agendaTaskWidget (inheritable, from the item's template) |
template-picker@beatlink's templates |
this addon, to decide whether the pane shows |
The cost of that independence: renaming a label name here means renaming it in each other installed addon that reads it. Nothing detects the drift for you.
Upgrading from 2.x
Version 3.0.0 removes the one-time migration that copied label names and Reschedule Options out of the old shared agenda config note. Any install that ran a 2.x version at least once has already migrated and is unaffected. Installing 3.0.0 fresh onto a pre-4.0.0 agenda gets the default label names instead of the old shared ones — re-enter them on the Task Settings page if you had customized them.
Changelog
Agenda Task Changelog
3.9.3 - 2026-11-13
Fixed
- vendor recurrence-input 3.1.0, since its source repository is gone
3.9.2 - 2026-10-21
Changed
- describe how recurrence-input releases now land and publish on their own
3.9.1 - 2026-10-21
Added
- add bump-recurrence-input and a daily workflow that opens a pull request for each new release
3.9.0 - 2026-10-21
Added
- allow several recurrence rules per task, such as different times on weekends and weekdays
3.8.0 - 2026-10-21
Added
- update recurrence-input to 3.1.0 and use its standard feature set
3.7.0 - 2026-10-21
Added
- update recurrence-input to 3.0.0 for every RFC 5545 rule part
3.6.0 - 2026-10-21
Added
- use recurrence-input for the recurrence picker and rule helpers
3.5.1 - 2026-09-18
Fixed
- restate #recurrenceDisplay when the recurrence changes
3.5.0 - 2026-09-18
Added
- edit a whole tree selection of tasks at once
3.4.5 - 2026-09-01
Changed
- Breaking: absorb agenda@beatlink so it stands on its own
3.4.4 - 2026-08-26
Fixed
- make the Task pane's nowrap rule outrank the shared block
3.4.3 - 2026-08-26
Fixed
- scroll the Task pane instead of wrapping it into columns
3.4.2 - 2026-08-26
Fixed
- ship the Task widget's own CSS instead of borrowing Overview's
3.4.1 - 2026-08-24
Fixed
- scroll the Task pane when it outgrows the window
3.4.0 - 2026-08-24
Added
- edit recurrence in a popover behind a plain-English button
Changed
- use Trilium's built-in Preact controls instead of hand-rolled ones
- nest sources by kind and split out the Overview widget
3.2.1 - 2026-08-21
Changed
- render color fields with Trilium's built-in ColorPicker
3.2.0 - 2026-08-17
Added
- split the Task widget out of agenda