Daily Task Tree Rollover
unlistedby Lucas Louzada
Rolls over open daily note tasks while preserving markdown hierarchy.
Daily Task Tree Rollover
Daily Task Tree Rollover is an Obsidian plugin that rolls open tasks forward from the previous valid Daily Note to the latest valid Daily Note while preserving Markdown hierarchy.
It does not depend on the currently open note, cursor, tab, or editor. The plugin scans the vault, finds the two most recent valid Daily Notes, and operates on that pair.
What it does
The plugin:
- Lists Markdown files inside your configured Daily Notes folder.
- Identifies valid Daily Notes by filename using your configured date format.
- Sorts those notes by date.
- Uses the penultimate valid note as the source.
- Uses the latest valid note as the destination.
- Extracts open tasks from the source while preserving headings, parent bullets, parent tasks, and child details.
- Writes the result into a managed section in the destination.
- Can optionally update the source note, keeping completed work and removing rolled-over open tasks.
Managed section markers
The plugin uses markers to know which part of a note it is allowed to edit:
<!-- task-tree:start -->
<!-- task-tree:end -->
Destination behavior:
- If the destination note is empty, the plugin creates the full marked block.
- If the destination note already has markers, only the content between markers is replaced.
- If the destination note has content but no markers, the plugin aborts for safety.
Source behavior:
- If the source note has markers, only the content between markers is used.
- If the source note has no markers, the whole file is used as the source.
Commands
Rollover latest daily note pair
Copies open tasks from the penultimate Daily Note to the latest Daily Note.
This command updates the source note only when Update previous note by default is enabled.
Rollover latest daily note pair and update source
Copies open tasks to the latest Daily Note and always updates the source note afterward.
Updating the source means the previous Daily Note keeps completed tasks and removes open tasks that were rolled forward.
Dry run: copy rollover result to clipboard
Calculates the rollover result and copies it to the clipboard.
This command does not modify any notes.
Settings
| Setting | Default | Description |
|---|---|---|
| Daily notes folder | Daily | Folder where Daily Notes are stored. Leave empty to use the vault root. |
| Daily note date format | YYYY-MM-DD | Date format used by Daily Note filenames. |
| Start marker | <!-- task-tree:start --> | Start of the managed section. |
| End marker | <!-- task-tree:end --> | End of the managed section. |
| Update previous note by default | false | Makes the normal rollover command update the source note. |
| Require latest daily note to be today | true | Aborts if the latest valid Daily Note is not dated today. |
| Auto rollover when a daily note is created | false | Runs rollover automatically when a new latest Daily Note is created. |
| Auto rollover delay | 1000 | Delay in milliseconds before auto rollover runs. |
Markdown parsing rules
The parser is intentionally simple and line-based. It recognizes:
- Headings like
### Headingand#### Subheading. - Normal bullets like
- item. - Nested bullets by indentation.
- Open tasks like
- [ ] task. - Completed tasks like
- [x] taskand- [X] task. - Child lines and notes under tasks or bullets.
Rollover examples
Open task under a completed parent
Source:
- [x] modo manutencao ✅ 2026-07-08
- [ ] organizar database
Destination receives:
- [x] modo manutencao ✅ 2026-07-08
- [ ] organizar database
The completed parent is kept because it provides context for the open subtask.
When updating the source, the previous note keeps:
- [x] modo manutencao ✅ 2026-07-08
Completed task with notes
Source:
- [x] home ✅ 2026-07-08
- pendencia 1
- pendencia 2
When updating the source, the previous note keeps:
- [x] home ✅ 2026-07-08
- pendencia 1
- pendencia 2
Completed tasks keep their child notes in the source.
Auto rollover
Auto rollover is disabled by default.
When enabled, the plugin listens for new files created in the vault. If the created file is a valid Daily Note, the plugin waits for the configured delay and runs rollover only if that file is the latest valid Daily Note.
The automatic run uses the same source update behavior as the normal command: it updates the source only when Update previous note by default is enabled.
Safety notes
- The plugin never uses the active editor or cursor.
- The destination note is not overwritten when it has existing content without markers.
- All note changes are made through Obsidian's vault APIs.
- The plugin works locally and does not make network requests.
Development
Install dependencies:
npm install
Run a development build in watch mode:
npm run dev
Create a production build:
npm run build
Run linting:
npm run lint
Release artifacts expected by Obsidian are:
manifest.jsonmain.jsstyles.css, when present
Manual testing
- Create two valid Daily Notes in the configured folder, for example
Daily/2026-07-08.mdandDaily/2026-07-09.md. - Add open and completed tasks to the older note.
- Leave the latest note empty, or add the managed markers.
- Run Rollover latest daily note pair from the command palette.
- Confirm that open tasks appear in the latest note with their hierarchy preserved.
- Run Rollover latest daily note pair and update source to verify that the source keeps completed tasks and removes rolled-over open tasks.
- Add content without markers to the destination and confirm that the plugin aborts instead of overwriting it.
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.