Skip to content

Latest commit

 

History

114 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

agile-gtd

Sprint planning on top of GTD, in Org mode.

GTD is good at getting everything out of your head into a trusted list. It says little about choosing from that list once it holds four hundred open items. Scrum is good at choosing: a ranked backlog, a sprint you commit to, priorities set on whole pieces of work. It assumes someone grooms the backlog every week. agile-gtd combines the two, so a personal task list sorts itself the way a well-kept backlog would.

The idea

You will have far more open tasks than you will ever do, and that is fine. In any given week only a small part of them matters. The system’s job is to show you that part and keep the rest out of sight without losing any of it.

From GTDFrom Agile
Capture everything into an inbox, clarify laterOne backlog, sorted most important first
Next actions: the physical step you can do nowA sprint: the slice of the backlog you commit to
Projects: any outcome that needs several stepsPriority is set on the project, not on each step
Someday/maybe and the tickler for parked workViews cut the backlog at a depth you choose
The weekly review catches stuck projectsDeadlines move work up the backlog as they near

Two ideas Org does not have

Parent priority. You prioritise the project, and its next actions follow. Move a PROJ into the sprint and every NEXT inside it appears in the sprint too. No next action gets left behind because nobody moved it into the sprint. A single step can still be raised above its project when it is more urgent than the rest; it is never pushed below it.

Rank. Every task gets one number, computed from four things: its own priority, its project’s priority, how close its deadline is, and whether a scheduled date has come due. Views sort by rank and cut at a rank, so filtering and ordering always agree. A date can only move a task up: an unprioritised task climbs the backlog as its deadline approaches, and a deadline months away leaves it where its priority put it.

How you work with it

Priorities run from A to I. Five views, called ranges, cut the backlog at increasing depth:

today  ->  sprint  ->  upcoming  ->  all  ->  someday
 due or    A..C       down to E,    every     plus parked
 overdue              and anything  priority  SOMEDAY work
                      unprioritised
  • Commit to work by giving its project priority A, B or C. The project’s next actions now show in the sprint.
  • Leave it on the list without a priority. It shows in upcoming, the everyday working view, and rises when its deadline gets close.
  • Stop seeing it every day by demoting it below E. It stays in the backlog (all) and out of your daily view.
  • Park it with the SOMEDAY tag. It leaves every range but someday.
  • Park it until a date with SOMEDAY and a SCHEDULED date. That makes it a tickler, and it comes back into view on that day.

Inside an open agenda you widen or narrow the range on the spot, so one command serves both “what do I do now” and “what is on my plate at all”.

What it looks like

A small todo.org; only the tax return has a date:

* PROJ [#B] Launch the new website
** NEXT Write the landing page copy
** NEXT Pick a hosting provider
* PROJ Renovate the bathroom
** NEXT Get three quotes from plumbers
* NEXT File the tax return
DEADLINE: <2026-09-27 Sun>
* PROJ [#G] Learn Rust
** NEXT Read chapter 4 of the book
* NEXT Try the new ramen place                                    :SOMEDAY:

The Main Agenda (a) at the all range, captured on 23 September 2026:

Next Actions [all]

 [#B] Priority B
  NEXT Write the landing page copy
  NEXT Pick a hosting provider
  NEXT File the tax return  due in 4d

 Default Priority
  NEXT Get three quotes from plumbers

 [#G] Priority G
  NEXT Read chapter 4 of the book
  • The two website actions carry no priority of their own; they sit at B because their project does.
  • The tax return has no priority either. Its deadline four days out lifts it to B.
  • At sprint the list stops after the [#B] group. At upcoming it stops after Default Priority, so Rust stays out of the daily view.
  • The ramen place appears only at someday, under its own Someday heading.

Quickstart

Put your tasks in todo.org and inbox.org under org-directory, then:

(use-package agile-gtd
  :after org
  :config
  (agile-gtd-enable))

Run M-x org-agenda, then a for the Main Agenda, i for the inbox or rs for stuck projects. agile-gtd-agenda-wider-range and agile-gtd-agenda-narrower-range change the range of the open agenda; bind them to keys of your choice.

To split work by client or team, register a tag per project:

(setopt agile-gtd-projects '((:tag "alpha" :key ?a)
                             (:tag "beta")))

alpha then gets its own agenda command, wa.

Install

agile-gtd needs Emacs 30.2 or later; CI runs the tests on Emacs 30.2 and 31.1. It is not on MELPA. It depends on org-ql, org-super-agenda, org-edna and org-modern from MELPA, and on org-records-mcp, which is not on MELPA either. MELPA’s org-mcp is a different package and does not work here.

With the built-in package-vc (Emacs 30):

(use-package org-records-mcp
  :vc (:url "https://github.com/stfl/org-records-mcp" :branch "main"))

(use-package agile-gtd
  :vc (:url "https://github.com/stfl/agile-gtd")
  :after org
  :config
  (agile-gtd-enable))

With straight, the org-records-mcp recipe is (:host github :repo "stfl/org-records-mcp" :branch "main" :files (:defaults "org-records-mcp-stdio.sh")).

Limits

  • It is opinionated and global. agile-gtd-enable sets your TODO keywords, priority range, workflow tags, capture templates, agenda files and a set of Org options. Agenda commands and capture templates on the keys it uses are replaced; others are kept. What the package configures lists every change and how to turn parts of it off.
  • It is for one person. There are no story points, no velocity, no burndown and no shared team backlog.
  • It installs no keybindings. The range commands and chain helpers are yours to bind.
  • The deadline table is fixed. How many days out a deadline counts as A, B and so on is not configurable.
  • org-records-mcp is a hard dependency, even when you never connect an AI assistant.

Where to go next

You want to knowRead
What each state, tag and property means; inbox and captureThe workflow model
How priorities, parent priority and deadlines make rankPriorities and rank
What each range shows and how to rotate between themView ranges
Every agenda command and how its blocks are groupedAgenda commands
Registering clients, teams and engagementsProjects
Chaining steps so the next one becomes NEXTTask dependencies
Querying the workflow from your own org-ql searchesorg-ql predicates
Giving an AI assistant your agenda through MCPViews for AI assistants
What agile-gtd-enable changes in OrgWhat the package configures
Each Org option it sets, and whyOrg settings agile-gtd applies
What changed between releasesChangelog

Contributing

Issues and pull requests are welcome at stfl/agile-gtd. The build uses Eask and just: eask install-deps, then just build, just lint and just test.

License

GPL-3.0-or-later.

About

Agile Getting Things Done

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages