Markdown vault
ot vault keeps a folder of Markdown files in two-way sync with your account, one file per project and one Obsidian Tasks line per task. Every edit becomes an ordinary change on your other devices, and theirs reach the files.
On this page
ot vault init ~/Notes/Tasks # new or empty folder; --adopt accepts .md files
ot vault sync ~/Notes/Tasks # --dry-run plans; --read-only pushes nothing
ot vault status ~/Notes/Tasks # changed and conflict files, offline
ot vault watch ~/Notes/Tasks # keep syncing until Ctrl+C
It needs a full token, and it is the one part of ot that keeps data locally: the files and .opentodo/state.json.
The files#
Inbox.md holds tasks without a project; each project is <name>.md, or the folder note <name>/<name>.md beside its sub-projects. Renaming a file renames the project, moving it into a folder nests it, a new .md file is a new project. A deleted file is written again.
---
opentodo-id: p-home
opentodo-color: "#22c55e"
opentodo-icon: house
aliases: [flat]
---
Things for the flat. The task lines sync with OpenTodo; this paragraph stays here.
- [ ] Book the plumber ๐
2026-10-25 [time:: 09:00] [deadline:: 2026-10-30] [estimate:: 45m] โซ #errands โ t-home2 ๐ t-home1
- [ ] Fix the boiler ๐บ [origin:: https://github.com/acme/flat/issues/7] [tracked:: 1h20m] ๐ t-home2
Call before 9.
* [ ] find the manual
- [ ] Order the part ๐ซ 2026-10-22 ๐ t-home3
- [ ] Pay rent ๐
2026-11-01 ๐ every month #bills ๐ t-home4
- [x] Return the drill โ
2026-10-19 ๐ t-home5
## Ideas
- a new lamp
- paint the hall
## Weekend
- [ ] Clean the windows [someday:: true] [evening:: true] ๐ t-home6
| Field | Meaning |
|---|---|
๐
[time:: ] [tz:: ] |
do-on date, time, zone |
๐ซ [someday:: true] [deadline:: ] |
start, Someday, deadline |
[estimate:: 45m] [evening:: true] |
estimate, This Evening |
๐บ โซ ๐ผ |
priority 1โ3 (๐ฝ โฌ read as 4) |
๐ |
repeat rule (when done: after completion) |
#tag โ โ
๐ |
label, blocked by, done date, id |
[origin:: ] [location:: ] [tracked:: ] [field:Name:: ] |
read-only |
A line without ๐ creates a task. Indented lines are subtasks, other indented text the note. A ## heading over task lines is a section. Unknown text (โณ, [[links]]) and prose stay.
In Obsidian#
Make the vault a sub-folder of your Obsidian vault and install Tasks. With Dataview:
TASK FROM "Tasks" WHERE !completed AND deadline <= date(today) + dur(7 days)
Merging#
| Since the last sync | Result |
|---|---|
| Changed in the file or the app | the change reaches the other side |
| Same field changed on both | the app wins; the line goes to <file>.conflict.md |
| Line removed, task unchanged | task trashed |
| Line removed, task changed | line written back |
| Project archived | file removed, or renamed .conflict.md if edited |
Limits#
1 MB and 5,000 task lines per file, 20,000 tasks, 64 KB per note. Over a limit, nothing is written or sent.
Encrypted accounts#
Run ot encryption unlock first: the server sees only ciphertext, but the files are plain text. Run ot encryption lock when done.