Loam is free and open source for macOS. Your notes stay plain Markdown files on your disk. Download for macOS.[Download for macOS.]
All pages

Notes

Tasks

.md

Write tasks as checkbox lines in any note, then list, add and check them with the app or the loam CLI.

A task is a checkbox line in any note. Loam reads every task in your vault and lists them together, with their due date, priority and project. There is no separate task database: the line in your note is the task.

Write a task

Start a list item with [ ] for an open task, or [x] for a done one. Any list marker works, and nested tasks count.

---
project: Launch
---
## Tasks
- [ ] Ship the beta ๐Ÿ“… 2026-10-20 #work โซ
- [ ] Call Bob due:2026-10-22 !low
- [x] Write the plan โœ… 2026-10-17

Add dates, priority and tags

  • Due date: ๐Ÿ“… 2026-10-20 or due:2026-10-20.
  • High priority: โซ or !high. Low priority: ๐Ÿ”ฝ or !low.
  • Done date: โœ… 2026-10-17. Loam writes it when the task is checked.
  • Tags: #work or #work/calls. A filter on #work also finds #work/calls.
  • Project: the note's project property. Without one, the note's folder.

Find your tasks in the app

  • The task list has four views. Inbox shows open tasks without a date, Today shows overdue tasks and those due today, Upcoming lists the rest by date, and All Tasks groups every open task by note. Its menu filters by project or tag and shows done tasks.
  • The Tasks panel in the right sidebar shows what is overdue or due today.
  • Quick add writes the task to today's daily note, or to Inbox.md when daily notes are off.
  • In a note, type @ and pick a day, such as @tomorrow or @fri. It writes the due date.

Tasks that are notes of their own, with a status column, belong to a project. See Projects.

Add and check tasks from the CLI

The CLI works on any vault. Pass --vault with the vault folder, or run it from inside the vault.

  1. Add a task to a note. The note is created if it does not exist.
  2. List the open tasks of one project.
  3. Check a task off. Pass the line and the text that tasks.list returned.
loam --vault ~/Notes tasks.add path=Work/Launch.md text="Ship the beta ๐Ÿ“… 2026-11-20 #work !high"
loam --vault ~/Notes tasks.list done=false project=Launch
loam --vault ~/Notes tasks.toggle path=Work/Launch.md line=8 text="Ship the beta #work"

Commands

CommandArgumentsWhat it does
tasks.listdone (true or false), dueBefore, dueOn (a date or today), project, tag, path, text, filter (JSON)Lists every task, sorted by due date, then priority. All arguments are optional.
tasks.addpath, textAdds - [ ] text to the end of the note's ## Tasks section, or to the end of the note. Creates the note if missing.
tasks.togglepath, line, textChecks or unchecks a task. It writes nothing if the line no longer holds that task.
For AI agents: loam list shows the tasks.* commands with their arguments.