@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.
- package/.claude-plugin/plugin.json +7 -2
- package/.cursor-plugin/index.json +26 -1
- package/.grok-plugin/index.json +26 -1
- package/.kiro/steering/garmin-watchface.md +83 -31
- package/.windsurf/rules/garmin-watchface.md +83 -31
- package/README.md +8 -3
- package/catalog/skills.json +117 -1
- package/collections/software-development.json +2 -1
- package/package.json +1 -1
- package/packages/software-development/branch-cleanup/SKILL.md +204 -0
- package/packages/software-development/branch-cleanup/adapters/claude/plugin.json +5 -0
- package/packages/software-development/branch-cleanup/adapters/claude/skills/branch-cleanup/SKILL.md +205 -0
- package/packages/software-development/branch-cleanup/adapters/codex/README.md +19 -0
- package/packages/software-development/branch-cleanup/adapters/cursor/plugin.json +6 -0
- package/packages/software-development/branch-cleanup/adapters/cursor/skills/branch-cleanup/SKILL.md +205 -0
- package/packages/software-development/branch-cleanup/adapters/grok/plugin.json +6 -0
- package/packages/software-development/branch-cleanup/adapters/grok/skills/branch-cleanup/SKILL.md +205 -0
- package/packages/software-development/morning-routine/SKILL.md +149 -0
- package/packages/software-development/morning-routine/adapters/claude/plugin.json +5 -0
- package/packages/software-development/morning-routine/adapters/claude/skills/morning-routine/SKILL.md +150 -0
- package/packages/software-development/morning-routine/adapters/codex/README.md +19 -0
- package/packages/software-development/morning-routine/adapters/cursor/plugin.json +6 -0
- package/packages/software-development/morning-routine/adapters/cursor/skills/morning-routine/SKILL.md +150 -0
- package/packages/software-development/morning-routine/adapters/grok/plugin.json +6 -0
- package/packages/software-development/morning-routine/adapters/grok/skills/morning-routine/SKILL.md +150 -0
- package/packages/software-development/pr-finalize-complete/adapters/claude/plugin.json +1 -1
- package/packages/software-development/pr-finalize-complete/adapters/codex/README.md +7 -11
- package/packages/software-development/pr-finalize-complete/adapters/cursor/plugin.json +1 -1
- package/packages/software-development/pr-finalize-complete/adapters/grok/plugin.json +1 -1
- package/packages/software-development/release-day/SKILL.md +286 -0
- package/packages/software-development/release-day/adapters/claude/plugin.json +5 -0
- package/packages/software-development/release-day/adapters/claude/skills/release-day/SKILL.md +287 -0
- package/packages/software-development/release-day/adapters/codex/README.md +19 -0
- package/packages/software-development/release-day/adapters/cursor/plugin.json +6 -0
- package/packages/software-development/release-day/adapters/cursor/skills/release-day/SKILL.md +287 -0
- package/packages/software-development/release-day/adapters/grok/plugin.json +6 -0
- package/packages/software-development/release-day/adapters/grok/skills/release-day/SKILL.md +287 -0
- package/packages/software-development/vinted-listing/SKILL.md +58 -0
- package/packages/software-development/vinted-listing/adapters/claude/plugin.json +5 -0
- package/packages/software-development/vinted-listing/adapters/claude/skills/vinted-listing/SKILL.md +59 -0
- package/packages/software-development/vinted-listing/adapters/claude/skills/vinted-listing/references/photo-and-duplicate-policy.md +20 -0
- package/packages/software-development/vinted-listing/adapters/codex/README.md +3 -0
- package/packages/software-development/vinted-listing/adapters/cursor/plugin.json +6 -0
- package/packages/software-development/vinted-listing/adapters/cursor/skills/vinted-listing/SKILL.md +59 -0
- package/packages/software-development/vinted-listing/adapters/cursor/skills/vinted-listing/references/photo-and-duplicate-policy.md +20 -0
- package/packages/software-development/vinted-listing/adapters/grok/plugin.json +6 -0
- package/packages/software-development/vinted-listing/adapters/grok/skills/vinted-listing/SKILL.md +59 -0
- package/packages/software-development/vinted-listing/adapters/grok/skills/vinted-listing/references/photo-and-duplicate-policy.md +20 -0
- package/packages/software-development/vinted-listing/references/photo-and-duplicate-policy.md +20 -0
- package/packages/wearables/garmin-watchface/SKILL.md +82 -35
- package/packages/wearables/garmin-watchface/adapters/claude/plugin.json +1 -1
- package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/SKILL.md +82 -35
- package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/design-proposals.md +99 -0
- package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/devices.md +112 -0
- package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/display.md +78 -3
- package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/inspiration-wizard.md +140 -0
- package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/layout.md +28 -0
- package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/publishing.md +134 -5
- package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/simulator.md +86 -2
- package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/scripts/ciq-inspire +329 -0
- package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/scripts/ciq-mock +502 -0
- package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/scripts/ciq-release +12 -6
- package/packages/wearables/garmin-watchface/adapters/cursor/plugin.json +1 -1
- package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/SKILL.md +82 -35
- package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/design-proposals.md +99 -0
- package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/devices.md +112 -0
- package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/display.md +78 -3
- package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/inspiration-wizard.md +140 -0
- package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/layout.md +28 -0
- package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/publishing.md +134 -5
- package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/simulator.md +86 -2
- package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/scripts/ciq-inspire +329 -0
- package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/scripts/ciq-mock +502 -0
- package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/scripts/ciq-release +12 -6
- package/packages/wearables/garmin-watchface/adapters/grok/plugin.json +1 -1
- package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/SKILL.md +82 -35
- package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/design-proposals.md +99 -0
- package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/devices.md +112 -0
- package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/display.md +78 -3
- package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/inspiration-wizard.md +140 -0
- package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/layout.md +28 -0
- package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/publishing.md +134 -5
- package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/simulator.md +86 -2
- package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/scripts/ciq-inspire +329 -0
- package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/scripts/ciq-mock +502 -0
- package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/scripts/ciq-release +12 -6
- package/packages/wearables/garmin-watchface/adapters/kiro/steering/garmin-watchface.md +83 -31
- package/packages/wearables/garmin-watchface/adapters/windsurf/rules/garmin-watchface.md +83 -31
- package/packages/wearables/garmin-watchface/references/design-proposals.md +99 -0
- package/packages/wearables/garmin-watchface/references/devices.md +112 -0
- package/packages/wearables/garmin-watchface/references/display.md +78 -3
- package/packages/wearables/garmin-watchface/references/inspiration-wizard.md +140 -0
- package/packages/wearables/garmin-watchface/references/layout.md +28 -0
- package/packages/wearables/garmin-watchface/references/publishing.md +134 -5
- package/packages/wearables/garmin-watchface/references/simulator.md +86 -2
- package/packages/wearables/garmin-watchface/scripts/ciq-inspire +329 -0
- package/packages/wearables/garmin-watchface/scripts/ciq-mock +502 -0
- package/packages/wearables/garmin-watchface/scripts/ciq-release +12 -6
package/packages/software-development/branch-cleanup/adapters/cursor/skills/branch-cleanup/SKILL.md
ADDED
|
@@ -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
|
+
}
|
package/packages/software-development/branch-cleanup/adapters/grok/skills/branch-cleanup/SKILL.md
ADDED
|
@@ -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
|
+
}
|