Tasks that know what they are waiting for

Blocking relationships, waiting-on, related links and nested subtasks — stored in both notes at once, drawn on the Gantt chart, and warned about when you try to close something too early.

Unlock Pro Download the free version

The InventTasks task window in Obsidian, showing the relationships panel with Blocks, Waiting on and Related sections

A checkbox list cannot express "this cannot start until that is done". Most Obsidian setups solve it with a wiki link and a habit — which works right up until the blocking task is finished and nothing tells you the other one is now free.

Obsidian task dependencies need to live on both notes to be trustworthy, so InventTasks writes both sides and keeps them symmetric.

Relationship Meaning Direction
Blocks This task stops another from proceeding Stored on this task, mirrored as waiting on the other
Waiting on This task cannot proceed until another finishes Derived — you never write it directly
Related Connected, but neither blocks the other Symmetric on both notes

Waiting on is deliberately read-only. It is the other side of a blocks link, so writing both by hand would let the two disagree; the API refuses attempts to set it for the same reason. Write the blocking side, get the waiting side free and correct.

Relationship writes update both notes in a single atomic operation. There is no window where one file claims a link the other has never heard of.

Subtasks are real tasks#

A subtask is its own Markdown file with parent_task in frontmatter — not a line item inside a parent note. It has its own status, dates, fields, comments and attachments, and appears in searches and views like anything else.

Nesting shows in List, Table and Gantt. The toolbar's Subitems control switches between hiding them, nesting them under parents, or promoting them to top-level rows.

Warnings, not handcuffs#

Close a task with open subtasks, unfinished checklist items or unresolved waiting on links and InventTasks can prompt you first. It is a question, not a refusal — sometimes the blocker genuinely stopped mattering, and a tool that argues with you about that gets uninstalled.

The same applies to dates: dependencies are drawn on the Gantt chart, but moving a blocking task does not automatically shift everything downstream. There is no automatic rescheduling and no critical-path calculation.

Progress that follows the tree#

A Progress (automatic) custom field derives its percentage from completed subtasks or checklist entries. Finish two of four subtasks and the parent reads 50% without anyone maintaining it.

What it looks like on disk#

---
id: TSK-00088
title: Migrate the database
status: todo
parent_task: TSK-00080
relationships:
  blocks: [TSK-00089, TSK-00091]
  related: [TSK-00042]
---

waiting_on is absent because it is derived. Open TSK-00089 and you will find this task listed there instead — written at the same instant, by the same operation.