@olegkoval/agent-skills 1.28.0 โ†’ 1.30.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 (98) hide show
  1. package/.claude-plugin/plugin.json +7 -2
  2. package/.cursor-plugin/index.json +26 -1
  3. package/.grok-plugin/index.json +26 -1
  4. package/.kiro/steering/garmin-watchface.md +83 -31
  5. package/.windsurf/rules/garmin-watchface.md +83 -31
  6. package/README.md +8 -3
  7. package/catalog/skills.json +117 -1
  8. package/collections/software-development.json +2 -1
  9. package/package.json +1 -1
  10. package/packages/software-development/branch-cleanup/SKILL.md +204 -0
  11. package/packages/software-development/branch-cleanup/adapters/claude/plugin.json +5 -0
  12. package/packages/software-development/branch-cleanup/adapters/claude/skills/branch-cleanup/SKILL.md +205 -0
  13. package/packages/software-development/branch-cleanup/adapters/codex/README.md +19 -0
  14. package/packages/software-development/branch-cleanup/adapters/cursor/plugin.json +6 -0
  15. package/packages/software-development/branch-cleanup/adapters/cursor/skills/branch-cleanup/SKILL.md +205 -0
  16. package/packages/software-development/branch-cleanup/adapters/grok/plugin.json +6 -0
  17. package/packages/software-development/branch-cleanup/adapters/grok/skills/branch-cleanup/SKILL.md +205 -0
  18. package/packages/software-development/morning-routine/SKILL.md +149 -0
  19. package/packages/software-development/morning-routine/adapters/claude/plugin.json +5 -0
  20. package/packages/software-development/morning-routine/adapters/claude/skills/morning-routine/SKILL.md +150 -0
  21. package/packages/software-development/morning-routine/adapters/codex/README.md +19 -0
  22. package/packages/software-development/morning-routine/adapters/cursor/plugin.json +6 -0
  23. package/packages/software-development/morning-routine/adapters/cursor/skills/morning-routine/SKILL.md +150 -0
  24. package/packages/software-development/morning-routine/adapters/grok/plugin.json +6 -0
  25. package/packages/software-development/morning-routine/adapters/grok/skills/morning-routine/SKILL.md +150 -0
  26. package/packages/software-development/pr-finalize-complete/adapters/claude/plugin.json +1 -1
  27. package/packages/software-development/pr-finalize-complete/adapters/codex/README.md +7 -11
  28. package/packages/software-development/pr-finalize-complete/adapters/cursor/plugin.json +1 -1
  29. package/packages/software-development/pr-finalize-complete/adapters/grok/plugin.json +1 -1
  30. package/packages/software-development/release-day/SKILL.md +286 -0
  31. package/packages/software-development/release-day/adapters/claude/plugin.json +5 -0
  32. package/packages/software-development/release-day/adapters/claude/skills/release-day/SKILL.md +287 -0
  33. package/packages/software-development/release-day/adapters/codex/README.md +19 -0
  34. package/packages/software-development/release-day/adapters/cursor/plugin.json +6 -0
  35. package/packages/software-development/release-day/adapters/cursor/skills/release-day/SKILL.md +287 -0
  36. package/packages/software-development/release-day/adapters/grok/plugin.json +6 -0
  37. package/packages/software-development/release-day/adapters/grok/skills/release-day/SKILL.md +287 -0
  38. package/packages/software-development/vinted-listing/SKILL.md +58 -0
  39. package/packages/software-development/vinted-listing/adapters/claude/plugin.json +5 -0
  40. package/packages/software-development/vinted-listing/adapters/claude/skills/vinted-listing/SKILL.md +59 -0
  41. package/packages/software-development/vinted-listing/adapters/claude/skills/vinted-listing/references/photo-and-duplicate-policy.md +20 -0
  42. package/packages/software-development/vinted-listing/adapters/codex/README.md +3 -0
  43. package/packages/software-development/vinted-listing/adapters/cursor/plugin.json +6 -0
  44. package/packages/software-development/vinted-listing/adapters/cursor/skills/vinted-listing/SKILL.md +59 -0
  45. package/packages/software-development/vinted-listing/adapters/cursor/skills/vinted-listing/references/photo-and-duplicate-policy.md +20 -0
  46. package/packages/software-development/vinted-listing/adapters/grok/plugin.json +6 -0
  47. package/packages/software-development/vinted-listing/adapters/grok/skills/vinted-listing/SKILL.md +59 -0
  48. package/packages/software-development/vinted-listing/adapters/grok/skills/vinted-listing/references/photo-and-duplicate-policy.md +20 -0
  49. package/packages/software-development/vinted-listing/references/photo-and-duplicate-policy.md +20 -0
  50. package/packages/wearables/garmin-watchface/SKILL.md +82 -35
  51. package/packages/wearables/garmin-watchface/adapters/claude/plugin.json +1 -1
  52. package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/SKILL.md +82 -35
  53. package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/design-proposals.md +99 -0
  54. package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/devices.md +112 -0
  55. package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/display.md +78 -3
  56. package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/inspiration-wizard.md +140 -0
  57. package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/layout.md +28 -0
  58. package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/publishing.md +134 -5
  59. package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/simulator.md +86 -2
  60. package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/scripts/ciq-inspire +329 -0
  61. package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/scripts/ciq-mock +502 -0
  62. package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/scripts/ciq-release +12 -6
  63. package/packages/wearables/garmin-watchface/adapters/cursor/plugin.json +1 -1
  64. package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/SKILL.md +82 -35
  65. package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/design-proposals.md +99 -0
  66. package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/devices.md +112 -0
  67. package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/display.md +78 -3
  68. package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/inspiration-wizard.md +140 -0
  69. package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/layout.md +28 -0
  70. package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/publishing.md +134 -5
  71. package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/simulator.md +86 -2
  72. package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/scripts/ciq-inspire +329 -0
  73. package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/scripts/ciq-mock +502 -0
  74. package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/scripts/ciq-release +12 -6
  75. package/packages/wearables/garmin-watchface/adapters/grok/plugin.json +1 -1
  76. package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/SKILL.md +82 -35
  77. package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/design-proposals.md +99 -0
  78. package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/devices.md +112 -0
  79. package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/display.md +78 -3
  80. package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/inspiration-wizard.md +140 -0
  81. package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/layout.md +28 -0
  82. package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/publishing.md +134 -5
  83. package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/simulator.md +86 -2
  84. package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/scripts/ciq-inspire +329 -0
  85. package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/scripts/ciq-mock +502 -0
  86. package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/scripts/ciq-release +12 -6
  87. package/packages/wearables/garmin-watchface/adapters/kiro/steering/garmin-watchface.md +83 -31
  88. package/packages/wearables/garmin-watchface/adapters/windsurf/rules/garmin-watchface.md +83 -31
  89. package/packages/wearables/garmin-watchface/references/design-proposals.md +99 -0
  90. package/packages/wearables/garmin-watchface/references/devices.md +112 -0
  91. package/packages/wearables/garmin-watchface/references/display.md +78 -3
  92. package/packages/wearables/garmin-watchface/references/inspiration-wizard.md +140 -0
  93. package/packages/wearables/garmin-watchface/references/layout.md +28 -0
  94. package/packages/wearables/garmin-watchface/references/publishing.md +134 -5
  95. package/packages/wearables/garmin-watchface/references/simulator.md +86 -2
  96. package/packages/wearables/garmin-watchface/scripts/ciq-inspire +329 -0
  97. package/packages/wearables/garmin-watchface/scripts/ciq-mock +502 -0
  98. package/packages/wearables/garmin-watchface/scripts/ciq-release +12 -6
