@olegkoval/agent-skills 1.8.0 → 1.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/.claude-plugin/plugin.json +4 -2
  2. package/.cursor-plugin/index.json +10 -0
  3. package/.kiro/steering/obsidian-pr-sync.md +137 -0
  4. package/.kiro/steering/obsidian-task-rollover.md +180 -0
  5. package/.windsurf/rules/obsidian-pr-sync.md +136 -0
  6. package/.windsurf/rules/obsidian-task-rollover.md +179 -0
  7. package/README.md +4 -2
  8. package/catalog/skills.json +44 -0
  9. package/package.json +1 -1
  10. package/packages/marketing/search-console-indexing-audit/SKILL.md +1 -0
  11. package/packages/marketing/search-console-indexing-audit/adapters/claude/skills/search-console-indexing-audit/SKILL.md +1 -0
  12. package/packages/marketing/search-console-indexing-audit/adapters/cursor/skills/search-console-indexing-audit/SKILL.md +1 -0
  13. package/packages/marketing/viral-launch/SKILL.md +1 -0
  14. package/packages/marketing/viral-launch/adapters/claude/skills/viral-launch/SKILL.md +1 -0
  15. package/packages/marketing/viral-launch/adapters/cursor/skills/viral-launch/SKILL.md +1 -0
  16. package/packages/music/fill-music-player/SKILL.md +1 -0
  17. package/packages/music/fill-music-player/adapters/claude/skills/fill-music-player/SKILL.md +1 -0
  18. package/packages/music/fill-music-player/adapters/cursor/skills/fill-music-player/SKILL.md +1 -0
  19. package/packages/photography/gallery/SKILL.md +1 -0
  20. package/packages/photography/gallery/adapters/claude/skills/gallery/SKILL.md +1 -0
  21. package/packages/photography/gallery/adapters/cursor/skills/gallery/SKILL.md +1 -0
  22. package/packages/software-development/add-to-my-skills/SKILL.md +1 -0
  23. package/packages/software-development/add-to-my-skills/adapters/claude/skills/add-to-my-skills/SKILL.md +1 -0
  24. package/packages/software-development/add-to-my-skills/adapters/cursor/skills/add-to-my-skills/SKILL.md +1 -0
  25. package/packages/software-development/ai-tools-setup/SKILL.md +1 -0
  26. package/packages/software-development/ai-tools-setup/adapters/claude/skills/ai-tools-setup/SKILL.md +1 -0
  27. package/packages/software-development/ai-tools-setup/adapters/cursor/skills/ai-tools-setup/SKILL.md +1 -0
  28. package/packages/software-development/changelog-generator/SKILL.md +1 -0
  29. package/packages/software-development/changelog-generator/adapters/claude/skills/changelog-generator/SKILL.md +1 -0
  30. package/packages/software-development/changelog-generator/adapters/cursor/skills/changelog-generator/SKILL.md +1 -0
  31. package/packages/software-development/cloudflare-block-countries/SKILL.md +1 -0
  32. package/packages/software-development/cloudflare-block-countries/adapters/claude/skills/cloudflare-block-countries/SKILL.md +1 -0
  33. package/packages/software-development/cloudflare-block-countries/adapters/cursor/skills/cloudflare-block-countries/SKILL.md +1 -0
  34. package/packages/software-development/docs-index-keeper/SKILL.md +1 -0
  35. package/packages/software-development/docs-index-keeper/adapters/claude/skills/docs-index-keeper/SKILL.md +1 -0
  36. package/packages/software-development/docs-index-keeper/adapters/cursor/skills/docs-index-keeper/SKILL.md +1 -0
  37. package/packages/software-development/gh-cli/SKILL.md +1 -0
  38. package/packages/software-development/gh-cli/adapters/claude/skills/gh-cli/SKILL.md +1 -0
  39. package/packages/software-development/gh-cli/adapters/cursor/skills/gh-cli/SKILL.md +1 -0
  40. package/packages/software-development/git-commit/SKILL.md +1 -0
  41. package/packages/software-development/git-commit/adapters/claude/skills/git-commit/SKILL.md +1 -0
  42. package/packages/software-development/git-commit/adapters/cursor/skills/git-commit/SKILL.md +1 -0
  43. package/packages/software-development/obsidian-pr-sync/SKILL.md +152 -0
  44. package/packages/software-development/obsidian-pr-sync/adapters/claude/plugin.json +5 -0
  45. package/packages/software-development/obsidian-pr-sync/adapters/claude/skills/obsidian-pr-sync/SKILL.md +155 -0
  46. package/packages/software-development/obsidian-pr-sync/adapters/cursor/plugin.json +6 -0
  47. package/packages/software-development/obsidian-pr-sync/adapters/cursor/skills/obsidian-pr-sync/SKILL.md +155 -0
  48. package/packages/software-development/obsidian-pr-sync/adapters/kiro/steering/obsidian-pr-sync.md +137 -0
  49. package/packages/software-development/obsidian-pr-sync/adapters/windsurf/rules/obsidian-pr-sync.md +136 -0
  50. package/packages/software-development/obsidian-task-rollover/SKILL.md +196 -0
  51. package/packages/software-development/obsidian-task-rollover/adapters/claude/plugin.json +5 -0
  52. package/packages/software-development/obsidian-task-rollover/adapters/claude/skills/obsidian-task-rollover/SKILL.md +199 -0
  53. package/packages/software-development/obsidian-task-rollover/adapters/cursor/plugin.json +6 -0
  54. package/packages/software-development/obsidian-task-rollover/adapters/cursor/skills/obsidian-task-rollover/SKILL.md +199 -0
  55. package/packages/software-development/obsidian-task-rollover/adapters/kiro/steering/obsidian-task-rollover.md +180 -0
  56. package/packages/software-development/obsidian-task-rollover/adapters/windsurf/rules/obsidian-task-rollover.md +179 -0
  57. package/packages/software-development/open-source-publisher/SKILL.md +1 -0
  58. package/packages/software-development/open-source-publisher/adapters/claude/skills/open-source-publisher/SKILL.md +1 -0
  59. package/packages/software-development/open-source-publisher/adapters/cursor/skills/open-source-publisher/SKILL.md +1 -0
  60. package/packages/software-development/product-builder/SKILL.md +1 -0
  61. package/packages/software-development/product-builder/adapters/claude/skills/product-builder/SKILL.md +1 -0
  62. package/packages/software-development/product-builder/adapters/cursor/skills/product-builder/SKILL.md +1 -0
  63. package/packages/software-development/promptctl/SKILL.md +1 -0
  64. package/packages/software-development/promptctl/adapters/claude/skills/promptctl/SKILL.md +1 -0
  65. package/packages/software-development/promptctl/adapters/cursor/skills/promptctl/SKILL.md +1 -0
  66. package/packages/software-development/semantic-release-beta/SKILL.md +1 -0
  67. package/packages/software-development/semantic-release-beta/adapters/claude/skills/semantic-release-beta/SKILL.md +1 -0
  68. package/packages/software-development/semantic-release-beta/adapters/cursor/skills/semantic-release-beta/SKILL.md +1 -0
  69. package/packages/software-development/starter-rules/SKILL.md +1 -0
  70. package/packages/software-development/starter-rules/adapters/claude/skills/starter-rules/SKILL.md +1 -0
  71. package/packages/software-development/starter-rules/adapters/cursor/skills/starter-rules/SKILL.md +1 -0
  72. package/scripts/build-adapters.sh +11 -2
