vault-tasks
is a TUI Markdown task manager.
It will parse any Markdown file or vault and display the tasks it contains.
./test-vault
├── dir
│ ├── subdir
│ │ ├── test_1.md
│ │ ├── test_2.md
│ │ └── test_3.md
│ └── test_0.md
├── example_physics_class.md
├── example_vault-tasks_project.md
└── test.md
I made this tool because I wanted to integrate my task system directly inside my Second Brain.
Markdown tasks are very easy to integrate with knowledge/projects and are source-control-friendly.
I wrote a blog post explaining my workflow and how I use vault-tasks if you're interested. (It's dated, I introduced new features since then (trackers))
I also spend most of my writing time in the terminal (Helix) and do not rely on heavy external software.
- Task Parser (see Usage)
- Subtasks
- Supports relative dates
- special today tag and regular tags
- descriptions, priority, completion percentage
- Trackers (or recurrent tasks)
- Navigate vault
- Edit tasks or open in default editor
- Search through tasks (sort and filter)
- Calendar view
- Time Management tab (Pomodoro & Flowtime)
I plan on adding a new tab about Trackers where you'll be able to see nice statistics about your trackers. For now, you can see your trackers in the Explorer tab.
cargo install vault-tasks
You can get it from nixpkgs 25.05 or directly from this repo's flake:
vault-tasks = {
url = "github:louis-thevenet/vault-tasks";
inputs.nixpkgs.follows = "nixpkgs";
};
And use the package in your configuration: inputs.vault-tasks.packages.${pkgs.system}.default
git clone https://github.com/louis-thevenet/vault-tasks.git
cd vault-tasks
cargo build --release
See vault-tasks --help
for basic usage.
<!-- An example task in your markdown file -->
- [ ] An example task #tag tomorrow p1
A description
of this task
- [x] A subtask today @today
- [/] Another subtask 10/23 @today c50
Partly done
- [-] This one is canceled
Token | Meaning |
---|---|
- [ ] (- [x] , ...) |
declares a task and sets its state |
p1 (p10 , ...) |
sets the priority |
c50 (c99 , c150 , ...) |
Sets the completion percentage |
#tag |
is a tag, a task can have zero or more tags |
@today (@tod , @t ) |
is a special tag that will mark the task as part of today's tasks |
23/10 (2024/23/10 ) |
sets the due date with a literal date |
today (tdy ) |
sets the due date to today |
tomorrow (tmr ) |
sets the due date to tomorrow |
a day of the week (monday or mon , etc) |
sets the due date to the next occurence of that day |
3d (3m, 3w, 3y , ...) |
means "in 3 days" and will set the due date accordingly |
-
Task states are Done (
x
), To-Do (/
) and Canceled (-
) -
@today
allows you mark a task for today while keeping a due date. It will show up with a ☀️ invault-tasks
. -
Relative dates are always replaced by literal dates once
vault-tasks
is run. Thanks to this,vault-tasks
does not store any data except its config file. -
Other tokens will be part of the title of that task
-
Descriptions and subtasks are declared using indents (see configuration)
This is what you will see in the preview of this README.md
in vault-tasks
:
<!-- An example tracker in your markdown file -->
Tracker: Arts Enjoyment (2025-06-08)
| Every day | inspiration | medium | cost | social | notes |
| ---------- | ----------- | -------- | ---- | ------ | -------------------------- |
| 2025-06-08 | 8 | painting | 15 | [ ] | watercolor landscape |
| 2025-06-09 | 6 | music | 0 | [x] | street musician downtown |
| 2025-06-10 | 9 | theater | 45 | [x] | incredible Shakespeare |
| 2025-06-11 | 7 | digital | 12 | [ ] | new photography exhibition |
| 2025-06-12 | 5 | craft | 8 | [ ] | pottery wheel attempt |
| 2025-06-13 | 8 | film | 10 | [x] | foreign cinema festival |
| 2025-06-14 | 9 | dance | 20 | [x] | salsa class breakthrough! |
| 2025-06-15 | | | | | |
| 2025-06-16 | | | | | |
| 2025-06-17 | | | | | |
| 2025-06-18 | | | | | |
You start by writing Tracker:
followed by your tracker's name. You add a starting date such as an ISO date or a relative date.
Then you can start vault-tasks, so it creates blank entries for you. By default, it will fill the entries until the current date + 3 blank entries. This is also useful to reformat your table if you don't have a Markdown formatter.
Here is a basic template:
Tracker: Name (today)
| daily | notes |
Vault-tasks would reformat it to:
Tracker: Name (2025-06-15)
| Every day | notes |
| ---------- | ----- |
| 2025-06-15 | |
| 2025-06-16 | |
| 2025-06-17 | |
| 2025-06-18 | |
Frequencies can be:
Every <hour|day|week|month|year>
hourly
,daily
,weekly
,monthly
,yearly
Data types are:
- Boolean type:
[ ]
or[x]
- Score type: any integer
- Note type: any text
- Blank
Be careful not to change type within a column, vault-tasks will replace the wrong type with a blank entry.
This is what you will see in the preview of this README.md
in vault-tasks
:
Check the key map within the app with ?
Key | Alternate Key | Action |
---|---|---|
shift-h |
shift-← |
Previous tab |
shift-l |
shift-→ |
Next tab |
ctrl-k |
ctrl-↓ |
Scroll up |
ctrl-j |
ctrl-↑ |
Scroll down |
page_down |
Scroll one page down | |
page_up |
Scroll one page up | |
q |
ctrl-c |
Quit the application |
? |
Open keybindings menu for the current tab |
Key | Alternate Key | Action |
---|---|---|
k |
↑ , shift-tab |
Previous entry |
j |
↓ , tab |
Next entry |
h |
← , back_space |
Leave current entry |
l |
→ ,enter |
Enter current entry |
Key | Action |
---|---|
s |
Focus search bar (enter or esc to unfocus) |
o |
Open selection in default editor |
e |
Quickly edit selection |
r |
Reload vault |
t |
Mark task To-Do |
d |
Mark task Done |
i |
Mark task Incomplete |
c |
Mark task Canceled |
Key | Action |
---|---|
enter |
Focus/Unfocus search bar |
Shift-s |
Change sorting mode |
Key | Alternate Key | Action |
---|---|---|
h |
← |
+1 day |
l |
→ |
-1 day |
j |
↓ |
+7 days |
k |
↑ |
-7 days |
Shift-j |
Shift-↓ |
+1 month |
Shift-k |
Shift-↑ |
-1 month |
n |
+1 year | |
Shift-n |
-1 year |
Key | Action |
---|---|
t |
Goto Today |
Key | Alternate Key | Action |
---|---|---|
k |
↑ |
Previous setting |
j |
↓ |
Next setting |
Key | Action |
---|---|
space |
Next segment (skip current) |
p |
Pause timer |
e |
Edit selected setting |
shift-tab |
Previous time management technique |
tab |
Next time management technique |
You can start already focused on a tab by using one of the CLI subcommands:
vault-tasks explorer # is the default
# Or
vault-tasks filter
vault-tasks time
vault-tasks calendar
You can also output the content of a vault in standard output using
vault-tasks stdout
Example output:
vault-tasks -v ./README.md stdout
README.md
‾‾‾‾‾‾‾‾‾
Vault-tasks
‾‾‾‾‾‾‾‾‾‾‾
Usage
‾‾‾‾‾
Writing tasks
‾‾‾‾‾‾‾‾‾‾‾‾‾
❌ An example task
📅 2025-06-16 (tomorrow) ❗1
#tag
A description
of this task
✅ A subtask
☀️ 📅 2025-06-15 (today)
⏳ Another subtask
☀️ 📅 2025-10-23 (in 4 months) [🟩🟩⬜️⬜️⬜️ 50%]
Partly done
🚫 This one is canceled
Writing Trackers (or recurrent tasks)
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
Tracker: Arts Enjoyment (2025-06-08)
| Every day | inspiration | medium | cost | social | notes |
|------------|-------------|----------|------|--------|----------------------------|
| 2025-06-08 | 8 | painting | 15 | [ ] | watercolor landscape |
| 2025-06-09 | 6 | music | 0 | [x] | street musician downtown |
| 2025-06-10 | 9 | theater | 45 | [x] | incredible Shakespeare |
| 2025-06-11 | 7 | digital | 12 | [ ] | new photography exhibition |
| 2025-06-12 | 5 | craft | 8 | [ ] | pottery wheel attempt |
| 2025-06-13 | 8 | film | 10 | [x] | foreign cinema festival |
| 2025-06-14 | 9 | dance | 20 | [x] | salsa class breakthrough! |
| 2025-06-15 | | | | | |
| 2025-06-16 | | | | | |
| 2025-06-17 | | | | | |
| 2025-06-18 | | | | | |
The config.toml
contains the default configuration which can be generated using vault-tasks generate-config
.
In $HOME/.config/vault-tasks/config.toml
, you can override the default settings, keybindings and colorscheme.
In particular, you can set a default vault path.
Feel free to submit issues or pull requests. Contributions are welcome!