← ClaudeAtlas

obsidian-task-rolloverlisted

Migrate unfinished tasks from a daily Obsidian note to the next workday's note, bullet-journal style. Marks migrated tasks in the source note with [>] (the BJ migration symbol) and copies them to the target note under "## Carried over". Use this skill whenever the user says "roll over today's tasks", "migrate unfinished tasks to tomorrow", "end of day task sync", "move open tasks to next workday", or when a scheduled end-of-day / start-of-day routine fires. Fully idempotent — safe to re-run; already-migrated tasks ([>]) are not touched again.
oleg-koval/agent-skills · ★ 2 · AI & Automation · score 74
Install: claude install-skill oleg-koval/agent-skills
# Obsidian Task Rollover Bullet-journal–style end-of-day task migration. Unfinished tasks (`- [ ]`) from today's note get copied forward to the next workday, and marked as migrated in today's note. ## Configuration - `VAULT_DAILY` — absolute path to the daily notes folder (e.g. `/Users/you/obsidian/vault/Lead/Daily`) If not specified, infer from context or ask. ## Step 1 — Identify source note Default source = **today's note**. If the user specifies a date ("roll over Monday's tasks"), resolve that date instead. ```bash SOURCE_DATE=$(date +%Y-%m-%d) SOURCE="${VAULT_DAILY}/${SOURCE_DATE}.md" ``` If the source note doesn't exist, report and stop — nothing to migrate. ## Step 2 — Find next workday ```bash TARGET_DATE=$(python3 -c " from datetime import date, timedelta d = date.fromisoformat('${SOURCE_DATE}') + timedelta(days=1) while d.weekday() >= 5: # 5=Sat, 6=Sun d += timedelta(days=1) print(d) ") TARGET="${VAULT_DAILY}/${TARGET_DATE}.md" ``` Skips weekends. If today is Friday, tasks roll to Monday. ## Step 3 — Extract incomplete tasks Read the source note and collect all lines matching `- [ ] ` that are: - **Not** inside the `## PRs to review` section (that section is auto-managed by the `obsidian-pr-sync` skill — don't touch it) - **Not** already migrated (`- [>]` lines — idempotency guard) Sections to skip entirely: `## PRs to review`. Stop collecting at the nav footer (`*← [[...`). Collect both the task lines and which section (h2 heading) they belon