@@ -0,0 +1,196 @@
1
+ ---
2
+ name: obsidian-task-rollover
3
+ description: >
4
+ Migrate unfinished tasks from a daily Obsidian note to the next workday's note,
5
+ bullet-journal style. Marks migrated tasks in the source note with [>] (the BJ
6
+ migration symbol) and copies them to the target note under "## Carried over".
7
+ Use this skill whenever the user says "roll over today's tasks", "migrate unfinished
8
+ tasks to tomorrow", "end of day task sync", "move open tasks to next workday",
9
+ or when a scheduled end-of-day / start-of-day routine fires. Fully idempotent —
10
+ safe to re-run; already-migrated tasks ([>]) are not touched again.
11
+ license: MIT
12
+ allowed-tools: Bash, Read, Write, Edit
13
+ compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires daily notes at a configurable vault path.
14
+ metadata:
15
+ author: Oleg Koval
16
+ tags:
17
+ - obsidian
18
+ - daily-note
19
+ - bullet-journal
20
+ - productivity
21
+ - task-rollover
22
+ - end-of-day
23
+ ---
24
+
25
+ # Obsidian Task Rollover
26
+
27
+ Bullet-journal–style end-of-day task migration. Unfinished tasks (`- [ ]`) from
28
+ today's note get copied forward to the next workday, and marked as migrated in
29
+ today's note.
30
+
31
+ ## Configuration
32
+
33
+ - `VAULT_DAILY` — absolute path to the daily notes folder (e.g. `/Users/you/obsidian/vault/Lead/Daily`)
34
+
35
+ If not specified, infer from context or ask.
36
+
37
+ ## Step 1 — Identify source note
38
+
39
+ Default source = **today's note**. If the user specifies a date ("roll over Monday's
40
+ tasks"), resolve that date instead.
41
+
42
+ ```bash
43
+ SOURCE_DATE=$(date +%Y-%m-%d)
44
+ SOURCE="${VAULT_DAILY}/${SOURCE_DATE}.md"
45
+ ```
46
+
47
+ If the source note doesn't exist, report and stop — nothing to migrate.
48
+
49
+ ## Step 2 — Find next workday
50
+
51
+ ```bash
52
+ TARGET_DATE=$(python3 -c "
53
+ from datetime import date, timedelta
54
+ d = date.fromisoformat('${SOURCE_DATE}') + timedelta(days=1)
55
+ while d.weekday() >= 5: # 5=Sat, 6=Sun
56
+ d += timedelta(days=1)
57
+ print(d)
58
+ ")
59
+ TARGET="${VAULT_DAILY}/${TARGET_DATE}.md"
60
+ ```
61
+
62
+ Skips weekends. If today is Friday, tasks roll to Monday.
63
+
64
+ ## Step 3 — Extract incomplete tasks
65
+
66
+ Read the source note and collect all lines matching `- [ ] ` that are:
67
+ - **Not** inside the `## PRs to review` section (that section is auto-managed by
68
+ the `obsidian-pr-sync` skill — don't touch it)
69
+ - **Not** already migrated (`- [>]` lines — idempotency guard)
70
+
71
+ Sections to skip entirely: `## PRs to review`. Stop collecting at the nav footer
72
+ (`*← [[...`).
73
+
74
+ Collect both the task lines and which section (h2 heading) they belong to, so the
75
+ target note can group them the same way.
76
+
77
+ ## Step 4 — Mark tasks as migrated in source note
78
+
79
+ For each collected task line in the source note, replace:
80
+ ```
81
+ - [ ] some task
82
+ ```
83
+ with:
84
+ ```
85
+ - [>] some task → [[Lead/Daily/TARGET_DATE|TARGET_DATE]]
86
+ ```
87
+
88
+ The `[>]` is the bullet journal migration arrow — "moved forward". The link lets you
89
+ jump to where the task landed.
90
+
91
+ **Do not** replace tasks that are already checked (`- [x]`) or already migrated
92
+ (`- [>`). Only unticked `- [ ]` tasks.
93
+
94
+ ## Step 5 — Write to target note
95
+
96
+ ### If the target note exists
97
+
98
+ Check whether a `## Carried over` section already exists:
99
+ - If yes: **replace** its content (idempotent — re-running a migration is safe)
100
+ - If no: **insert** it before the nav footer line (`*← [[...`) or at end of file
101
+
102
+ ### If the target note doesn't exist
103
+
104
+ Create it using the standard daily note template:
105
+ ```markdown
106
+ ---
107
+ type: daily
108
+ date: TARGET_DATE
109
+ tags: [lead/daily]
110
+ ---
111
+
112
+ # WEEKDAY, D MMM YYYY
113
+
114
+ ## Top 3 for today
115
+ 1.
116
+ 2.
117
+ 3.
118
+
119
+ ## People check-in
120
+ > Who needs something from me today?
121
+
122
+ - [[]]
123
+
124
+ ## Notes / journal
125
+
126
+
127
+ ## Open loops
128
+ > Things I started but didn't finish
129
+
130
+ -
131
+
132
+ ## Actions
133
+ - [ ]
134
+
135
+ ---
136
+ *← [[Lead/Daily/SOURCE_DATE|Yesterday]] | [[Lead/Daily/NEXT_NEXT_DATE|Tomorrow]] →*
137
+ ```
138
+ Then append the `## Carried over` section.
139
+
140
+ ### Carried over section format
141
+
142
+ ```markdown
143
+ ## Carried over
144
+
145
+ > Migrated from [[Lead/Daily/SOURCE_DATE|SOURCE_DATE]]
146
+
147
+ ### SECTION_NAME (if tasks came from a named section)
148
+ - [ ] task text ↩ [[Lead/Daily/SOURCE_DATE|SOURCE_DATE]]
149
+
150
+ ### Actions (if tasks came from ## Actions)
151
+ - [ ] another task ↩ [[Lead/Daily/SOURCE_DATE|SOURCE_DATE]]
152
+ ```
153
+
154
+ Rules:
155
+ - Group tasks by the section they came from in the source note
156
+ - If all tasks are from `## Actions`, omit the subsection header (keep it flat)
157
+ - The `↩` link back to the source date lets you trace where the task originated
158
+
159
+ ## Step 6 — Report
160
+
161
+ ```
162
+ Rolled over N tasks from SOURCE_DATE → TARGET_DATE
163
+ From ## Actions: X tasks
164
+ From ## Open loops: Y tasks
165
+ Marked [>] in: Lead/Daily/SOURCE_DATE.md
166
+ Written to: Lead/Daily/TARGET_DATE.md
167
+ ```
168
+
169
+ If there are zero incomplete tasks, report:
170
+ ```
171
+ No incomplete tasks in SOURCE_DATE — nothing to roll over ✓
172
+ ```
173
+
174
+ ## Invocation patterns
175
+
176
+ **Manual:**
177
+ - "roll over today's tasks to tomorrow"
178
+ - "migrate my open tasks, it's end of day"
179
+ - "carry forward unfinished items from today"
180
+
181
+ **Scheduled (end-of-day or start-of-morning):**
182
+ Runs silently. Picks up today's note automatically.
183
+
184
+ **In a remote CCR agent:**
185
+ Clone the vault repo, run the rollover, commit and push. The local Obsidian Git
186
+ plugin pulls the changes automatically.
187
+
188
+ ## Edge cases
189
+
190
+ - **Tasks with sub-bullets**: Copy the full block (task + its indented children)
191
+ - **Duplicate migration**: Re-running replaces the `## Carried over` section — never
192
+ duplicates. Tasks already marked `[>]` in source are not re-processed.
193
+ - **Friday → Monday**: The weekend-skip logic handles this. The Monday note is created
194
+ if it doesn't exist.
195
+ - **Task already in target**: No dedup check — if you manually added the same task to
196
+ tomorrow and then run migration, it'll appear twice. Acceptable — easy to clean up.
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "olko-obsidian-task-rollover",
3
+ "description": "Bullet-journal end-of-day task migration: copy unchecked tasks from today's Obsidian daily note to the next workday's note under '## Carried over', and mark them [>] in the source. Skips weekends, idempotent.",
4
+ "skills": "./skills"
5
+ }
@@ -0,0 +1,199 @@
1
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
2
+
3
+ ---
4
+ name: obsidian-task-rollover
5
+ description: >
6
+ Migrate unfinished tasks from a daily Obsidian note to the next workday's note,
7
+ bullet-journal style. Marks migrated tasks in the source note with [>] (the BJ
8
+ migration symbol) and copies them to the target note under "## Carried over".
9
+ Use this skill whenever the user says "roll over today's tasks", "migrate unfinished
10
+ tasks to tomorrow", "end of day task sync", "move open tasks to next workday",
11
+ or when a scheduled end-of-day / start-of-day routine fires. Fully idempotent —
12
+ safe to re-run; already-migrated tasks ([>]) are not touched again.
13
+ license: MIT
14
+ allowed-tools: Bash, Read, Write, Edit
15
+ compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires daily notes at a configurable vault path.
16
+ metadata:
17
+ targets: ["claude"]
18
+ author: Oleg Koval
19
+ tags:
20
+ - obsidian
21
+ - daily-note
22
+ - bullet-journal
23
+ - productivity
24
+ - task-rollover
25
+ - end-of-day
26
+ ---
27
+
28
+ # Obsidian Task Rollover
29
+
30
+ Bullet-journal–style end-of-day task migration. Unfinished tasks (`- [ ]`) from
31
+ today's note get copied forward to the next workday, and marked as migrated in
32
+ today's note.
33
+
34
+ ## Configuration
35
+
36
+ - `VAULT_DAILY` — absolute path to the daily notes folder (e.g. `/Users/you/obsidian/vault/Lead/Daily`)
37
+
38
+ If not specified, infer from context or ask.
39
+
40
+ ## Step 1 — Identify source note
41
+
42
+ Default source = **today's note**. If the user specifies a date ("roll over Monday's
43
+ tasks"), resolve that date instead.
44
+
45
+ ```bash
46
+ SOURCE_DATE=$(date +%Y-%m-%d)
47
+ SOURCE="${VAULT_DAILY}/${SOURCE_DATE}.md"
48
+ ```
49
+
50
+ If the source note doesn't exist, report and stop — nothing to migrate.
51
+
52
+ ## Step 2 — Find next workday
53
+
54
+ ```bash
55
+ TARGET_DATE=$(python3 -c "
56
+ from datetime import date, timedelta
57
+ d = date.fromisoformat('${SOURCE_DATE}') + timedelta(days=1)
58
+ while d.weekday() >= 5: # 5=Sat, 6=Sun
59
+ d += timedelta(days=1)
60
+ print(d)
61
+ ")
62
+ TARGET="${VAULT_DAILY}/${TARGET_DATE}.md"
63
+ ```
64
+
65
+ Skips weekends. If today is Friday, tasks roll to Monday.
66
+
67
+ ## Step 3 — Extract incomplete tasks
68
+
69
+ Read the source note and collect all lines matching `- [ ] ` that are:
70
+ - **Not** inside the `## PRs to review` section (that section is auto-managed by
71
+ the `obsidian-pr-sync` skill — don't touch it)
72
+ - **Not** already migrated (`- [>]` lines — idempotency guard)
73
+
74
+ Sections to skip entirely: `## PRs to review`. Stop collecting at the nav footer
75
+ (`*← [[...`).
76
+
77
+ Collect both the task lines and which section (h2 heading) they belong to, so the
78
+ target note can group them the same way.
79
+
80
+ ## Step 4 — Mark tasks as migrated in source note
81
+
82
+ For each collected task line in the source note, replace:
83
+ ```
84
+ - [ ] some task
85
+ ```
86
+ with:
87
+ ```
88
+ - [>] some task → [[Lead/Daily/TARGET_DATE|TARGET_DATE]]
89
+ ```
90
+
91
+ The `[>]` is the bullet journal migration arrow — "moved forward". The link lets you
92
+ jump to where the task landed.
93
+
94
+ **Do not** replace tasks that are already checked (`- [x]`) or already migrated
95
+ (`- [>`). Only unticked `- [ ]` tasks.
96
+
97
+ ## Step 5 — Write to target note
98
+
99
+ ### If the target note exists
100
+
101
+ Check whether a `## Carried over` section already exists:
102
+ - If yes: **replace** its content (idempotent — re-running a migration is safe)
103
+ - If no: **insert** it before the nav footer line (`*← [[...`) or at end of file
104
+
105
+ ### If the target note doesn't exist
106
+
107
+ Create it using the standard daily note template:
108
+ ```markdown
109
+ ---
110
+ type: daily
111
+ date: TARGET_DATE
112
+ tags: [lead/daily]
113
+ ---
114
+
115
+ # WEEKDAY, D MMM YYYY
116
+
117
+ ## Top 3 for today
118
+ 1.
119
+ 2.
120
+ 3.
121
+
122
+ ## People check-in
123
+ > Who needs something from me today?
124
+
125
+ - [[]]
126
+
127
+ ## Notes / journal
128
+
129
+
130
+ ## Open loops
131
+ > Things I started but didn't finish
132
+
133
+ -
134
+
135
+ ## Actions
136
+ - [ ]
137
+
138
+ ---
139
+ *← [[Lead/Daily/SOURCE_DATE|Yesterday]] | [[Lead/Daily/NEXT_NEXT_DATE|Tomorrow]] →*
140
+ ```
141
+ Then append the `## Carried over` section.
142
+
143
+ ### Carried over section format
144
+
145
+ ```markdown
146
+ ## Carried over
147
+
148
+ > Migrated from [[Lead/Daily/SOURCE_DATE|SOURCE_DATE]]
149
+
150
+ ### SECTION_NAME (if tasks came from a named section)
151
+ - [ ] task text ↩ [[Lead/Daily/SOURCE_DATE|SOURCE_DATE]]
152
+
153
+ ### Actions (if tasks came from ## Actions)
154
+ - [ ] another task ↩ [[Lead/Daily/SOURCE_DATE|SOURCE_DATE]]
155
+ ```
156
+
157
+ Rules:
158
+ - Group tasks by the section they came from in the source note
159
+ - If all tasks are from `## Actions`, omit the subsection header (keep it flat)
160
+ - The `↩` link back to the source date lets you trace where the task originated
161
+
162
+ ## Step 6 — Report
163
+
164
+ ```
165
+ Rolled over N tasks from SOURCE_DATE → TARGET_DATE
166
+ From ## Actions: X tasks
167
+ From ## Open loops: Y tasks
168
+ Marked [>] in: Lead/Daily/SOURCE_DATE.md
169
+ Written to: Lead/Daily/TARGET_DATE.md
170
+ ```
171
+
172
+ If there are zero incomplete tasks, report:
173
+ ```
174
+ No incomplete tasks in SOURCE_DATE — nothing to roll over ✓
175
+ ```
176
+
177
+ ## Invocation patterns
178
+
179
+ **Manual:**
180
+ - "roll over today's tasks to tomorrow"
181
+ - "migrate my open tasks, it's end of day"
182
+ - "carry forward unfinished items from today"
183
+
184
+ **Scheduled (end-of-day or start-of-morning):**
185
+ Runs silently. Picks up today's note automatically.
186
+
187
+ **In a remote CCR agent:**
188
+ Clone the vault repo, run the rollover, commit and push. The local Obsidian Git
189
+ plugin pulls the changes automatically.
190
+
191
+ ## Edge cases
192
+
193
+ - **Tasks with sub-bullets**: Copy the full block (task + its indented children)
194
+ - **Duplicate migration**: Re-running replaces the `## Carried over` section — never
195
+ duplicates. Tasks already marked `[>]` in source are not re-processed.
196
+ - **Friday → Monday**: The weekend-skip logic handles this. The Monday note is created
197
+ if it doesn't exist.
198
+ - **Task already in target**: No dedup check — if you manually added the same task to
199
+ tomorrow and then run migration, it'll appear twice. Acceptable — easy to clean up.
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "olko:obsidian-task-rollover",
3
+ "version": "0.1.0",
4
+ "description": "Bullet-journal end-of-day task migration: copy unchecked tasks from today's Obsidian daily note to the next workday's note under '## Carried over', and mark them [>] in the source. Skips weekends, idempotent.",
5
+ "skills": "skills/"
6
+ }
@@ -0,0 +1,199 @@
1
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
2
+
3
+ ---
4
+ name: obsidian-task-rollover
5
+ description: >
6
+ Migrate unfinished tasks from a daily Obsidian note to the next workday's note,
7
+ bullet-journal style. Marks migrated tasks in the source note with [>] (the BJ
8
+ migration symbol) and copies them to the target note under "## Carried over".
9
+ Use this skill whenever the user says "roll over today's tasks", "migrate unfinished
10
+ tasks to tomorrow", "end of day task sync", "move open tasks to next workday",
11
+ or when a scheduled end-of-day / start-of-day routine fires. Fully idempotent —
12
+ safe to re-run; already-migrated tasks ([>]) are not touched again.
13
+ license: MIT
14
+ allowed-tools: Bash, Read, Write, Edit
15
+ compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires daily notes at a configurable vault path.
16
+ metadata:
17
+ targets: ["cursor"]
18
+ author: Oleg Koval
19
+ tags:
20
+ - obsidian
21
+ - daily-note
22
+ - bullet-journal
23
+ - productivity
24
+ - task-rollover
25
+ - end-of-day
26
+ ---
27
+
28
+ # Obsidian Task Rollover
29
+
30
+ Bullet-journal–style end-of-day task migration. Unfinished tasks (`- [ ]`) from
31
+ today's note get copied forward to the next workday, and marked as migrated in
32
+ today's note.
33
+
34
+ ## Configuration
35
+
36
+ - `VAULT_DAILY` — absolute path to the daily notes folder (e.g. `/Users/you/obsidian/vault/Lead/Daily`)
37
+
38
+ If not specified, infer from context or ask.
39
+
40
+ ## Step 1 — Identify source note
41
+
42
+ Default source = **today's note**. If the user specifies a date ("roll over Monday's
43
+ tasks"), resolve that date instead.
44
+
45
+ ```bash
46
+ SOURCE_DATE=$(date +%Y-%m-%d)
47
+ SOURCE="${VAULT_DAILY}/${SOURCE_DATE}.md"
48
+ ```
49
+
50
+ If the source note doesn't exist, report and stop — nothing to migrate.
51
+
52
+ ## Step 2 — Find next workday
53
+
54
+ ```bash
55
+ TARGET_DATE=$(python3 -c "
56
+ from datetime import date, timedelta
57
+ d = date.fromisoformat('${SOURCE_DATE}') + timedelta(days=1)
58
+ while d.weekday() >= 5: # 5=Sat, 6=Sun
59
+ d += timedelta(days=1)
60
+ print(d)
61
+ ")
62
+ TARGET="${VAULT_DAILY}/${TARGET_DATE}.md"
63
+ ```
64
+
65
+ Skips weekends. If today is Friday, tasks roll to Monday.
66
+
67
+ ## Step 3 — Extract incomplete tasks
68
+
69
+ Read the source note and collect all lines matching `- [ ] ` that are:
70
+ - **Not** inside the `## PRs to review` section (that section is auto-managed by
71
+ the `obsidian-pr-sync` skill — don't touch it)
72
+ - **Not** already migrated (`- [>]` lines — idempotency guard)
73
+
74
+ Sections to skip entirely: `## PRs to review`. Stop collecting at the nav footer
75
+ (`*← [[...`).
76
+
77
+ Collect both the task lines and which section (h2 heading) they belong to, so the
78
+ target note can group them the same way.
79
+
80
+ ## Step 4 — Mark tasks as migrated in source note
81
+
82
+ For each collected task line in the source note, replace:
83
+ ```
84
+ - [ ] some task
85
+ ```
86
+ with:
87
+ ```
88
+ - [>] some task → [[Lead/Daily/TARGET_DATE|TARGET_DATE]]
89
+ ```
90
+
91
+ The `[>]` is the bullet journal migration arrow — "moved forward". The link lets you
92
+ jump to where the task landed.
93
+
94
+ **Do not** replace tasks that are already checked (`- [x]`) or already migrated
95
+ (`- [>`). Only unticked `- [ ]` tasks.
96
+
97
+ ## Step 5 — Write to target note
98
+
99
+ ### If the target note exists
100
+
101
+ Check whether a `## Carried over` section already exists:
102
+ - If yes: **replace** its content (idempotent — re-running a migration is safe)
103
+ - If no: **insert** it before the nav footer line (`*← [[...`) or at end of file
104
+
105
+ ### If the target note doesn't exist
106
+
107
+ Create it using the standard daily note template:
108
+ ```markdown
109
+ ---
110
+ type: daily
111
+ date: TARGET_DATE
112
+ tags: [lead/daily]
113
+ ---
114
+
115
+ # WEEKDAY, D MMM YYYY
116
+
117
+ ## Top 3 for today
118
+ 1.
119
+ 2.
120
+ 3.
121
+
122
+ ## People check-in
123
+ > Who needs something from me today?
124
+
125
+ - [[]]
126
+
127
+ ## Notes / journal
128
+
129
+
130
+ ## Open loops
131
+ > Things I started but didn't finish
132
+
133
+ -
134
+
135
+ ## Actions
136
+ - [ ]
137
+
138
+ ---
139
+ *← [[Lead/Daily/SOURCE_DATE|Yesterday]] | [[Lead/Daily/NEXT_NEXT_DATE|Tomorrow]] →*
140
+ ```
141
+ Then append the `## Carried over` section.
142
+
143
+ ### Carried over section format
144
+
145
+ ```markdown
146
+ ## Carried over
147
+
148
+ > Migrated from [[Lead/Daily/SOURCE_DATE|SOURCE_DATE]]
149
+
150
+ ### SECTION_NAME (if tasks came from a named section)
151
+ - [ ] task text ↩ [[Lead/Daily/SOURCE_DATE|SOURCE_DATE]]
152
+
153
+ ### Actions (if tasks came from ## Actions)
154
+ - [ ] another task ↩ [[Lead/Daily/SOURCE_DATE|SOURCE_DATE]]
155
+ ```
156
+
157
+ Rules:
158
+ - Group tasks by the section they came from in the source note
159
+ - If all tasks are from `## Actions`, omit the subsection header (keep it flat)
160
+ - The `↩` link back to the source date lets you trace where the task originated
161
+
162
+ ## Step 6 — Report
163
+
164
+ ```
165
+ Rolled over N tasks from SOURCE_DATE → TARGET_DATE
166
+ From ## Actions: X tasks
167
+ From ## Open loops: Y tasks
168
+ Marked [>] in: Lead/Daily/SOURCE_DATE.md
169
+ Written to: Lead/Daily/TARGET_DATE.md
170
+ ```
171
+
172
+ If there are zero incomplete tasks, report:
173
+ ```
174
+ No incomplete tasks in SOURCE_DATE — nothing to roll over ✓
175
+ ```
176
+
177
+ ## Invocation patterns
178
+
179
+ **Manual:**
180
+ - "roll over today's tasks to tomorrow"
181
+ - "migrate my open tasks, it's end of day"
182
+ - "carry forward unfinished items from today"
183
+
184
+ **Scheduled (end-of-day or start-of-morning):**
185
+ Runs silently. Picks up today's note automatically.
186
+
187
+ **In a remote CCR agent:**
188
+ Clone the vault repo, run the rollover, commit and push. The local Obsidian Git
189
+ plugin pulls the changes automatically.
190
+
191
+ ## Edge cases
192
+
193
+ - **Tasks with sub-bullets**: Copy the full block (task + its indented children)
194
+ - **Duplicate migration**: Re-running replaces the `## Carried over` section — never
195
+ duplicates. Tasks already marked `[>]` in source are not re-processed.
196
+ - **Friday → Monday**: The weekend-skip logic handles this. The Monday note is created
197
+ if it doesn't exist.
198
+ - **Task already in target**: No dedup check — if you manually added the same task to
199
+ tomorrow and then run migration, it'll appear twice. Acceptable — easy to clean up.