Parsing scope
Only lines inside a ---bullets section are parsed as bullets. Leading and trailing whitespace is removed, and blank lines are ignored.
Text outside the bullet section remains body content and is not passed to the bullet parser.
Canonical bullet markers
| File marker | Bullet type | Example |
|---|---|---|
- [] or - [ ] | Task | - [] Buy milk |
- [x] | Completed | - [x] Buy milk |
- | Note | - Remember this |
- [o] | Event | - [o] Meeting at 3pm |
- [*] | Memory | - [*] A good day |
Inline task metadata
A task or completed task can optionally end with canonical metadata tokens:
- [] Send proposal ((due:2026/07/28)) ((p3)) ((@email)) ((+Atlas))| Token | Meaning |
|---|---|
((due:YYYY/MM/DD)) | Due date |
((p1)) through ((p4)) | Priority |
((@email)) | Context; may be repeated |
((+Publishing papers)) | Project |
Whitespace between tokens is optional. Recognised trailing tokens are removed from the task’s displayed text and written back when the file is saved.
Unrecognised tokens and tokens on non-task bullets remain ordinary text so content is not silently discarded.
Quick-entry metadata
When adding or editing a task, the same metadata can be entered without double parentheses:
Send proposal due:2026/07/28 p3 @email +Atlas@ context and \@ context are also accepted for a context. Bare contexts are single words; use ((@waiting for)) when a context needs spaces.
A bare project consumes the remaining text after +, so it is best placed last. Regardless of input form, serialization always uses canonical ((...)) tokens.
The editable task body excludes metadata tokens. When task details are shown, the interface displays extracted metadata separately with friendly labels.
Notes and backwards compatibility
A Markdown list item without a status marker is a note. The older markers [ ], [x], o, @, *, and ! remain accepted for backwards compatibility.
Any other non-empty input passed directly to parseBullet() defaults to a task. This supports the add-task input.
Markers without a current bullet type—including [/], [-], [?], ["], and [i]—are retained as ordinary note text. This preserves the original marker when a file is saved.
Day-file parsing
parseDayFile() separates YAML front matter, the ---bullets section, and body text. It passes only the bullet section to parseBulletLines().
Each parsed bullet receives a zero-based sourceLine relative to the bullet section.
Serialization
Bullets are written as Markdown list items using the canonical markers above.
- A non-empty serialized bullet section ends with a final newline.
- An empty bullet array serializes to an empty string.
- Recognised metadata is written using canonical double-parenthesis tokens.
- Unknown content is retained rather than silently removed.