@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.
- package/.claude-plugin/plugin.json +4 -2
- package/.cursor-plugin/index.json +10 -0
- package/.kiro/steering/obsidian-pr-sync.md +137 -0
- package/.kiro/steering/obsidian-task-rollover.md +180 -0
- package/.windsurf/rules/obsidian-pr-sync.md +136 -0
- package/.windsurf/rules/obsidian-task-rollover.md +179 -0
- package/README.md +4 -2
- package/catalog/skills.json +44 -0
- package/package.json +1 -1
- package/packages/marketing/search-console-indexing-audit/SKILL.md +1 -0
- package/packages/marketing/search-console-indexing-audit/adapters/claude/skills/search-console-indexing-audit/SKILL.md +1 -0
- package/packages/marketing/search-console-indexing-audit/adapters/cursor/skills/search-console-indexing-audit/SKILL.md +1 -0
- package/packages/marketing/viral-launch/SKILL.md +1 -0
- package/packages/marketing/viral-launch/adapters/claude/skills/viral-launch/SKILL.md +1 -0
- package/packages/marketing/viral-launch/adapters/cursor/skills/viral-launch/SKILL.md +1 -0
- package/packages/music/fill-music-player/SKILL.md +1 -0
- package/packages/music/fill-music-player/adapters/claude/skills/fill-music-player/SKILL.md +1 -0
- package/packages/music/fill-music-player/adapters/cursor/skills/fill-music-player/SKILL.md +1 -0
- package/packages/photography/gallery/SKILL.md +1 -0
- package/packages/photography/gallery/adapters/claude/skills/gallery/SKILL.md +1 -0
- package/packages/photography/gallery/adapters/cursor/skills/gallery/SKILL.md +1 -0
- package/packages/software-development/add-to-my-skills/SKILL.md +1 -0
- package/packages/software-development/add-to-my-skills/adapters/claude/skills/add-to-my-skills/SKILL.md +1 -0
- package/packages/software-development/add-to-my-skills/adapters/cursor/skills/add-to-my-skills/SKILL.md +1 -0
- package/packages/software-development/ai-tools-setup/SKILL.md +1 -0
- package/packages/software-development/ai-tools-setup/adapters/claude/skills/ai-tools-setup/SKILL.md +1 -0
- package/packages/software-development/ai-tools-setup/adapters/cursor/skills/ai-tools-setup/SKILL.md +1 -0
- package/packages/software-development/changelog-generator/SKILL.md +1 -0
- package/packages/software-development/changelog-generator/adapters/claude/skills/changelog-generator/SKILL.md +1 -0
- package/packages/software-development/changelog-generator/adapters/cursor/skills/changelog-generator/SKILL.md +1 -0
- package/packages/software-development/cloudflare-block-countries/SKILL.md +1 -0
- package/packages/software-development/cloudflare-block-countries/adapters/claude/skills/cloudflare-block-countries/SKILL.md +1 -0
- package/packages/software-development/cloudflare-block-countries/adapters/cursor/skills/cloudflare-block-countries/SKILL.md +1 -0
- package/packages/software-development/docs-index-keeper/SKILL.md +1 -0
- package/packages/software-development/docs-index-keeper/adapters/claude/skills/docs-index-keeper/SKILL.md +1 -0
- package/packages/software-development/docs-index-keeper/adapters/cursor/skills/docs-index-keeper/SKILL.md +1 -0
- package/packages/software-development/gh-cli/SKILL.md +1 -0
- package/packages/software-development/gh-cli/adapters/claude/skills/gh-cli/SKILL.md +1 -0
- package/packages/software-development/gh-cli/adapters/cursor/skills/gh-cli/SKILL.md +1 -0
- package/packages/software-development/git-commit/SKILL.md +1 -0
- package/packages/software-development/git-commit/adapters/claude/skills/git-commit/SKILL.md +1 -0
- package/packages/software-development/git-commit/adapters/cursor/skills/git-commit/SKILL.md +1 -0
- package/packages/software-development/obsidian-pr-sync/SKILL.md +152 -0
- package/packages/software-development/obsidian-pr-sync/adapters/claude/plugin.json +5 -0
- package/packages/software-development/obsidian-pr-sync/adapters/claude/skills/obsidian-pr-sync/SKILL.md +155 -0
- package/packages/software-development/obsidian-pr-sync/adapters/cursor/plugin.json +6 -0
- package/packages/software-development/obsidian-pr-sync/adapters/cursor/skills/obsidian-pr-sync/SKILL.md +155 -0
- package/packages/software-development/obsidian-pr-sync/adapters/kiro/steering/obsidian-pr-sync.md +137 -0
- package/packages/software-development/obsidian-pr-sync/adapters/windsurf/rules/obsidian-pr-sync.md +136 -0
- package/packages/software-development/obsidian-task-rollover/SKILL.md +196 -0
- package/packages/software-development/obsidian-task-rollover/adapters/claude/plugin.json +5 -0
- package/packages/software-development/obsidian-task-rollover/adapters/claude/skills/obsidian-task-rollover/SKILL.md +199 -0
- package/packages/software-development/obsidian-task-rollover/adapters/cursor/plugin.json +6 -0
- package/packages/software-development/obsidian-task-rollover/adapters/cursor/skills/obsidian-task-rollover/SKILL.md +199 -0
- package/packages/software-development/obsidian-task-rollover/adapters/kiro/steering/obsidian-task-rollover.md +180 -0
- package/packages/software-development/obsidian-task-rollover/adapters/windsurf/rules/obsidian-task-rollover.md +179 -0
- package/packages/software-development/open-source-publisher/SKILL.md +1 -0
- package/packages/software-development/open-source-publisher/adapters/claude/skills/open-source-publisher/SKILL.md +1 -0
- package/packages/software-development/open-source-publisher/adapters/cursor/skills/open-source-publisher/SKILL.md +1 -0
- package/packages/software-development/product-builder/SKILL.md +1 -0
- package/packages/software-development/product-builder/adapters/claude/skills/product-builder/SKILL.md +1 -0
- package/packages/software-development/product-builder/adapters/cursor/skills/product-builder/SKILL.md +1 -0
- package/packages/software-development/promptctl/SKILL.md +1 -0
- package/packages/software-development/promptctl/adapters/claude/skills/promptctl/SKILL.md +1 -0
- package/packages/software-development/promptctl/adapters/cursor/skills/promptctl/SKILL.md +1 -0
- package/packages/software-development/semantic-release-beta/SKILL.md +1 -0
- package/packages/software-development/semantic-release-beta/adapters/claude/skills/semantic-release-beta/SKILL.md +1 -0
- package/packages/software-development/semantic-release-beta/adapters/cursor/skills/semantic-release-beta/SKILL.md +1 -0
- package/packages/software-development/starter-rules/SKILL.md +1 -0
- package/packages/software-development/starter-rules/adapters/claude/skills/starter-rules/SKILL.md +1 -0
- package/packages/software-development/starter-rules/adapters/cursor/skills/starter-rules/SKILL.md +1 -0
- package/scripts/build-adapters.sh +11 -2
|
@@ -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.
|
|
@@ -5,6 +5,7 @@ license: MIT
|
|
|
5
5
|
allowed-tools: Bash, Read, Write, Edit, WebSearch, WebFetch
|
|
6
6
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires a writable git repository; browser or image rendering tools are useful for visual validation.
|
|
7
7
|
metadata:
|
|
8
|
+
targets: [_source-only]
|
|
8
9
|
author: Oleg Koval
|
|
9
10
|
tags:
|
|
10
11
|
- open-source
|
|
@@ -7,6 +7,7 @@ license: MIT
|
|
|
7
7
|
allowed-tools: Bash, Read, Write, Edit, WebSearch, WebFetch
|
|
8
8
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires a writable git repository; browser or image rendering tools are useful for visual validation.
|
|
9
9
|
metadata:
|
|
10
|
+
targets: ["claude"]
|
|
10
11
|
author: Oleg Koval
|
|
11
12
|
tags:
|
|
12
13
|
- open-source
|
|
@@ -7,6 +7,7 @@ license: MIT
|
|
|
7
7
|
allowed-tools: Bash, Read, Write, Edit, WebSearch, WebFetch
|
|
8
8
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires a writable git repository; browser or image rendering tools are useful for visual validation.
|
|
9
9
|
metadata:
|
|
10
|
+
targets: ["cursor"]
|
|
10
11
|
author: Oleg Koval
|
|
11
12
|
tags:
|
|
12
13
|
- open-source
|
|
@@ -5,6 +5,7 @@ license: MIT
|
|
|
5
5
|
allowed-tools: Bash, Read, Write, Edit, WebSearch, WebFetch
|
|
6
6
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires a writable application repository and a stack compatible with the generated implementation.
|
|
7
7
|
metadata:
|
|
8
|
+
targets: [_source-only]
|
|
8
9
|
author: Oleg Koval
|
|
9
10
|
tags:
|
|
10
11
|
- product
|
|
@@ -7,6 +7,7 @@ license: MIT
|
|
|
7
7
|
allowed-tools: Bash, Read, Write, Edit, WebSearch, WebFetch
|
|
8
8
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires a writable application repository and a stack compatible with the generated implementation.
|
|
9
9
|
metadata:
|
|
10
|
+
targets: ["claude"]
|
|
10
11
|
author: Oleg Koval
|
|
11
12
|
tags:
|
|
12
13
|
- product
|
|
@@ -7,6 +7,7 @@ license: MIT
|
|
|
7
7
|
allowed-tools: Bash, Read, Write, Edit, WebSearch, WebFetch
|
|
8
8
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires a writable application repository and a stack compatible with the generated implementation.
|
|
9
9
|
metadata:
|
|
10
|
+
targets: ["cursor"]
|
|
10
11
|
author: Oleg Koval
|
|
11
12
|
tags:
|
|
12
13
|
- product
|
|
@@ -5,6 +5,7 @@ license: MIT
|
|
|
5
5
|
allowed-tools: Bash, Read, Write
|
|
6
6
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires promptctl to be installed when the workflow depends on the CLI.
|
|
7
7
|
metadata:
|
|
8
|
+
targets: [_source-only]
|
|
8
9
|
author: Oleg Koval
|
|
9
10
|
tags:
|
|
10
11
|
- prompts
|
|
@@ -7,6 +7,7 @@ license: MIT
|
|
|
7
7
|
allowed-tools: Bash, Read, Write
|
|
8
8
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires promptctl to be installed when the workflow depends on the CLI.
|
|
9
9
|
metadata:
|
|
10
|
+
targets: ["claude"]
|
|
10
11
|
author: Oleg Koval
|
|
11
12
|
tags:
|
|
12
13
|
- prompts
|
|
@@ -7,6 +7,7 @@ license: MIT
|
|
|
7
7
|
allowed-tools: Bash, Read, Write
|
|
8
8
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires promptctl to be installed when the workflow depends on the CLI.
|
|
9
9
|
metadata:
|
|
10
|
+
targets: ["cursor"]
|
|
10
11
|
author: Oleg Koval
|
|
11
12
|
tags:
|
|
12
13
|
- prompts
|
|
@@ -5,6 +5,7 @@ license: MIT
|
|
|
5
5
|
allowed-tools: Bash, Read, Write, Edit
|
|
6
6
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires a Node.js package repository that uses git and GitHub Actions.
|
|
7
7
|
metadata:
|
|
8
|
+
targets: [_source-only]
|
|
8
9
|
author: Oleg Koval
|
|
9
10
|
tags:
|
|
10
11
|
- semantic-release
|
|
@@ -7,6 +7,7 @@ license: MIT
|
|
|
7
7
|
allowed-tools: Bash, Read, Write, Edit
|
|
8
8
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires a Node.js package repository that uses git and GitHub Actions.
|
|
9
9
|
metadata:
|
|
10
|
+
targets: ["claude"]
|
|
10
11
|
author: Oleg Koval
|
|
11
12
|
tags:
|
|
12
13
|
- semantic-release
|
|
@@ -7,6 +7,7 @@ license: MIT
|
|
|
7
7
|
allowed-tools: Bash, Read, Write, Edit
|
|
8
8
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires a Node.js package repository that uses git and GitHub Actions.
|
|
9
9
|
metadata:
|
|
10
|
+
targets: ["cursor"]
|
|
10
11
|
author: Oleg Koval
|
|
11
12
|
tags:
|
|
12
13
|
- semantic-release
|
|
@@ -16,6 +16,15 @@ const skillPathFor = (pkg) => path.join(root, pkg.path, 'SKILL.md')
|
|
|
16
16
|
const promptNameFor = (pkg) => `${pkg.name}.prompt.md`
|
|
17
17
|
const generatedHeader = '<!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->'
|
|
18
18
|
const stripFrontmatter = (content) => content.replace(/^---\n[\s\S]*?\n---\n?/, '')
|
|
19
|
+
const injectTargets = (content, targets) => {
|
|
20
|
+
const targetsYaml = targets.length > 0
|
|
21
|
+
? ` targets: [${targets.map(t => JSON.stringify(t)).join(', ')}]`
|
|
22
|
+
: ' targets: []'
|
|
23
|
+
if (/^ targets:/m.test(content)) {
|
|
24
|
+
return content.replace(/^ targets:.*$/m, targetsYaml)
|
|
25
|
+
}
|
|
26
|
+
return content.replace(/^(metadata:)$/m, `$1\n${targetsYaml}`)
|
|
27
|
+
}
|
|
19
28
|
const stripTrailingLineWhitespace = (content) => content.replace(/[ \t]+$/gm, '')
|
|
20
29
|
const copySkillResources = (pkg, destDir) => {
|
|
21
30
|
for (const resourceDir of ['scripts']) {
|
|
@@ -200,7 +209,7 @@ for (const pkg of catalog.packages) {
|
|
|
200
209
|
2,
|
|
201
210
|
) + '\n',
|
|
202
211
|
)
|
|
203
|
-
fs.writeFileSync(path.join(claudeDestDir, 'SKILL.md'), [generatedHeader, '', canonical, ''].join('\n'))
|
|
212
|
+
fs.writeFileSync(path.join(claudeDestDir, 'SKILL.md'), [generatedHeader, '', injectTargets(canonical, ['claude']), ''].join('\n'))
|
|
204
213
|
copySkillResources(pkg, claudeDestDir)
|
|
205
214
|
}
|
|
206
215
|
|
|
@@ -221,7 +230,7 @@ for (const pkg of catalog.packages) {
|
|
|
221
230
|
2,
|
|
222
231
|
) + '\n',
|
|
223
232
|
)
|
|
224
|
-
fs.writeFileSync(path.join(destDir, 'SKILL.md'), [generatedHeader, '', canonical, ''].join('\n'))
|
|
233
|
+
fs.writeFileSync(path.join(destDir, 'SKILL.md'), [generatedHeader, '', injectTargets(canonical, ['cursor']), ''].join('\n'))
|
|
225
234
|
copySkillResources(pkg, destDir)
|
|
226
235
|
}
|
|
227
236
|
|