@olegkoval/agent-skills 1.52.0 → 1.54.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/.github/copilot-instructions.md +1 -0
- package/.github/prompts/codexloop.prompt.md +31 -7
- package/.github/prompts/nas-actions-migration.prompt.md +74 -0
- package/.github/prompts/pr-description-writer.prompt.md +25 -2
- package/.kiro/steering/codexloop.md +31 -7
- package/.windsurf/rules/codexloop.md +31 -7
- package/README.md +1 -0
- package/adapters/claude/olko-github-pr/skills/codexloop/SKILL.md +31 -7
- package/adapters/claude/olko-github-pr/skills/lekker-review/SKILL.md +97 -29
- package/adapters/claude/olko-github-pr/skills/lekker-review/references/agents/deps.md +54 -0
- package/adapters/claude/olko-github-pr/skills/lekker-review/references/artifact-page.md +39 -14
- package/adapters/claude/olko-github-pr/skills/lekker-review/references/codex-workflow.md +1 -0
- package/adapters/claude/olko-github-pr/skills/lekker-review/references/github-post.md +3 -1
- package/adapters/claude/olko-github-pr/skills/lekker-review/references/output-format.md +11 -10
- package/adapters/claude/olko-github-pr/skills/lekker-review/references/pricing.json +12 -11
- package/adapters/claude/olko-github-pr/skills/lekker-review/scripts/deps-only.mjs +95 -0
- package/adapters/claude/olko-github-pr/skills/lekker-review/scripts/selftest.mjs +70 -6
- package/adapters/claude/olko-github-pr/skills/lekker-review/scripts/setup-worktree.sh +136 -16
- package/adapters/claude/olko-github-pr/skills/lekker-review/scripts/validate-lines.mjs +122 -0
- package/adapters/claude/olko-github-pr/skills/nas-actions-migration/SKILL.md +85 -0
- package/adapters/claude/olko-github-pr/skills/pr-description-writer/SKILL.md +26 -3
- package/adapters/codex/olko-github-pr/README.md +1 -0
- package/adapters/cursor/olko-github-pr/skills/codexloop/SKILL.md +31 -7
- package/adapters/cursor/olko-github-pr/skills/nas-actions-migration/SKILL.md +85 -0
- package/adapters/cursor/olko-github-pr/skills/pr-description-writer/SKILL.md +26 -3
- package/adapters/grok/olko-github-pr/skills/codexloop/SKILL.md +31 -7
- package/adapters/grok/olko-github-pr/skills/nas-actions-migration/SKILL.md +85 -0
- package/adapters/grok/olko-github-pr/skills/pr-description-writer/SKILL.md +26 -3
- package/catalog/skills.json +21 -0
- package/package.json +1 -1
- package/plugins/olko-apple-kit/.claude-plugin/plugin.json +1 -1
- package/plugins/olko-creative/.claude-plugin/plugin.json +1 -1
- package/plugins/olko-garmin-kit/.claude-plugin/plugin.json +1 -1
- package/plugins/olko-git-tools/.claude-plugin/plugin.json +1 -1
- package/plugins/olko-github-pr/.claude-plugin/plugin.json +1 -1
- package/plugins/olko-github-pr/skills/codexloop/SKILL.md +31 -7
- package/plugins/olko-github-pr/skills/lekker-review/SKILL.md +97 -29
- package/plugins/olko-github-pr/skills/lekker-review/references/agents/deps.md +54 -0
- package/plugins/olko-github-pr/skills/lekker-review/references/artifact-page.md +39 -14
- package/plugins/olko-github-pr/skills/lekker-review/references/codex-workflow.md +1 -0
- package/plugins/olko-github-pr/skills/lekker-review/references/github-post.md +3 -1
- package/plugins/olko-github-pr/skills/lekker-review/references/output-format.md +11 -10
- package/plugins/olko-github-pr/skills/lekker-review/references/pricing.json +12 -11
- package/plugins/olko-github-pr/skills/lekker-review/scripts/deps-only.mjs +95 -0
- package/plugins/olko-github-pr/skills/lekker-review/scripts/selftest.mjs +70 -6
- package/plugins/olko-github-pr/skills/lekker-review/scripts/setup-worktree.sh +136 -16
- package/plugins/olko-github-pr/skills/lekker-review/scripts/validate-lines.mjs +122 -0
- package/plugins/olko-github-pr/skills/lekker-review/workflow.js +43 -23
- package/plugins/olko-github-pr/skills/nas-actions-migration/SKILL.md +84 -0
- package/plugins/olko-github-pr/skills/pr-description-writer/SKILL.md +26 -3
- package/plugins/olko-obsidian/.claude-plugin/plugin.json +1 -1
- package/plugins/olko-product/.claude-plugin/plugin.json +1 -1
- package/plugins/olko-reflection/.claude-plugin/plugin.json +1 -1
- package/plugins/olko-release/.claude-plugin/plugin.json +1 -1
- package/plugins/olko-skill-meta/.claude-plugin/plugin.json +1 -1
- package/plugins/olko-web-ops/.claude-plugin/plugin.json +1 -1
- package/scripts/lib/catalog.mjs +1 -1
|
@@ -21,6 +21,7 @@ Available reusable prompt files:
|
|
|
21
21
|
- copilotloop: .github/prompts/copilotloop.prompt.md
|
|
22
22
|
- geminiloop: .github/prompts/geminiloop.prompt.md
|
|
23
23
|
- ci-fix-loop: .github/prompts/ci-fix-loop.prompt.md
|
|
24
|
+
- nas-actions-migration: .github/prompts/nas-actions-migration.prompt.md
|
|
24
25
|
- dependabot-triage: .github/prompts/dependabot-triage.prompt.md
|
|
25
26
|
- git-commit: .github/prompts/git-commit.prompt.md
|
|
26
27
|
- gh-cli: .github/prompts/gh-cli.prompt.md
|
|
@@ -21,6 +21,9 @@ suggestion applied is worse than the comment itself.
|
|
|
21
21
|
- **Trigger phrase is `@codex review`.** Codex reviews automatically when a PR opens or gets new
|
|
22
22
|
commits if auto-review is enabled on the repo; the mention forces a fresh pass. Other useful
|
|
23
23
|
mentions: `@codex review focus on <area>` for a scoped re-review.
|
|
24
|
+
- **Review requests consume usage.** Account preferences do not override a repository's explicit
|
|
25
|
+
automatic-review setting. Before asking for a new review, check the current head and whether a
|
|
26
|
+
review is already running. Never request a second review merely because the first is slow.
|
|
24
27
|
- **Priority, not confidence.** Codex findings usually lead with a severity/priority word (`P1`,
|
|
25
28
|
`P2`, `P3` or `critical`/`major`/`minor`) or a short titled heading. Weight the top tier
|
|
26
29
|
seriously; treat the bottom tier as usually-skippable nits unless clearly correct.
|
|
@@ -49,10 +52,11 @@ Pick the login matching `*codex*` (commonly `chatgpt-codex-connector[bot]`, some
|
|
|
49
52
|
|
|
50
53
|
**Finding nothing here is NOT a stop condition.** On a PR Codex has never reviewed there is no bot
|
|
51
54
|
login to find yet: that is the normal starting state, not a missing app. When the probe comes back
|
|
52
|
-
empty, fall through to step A
|
|
53
|
-
until then match any login containing `codex` when polling.
|
|
54
|
-
|
|
55
|
-
|
|
55
|
+
empty, fall through to step A's pending-state check, and re-run this probe once a review lands;
|
|
56
|
+
until then match any login containing `codex` when polling. If step A's bounded wait expires
|
|
57
|
+
without a review or a codex-like login, report a timeout and say app availability is unconfirmed.
|
|
58
|
+
Do not infer that the app is absent from a missing response; confirm availability separately in
|
|
59
|
+
repository settings before calling it absent.
|
|
56
60
|
|
|
57
61
|
## Review state comes from the PR, not from memory
|
|
58
62
|
|
|
@@ -83,6 +87,20 @@ gh pr view --json number,headRefName,headRefOid -q '{number,branch:.headRefName,
|
|
|
83
87
|
|
|
84
88
|
Switch to the PR branch if not already on it. Capture `OWNER`/`REPO` (`gh repo view --json owner,name`).
|
|
85
89
|
|
|
90
|
+
Before triggering a review, inspect `gh pr view <PR> --json additions,deletions,changedFiles`
|
|
91
|
+
and `gh pr diff <PR> --name-only`. State the one
|
|
92
|
+
purpose of the PR and identify unrelated changes, generated churn, or a broad formatting pass.
|
|
93
|
+
For an in-progress PR, batch the remaining intended edits and checks before requesting review;
|
|
94
|
+
do not request a fresh Codex pass after each fixup push. Keep one coherent change together rather
|
|
95
|
+
than splitting it into many tiny PRs solely to reduce a single review's size. Do not rewrite a
|
|
96
|
+
branch or remove files just to shrink the diff without the user's authorization.
|
|
97
|
+
|
|
98
|
+
Read only the root `AGENTS.md` and the nested `AGENTS.md` files applicable to changed paths.
|
|
99
|
+
If a root file repeats service-specific rules, suggest moving those rules to the relevant nested
|
|
100
|
+
file as a separate, reviewable edit. Preserve the rules' meaning; do not silently delete policy.
|
|
101
|
+
OpenAI's GitHub review uses applicable root and nested files, so a shorter root reduces context
|
|
102
|
+
carried by unrelated changes.
|
|
103
|
+
|
|
86
104
|
## 2. The loop (max 5 iterations)
|
|
87
105
|
|
|
88
106
|
At the end of every invocation, post exactly one top-level PR conversation comment summarizing
|
|
@@ -108,11 +126,17 @@ head, so threads left open on purpose cannot make the push look reviewed.
|
|
|
108
126
|
|
|
109
127
|
- Exit `10` (`findings`): go to B. On iteration 1 this is whatever Codex (or another bot)
|
|
110
128
|
already posted.
|
|
111
|
-
- Exit `20` (`pending`):
|
|
129
|
+
- Exit `20` (`pending`): if automatic-review status is unknown, wait up to 600 seconds first so a
|
|
130
|
+
review already in progress can land. If it is still pending, inspect the repository setting;
|
|
131
|
+
do not assume the personal preference applies. If automatic review is on, stop and report the
|
|
132
|
+
pending review rather than posting a duplicate request. If automatic review is off and no
|
|
133
|
+
request was posted for this head, post one `@codex review`
|
|
134
|
+
(`gh pr comment <PR> --body "@codex review"`) and record that request for this head. Then wait
|
|
135
|
+
with the same command plus `--wait 600`. Run the
|
|
112
136
|
wait in the background where the host allows it (Claude Code: Bash `run_in_background`; you are
|
|
113
137
|
re-invoked when it exits) so ten minutes of polling never sits in the conversation. Still `20`
|
|
114
|
-
after the wait:
|
|
115
|
-
|
|
138
|
+
after the wait: stop and report the timeout and the request already posted. A repeat mention
|
|
139
|
+
can start another billable review; do not retry it automatically or claim success.
|
|
116
140
|
- Exit `0` (`clean`): go to the exit check. A `--wait` call returns `clean` only after a settle
|
|
117
141
|
re-read 60 seconds later, so a comment landing right behind the review is still caught. A bare
|
|
118
142
|
read (no `--wait`) that says `clean` is good enough only when you have not pushed since Codex's
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
<!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
description: "Safely migrates trusted GitHub Actions jobs to a repository-scoped NAS runner, with fork guards, credential boundaries, rollback, and verified activation."
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Use the olko:nas-actions-migration skill.
|
|
8
|
+
|
|
9
|
+
# NAS Actions Migration
|
|
10
|
+
|
|
11
|
+
Migrate eligible GitHub Actions jobs from hosted runners to a dedicated, repository-scoped NAS runner, following the proven Roazon and Funda Radar pattern. This workflow prepares repository changes and documents runner provisioning; it does not claim migration complete until jobs actually execute on the named NAS runner. Never put deployment credentials on a persistent self-hosted runner unless the user explicitly approves that trust boundary.
|
|
12
|
+
|
|
13
|
+
## When to Use
|
|
14
|
+
|
|
15
|
+
Use when asked to move Actions/CI jobs to a NAS, copy the Roazon/Funda Radar runner setup, or establish a repeatable NAS migration for another repository.
|
|
16
|
+
|
|
17
|
+
## Prerequisites
|
|
18
|
+
|
|
19
|
+
- Authenticated `gh` with access to the target repo and its Actions settings.
|
|
20
|
+
- SSH/admin access to the NAS and an approved secret manager for durable runner credentials.
|
|
21
|
+
- Read repository instructions and the target workflows before changing them.
|
|
22
|
+
- Inspect existing comparable repos; treat runner names, labels, commands, and service-specific workflow behavior as examples, not copy-ready values.
|
|
23
|
+
|
|
24
|
+
## Procedure
|
|
25
|
+
|
|
26
|
+
1. **Inventory the target.** Record every workflow, job, `runs-on`, trigger, fork behavior, required secrets, runtime/dependency setup, timeouts, deploy side effects, and current status. Determine the repository default branch and ensure the checkout is clean. Check existing repository runners and variables:
|
|
27
|
+
|
|
28
|
+
```sh
|
|
29
|
+
gh api repos/OWNER/REPO/actions/runners --jq '.runners[] | {name,status,labels:[.labels[].name]}'
|
|
30
|
+
gh variable list --repo OWNER/REPO
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
2. **Inspect a known-good migration.** Compare the requested repository with the live `roazon` and `funda-radar` workflows and runner docs. Use a unique runner label for the target repo: repository-scoped runners cannot be shared across repositories. Never assume a label, runner container, or variable is already present.
|
|
34
|
+
|
|
35
|
+
3. **Classify jobs.** Move builds/tests/lint and other trusted, non-secret CI work first. Keep deploy jobs on hosted runners by default so deploy credentials never reach the NAS. Move additional jobs only after assessing credential exposure, untrusted code paths, network/data access, persistence, and resource requirements. Preserve existing required checks and non-blocking semantics.
|
|
36
|
+
|
|
37
|
+
4. **Route through an explicit opt-in variable.** Use a repository variable such as `CI_RUNNER=nas`, with a hosted-runner fallback until activation:
|
|
38
|
+
|
|
39
|
+
```yaml
|
|
40
|
+
runs-on: ${{ vars.CI_RUNNER == 'nas' && fromJSON('["self-hosted","linux","REPO-nas"]') || 'ubuntu-latest' }}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
For every job that can execute repository-controlled code on the NAS, add a fork guard:
|
|
44
|
+
|
|
45
|
+
```yaml
|
|
46
|
+
if: >-
|
|
47
|
+
github.event_name != 'pull_request'
|
|
48
|
+
|| github.event.pull_request.head.repo.full_name == github.repository
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Guard each job independently. Never rely on a downstream job's guard to protect an unguarded dependency. Add exact toolchain setup because runner images may not contain Node, Bun, browsers, Docker, or compatible system libraries.
|
|
52
|
+
|
|
53
|
+
5. **Document provisioning and rollback.** Provide the target repo's exact runner name, label, container/image, dedicated work directory, ephemeral/restart settings, required tool installation, safe secret storage, and health check. For persistent runners, use a narrowly scoped fine-grained PAT with repository Administration read/write in the NAS secret store; pass it as `ACCESS_TOKEN` only via a root-readable env file. Do not print, commit, message, or substitute a short-lived registration token for a restart-persistent credential. Never reuse another repo's `/_work` or token.
|
|
54
|
+
|
|
55
|
+
Document rollback as deleting the opt-in variable, which routes eligible jobs back to `ubuntu-latest`. State that this fallback still depends on GitHub Actions billing being available.
|
|
56
|
+
|
|
57
|
+
6. **Provision before activation.** Confirm the target repository runner is online and has `self-hosted`, `Linux`, and the exact repo label. If there is no approved NAS access/token, stop before registration and leave the variable unset. Never create a fake runner or assume an online runner in another repo is usable.
|
|
58
|
+
|
|
59
|
+
7. **Activate and exercise the real path.** Set the repository variable only after runner readiness. Dispatch each affected workflow on a trusted branch, then inspect run/job details and confirm every moved job reports the intended `runner_name`, expected runner labels, and passes. A green result on `ubuntu-latest`, a skipped job, or a successful deployment-provider status does not verify NAS execution.
|
|
60
|
+
|
|
61
|
+
8. **Recheck safety and report.** Review the final diff, validate workflow syntax, run any local lint/tests available, and inspect for unsafe fork access, missing setup, accidental secret exposure, and unintended deploy changes. Report changed workflows, moved and intentionally unmoved jobs, runner readiness, verification run URLs and runner names, rollback command, and blockers. Do not say “migrated” while registration or NAS execution remains unverified.
|
|
62
|
+
|
|
63
|
+
## Pitfalls
|
|
64
|
+
|
|
65
|
+
- GitHub repository runners are scoped to their repository unless deliberately configured as organization runners; the Roazon and Funda runners do not automatically serve a third repo.
|
|
66
|
+
- `CI_RUNNER=nas` is opt-in routing, not runner provisioning. Setting it before registration leaves jobs queued or failed.
|
|
67
|
+
- Self-hosted runners execute untrusted code with the runner host's access. Fork guards are mandatory, and persistent workspaces must be isolated.
|
|
68
|
+
- The current runner container may lack a runtime or compatible glibc. Test project-specific integration jobs on the exact image before declaring success.
|
|
69
|
+
- A billing-blocked hosted fallback cannot rescue a failed/offline NAS runner.
|
|
70
|
+
- Do not migrate deploy credentials or mutate production service settings as incidental cleanup.
|
|
71
|
+
|
|
72
|
+
## Verification
|
|
73
|
+
|
|
74
|
+
Migration is complete only when (a) the target runner is online with the expected repo-specific label, (b) every intended job's run metadata names that runner, (c) the required jobs pass on a trusted ref, (d) fork-origin jobs are skipped before reaching NAS, and (e) rollback to hosted routing is documented and can be applied. Otherwise report **prepared, not activated/verified** with the exact missing prerequisite.
|
|
@@ -34,11 +34,22 @@ gh repo view --json defaultBranchRef -q '.defaultBranchRef.name'
|
|
|
34
34
|
git log <base>..<head> --oneline --no-merges
|
|
35
35
|
|
|
36
36
|
# Diff summary (full diff for small PRs, stat-only for large)
|
|
37
|
-
git diff <base
|
|
38
|
-
git diff <base
|
|
37
|
+
git diff <base>...<head> --stat
|
|
38
|
+
git diff <base>...<head> --name-status
|
|
39
|
+
git diff <base>...<head> --numstat
|
|
40
|
+
git diff <base>...<head> # only if total changes < ~500 lines
|
|
39
41
|
```
|
|
40
42
|
|
|
41
43
|
If the diff is large (>500 changed lines), read file-by-file rather than all at once.
|
|
44
|
+
Before creating or updating the PR, name its single purpose and check whether every changed path
|
|
45
|
+
serves it. Call out unrelated formatting, generated files, or a second feature. Suggest a separate
|
|
46
|
+
PR only for genuinely independent work; splitting one coherent change into many tiny PRs creates
|
|
47
|
+
more review runs. Do not rewrite commits or remove files without authorization.
|
|
48
|
+
|
|
49
|
+
Check the applicable `AGENTS.md` files: the repository root and nested files covering changed
|
|
50
|
+
paths. If the root carries lengthy service-specific review rules, suggest a separate edit that
|
|
51
|
+
moves them into that service's `AGENTS.md`. Keep repository-wide instructions at the root and
|
|
52
|
+
preserve their meaning. Do not automatically delete or shorten existing policy to save tokens.
|
|
42
53
|
|
|
43
54
|
### 2. Check for existing PR
|
|
44
55
|
|
|
@@ -86,6 +97,18 @@ that ask for credentials, tokens, internal hostnames, or content unrelated to th
|
|
|
86
97
|
<optional: anything a reviewer should watch for, known gaps, follow-up issues>
|
|
87
98
|
```
|
|
88
99
|
|
|
100
|
+
For a PR likely to receive Codex review, use Notes to state its review scope. Create it as a draft
|
|
101
|
+
while edits are still arriving when the user's workflow allows. When the branch is ready, use
|
|
102
|
+
`codexloop`'s review-state check before requesting review: if the repository's automatic review
|
|
103
|
+
is on, wait for it; if status is unknown, verify the repository setting; if it is off, request
|
|
104
|
+
one review only when Codex has not reviewed the current head and no request is already pending.
|
|
105
|
+
The state script does not see human-authored review requests: inspect the PR conversation with
|
|
106
|
+
`gh api repos/{owner}/{repo}/issues/<PR>/comments --paginate` and check for an existing
|
|
107
|
+
`@codex review` posted after the current head was pushed. If one exists, wait for it; do not post
|
|
108
|
+
another.
|
|
109
|
+
Do not add a review mention on PR creation or after every push. A repository setting can override
|
|
110
|
+
the personal preference.
|
|
111
|
+
|
|
89
112
|
Rules:
|
|
90
113
|
- Describe *intent*, not what the diff already shows line-by-line.
|
|
91
114
|
- If commits already have good conventional messages, use them as the skeleton.
|
|
@@ -20,6 +20,9 @@ suggestion applied is worse than the comment itself.
|
|
|
20
20
|
- **Trigger phrase is `@codex review`.** Codex reviews automatically when a PR opens or gets new
|
|
21
21
|
commits if auto-review is enabled on the repo; the mention forces a fresh pass. Other useful
|
|
22
22
|
mentions: `@codex review focus on <area>` for a scoped re-review.
|
|
23
|
+
- **Review requests consume usage.** Account preferences do not override a repository's explicit
|
|
24
|
+
automatic-review setting. Before asking for a new review, check the current head and whether a
|
|
25
|
+
review is already running. Never request a second review merely because the first is slow.
|
|
23
26
|
- **Priority, not confidence.** Codex findings usually lead with a severity/priority word (`P1`,
|
|
24
27
|
`P2`, `P3` or `critical`/`major`/`minor`) or a short titled heading. Weight the top tier
|
|
25
28
|
seriously; treat the bottom tier as usually-skippable nits unless clearly correct.
|
|
@@ -48,10 +51,11 @@ Pick the login matching `*codex*` (commonly `chatgpt-codex-connector[bot]`, some
|
|
|
48
51
|
|
|
49
52
|
**Finding nothing here is NOT a stop condition.** On a PR Codex has never reviewed there is no bot
|
|
50
53
|
login to find yet: that is the normal starting state, not a missing app. When the probe comes back
|
|
51
|
-
empty, fall through to step A
|
|
52
|
-
until then match any login containing `codex` when polling.
|
|
53
|
-
|
|
54
|
-
|
|
54
|
+
empty, fall through to step A's pending-state check, and re-run this probe once a review lands;
|
|
55
|
+
until then match any login containing `codex` when polling. If step A's bounded wait expires
|
|
56
|
+
without a review or a codex-like login, report a timeout and say app availability is unconfirmed.
|
|
57
|
+
Do not infer that the app is absent from a missing response; confirm availability separately in
|
|
58
|
+
repository settings before calling it absent.
|
|
55
59
|
|
|
56
60
|
## Review state comes from the PR, not from memory
|
|
57
61
|
|
|
@@ -82,6 +86,20 @@ gh pr view --json number,headRefName,headRefOid -q '{number,branch:.headRefName,
|
|
|
82
86
|
|
|
83
87
|
Switch to the PR branch if not already on it. Capture `OWNER`/`REPO` (`gh repo view --json owner,name`).
|
|
84
88
|
|
|
89
|
+
Before triggering a review, inspect `gh pr view <PR> --json additions,deletions,changedFiles`
|
|
90
|
+
and `gh pr diff <PR> --name-only`. State the one
|
|
91
|
+
purpose of the PR and identify unrelated changes, generated churn, or a broad formatting pass.
|
|
92
|
+
For an in-progress PR, batch the remaining intended edits and checks before requesting review;
|
|
93
|
+
do not request a fresh Codex pass after each fixup push. Keep one coherent change together rather
|
|
94
|
+
than splitting it into many tiny PRs solely to reduce a single review's size. Do not rewrite a
|
|
95
|
+
branch or remove files just to shrink the diff without the user's authorization.
|
|
96
|
+
|
|
97
|
+
Read only the root `AGENTS.md` and the nested `AGENTS.md` files applicable to changed paths.
|
|
98
|
+
If a root file repeats service-specific rules, suggest moving those rules to the relevant nested
|
|
99
|
+
file as a separate, reviewable edit. Preserve the rules' meaning; do not silently delete policy.
|
|
100
|
+
OpenAI's GitHub review uses applicable root and nested files, so a shorter root reduces context
|
|
101
|
+
carried by unrelated changes.
|
|
102
|
+
|
|
85
103
|
## 2. The loop (max 5 iterations)
|
|
86
104
|
|
|
87
105
|
At the end of every invocation, post exactly one top-level PR conversation comment summarizing
|
|
@@ -107,11 +125,17 @@ head, so threads left open on purpose cannot make the push look reviewed.
|
|
|
107
125
|
|
|
108
126
|
- Exit `10` (`findings`): go to B. On iteration 1 this is whatever Codex (or another bot)
|
|
109
127
|
already posted.
|
|
110
|
-
- Exit `20` (`pending`):
|
|
128
|
+
- Exit `20` (`pending`): if automatic-review status is unknown, wait up to 600 seconds first so a
|
|
129
|
+
review already in progress can land. If it is still pending, inspect the repository setting;
|
|
130
|
+
do not assume the personal preference applies. If automatic review is on, stop and report the
|
|
131
|
+
pending review rather than posting a duplicate request. If automatic review is off and no
|
|
132
|
+
request was posted for this head, post one `@codex review`
|
|
133
|
+
(`gh pr comment <PR> --body "@codex review"`) and record that request for this head. Then wait
|
|
134
|
+
with the same command plus `--wait 600`. Run the
|
|
111
135
|
wait in the background where the host allows it (Claude Code: Bash `run_in_background`; you are
|
|
112
136
|
re-invoked when it exits) so ten minutes of polling never sits in the conversation. Still `20`
|
|
113
|
-
after the wait:
|
|
114
|
-
|
|
137
|
+
after the wait: stop and report the timeout and the request already posted. A repeat mention
|
|
138
|
+
can start another billable review; do not retry it automatically or claim success.
|
|
115
139
|
- Exit `0` (`clean`): go to the exit check. A `--wait` call returns `clean` only after a settle
|
|
116
140
|
re-read 60 seconds later, so a comment landing right behind the review is still caught. A bare
|
|
117
141
|
read (no `--wait`) that says `clean` is good enough only when you have not pushed since Codex's
|
|
@@ -19,6 +19,9 @@ suggestion applied is worse than the comment itself.
|
|
|
19
19
|
- **Trigger phrase is `@codex review`.** Codex reviews automatically when a PR opens or gets new
|
|
20
20
|
commits if auto-review is enabled on the repo; the mention forces a fresh pass. Other useful
|
|
21
21
|
mentions: `@codex review focus on <area>` for a scoped re-review.
|
|
22
|
+
- **Review requests consume usage.** Account preferences do not override a repository's explicit
|
|
23
|
+
automatic-review setting. Before asking for a new review, check the current head and whether a
|
|
24
|
+
review is already running. Never request a second review merely because the first is slow.
|
|
22
25
|
- **Priority, not confidence.** Codex findings usually lead with a severity/priority word (`P1`,
|
|
23
26
|
`P2`, `P3` or `critical`/`major`/`minor`) or a short titled heading. Weight the top tier
|
|
24
27
|
seriously; treat the bottom tier as usually-skippable nits unless clearly correct.
|
|
@@ -47,10 +50,11 @@ Pick the login matching `*codex*` (commonly `chatgpt-codex-connector[bot]`, some
|
|
|
47
50
|
|
|
48
51
|
**Finding nothing here is NOT a stop condition.** On a PR Codex has never reviewed there is no bot
|
|
49
52
|
login to find yet: that is the normal starting state, not a missing app. When the probe comes back
|
|
50
|
-
empty, fall through to step A
|
|
51
|
-
until then match any login containing `codex` when polling.
|
|
52
|
-
|
|
53
|
-
|
|
53
|
+
empty, fall through to step A's pending-state check, and re-run this probe once a review lands;
|
|
54
|
+
until then match any login containing `codex` when polling. If step A's bounded wait expires
|
|
55
|
+
without a review or a codex-like login, report a timeout and say app availability is unconfirmed.
|
|
56
|
+
Do not infer that the app is absent from a missing response; confirm availability separately in
|
|
57
|
+
repository settings before calling it absent.
|
|
54
58
|
|
|
55
59
|
## Review state comes from the PR, not from memory
|
|
56
60
|
|
|
@@ -81,6 +85,20 @@ gh pr view --json number,headRefName,headRefOid -q '{number,branch:.headRefName,
|
|
|
81
85
|
|
|
82
86
|
Switch to the PR branch if not already on it. Capture `OWNER`/`REPO` (`gh repo view --json owner,name`).
|
|
83
87
|
|
|
88
|
+
Before triggering a review, inspect `gh pr view <PR> --json additions,deletions,changedFiles`
|
|
89
|
+
and `gh pr diff <PR> --name-only`. State the one
|
|
90
|
+
purpose of the PR and identify unrelated changes, generated churn, or a broad formatting pass.
|
|
91
|
+
For an in-progress PR, batch the remaining intended edits and checks before requesting review;
|
|
92
|
+
do not request a fresh Codex pass after each fixup push. Keep one coherent change together rather
|
|
93
|
+
than splitting it into many tiny PRs solely to reduce a single review's size. Do not rewrite a
|
|
94
|
+
branch or remove files just to shrink the diff without the user's authorization.
|
|
95
|
+
|
|
96
|
+
Read only the root `AGENTS.md` and the nested `AGENTS.md` files applicable to changed paths.
|
|
97
|
+
If a root file repeats service-specific rules, suggest moving those rules to the relevant nested
|
|
98
|
+
file as a separate, reviewable edit. Preserve the rules' meaning; do not silently delete policy.
|
|
99
|
+
OpenAI's GitHub review uses applicable root and nested files, so a shorter root reduces context
|
|
100
|
+
carried by unrelated changes.
|
|
101
|
+
|
|
84
102
|
## 2. The loop (max 5 iterations)
|
|
85
103
|
|
|
86
104
|
At the end of every invocation, post exactly one top-level PR conversation comment summarizing
|
|
@@ -106,11 +124,17 @@ head, so threads left open on purpose cannot make the push look reviewed.
|
|
|
106
124
|
|
|
107
125
|
- Exit `10` (`findings`): go to B. On iteration 1 this is whatever Codex (or another bot)
|
|
108
126
|
already posted.
|
|
109
|
-
- Exit `20` (`pending`):
|
|
127
|
+
- Exit `20` (`pending`): if automatic-review status is unknown, wait up to 600 seconds first so a
|
|
128
|
+
review already in progress can land. If it is still pending, inspect the repository setting;
|
|
129
|
+
do not assume the personal preference applies. If automatic review is on, stop and report the
|
|
130
|
+
pending review rather than posting a duplicate request. If automatic review is off and no
|
|
131
|
+
request was posted for this head, post one `@codex review`
|
|
132
|
+
(`gh pr comment <PR> --body "@codex review"`) and record that request for this head. Then wait
|
|
133
|
+
with the same command plus `--wait 600`. Run the
|
|
110
134
|
wait in the background where the host allows it (Claude Code: Bash `run_in_background`; you are
|
|
111
135
|
re-invoked when it exits) so ten minutes of polling never sits in the conversation. Still `20`
|
|
112
|
-
after the wait:
|
|
113
|
-
|
|
136
|
+
after the wait: stop and report the timeout and the request already posted. A repeat mention
|
|
137
|
+
can start another billable review; do not retry it automatically or claim success.
|
|
114
138
|
- Exit `0` (`clean`): go to the exit check. A `--wait` call returns `clean` only after a settle
|
|
115
139
|
re-read 60 seconds later, so a comment landing right behind the review is still caught. A bare
|
|
116
140
|
read (no `--wait`) that says `clean` is good enough only when you have not pushed since Codex's
|
package/README.md
CHANGED
|
@@ -206,6 +206,7 @@ Drive GitHub pull requests to merge-ready: review-bot loops, CI fixes, descripti
|
|
|
206
206
|
| [copilotloop](plugins/olko-github-pr/skills/copilotloop/SKILL.md) | Iteratively drives a GitHub PR to zero unresolved GitHub Copilot review comments, verifying each finding against the real code first and rebutting false positives instead of editing correct code | Clearing a Copilot review without cargo-culting its suggestions |
|
|
207
207
|
| [geminiloop](plugins/olko-github-pr/skills/geminiloop/SKILL.md) | Iteratively drives a GitHub PR to zero unresolved Gemini Code Assist comments, treating each as a claim to verify, fixing the correct ones and rebutting the rest with evidence | Clearing a Gemini Code Assist review whose findings need checking first |
|
|
208
208
|
| [ci-fix-loop](plugins/olko-github-pr/skills/ci-fix-loop/SKILL.md) | Diagnoses GitHub Actions CI failures in a loop: fetches failing check logs, applies a targeted fix, pushes, and waits for the next run, repeating until green or a blocker needs a human | CI is red after a push and you want it driven to green automatically |
|
|
209
|
+
| [nas-actions-migration](plugins/olko-github-pr/skills/nas-actions-migration/SKILL.md) | Safely migrates trusted GitHub Actions jobs to a repository-scoped NAS runner, with fork guards, credential boundaries, rollback, and verified activation | Moving CI jobs from hosted runners to a NAS, following the Roazon/Funda Radar pattern |
|
|
209
210
|
| [dependabot-triage](plugins/olko-github-pr/skills/dependabot-triage/SKILL.md) | Triages open Dependabot and Renovate PRs in bulk: classifies by risk tier, auto-approves safe patch bumps, flags breaking major upgrades for human review, and posts a digest | Clearing a backlog of dependency update PRs during a maintenance window |
|
|
210
211
|
| [lekker-review](plugins/olko-github-pr/skills/lekker-review/SKILL.md) | Runs a FAANG-quality PR review in an isolated worktree: parallel specialist agents, adversarial finding verification, proof-of-bug tests for Criticals, and an optional --fix mode that applies and commits its own findings (Claude Workflow or Codex native collaboration) | Reviewing a GitHub PR beyond what a single-pass review or a bot reviewer catches |
|
|
211
212
|
|
|
@@ -28,6 +28,9 @@ suggestion applied is worse than the comment itself.
|
|
|
28
28
|
- **Trigger phrase is `@codex review`.** Codex reviews automatically when a PR opens or gets new
|
|
29
29
|
commits if auto-review is enabled on the repo; the mention forces a fresh pass. Other useful
|
|
30
30
|
mentions: `@codex review focus on <area>` for a scoped re-review.
|
|
31
|
+
- **Review requests consume usage.** Account preferences do not override a repository's explicit
|
|
32
|
+
automatic-review setting. Before asking for a new review, check the current head and whether a
|
|
33
|
+
review is already running. Never request a second review merely because the first is slow.
|
|
31
34
|
- **Priority, not confidence.** Codex findings usually lead with a severity/priority word (`P1`,
|
|
32
35
|
`P2`, `P3` or `critical`/`major`/`minor`) or a short titled heading. Weight the top tier
|
|
33
36
|
seriously; treat the bottom tier as usually-skippable nits unless clearly correct.
|
|
@@ -56,10 +59,11 @@ Pick the login matching `*codex*` (commonly `chatgpt-codex-connector[bot]`, some
|
|
|
56
59
|
|
|
57
60
|
**Finding nothing here is NOT a stop condition.** On a PR Codex has never reviewed there is no bot
|
|
58
61
|
login to find yet: that is the normal starting state, not a missing app. When the probe comes back
|
|
59
|
-
empty, fall through to step A
|
|
60
|
-
until then match any login containing `codex` when polling.
|
|
61
|
-
|
|
62
|
-
|
|
62
|
+
empty, fall through to step A's pending-state check, and re-run this probe once a review lands;
|
|
63
|
+
until then match any login containing `codex` when polling. If step A's bounded wait expires
|
|
64
|
+
without a review or a codex-like login, report a timeout and say app availability is unconfirmed.
|
|
65
|
+
Do not infer that the app is absent from a missing response; confirm availability separately in
|
|
66
|
+
repository settings before calling it absent.
|
|
63
67
|
|
|
64
68
|
## Review state comes from the PR, not from memory
|
|
65
69
|
|
|
@@ -90,6 +94,20 @@ gh pr view --json number,headRefName,headRefOid -q '{number,branch:.headRefName,
|
|
|
90
94
|
|
|
91
95
|
Switch to the PR branch if not already on it. Capture `OWNER`/`REPO` (`gh repo view --json owner,name`).
|
|
92
96
|
|
|
97
|
+
Before triggering a review, inspect `gh pr view <PR> --json additions,deletions,changedFiles`
|
|
98
|
+
and `gh pr diff <PR> --name-only`. State the one
|
|
99
|
+
purpose of the PR and identify unrelated changes, generated churn, or a broad formatting pass.
|
|
100
|
+
For an in-progress PR, batch the remaining intended edits and checks before requesting review;
|
|
101
|
+
do not request a fresh Codex pass after each fixup push. Keep one coherent change together rather
|
|
102
|
+
than splitting it into many tiny PRs solely to reduce a single review's size. Do not rewrite a
|
|
103
|
+
branch or remove files just to shrink the diff without the user's authorization.
|
|
104
|
+
|
|
105
|
+
Read only the root `AGENTS.md` and the nested `AGENTS.md` files applicable to changed paths.
|
|
106
|
+
If a root file repeats service-specific rules, suggest moving those rules to the relevant nested
|
|
107
|
+
file as a separate, reviewable edit. Preserve the rules' meaning; do not silently delete policy.
|
|
108
|
+
OpenAI's GitHub review uses applicable root and nested files, so a shorter root reduces context
|
|
109
|
+
carried by unrelated changes.
|
|
110
|
+
|
|
93
111
|
## 2. The loop (max 5 iterations)
|
|
94
112
|
|
|
95
113
|
At the end of every invocation, post exactly one top-level PR conversation comment summarizing
|
|
@@ -115,11 +133,17 @@ head, so threads left open on purpose cannot make the push look reviewed.
|
|
|
115
133
|
|
|
116
134
|
- Exit `10` (`findings`): go to B. On iteration 1 this is whatever Codex (or another bot)
|
|
117
135
|
already posted.
|
|
118
|
-
- Exit `20` (`pending`):
|
|
136
|
+
- Exit `20` (`pending`): if automatic-review status is unknown, wait up to 600 seconds first so a
|
|
137
|
+
review already in progress can land. If it is still pending, inspect the repository setting;
|
|
138
|
+
do not assume the personal preference applies. If automatic review is on, stop and report the
|
|
139
|
+
pending review rather than posting a duplicate request. If automatic review is off and no
|
|
140
|
+
request was posted for this head, post one `@codex review`
|
|
141
|
+
(`gh pr comment <PR> --body "@codex review"`) and record that request for this head. Then wait
|
|
142
|
+
with the same command plus `--wait 600`. Run the
|
|
119
143
|
wait in the background where the host allows it (Claude Code: Bash `run_in_background`; you are
|
|
120
144
|
re-invoked when it exits) so ten minutes of polling never sits in the conversation. Still `20`
|
|
121
|
-
after the wait:
|
|
122
|
-
|
|
145
|
+
after the wait: stop and report the timeout and the request already posted. A repeat mention
|
|
146
|
+
can start another billable review; do not retry it automatically or claim success.
|
|
123
147
|
- Exit `0` (`clean`): go to the exit check. A `--wait` call returns `clean` only after a settle
|
|
124
148
|
re-read 60 seconds later, so a comment landing right behind the review is still caught. A bare
|
|
125
149
|
read (no `--wait`) that says `clean` is good enough only when you have not pushed since Codex's
|