@olegkoval/agent-skills 1.7.0 → 1.9.0

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