Each month I set primary and secondary goals as part of my Groundhog Day Resolutions process. Setting goals is good, but I have a nasty habit of forgetting about them until a few days before they're due. Not good.
To combat this issue I wanted to add my goals somewhere I would see them every day: my org agenda.
My daily agenda display currently looks like this (minus client/private tasks):

I wanted to keep the same agenda information, but with my monthly goals at the top so that I can't ignore them.
Thankfully org-agenda
can be configured to show different views and agendas
via the org-agenda-custom-commands
variable.
The first step was to create a place to store my goals. I created an org file
with TODO
entries for each goal, all stored under a headline for the
month. These entries are tagged with :GHD:
so they can be filtered, and I
added an :ACTIVE:
tag for the current month.
The finished goals.org
is laid out like this:
* TODO March 2021 [0/7] :GHD:ACTIVE: ** TODO [#A] Finish version 1.0 of Writing PHP with Emacs ** TODO [#A] Complete another session of deliberate practice ** TODO [#A] Finish version 0.3 of Craft Roulette ** TODO [#A] Contribute to a free software project ** TODO [#C] Run 120 miles ** TODO [#C] Read a book ** TODO [#C] Add detail pages to my secondary goals
The tag properties are inherited from the parent for each child goal, which makes setting the active month much simpler.
My first attempt used A
and B
for the priorities, but org-agenda
gives all
tasks a priority of B
by default so the month headline was showing in the
final view. Using A
and C
for my primary and secondary goals fixes this.
The custom agenda is made up of three parts:
- A list of primary goals.
- A list of secondary goals.
- The regular org agenda which shows scheduled tasks and deadlines.
I used the tags-todo
command to list goals; it can filter tasks by file, tag,
and priority which makes it perfect for the job. The configuration to show my
primary goals is fairly simple:
(tags-todo "GHD+ACTIVE+PRIORITY=\"A\"" ((org-agenda-files '("~/org/goals.org"))))
This displays all TODO
items in my "~/org/goals.org" file that have :GHD:
and :ACTIVE:
tags AND a priority of A
. To display secondary goals, all I
need to do is replace the priority with C
.
After the tags-todo
command I use the agenda
command with the timespan set
to one day/one week depending on the view.
The finished configuration looks like this (with a little modification for brevity/online readability):
(setq org-agenda-custom-commands '(("d" "Today's Tasks" ((tags-todo "GHD+ACTIVE+PRIORITY=\"A\"" ((org-agenda-files '("~/org/goals.org")) (org-agenda-overriding-header "Primary goals this month"))) (tags-todo "GHD+ACTIVE+PRIORITY=\"C\"" ((org-agenda-files '("~/org/goals.org")) (org-agenda-overriding-header "Secondary goals this month"))) (agenda "" ((org-agenda-span 1) (org-agenda-overriding-header "Today"))))) ("w" "This Week's Tasks" ((tags-todo "GHD+ACTIVE+PRIORITY=\"A\"" ((org-agenda-files '("~/org/goals.org")) (org-agenda-overriding-header "Primary goals this month"))) (tags-todo "GHD+ACTIVE+PRIORITY=\"C\"" ((org-agenda-files '("~/org/goals.org")) (org-agenda-overriding-header "Secondary goals this month"))) (agenda)))) )
I can now view a daily agenda using C-c a d
, or a weekly one using C-c a
w
, and the agenda has both sets of goals at the top:

Now I have no excuse for forgetting them.
3 Comments
Thanks! Did you also consider
org-super-agenda
?I did consider it, but I wanted to see if it was possible to do with the built-in agenda.
org-super-agenda
is definitely something I want to learn in the future.This concept has helped me set my weekly and monthly tasks. Instead of setting "SCHEDULED" or "DEADLINE" tasks, this helps me easily separate tasks for particular week/month. All I have to do, is set the current week or month heading with the @active tag and it populates in my agenda. I am planning to make more use of this concept. This is a brilliant solution where many can offer complicated lisp code that I wanted to avoid.