@olegkoval/agent-skills 1.22.0 → 1.23.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 (22) hide show
  1. package/.claude-plugin/plugin.json +4 -2
  2. package/.cursor-plugin/index.json +10 -0
  3. package/.grok-plugin/index.json +10 -0
  4. package/README.md +3 -1
  5. package/catalog/skills.json +44 -0
  6. package/package.json +1 -1
  7. package/packages/software-development/ci-fix-loop/SKILL.md +202 -0
  8. package/packages/software-development/ci-fix-loop/adapters/claude/plugin.json +5 -0
  9. package/packages/software-development/ci-fix-loop/adapters/claude/skills/ci-fix-loop/SKILL.md +203 -0
  10. package/packages/software-development/ci-fix-loop/adapters/codex/README.md +20 -0
  11. package/packages/software-development/ci-fix-loop/adapters/cursor/plugin.json +6 -0
  12. package/packages/software-development/ci-fix-loop/adapters/cursor/skills/ci-fix-loop/SKILL.md +203 -0
  13. package/packages/software-development/ci-fix-loop/adapters/grok/plugin.json +6 -0
  14. package/packages/software-development/ci-fix-loop/adapters/grok/skills/ci-fix-loop/SKILL.md +203 -0
  15. package/packages/software-development/pr-description-writer/SKILL.md +152 -0
  16. package/packages/software-development/pr-description-writer/adapters/claude/plugin.json +5 -0
  17. package/packages/software-development/pr-description-writer/adapters/claude/skills/pr-description-writer/SKILL.md +153 -0
  18. package/packages/software-development/pr-description-writer/adapters/codex/README.md +19 -0
  19. package/packages/software-development/pr-description-writer/adapters/cursor/plugin.json +6 -0
  20. package/packages/software-development/pr-description-writer/adapters/cursor/skills/pr-description-writer/SKILL.md +153 -0
  21. package/packages/software-development/pr-description-writer/adapters/grok/plugin.json +6 -0
  22. package/packages/software-development/pr-description-writer/adapters/grok/skills/pr-description-writer/SKILL.md +153 -0
