A task is a bullet with a checkbox, written as a markdown checkbox in whatever document it belongs to: a journal entry, a project page, a meeting note. There is no separate task store. Priority, dates and states are carried by short tags after the checkbox, and the Tasks view in the right sidebar lists every task in the graph, filtered and grouped, and ticks one off in the document it lives in.

- [ ] #P1 #D-2026-07-01 Ship the release [[Acme]]
- [ ] #W Chase [[Sidney Jones]] for the API key
- [x] #C Dropped the idea

Write a task

A task is a - bullet whose text starts with [ ] (open) or [x] (done). It can sit at any depth of an outline, and Enter at the end of a task starts another one. A - [ ] inside a code block or the frontmatter is text, not a task.

Three ways to make one:

  • Type - [ ] at the start of a line.
  • Press Ctrl+Shift+Enter (Cmd+Shift+Enter on a Mac). On a bullet it cycles the state: plain bullet, open task, done task, plain bullet. On a prose line it turns the line into a task, keeping its indentation. It is refused on a heading, in a code block and in the frontmatter.
  • On a phone, tap Toggle task on the command bar. It is greyed where the shortcut would be refused.

The checkbox is drawn as a box. Click or tap it to tick the task and again to untick it. Ticking changes the [ ] to [x] and nothing else on the line: tags, spacing and text stay as they were, and no completion date is written unless you add one.

Task tags

Tags are recognised only in the run of tokens immediately after the checkbox. A # anywhere else on the line is plain text, so - [ ] #P1 triage the #P2 backlog has one tag.

Tag Meaning
#P1 #P2 #P3 Priority, highest first. There is no level below #P3
#W Waiting on someone or something
#D Doing
#C Cancelled. A cancelled task is written ticked, - [x] #C …, so it stays out of the open list
#D-YYYY-MM-DD Due date
#S-YYYY-MM-DD Scheduled date
#C-YYYY-MM-DD Completion date

A bare letter is a state and a dated letter is a date; that is all that tells #D (doing) from #D-2026-07-01 (due). Tags are case-sensitive: #p1 is text. A date is checked for shape only, so #D-2026-13-45 is read as a due date and left for you to notice. Where the same kind of tag appears twice, the first wins. Tags render as plain text in the editor; on a published site they become badges.

The tag helper

On a task line, type # and a menu opens with the nine tags: Priority 1, Priority 2, Priority 3, Waiting, Doing, Cancelled, Due date…, Scheduled date… and Completion date…. Keep typing to filter it (#crit reaches Priority 1, #dead reaches the due date), move with the arrow keys, and press Enter or Tab to choose. Escape closes it. The # can be typed anywhere on the line, at the end of the text included: the tag is written into the run after the checkbox and the # you typed is removed.

Choosing a state that is already set removes it, and choosing a different priority replaces the current one. Choosing a date opens a month calendar: arrow keys move by day and week, Page Up and Page Down by month, Enter picks the day. Days that already have a journal entry are shown in bold. Picking a day writes the whole dated tag, replacing an existing date of the same kind.

Whenever the helper writes, it rewrites the run in a fixed order (priority, waiting, doing, cancelled, scheduled, due, completion) with single spaces, so hand-typed tags may be reordered. The menu opens only on a task line and only on a # that starts a word: C# and issue#42 leave it closed.

The Tasks view

Tasks is a tab of the right sidebar, beside Backlinks. Open it with Alt+T, with the Tasks button on the toolbar (on a phone, the button in the top bar), or by selecting the tab. If the tab has been closed, Alt+T or the button brings it back.

The view lists every task in the graph, journals and pages alike, and does not follow the document you are reading: its filter stays where you set it, so opening a task and coming back finds the list as you left it.

Filter by name

The Any name… box narrows the list to one concept. Type a fragment and choose from the suggestions, which cover pages, journal days, aliases and names that are linked but have no page yet, each labelled with its kind. Matching is the same as Quick Find's: names only, any part of the name, case-insensitive, with a scoped name's brackets read as spaces. Choosing a name never opens anything.

A task answers to a name when:

  • the task's own line links it, [[Acme]];
  • any bullet above the task in the outline links it, at any depth;
  • a heading the task sits under links it, so # Work on [[Acme]] claims every task in that section, - [ ] Buy milk included;
  • the task is on that concept's own page, without any link.

Aliases are pooled and case does not matter, as with backlinks. The rule falls out of structure, so moving a task under another heading re-files it without editing its text. A task can answer to many names at once; the line under each row shows the chain of document and ancestors that matched.

Use beneath the box filters to the document you are in with one press. The cross beside the box clears the filter.

Filter by state, priority and date

  • Open, Doing, Waiting, Done, Cancelled chips: a task is in exactly one state. Waiting outranks doing when a task carries both. The default shows everything unfinished: open, doing and waiting.
  • P1, P2, P3, None chips, all on by default. None is a real bucket: tasks with no priority tag.
  • Filter by due date: Any date, Overdue (due before today), Due today, or Next 7 days (today to a week ahead). A task with no due date never matches a window.

Turning every chip in a row off shows a message asking you to turn one back on. Reset filters appears in the header whenever the filter differs from the default and puts everything back, the name box included.

Group and order

Group tasks by offers three orders:

Grouping Groups Order within a group
By priority (default) P1, P2, P3, No priority Due date, undated last
By document One per document, by name; a journal by its date Due date, then priority
By due date Overdue, Today, then each date, then No due date

Group headings stay pinned while you scroll. There is no grouping by concept, because a task can answer to several and would repeat.

What a row shows

Each row has a checkbox, the task's text with the tags stripped, badges for its priority, state and dates, and beneath it the chain of document and ancestors that made it match. Wikilinks in the text open that page without changing the filter. A done task is struck through.

The header counts the matches. The list shows 100 at a time, with Show more while more remain.

Act from the view

  • Tick the checkbox and the change is written into the source document, whether or not that document is open. On a local graph the file on disk changes. The row stays where it is, ticked and struck through, until you change the filter, so the next row does not jump under the pointer. If the task has moved since it was indexed, nothing is written; a notice says so and the document opens at the task instead.
  • Click the text to open the document at that line, with the cursor at the start of it.

What the view remembers

The filter, chips, date window and grouping are remembered per graph on this device, and come back after a reload. They never sync. Reset workspace forgets them.

Tasks and protection

A task inside a protected document is never indexed, so it does not appear in the Tasks view even while the document is unlocked (Protected Documents).

Tasks from other tools

An import converts Logseq's TODO, DOING, WAIT and DONE markers, its [#A] priorities, deadlines and scheduled dates, and the Obsidian Tasks plugin's emoji into these tags (Importing From Logseq Obsidian Or EtherPK). An agent connected through the Headless Client can list tasks with the same filters and tick, prioritise and date them (The Headless Client).