org-warrior is a TaskWarrior-like CLI that queries Org files via org-ql and an Emacs daemon. Read operations use org-ql; write operations go through Emacs/Org for correct IDs and state changes.
- Running Emacs daemon (default socket: edit)
- org-ql available in Emacs
./src/org-warrior --help
- Friendly 3-word names like
paper-salmon-quietinstead of UUIDs - Deterministic: Same Org ID always generates the same handle
- Only works with tasks that have Org IDs (:ID: properties in headings)
- Shown by default in list/today; use
--no-handlesto hide them - Use
--idsto show Org IDs alongside tasks - Support prefixes:
paper-salmonworks if unique, warns if ambiguous
org-warrior does NOT create Org IDs - it only uses existing ones.
ID Creation (handled by Emacs):
- Add the setup code below to your Emacs config
- IDs are created automatically when you save org files
- Use manual commands in Emacs:
SPC m i b(Doom) orM-x org-id-get-create
Handle Usage (handled by org-warrior):
handles-assign: Scan for existing IDs and cache handlesshow/schedule/deadline/set-state: Accept handle prefixes or full Org IDs
- handles-assign: Scan org files for existing IDs and populate handle cache (warns about missing IDs)
- show/schedule/deadline/set-state: Accept handle prefixes or full Org IDs
- Wordlist: src/wordlist.txt (override with ~/.org-warrior/wordlist.txt)
- Cache: ~/.org-warrior/handles.json (auto-created)
Add this to your Emacs config to create IDs automatically:
Doom Emacs (~/.doom.d/config.el):
(defun org-warrior/ensure-ids-on-save ()
"Ensure all headings have IDs before saving."
(when (eq major-mode 'org-mode)
(save-excursion
(org-map-entries
(lambda ()
(unless (org-id-get)
(org-id-get-create)))))))
(add-hook 'before-save-hook 'org-warrior/ensure-ids-on-save)Other Emacs setups: See docs/emacs-setup.el for comprehensive setup.
# First time: scan existing IDs
org-warrior handles-assign
# Found 46 IDs out of 991 headings, ⚠️ 945 headings missing IDs
# List tasks (shows handles by default)
org-warrior list
# 1 paper-salmon-quiet [TODO] Fix parser bug
# Use handles for task operations
org-warrior show paper-salmon-quiet
org-warrior schedule "tomorrow" paper-salmon
org-warrior set-state paper-salmon-quiet DONE
# Different display options
org-warrior list --ids # Show Org IDs alongside
org-warrior list --no-handles # Hide handles, show just TODO statesorg-warrior list
org-warrior today --ids
org-warrior +work due:week
org-warrior show paper-salmon-quiet
org-warrior handles-assign
Author: Juan Gonzalez