@@ -0,0 +1,203 @@
1
+ ---
2
+ name: ci-fix-loop
3
+ description: >
4
+ Diagnose GitHub Actions CI failures in a loop: fetch the failing check logs, identify
5
+ the root cause, apply a targeted fix, push, and wait for the next run — repeating until
6
+ all checks are green or a real blocker needs a human. Use when CI is red after a push,
7
+ when the user says "fix CI", "make tests pass", "diagnose CI failures", or "drive this
8
+ to green". Direct analog of qodoloop / coderabbitloop for automated test and lint failures.
9
+ license: MIT
10
+ allowed-tools: Bash, Read, Write, Edit
11
+ compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires git and gh (GitHub CLI) authenticated, with a GitHub Actions workflow configured.
12
+ metadata:
13
+ targets: ["cursor"]
14
+ author: Oleg Koval
15
+ tags:
16
+ - github-actions
17
+ - ci
18
+ - testing
19
+ - automation
20
+ - loop
21
+ - fix
22
+ source: weekly-pattern-learner
23
+ source_reason: "qodoloop and coderabbitloop share the push→poll→diagnose→fix→repeat loop; CI failures have the same shape but no dedicated skill existed"
24
+ source_date: "2026-07-28"
25
+ ---
26
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
27
+
28
+ > 🤖 *Auto-generated by **weekly-pattern-learner** · qodoloop and coderabbitloop share the push→poll→diagnose→fix→repeat loop; CI failures have the same shape but no dedicated skill existed*
29
+
30
+ # CI Fix Loop
31
+
32
+ Drive a GitHub Actions CI run from red to green: fetch failure logs, diagnose, apply
33
+ a targeted fix, push, and repeat until all required checks pass or a blocker is hit.
34
+
35
+ ## Inputs
36
+
37
+ - **PR number** (optional): detect from current branch if not given.
38
+ - **Check names** (optional): limit to specific failing checks instead of all.
39
+ - **Max iterations** (default: 5)
40
+
41
+ ## Workflow
42
+
43
+ ### 1. Identify the PR and current CI state
44
+
45
+ ```bash
46
+ # Detect PR from current branch
47
+ gh pr view --json number,headRefName,headRefOid \
48
+ -q '{number, branch: .headRefName, sha: .headRefOid}'
49
+
50
+ # Current check status
51
+ gh pr checks --json name,state,conclusion 2>/dev/null \
52
+ || gh run list --branch <branch> --limit 5
53
+ ```
54
+
55
+ Classify each check as: `pass`, `fail`, `pending`, or `skipped`.
56
+
57
+ **Exit immediately if all required checks already pass** — nothing to do.
58
+
59
+ ### 2. Loop (max 5 iterations)
60
+
61
+ #### A. Identify failing checks
62
+
63
+ ```bash
64
+ gh pr checks --json name,state,conclusion \
65
+ --jq '.[] | select(.conclusion == "failure" or .state == "FAILURE")'
66
+ ```
67
+
68
+ For each failing check, record: check name, workflow file, job name.
69
+
70
+ Stop if the working set is empty — all required checks are green.
71
+
72
+ #### B. Check for base-branch regression first
73
+
74
+ Before touching any code, verify the failure is not already present on `main`:
75
+
76
+ ```bash
77
+ gh run list --branch <base-branch> --workflow <workflow-name> --limit 3 \
78
+ --json conclusion --jq '.[].conclusion'
79
+ ```
80
+
81
+ If the same check is failing on the base branch, **stop and report** —
82
+ this is not your PR's fault. Do not attempt a fix that masks a base-branch problem.
83
+ Wait for a `Base branch recovered` notice before re-trying.
84
+
85
+ #### C. Fetch failure logs
86
+
87
+ For each failing check:
88
+
89
+ ```bash
90
+ # Latest run ID for this branch/workflow
91
+ gh run list --branch <branch> --workflow <workflow-name> --limit 1 \
92
+ --json databaseId --jq '.[0].databaseId'
93
+
94
+ # Fetch only failing steps (not the full log)
95
+ gh run view <run-id> --log-failed
96
+ ```
97
+
98
+ Cap log reading at ~200 lines per job — the error is almost always in the last
99
+ 50 lines of a failed step.
100
+
101
+ #### D. Diagnose
102
+
103
+ Classify the failure before writing any code:
104
+
105
+ | Category | Examples | Fix target |
106
+ |---|---|---|
107
+ | Test failure | `FAIL TestFoo`, `AssertionError`, `expected X got Y` | Source or test |
108
+ | Lint / format | `gofmt`, `eslint`, `ruff`, `prettier` | Run auto-formatter |
109
+ | Build error | compile error, missing import, type mismatch | Source |
110
+ | Dependency | `npm ERR!`, missing module, lockfile mismatch | Update lockfile |
111
+ | CI config | YAML parse error, bad action ref, missing secret | Workflow YAML |
112
+ | Flaky test | same test passes on manual re-run | Re-run first; mark if it keeps failing |
113
+
114
+ For flaky-looking failures, re-run the check before touching code:
115
+
116
+ ```bash
117
+ gh run rerun <run-id> --failed
118
+ ```
119
+
120
+ Wait for the rerun result. If it passes on rerun, skip this iteration and go to
121
+ step F to poll for the new result.
122
+
123
+ #### E. Apply a targeted fix
124
+
125
+ Fix **only** what the log names as the failure. Do not refactor surrounding code,
126
+ add unrelated tests, or touch files the failing step never mentioned.
127
+
128
+ Common one-liners:
129
+
130
+ ```bash
131
+ # Go format
132
+ gofmt -w .
133
+ goimports -w .
134
+
135
+ # Node format / lint
136
+ npx prettier --write .
137
+ npx eslint --fix .
138
+
139
+ # Python
140
+ ruff check --fix .
141
+ black .
142
+
143
+ # Lockfile
144
+ npm install # Node
145
+ poetry lock --no-update # Python
146
+ go mod tidy # Go
147
+ ```
148
+
149
+ For test failures: read the failing test and the code it exercises. Fix the code
150
+ or the assertion — but not both in one commit unless the test was clearly wrong
151
+ and the fix is trivial.
152
+
153
+ #### F. Commit and push
154
+
155
+ Stage **only the files touched in step E** — never `git add -A`, which can sweep
156
+ in unrelated local changes:
157
+
158
+ ```bash
159
+ git add <files touched>
160
+ git commit -m "fix(ci): <what was broken> (ci-fix-loop iteration N)"
161
+ git push
162
+ ```
163
+
164
+ Confirm the push succeeded before polling. A resolved check whose fix never reached
165
+ the branch is worse than an unresolved one.
166
+
167
+ #### G. Wait for CI on the new SHA
168
+
169
+ Poll every ~15s (timeout ~8min) for all previously-failing checks to complete
170
+ on the new push:
171
+
172
+ ```bash
173
+ gh pr checks --json name,state,conclusion,startedAt
174
+ ```
175
+
176
+ Wait until all previously-failing checks show a new result (`pass` or `fail`)
177
+ on the current SHA. Do not act on a result that still shows the old SHA.
178
+
179
+ Go back to step A.
180
+
181
+ ### 3. Report
182
+
183
+ | Field | Value |
184
+ |---|---|
185
+ | Iterations | N |
186
+ | Checks fixed | names + root cause |
187
+ | Checks blocked | names + reason (flaky / needs human / base-branch red) |
188
+ | Final status | all green / partial / blocked |
189
+
190
+ ```
191
+ CI fix loop complete.
192
+ Iterations: 2
193
+ Fixed: lint (gofmt: 3 files), test (TestUserCreate — nil pointer in fixture)
194
+ Blocked: none
195
+ Status: all required checks green
196
+ ```
197
+
198
+ ## Chaining
199
+
200
+ | Before this skill | After this skill |
201
+ |---|---|
202
+ | `olko:pr-description-writer` | `olko:qodoloop` |
203
+ | Any `git push` with failing CI | `olko:coderabbitloop` |
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "olko:ci-fix-loop",
3
+ "version": "0.1.0",
4
+ "description": "Diagnose GitHub Actions CI failures in a loop: fetch failing check logs, fix, push, and repeat until green. Direct analog of qodoloop / coderabbitloop for test and lint failures.",
5
+ "skills": "skills/"
6
+ }
@@ -0,0 +1,203 @@
1
+ ---
2
+ name: ci-fix-loop
3
+ description: >
4
+ Diagnose GitHub Actions CI failures in a loop: fetch the failing check logs, identify
5
+ the root cause, apply a targeted fix, push, and wait for the next run — repeating until
6
+ all checks are green or a real blocker needs a human. Use when CI is red after a push,
7
+ when the user says "fix CI", "make tests pass", "diagnose CI failures", or "drive this
8
+ to green". Direct analog of qodoloop / coderabbitloop for automated test and lint failures.
9
+ license: MIT
10
+ allowed-tools: Bash, Read, Write, Edit
11
+ compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires git and gh (GitHub CLI) authenticated, with a GitHub Actions workflow configured.
12
+ metadata:
13
+ targets: [_source-only]
14
+ author: Oleg Koval
15
+ tags:
16
+ - github-actions
17
+ - ci
18
+ - testing
19
+ - automation
20
+ - loop
21
+ - fix
22
+ source: weekly-pattern-learner
23
+ source_reason: "qodoloop and coderabbitloop share the push→poll→diagnose→fix→repeat loop; CI failures have the same shape but no dedicated skill existed"
24
+ source_date: "2026-07-28"
25
+ ---
26
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
27
+
28
+ > 🤖 *Auto-generated by **weekly-pattern-learner** · qodoloop and coderabbitloop share the push→poll→diagnose→fix→repeat loop; CI failures have the same shape but no dedicated skill existed*
29
+
30
+ # CI Fix Loop
31
+
32
+ Drive a GitHub Actions CI run from red to green: fetch failure logs, diagnose, apply
33
+ a targeted fix, push, and repeat until all required checks pass or a blocker is hit.
34
+
35
+ ## Inputs
36
+
37
+ - **PR number** (optional): detect from current branch if not given.
38
+ - **Check names** (optional): limit to specific failing checks instead of all.
39
+ - **Max iterations** (default: 5)
40
+
41
+ ## Workflow
42
+
43
+ ### 1. Identify the PR and current CI state
44
+
45
+ ```bash
46
+ # Detect PR from current branch
47
+ gh pr view --json number,headRefName,headRefOid \
48
+ -q '{number, branch: .headRefName, sha: .headRefOid}'
49
+
50
+ # Current check status
51
+ gh pr checks --json name,state,conclusion 2>/dev/null \
52
+ || gh run list --branch <branch> --limit 5
53
+ ```
54
+
55
+ Classify each check as: `pass`, `fail`, `pending`, or `skipped`.
56
+
57
+ **Exit immediately if all required checks already pass** — nothing to do.
58
+
59
+ ### 2. Loop (max 5 iterations)
60
+
61
+ #### A. Identify failing checks
62
+
63
+ ```bash
64
+ gh pr checks --json name,state,conclusion \
65
+ --jq '.[] | select(.conclusion == "failure" or .state == "FAILURE")'
66
+ ```
67
+
68
+ For each failing check, record: check name, workflow file, job name.
69
+
70
+ Stop if the working set is empty — all required checks are green.
71
+
72
+ #### B. Check for base-branch regression first
73
+
74
+ Before touching any code, verify the failure is not already present on `main`:
75
+
76
+ ```bash
77
+ gh run list --branch <base-branch> --workflow <workflow-name> --limit 3 \
78
+ --json conclusion --jq '.[].conclusion'
79
+ ```
80
+
81
+ If the same check is failing on the base branch, **stop and report** —
82
+ this is not your PR's fault. Do not attempt a fix that masks a base-branch problem.
83
+ Wait for a `Base branch recovered` notice before re-trying.
84
+
85
+ #### C. Fetch failure logs
86
+
87
+ For each failing check:
88
+
89
+ ```bash
90
+ # Latest run ID for this branch/workflow
91
+ gh run list --branch <branch> --workflow <workflow-name> --limit 1 \
92
+ --json databaseId --jq '.[0].databaseId'
93
+
94
+ # Fetch only failing steps (not the full log)
95
+ gh run view <run-id> --log-failed
96
+ ```
97
+
98
+ Cap log reading at ~200 lines per job — the error is almost always in the last
99
+ 50 lines of a failed step.
100
+
101
+ #### D. Diagnose
102
+
103
+ Classify the failure before writing any code:
104
+
105
+ | Category | Examples | Fix target |
106
+ |---|---|---|
107
+ | Test failure | `FAIL TestFoo`, `AssertionError`, `expected X got Y` | Source or test |
108
+ | Lint / format | `gofmt`, `eslint`, `ruff`, `prettier` | Run auto-formatter |
109
+ | Build error | compile error, missing import, type mismatch | Source |
110
+ | Dependency | `npm ERR!`, missing module, lockfile mismatch | Update lockfile |
111
+ | CI config | YAML parse error, bad action ref, missing secret | Workflow YAML |
112
+ | Flaky test | same test passes on manual re-run | Re-run first; mark if it keeps failing |
113
+
114
+ For flaky-looking failures, re-run the check before touching code:
115
+
116
+ ```bash
117
+ gh run rerun <run-id> --failed
118
+ ```
119
+
120
+ Wait for the rerun result. If it passes on rerun, skip this iteration and go to
121
+ step F to poll for the new result.
122
+
123
+ #### E. Apply a targeted fix
124
+
125
+ Fix **only** what the log names as the failure. Do not refactor surrounding code,
126
+ add unrelated tests, or touch files the failing step never mentioned.
127
+
128
+ Common one-liners:
129
+
130
+ ```bash
131
+ # Go format
132
+ gofmt -w .
133
+ goimports -w .
134
+
135
+ # Node format / lint
136
+ npx prettier --write .
137
+ npx eslint --fix .
138
+
139
+ # Python
140
+ ruff check --fix .
141
+ black .
142
+
143
+ # Lockfile
144
+ npm install # Node
145
+ poetry lock --no-update # Python
146
+ go mod tidy # Go
147
+ ```
148
+
149
+ For test failures: read the failing test and the code it exercises. Fix the code
150
+ or the assertion — but not both in one commit unless the test was clearly wrong
151
+ and the fix is trivial.
152
+
153
+ #### F. Commit and push
154
+
155
+ Stage **only the files touched in step E** — never `git add -A`, which can sweep
156
+ in unrelated local changes:
157
+
158
+ ```bash
159
+ git add <files touched>
160
+ git commit -m "fix(ci): <what was broken> (ci-fix-loop iteration N)"
161
+ git push
162
+ ```
163
+
164
+ Confirm the push succeeded before polling. A resolved check whose fix never reached
165
+ the branch is worse than an unresolved one.
166
+
167
+ #### G. Wait for CI on the new SHA
168
+
169
+ Poll every ~15s (timeout ~8min) for all previously-failing checks to complete
170
+ on the new push:
171
+
172
+ ```bash
173
+ gh pr checks --json name,state,conclusion,startedAt
174
+ ```
175
+
176
+ Wait until all previously-failing checks show a new result (`pass` or `fail`)
177
+ on the current SHA. Do not act on a result that still shows the old SHA.
178
+
179
+ Go back to step A.
180
+
181
+ ### 3. Report
182
+
183
+ | Field | Value |
184
+ |---|---|
185
+ | Iterations | N |
186
+ | Checks fixed | names + root cause |
187
+ | Checks blocked | names + reason (flaky / needs human / base-branch red) |
188
+ | Final status | all green / partial / blocked |
189
+
190
+ ```
191
+ CI fix loop complete.
192
+ Iterations: 2
193
+ Fixed: lint (gofmt: 3 files), test (TestUserCreate — nil pointer in fixture)
194
+ Blocked: none
195
+ Status: all required checks green
196
+ ```
197
+
198
+ ## Chaining
199
+
200
+ | Before this skill | After this skill |
201
+ |---|---|
202
+ | `olko:pr-description-writer` | `olko:qodoloop` |
203
+ | Any `git push` with failing CI | `olko:coderabbitloop` |
@@ -0,0 +1,152 @@
1
+ ---
2
+ name: pr-description-writer
3
+ description: >
4
+ Draft and post a GitHub PR title and body from git diff and commit history. Use when
5
+ opening a new PR, when the user asks to "write a PR description", "draft a PR", "open
6
+ a PR for this branch", or after running the git-commit skill and pushing the branch.
7
+ Chains naturally after git-commit and before qodoloop / coderabbitloop.
8
+ license: MIT
9
+ allowed-tools: Bash, Read, Write
10
+ compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires git and gh (GitHub CLI) authenticated.
11
+ metadata:
12
+ targets: [_source-only]
13
+ author: Oleg Koval
14
+ tags:
15
+ - git
16
+ - github
17
+ - pull-request
18
+ - description
19
+ - pr
20
+ - workflow
21
+ source: weekly-pattern-learner
22
+ source_reason: "qodoloop and coderabbitloop both open with gh pr view — the PR creation/description step was never codified as its own skill"
23
+ source_date: "2026-07-28"
24
+ ---
25
+
26
+ > 🤖 *Auto-generated by **weekly-pattern-learner** · qodoloop and coderabbitloop both open with `gh pr view` — the PR creation/description step was never codified as its own skill*
27
+
28
+ # PR Description Writer
29
+
30
+ Draft a GitHub-ready PR title and body from the branch's commit history and diff, then
31
+ create or update the PR so reviewers and AI tools have full context.
32
+
33
+ ## Inputs
34
+
35
+ - **Base branch** (optional, default: `main` or `master` — detect from `gh repo view`)
36
+ - **Draft mode** (optional, default: off)
37
+ - **Template** (optional): if `.github/pull_request_template.md` exists, use its section headings
38
+
39
+ ## Workflow
40
+
41
+ ### 1. Gather branch context
42
+
43
+ ```bash
44
+ # Current branch
45
+ git rev-parse --abbrev-ref HEAD
46
+
47
+ # Base branch
48
+ gh repo view --json defaultBranchRef -q '.defaultBranchRef.name'
49
+
50
+ # Commits since base
51
+ git log <base>..<head> --oneline --no-merges
52
+
53
+ # Diff summary (full diff for small PRs, stat-only for large)
54
+ git diff <base>..<head> --stat
55
+ git diff <base>..<head> # only if total changes < ~500 lines
56
+ ```
57
+
58
+ If the diff is large (>500 changed lines), read file-by-file rather than all at once.
59
+
60
+ ### 2. Check for existing PR
61
+
62
+ ```bash
63
+ gh pr view --json number,title,body,state 2>/dev/null
64
+ ```
65
+
66
+ - If a PR exists in `OPEN` state: update it with `gh pr edit`.
67
+ - If no PR exists: create one with `gh pr create`.
68
+
69
+ ### 3. Check for a PR template
70
+
71
+ ```bash
72
+ cat .github/pull_request_template.md 2>/dev/null \
73
+ || cat .github/PULL_REQUEST_TEMPLATE.md 2>/dev/null \
74
+ || cat PULL_REQUEST_TEMPLATE.md 2>/dev/null
75
+ ```
76
+
77
+ If a template exists, mirror its section headings and populate them. Skip sections
78
+ that ask for credentials, tokens, internal hostnames, or content unrelated to the diff.
79
+
80
+ ### 4. Draft title and body
81
+
82
+ **Title rules:**
83
+ - Use Conventional Commits prefix when the branch/commits use it: `feat(scope):`, `fix:`, etc.
84
+ - ≤ 70 characters
85
+ - Imperative mood ("Add X", "Fix Y", not "Added X")
86
+ - Include ticket number if present in branch name (e.g. `LIN-123`, `GH-456`)
87
+
88
+ **Body sections (use the template if one was found, otherwise use this structure):**
89
+
90
+ ```markdown
91
+ ## Summary
92
+ - <bullet: what changed>
93
+ - <bullet: why>
94
+
95
+ ## Changes
96
+ - `<file or subsystem>`: <what changed and why>
97
+
98
+ ## Test plan
99
+ - [ ] <what to run and what result to expect>
100
+ - [ ] <manual steps if automated tests don't cover it>
101
+
102
+ ## Notes
103
+ <optional: anything a reviewer should watch for, known gaps, follow-up issues>
104
+ ```
105
+
106
+ Rules:
107
+ - Describe *intent*, not what the diff already shows line-by-line.
108
+ - If commits already have good conventional messages, use them as the skeleton.
109
+ - Skip any section that has nothing meaningful to say.
110
+ - Reference specific files, functions, or lines only when they aid navigation.
111
+
112
+ ### 5. Create or update the PR
113
+
114
+ Always pass the body via a heredoc or temp file — never interpolate it into the command
115
+ string (quotes and newlines will break the shell):
116
+
117
+ ```bash
118
+ # Create new PR
119
+ gh pr create \
120
+ --title "<title>" \
121
+ --body "$(cat <<'PRBODY'
122
+ <body>
123
+ PRBODY
124
+ )" \
125
+ --base <base> \
126
+ [--draft]
127
+
128
+ # Update existing PR
129
+ gh pr edit <number> \
130
+ --title "<title>" \
131
+ --body "$(cat <<'PRBODY'
132
+ <body>
133
+ PRBODY
134
+ )"
135
+ ```
136
+
137
+ ### 6. Confirm and report
138
+
139
+ ```bash
140
+ gh pr view --json number,title,url -q '"PR #\(.number): \(.title)\n\(.url)"'
141
+ ```
142
+
143
+ Print the PR number, title, and URL. If the PR was newly created, note whether
144
+ CI triggered automatically.
145
+
146
+ ## Chaining
147
+
148
+ | Before this skill | After this skill |
149
+ |---|---|
150
+ | `olko:git-commit` + `git push` | `olko:qodoloop` |
151
+ | `git push -u origin <branch>` | `olko:coderabbitloop` |
152
+ | — | `olko:open-source-publisher` (for new repos) |
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "olko-pr-description-writer",
3
+ "description": "Draft and post a GitHub PR title and body from git diff and commit history. Chains after git-commit and before qodoloop / coderabbitloop.",
4
+ "skills": "./skills"
5
+ }