@@ -0,0 +1,205 @@
1
+ ---
2
+ name: branch-cleanup
3
+ description: >
4
+ Prune stale git branches after a merge wave: delete closed/merged remote branches,
5
+ remove local tracking branches that no longer exist on the remote, and optionally
6
+ clean up local branches already merged to main. Use after running dependabot-triage,
7
+ after a sprint wind-down, or when the user says "clean up branches", "prune branches",
8
+ "delete merged branches", or "tidy up git".
9
+ license: MIT
10
+ allowed-tools: Bash
11
+ compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires git and gh (GitHub CLI) authenticated.
12
+ metadata:
13
+ targets: ["cursor"]
14
+ author: Oleg Koval
15
+ tags:
16
+ - git
17
+ - branches
18
+ - cleanup
19
+ - maintenance
20
+ - dependabot
21
+ - github
22
+ source: weekly-pattern-learner
23
+ source_reason: "dependabot-triage was added to merge dependency PRs in bulk but leaves stale remote branches behind; no skill follows up to prune them"
24
+ source_date: "2026-08-10"
25
+ ---
26
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
27
+
28
+ > ๐Ÿค– *Auto-generated by **weekly-pattern-learner** ยท dependabot-triage was added to merge dependency PRs in bulk but leaves stale remote branches behind; no skill follows up to prune them*
29
+
30
+ # Branch Cleanup
31
+
32
+ Remove stale remote and local branches safely after a merge wave. Defaults to
33
+ dry-run so you see exactly what will be deleted before anything is removed.
34
+
35
+ ## Inputs
36
+
37
+ - **Remote** (optional, default: `origin`)
38
+ - **Base branch** (optional, default: `main` โ€” detect from `gh repo view`)
39
+ - **--dry-run** (optional, default: on): preview deletions without executing them
40
+ - **--execute**: actually delete branches (requires explicit flag โ€” safety default)
41
+ - **--include-local**: also clean up merged local branches (off by default)
42
+
43
+ ## Step 1 โ€” Fetch and prune remote tracking references
44
+
45
+ Always start here. This removes local tracking refs for remote branches that are
46
+ already gone, without touching anything else:
47
+
48
+ ```bash
49
+ REMOTE="${Remote:-origin}"
50
+ git fetch --prune "$REMOTE"
51
+ ```
52
+
53
+ After pruning, print the count of removed tracking refs:
54
+
55
+ ```bash
56
+ git branch -vv | grep ': gone]' | wc -l
57
+ ```
58
+
59
+ ## Step 2 โ€” Identify stale remote branches
60
+
61
+ Find remote branches whose associated PR is merged or closed:
62
+
63
+ ```bash
64
+ # Get all non-default remote branches
65
+ BASE=$(gh repo view --json defaultBranchRef -q '.defaultBranchRef.name' 2>/dev/null || echo "main")
66
+
67
+ git branch -r --merged "$REMOTE/$BASE" \
68
+ | grep -v "HEAD" \
69
+ | grep -v "$REMOTE/$BASE" \
70
+ | sed "s|$REMOTE/||" \
71
+ | sort
72
+ ```
73
+
74
+ Cross-reference with GitHub to confirm each branch's PR state. Only include branches
75
+ with a confirmed merged or closed PR โ€” an empty result means the branch is not eligible:
76
+
77
+ ```bash
78
+ STALE_BRANCHES=()
79
+ for branch in $(git branch -r --merged "$REMOTE/$BASE" \
80
+ | grep -v HEAD | grep -v "$REMOTE/$BASE" | sed "s|$REMOTE/||"); do
81
+ PR_DATA=$(gh pr list --head "$branch" --state merged \
82
+ --json number,title,mergedAt \
83
+ --jq '.[0] | "\(.number) merged \(.mergedAt | .[0:10])"' 2>/dev/null)
84
+ if [ -z "$PR_DATA" ]; then
85
+ PR_DATA=$(gh pr list --head "$branch" --state closed \
86
+ --json number,title,closedAt \
87
+ --jq '.[0] | "\(.number) closed \(.closedAt | .[0:10])"' 2>/dev/null)
88
+ fi
89
+ if [ -n "$PR_DATA" ]; then
90
+ echo "$branch โ† $PR_DATA"
91
+ STALE_BRANCHES+=("$branch")
92
+ else
93
+ echo "$branch โ† no confirmed PR (skipped)"
94
+ fi
95
+ done
96
+ ```
97
+
98
+ This produces a table like:
99
+
100
+ ```
101
+ dependabot/npm_and_yarn/lodash-4.17.21 โ† 42 merged 2026-07-31
102
+ dependabot/npm_and_yarn/eslint-8.57.0 โ† 43 merged 2026-07-31
103
+ feature/login-refresh โ† 38 merged 2026-07-28
104
+ ```
105
+
106
+ ## Step 3 โ€” Safety filter
107
+
108
+ **Never propose deletion of:**
109
+
110
+ | Branch | Reason |
111
+ |--------|--------|
112
+ | `main`, `master`, `develop` | Protected base branches |
113
+ | `beta`, `staging`, `production` | Release/deploy targets |
114
+ | Any branch with an open PR | May still be in review |
115
+ | Any branch not yet merged to base | Would lose commits |
116
+ | Branches the user has modified locally in the last 24h | Work-in-progress |
117
+
118
+ Check for open PRs before including a branch in the deletion list:
119
+
120
+ ```bash
121
+ OPEN=$(gh pr list --head "$branch" --state open --json number --jq 'length')
122
+ [ "$OPEN" -gt 0 ] && echo "SKIP (open PR): $branch"
123
+ ```
124
+
125
+ ## Step 4 โ€” Preview or execute
126
+
127
+ ### Dry-run (default)
128
+
129
+ Print the deletion plan and stop. Never touch the remote without `--execute`:
130
+
131
+ ```
132
+ Branch cleanup preview โ€” dry-run (pass --execute to apply)
133
+
134
+ Remote branches to delete (all merged to main):
135
+ origin/dependabot/npm_and_yarn/lodash-4.17.21 (PR #42, merged 2026-07-31)
136
+ origin/dependabot/npm_and_yarn/eslint-8.57.0 (PR #43, merged 2026-07-31)
137
+ origin/feature/login-refresh (PR #38, merged 2026-07-28)
138
+
139
+ Local tracking refs already pruned: 3 (by git fetch --prune)
140
+
141
+ Would NOT delete:
142
+ origin/beta (protected release branch)
143
+ origin/feature/signup (open PR #47)
144
+
145
+ Run with --execute to apply.
146
+ ```
147
+
148
+ ### Execute
149
+
150
+ ```bash
151
+ # Delete remote branches
152
+ for branch in "${STALE_BRANCHES[@]}"; do
153
+ git push "$REMOTE" --delete "$branch" && echo "deleted: $REMOTE/$branch"
154
+ done
155
+ ```
156
+
157
+ ## Step 5 โ€” Local branch cleanup (optional, --include-local)
158
+
159
+ Only runs when `--include-local` is explicitly passed.
160
+
161
+ Find local branches already merged to base and not checked out:
162
+
163
+ ```bash
164
+ git branch --merged "$BASE" \
165
+ | grep -v "^\*" \
166
+ | grep -v "$BASE" \
167
+ | grep -v "main\|master\|develop\|beta\|staging"
168
+ ```
169
+
170
+ For each candidate, confirm there is no uncommitted work and the tracking ref is
171
+ gone before deleting:
172
+
173
+ ```bash
174
+ git branch -vv "$branch" # should show ': gone]' if remote is deleted
175
+ git branch -d "$branch" # safe delete โ€” fails if unmerged work exists
176
+ ```
177
+
178
+ Never use `-D` (force delete) โ€” let `-d` protect you from accidental data loss.
179
+
180
+ ## Report
181
+
182
+ ```
183
+ Branch cleanup complete
184
+
185
+ Remote:
186
+ Deleted: 12 branches (10 Dependabot, 2 feature branches โ€” all merged)
187
+ Protected: 2 skipped (beta, open PR)
188
+
189
+ Local tracking refs:
190
+ Pruned: 12 stale refs (git fetch --prune)
191
+
192
+ Local branches (--include-local):
193
+ Deleted: 3 branches already merged to main
194
+ Kept: 1 branch (has uncommitted work)
195
+
196
+ Repo now has: N remote branches, M local branches
197
+ ```
198
+
199
+ ## Chaining
200
+
201
+ | Before this skill | After this skill |
202
+ |---|---|
203
+ | `olko:dependabot-triage` (merged patch PRs) | next `olko:morning-routine` starts clean |
204
+ | Sprint wind-down / milestone close | `git fetch` confirms clean state |
205
+ | Any large batch merge | nothing โ€” maintenance complete |
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "olko:branch-cleanup",
3
+ "version": "0.1.0",
4
+ "description": "Prune stale git branches after a merge wave: delete closed/merged remote branches, remove local tracking refs that no longer exist on the remote, and optionally clean up merged local branches. Natural follow-up to dependabot-triage.",
5
+ "skills": "skills/"
6
+ }
@@ -0,0 +1,205 @@
1
+ ---
2
+ name: branch-cleanup
3
+ description: >
4
+ Prune stale git branches after a merge wave: delete closed/merged remote branches,
5
+ remove local tracking branches that no longer exist on the remote, and optionally
6
+ clean up local branches already merged to main. Use after running dependabot-triage,
7
+ after a sprint wind-down, or when the user says "clean up branches", "prune branches",
8
+ "delete merged branches", or "tidy up git".
9
+ license: MIT
10
+ allowed-tools: Bash
11
+ compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires git and gh (GitHub CLI) authenticated.
12
+ metadata:
13
+ targets: [_source-only]
14
+ author: Oleg Koval
15
+ tags:
16
+ - git
17
+ - branches
18
+ - cleanup
19
+ - maintenance
20
+ - dependabot
21
+ - github
22
+ source: weekly-pattern-learner
23
+ source_reason: "dependabot-triage was added to merge dependency PRs in bulk but leaves stale remote branches behind; no skill follows up to prune them"
24
+ source_date: "2026-08-10"
25
+ ---
26
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
27
+
28
+ > ๐Ÿค– *Auto-generated by **weekly-pattern-learner** ยท dependabot-triage was added to merge dependency PRs in bulk but leaves stale remote branches behind; no skill follows up to prune them*
29
+
30
+ # Branch Cleanup
31
+
32
+ Remove stale remote and local branches safely after a merge wave. Defaults to
33
+ dry-run so you see exactly what will be deleted before anything is removed.
34
+
35
+ ## Inputs
36
+
37
+ - **Remote** (optional, default: `origin`)
38
+ - **Base branch** (optional, default: `main` โ€” detect from `gh repo view`)
39
+ - **--dry-run** (optional, default: on): preview deletions without executing them
40
+ - **--execute**: actually delete branches (requires explicit flag โ€” safety default)
41
+ - **--include-local**: also clean up merged local branches (off by default)
42
+
43
+ ## Step 1 โ€” Fetch and prune remote tracking references
44
+
45
+ Always start here. This removes local tracking refs for remote branches that are
46
+ already gone, without touching anything else:
47
+
48
+ ```bash
49
+ REMOTE="${Remote:-origin}"
50
+ git fetch --prune "$REMOTE"
51
+ ```
52
+
53
+ After pruning, print the count of removed tracking refs:
54
+
55
+ ```bash
56
+ git branch -vv | grep ': gone]' | wc -l
57
+ ```
58
+
59
+ ## Step 2 โ€” Identify stale remote branches
60
+
61
+ Find remote branches whose associated PR is merged or closed:
62
+
63
+ ```bash
64
+ # Get all non-default remote branches
65
+ BASE=$(gh repo view --json defaultBranchRef -q '.defaultBranchRef.name' 2>/dev/null || echo "main")
66
+
67
+ git branch -r --merged "$REMOTE/$BASE" \
68
+ | grep -v "HEAD" \
69
+ | grep -v "$REMOTE/$BASE" \
70
+ | sed "s|$REMOTE/||" \
71
+ | sort
72
+ ```
73
+
74
+ Cross-reference with GitHub to confirm each branch's PR state. Only include branches
75
+ with a confirmed merged or closed PR โ€” an empty result means the branch is not eligible:
76
+
77
+ ```bash
78
+ STALE_BRANCHES=()
79
+ for branch in $(git branch -r --merged "$REMOTE/$BASE" \
80
+ | grep -v HEAD | grep -v "$REMOTE/$BASE" | sed "s|$REMOTE/||"); do
81
+ PR_DATA=$(gh pr list --head "$branch" --state merged \
82
+ --json number,title,mergedAt \
83
+ --jq '.[0] | "\(.number) merged \(.mergedAt | .[0:10])"' 2>/dev/null)
84
+ if [ -z "$PR_DATA" ]; then
85
+ PR_DATA=$(gh pr list --head "$branch" --state closed \
86
+ --json number,title,closedAt \
87
+ --jq '.[0] | "\(.number) closed \(.closedAt | .[0:10])"' 2>/dev/null)
88
+ fi
89
+ if [ -n "$PR_DATA" ]; then
90
+ echo "$branch โ† $PR_DATA"
91
+ STALE_BRANCHES+=("$branch")
92
+ else
93
+ echo "$branch โ† no confirmed PR (skipped)"
94
+ fi
95
+ done
96
+ ```
97
+
98
+ This produces a table like:
99
+
100
+ ```
101
+ dependabot/npm_and_yarn/lodash-4.17.21 โ† 42 merged 2026-07-31
102
+ dependabot/npm_and_yarn/eslint-8.57.0 โ† 43 merged 2026-07-31
103
+ feature/login-refresh โ† 38 merged 2026-07-28
104
+ ```
105
+
106
+ ## Step 3 โ€” Safety filter
107
+
108
+ **Never propose deletion of:**
109
+
110
+ | Branch | Reason |
111
+ |--------|--------|
112
+ | `main`, `master`, `develop` | Protected base branches |
113
+ | `beta`, `staging`, `production` | Release/deploy targets |
114
+ | Any branch with an open PR | May still be in review |
115
+ | Any branch not yet merged to base | Would lose commits |
116
+ | Branches the user has modified locally in the last 24h | Work-in-progress |
117
+
118
+ Check for open PRs before including a branch in the deletion list:
119
+
120
+ ```bash
121
+ OPEN=$(gh pr list --head "$branch" --state open --json number --jq 'length')
122
+ [ "$OPEN" -gt 0 ] && echo "SKIP (open PR): $branch"
123
+ ```
124
+
125
+ ## Step 4 โ€” Preview or execute
126
+
127
+ ### Dry-run (default)
128
+
129
+ Print the deletion plan and stop. Never touch the remote without `--execute`:
130
+
131
+ ```
132
+ Branch cleanup preview โ€” dry-run (pass --execute to apply)
133
+
134
+ Remote branches to delete (all merged to main):
135
+ origin/dependabot/npm_and_yarn/lodash-4.17.21 (PR #42, merged 2026-07-31)
136
+ origin/dependabot/npm_and_yarn/eslint-8.57.0 (PR #43, merged 2026-07-31)
137
+ origin/feature/login-refresh (PR #38, merged 2026-07-28)
138
+
139
+ Local tracking refs already pruned: 3 (by git fetch --prune)
140
+
141
+ Would NOT delete:
142
+ origin/beta (protected release branch)
143
+ origin/feature/signup (open PR #47)
144
+
145
+ Run with --execute to apply.
146
+ ```
147
+
148
+ ### Execute
149
+
150
+ ```bash
151
+ # Delete remote branches
152
+ for branch in "${STALE_BRANCHES[@]}"; do
153
+ git push "$REMOTE" --delete "$branch" && echo "deleted: $REMOTE/$branch"
154
+ done
155
+ ```
156
+
157
+ ## Step 5 โ€” Local branch cleanup (optional, --include-local)
158
+
159
+ Only runs when `--include-local` is explicitly passed.
160
+
161
+ Find local branches already merged to base and not checked out:
162
+
163
+ ```bash
164
+ git branch --merged "$BASE" \
165
+ | grep -v "^\*" \
166
+ | grep -v "$BASE" \
167
+ | grep -v "main\|master\|develop\|beta\|staging"
168
+ ```
169
+
170
+ For each candidate, confirm there is no uncommitted work and the tracking ref is
171
+ gone before deleting:
172
+
173
+ ```bash
174
+ git branch -vv "$branch" # should show ': gone]' if remote is deleted
175
+ git branch -d "$branch" # safe delete โ€” fails if unmerged work exists
176
+ ```
177
+
178
+ Never use `-D` (force delete) โ€” let `-d` protect you from accidental data loss.
179
+
180
+ ## Report
181
+
182
+ ```
183
+ Branch cleanup complete
184
+
185
+ Remote:
186
+ Deleted: 12 branches (10 Dependabot, 2 feature branches โ€” all merged)
187
+ Protected: 2 skipped (beta, open PR)
188
+
189
+ Local tracking refs:
190
+ Pruned: 12 stale refs (git fetch --prune)
191
+
192
+ Local branches (--include-local):
193
+ Deleted: 3 branches already merged to main
194
+ Kept: 1 branch (has uncommitted work)
195
+
196
+ Repo now has: N remote branches, M local branches
197
+ ```
198
+
199
+ ## Chaining
200
+
201
+ | Before this skill | After this skill |
202
+ |---|---|
203
+ | `olko:dependabot-triage` (merged patch PRs) | next `olko:morning-routine` starts clean |
204
+ | Sprint wind-down / milestone close | `git fetch` confirms clean state |
205
+ | Any large batch merge | nothing โ€” maintenance complete |
@@ -0,0 +1,149 @@
1
+ ---
2
+ name: morning-routine
3
+ description: >
4
+ Run the complete start-of-day setup in one pass: roll over unfinished Obsidian tasks
5
+ to today's daily note, sync open GitHub PRs that need your attention, and sweep
6
+ Dependabot/Renovate PRs to clear safe patch bumps. Use when the user says "start my
7
+ day", "morning routine", "set up my day", or when a scheduled morning job fires.
8
+ license: MIT
9
+ allowed-tools: Bash, Read, Write, Edit
10
+ compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires git and gh (GitHub CLI) authenticated, plus a daily-note vault path configured.
11
+ metadata:
12
+ targets: [_source-only]
13
+ author: Oleg Koval
14
+ tags:
15
+ - morning
16
+ - obsidian
17
+ - daily-note
18
+ - github
19
+ - dependabot
20
+ - productivity
21
+ - routine
22
+ - automation
23
+ source: weekly-pattern-learner
24
+ source_reason: "obsidian-task-rollover, obsidian-pr-sync, and dependabot-triage all describe themselves as morning-routine steps but no meta-skill chains them into a single first-thing-of-day pass"
25
+ source_date: "2026-08-10"
26
+ ---
27
+
28
+ > ๐Ÿค– *Auto-generated by **weekly-pattern-learner** ยท obsidian-task-rollover, obsidian-pr-sync, and dependabot-triage all describe themselves as morning-routine steps but no meta-skill chains them into a single first-thing-of-day pass*
29
+
30
+ # Morning Routine
31
+
32
+ Run the three start-of-day workflows in sequence, then summarize what needs your
33
+ attention today. Each phase is idempotent โ€” re-running is safe.
34
+
35
+ ## Inputs
36
+
37
+ - **VAULT_DAILY** (required): absolute path to the Obsidian daily notes folder
38
+ - **GH_USERNAME** (required): GitHub login for PR filtering
39
+ - **ORG_PREFIX** (optional): org name to group as "Work" in the PR section
40
+ - **--skip-rollover** (optional): skip task rollover (e.g. Monday after a break)
41
+ - **--skip-pr-sync** (optional): skip GitHub PR sync
42
+ - **--skip-dependabot** (optional): skip Dependabot triage
43
+
44
+ If any required config is missing, ask once before starting โ€” don't abort midway.
45
+
46
+ ## Phase 1 โ€” Task rollover
47
+
48
+ Initialize the daily note path once, before any optional phase:
49
+
50
+ ```bash
51
+ NOTE="${VAULT_DAILY}/$(date +%Y-%m-%d).md"
52
+ ```
53
+
54
+ Run `olko:obsidian-task-rollover` on the **previous workday's** note.
55
+
56
+ `obsidian-task-rollover` is an end-of-day migration skill โ€” it copies unchecked tasks
57
+ from a given day's note into the next workday's note with a `[>]` marker. When invoked
58
+ here in the morning, it should operate on **yesterday's** (or the last workday's) note
59
+ so those unchecked tasks are pulled forward into today's note. If yesterday's note does
60
+ not exist, skip this step and note it in the report.
61
+
62
+ **Skip if** `--skip-rollover` is set, or if it's Monday and the user has explicitly
63
+ said they clear the board on Fridays.
64
+
65
+ After this phase, confirm:
66
+ ```bash
67
+ grep -c "^\- \[ \]" "$NOTE" 2>/dev/null || echo "0" # open tasks today
68
+ grep -c "^\- \[>\]" "$NOTE" 2>/dev/null || echo "0" # migrated tasks
69
+ ```
70
+
71
+ Record counts for the final report.
72
+
73
+ ## Phase 2 โ€” PR sync
74
+
75
+ Run `olko:obsidian-pr-sync`.
76
+
77
+ This fetches all open GitHub PRs where the user is assignee or review-requested,
78
+ filters out bots and drafts, and writes or replaces the `## PRs to review` section
79
+ in today's daily note. PRs are grouped into Work (ORG_PREFIX org) and Personal.
80
+
81
+ **Skip if** `--skip-pr-sync` is set.
82
+
83
+ After this phase, count PRs written:
84
+ ```bash
85
+ grep -c "^\- \[ \] \[" "$NOTE" 2>/dev/null || echo "0"
86
+ ```
87
+
88
+ ## Phase 3 โ€” Dependabot triage (quick sweep)
89
+
90
+ Run `olko:dependabot-triage` with `patch-only` auto-merge policy.
91
+
92
+ This auto-approves and merges safe patch bumps whose CI is green, flags major
93
+ upgrades for human review, and posts a digest. The `patch-only` policy means no
94
+ minor or major bumps are merged automatically โ€” just the safest dependency noise.
95
+
96
+ **Skip if** `--skip-dependabot` is set, or if there are no open dependency PRs:
97
+
98
+ ```bash
99
+ gh pr list --state open \
100
+ --json author --jq '
101
+ [.[] | select(.author.login | test("dependabot|renovate"; "i"))]
102
+ | length
103
+ ' 2>/dev/null
104
+ ```
105
+
106
+ If the count is 0, skip phase 3 and note it in the report.
107
+
108
+ ## Final report
109
+
110
+ Print a compact brief suitable for the start of the day:
111
+
112
+ ```
113
+ Morning routine complete โ€” YYYY-MM-DD
114
+
115
+ Tasks: N open today (M carried over from yesterday)
116
+ PRs: X work PRs, Y personal PRs โ†’ see ## PRs to review in today's note
117
+ Dependabot: Z merged (patch, CI green), W flagged for review
118
+
119
+ Today's top 3:
120
+ [read from ## Top 3 for today section if populated, else print "(not filled in yet)"]
121
+
122
+ Flagged for you:
123
+ - [PRs older than 7 days โš ๏ธ from the PR sync, if any]
124
+ - [Major Dependabot bumps flagged for human decision, if any]
125
+ ```
126
+
127
+ If a phase failed (auth expired, vault not found, network error), surface the error
128
+ clearly rather than silently skipping that phase.
129
+
130
+ ## Invocation patterns
131
+
132
+ **Manual (user-triggered):**
133
+ User says "start my day", "run morning routine", or "set up today's note".
134
+ Run the full flow and show the final report.
135
+
136
+ **Scheduled (cron / CCR):**
137
+ No user prompt needed. Run all three phases silently and emit the report as the
138
+ run's output. Useful as a pre-meeting brief or as a first message in a new session.
139
+
140
+ **Partial run:**
141
+ If the user wants to re-sync only PRs mid-day: `--skip-rollover --skip-dependabot`.
142
+
143
+ ## Chaining
144
+
145
+ | Before this skill | After this skill |
146
+ |---|---|
147
+ | โ€” (start of session) | Work the PR queue (`olko:pr-to-green` on flagged items) |
148
+ | โ€” | `olko:dependabot-triage` with `patch-and-minor` if the quick sweep flagged many |
149
+ | `olko:obsidian-task-rollover` alone | nothing โ€” this skill already calls it |
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "olko-morning-routine",
3
+ "description": "Run the complete start-of-day setup in one pass: roll over unfinished Obsidian tasks to today's daily note, sync open GitHub PRs that need your attention, and sweep Dependabot patch bumps. Chains obsidian-task-rollover, obsidian-pr-sync, and dependabot-triage.",
4
+ "skills": "./skills"
5
+ }