Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/marcinsufa-step
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions: not checked yet.
What's inside
- Skill name
step- Description
- None
- License
- MIT
- Instructions
- 1,157 lines in SKILL.md · view on GitHub
Agent Skills spec issues
- invalid YAML frontmatter: Nested mappings are not allowed in compact mappings at line 2, column 14:
- name: missing
- description: missing
- body: 1157 lines (spec recommends under 500)
Files (1)
- SKILL.md
SKILL.md (first lines)
# /pr-autopilot:step <PR_NUMBER>
One iteration of the PR review→fix loop. Invoked by `/loop` (Claude Code's dynamic-mode loop driver). Returns by either:
- Calling `ScheduleWakeup(delaySeconds=90, prompt="/loop /pr-autopilot:step <PR_NUMBER>", reason="polling for reviewer re-review")` to continue the loop
- Omitting the `ScheduleWakeup` call to terminate the loop
## Required tools on user machine
- `gh` (GitHub CLI, authenticated)
- `jq` (JSON processor)
- `git`
## Configuration
Read from `~/.claude/settings.json` under `prAutopilot`. Defaults if missing:
```json
{
"prAutopilot": {
"pollIntervalSeconds": 90,
"fixIterationCap": 5,
"pollTickCap": 10,
"stallTickCap": 6,
"reviewers": {
"cursor": { "enabled": true, "login": "cursor[bot]", "scoreRegex": "(?i)score:\\s*([1-5])" },
"copilot": { "mode": "final-only", "login": "copilot-pull-request-reviewer[bot]" },
"copilotSwe": { "mode": "off", "login": "copilot-swe-agent", "scoreRegex": "(?i)readiness:\\s*([1-5])" },
"codex": { "mode": "off", "postCommentsToPR": false },
"claudeSelf": { "enabled": false, "rubricFile": "SELF-REVIEW-RUBRIC.md" }
},
"flowVerify": {
"mode": "off",
"catalog": "flows.md",
"command": "npm run verify:flow",
"resultsJson": "test-results-verify/results.json",
"baseUrl": "http://localhost:3000"
},
"preCommitProfiles": {
"default-pnpm": [{"cmd": "pnpm run typecheck"}, {"cmd": "pnpm run lint"}, {"cmd": "pnpm test"}],
"default-npm": [{"cmd": "npm run typecheck"}, {"cmd": "npm run lint"}, {"cmd": "npm test"}],
"default-yarn": [{"cmd": "yarn typecheck"}, {"cmd": "yarn lint"}, {"cmd": "yarn test"}]
},
"autoMerge": {
"allowedTargetBranches": ["dev"],
"neverMergeToBranches": ["master", "main", "production"],
"mergeMethod": "squash"
}
}
}
```
**Per-repo pre-commit profile (optional):** `preCommitProfiles` keys are repo basenames; without one, step 11 falls back to `default-<package-manager>` from the lockfile. Example with per-entry `if` conditions: `${CLAUDE_SKILL_DIR}/references/config.md`.
**Flow-verification config (v0.5.4):** `prAutopilot.flowVerify` gates a **behavioural** check on top of the review legs — reviewers read the diff, this one drives the app. `mode: "off"` (the default) skips it entirely, so repos without the harness are unaffected. `mode: "final-only"` runs it once, after every reviewer is green and before the auto-merge gate. It never starts a server and never merges on its own. See [`references/flow-verify.md`](references/flow-verify.md) and [`reviewers/FLOW-VERIFY-SETUP.md`](../../reviewers/FLOW-VERIFY-SETUP.md).
**Auto-merge config (v0.4):** `prAutopilot.autoMerge` tunes the *target* + *method* guards for `safeAutoMerge` (see `references/auto-merge.md`). Safe hardcoded defaults shown above — it works with zero config. The per-repo **opt-in itself is file-based** (`~/.pr-autopilot/automerge-repos`, separate from v0.3's `allowed-repos`); absent ⇒ auto-merge OFF everywhere; the notify-and-stop control flow is unchanged from v0.3 (the notification just adds a "merge manually" hint).
## Config → algorithm derivation
| Config field | `enabledForEachIter` | `enabledForFinal` | `requiresTrigger` | `postsThreads` | Score signal |
|---|---|---|---|---|---|
| `cursor.enabled=true` | yes | no | no (auto on push) | yes | `Score: N/5` regex |
| `copilot.mode=each-iter` | yes | no | yes (`requested_reviewers` API with `Copilot` — NOT `@copilot` mention which triggers SWE Agent) | yes | "0 unresolved threads" |
| `copilot.mode=final-only` | no | yes | yes (same API, one-shot at end) | yes | "0 unresolved threads" |
| `copilotSwe.mode=each-iter` | yes | no | yes (`gh pr comment "@copilot please review"`) | no — top-level conversational comments | Claude judgment on comment body |
| `copilotSwe.mode=review-score` | yes | no | yes (`@copilot please review` mention, **review-only**) | no — top-level conversational comment | `Readiness: N/5` regex (`scoreRegex`) |
| `copilotSwe.mode=final-only` | no | yes | yes (same mention, one-shot at end) | no | Claude judgment on comment body |
| `codex.mode=each-iter` | yes | no | yes (`codex exec review --base`) | no | pass/fail |
| `codex.mode=final-only` | no | yes | yes (one-shot at end) | no | pass/fail |
| `claudeSelf.enabled=true` | no (final-only by design) | yes | no (internal) | no | 1-5 vs rubric |
| `flowVerify.mode=final-only` | no (too slow for every iter) | yes | no (internal) | no | `results.json` counters, NOT the exit code |
Copilot has two products (Code Review = `copilot`, SWE Agent = `copilotSwe`) and SWE Agent has two roles (`each-iter` fixer vs `review-score` reviewer). Read `${CLAUDE_SKILL_DIR}/references/config.md` when choosing or explaining reviewer config. If Copilot Code Review does not respond within 10 poll ticks, suggest `copilotSwe` instead.
## Mode derivation
`prAutopilot.primaryFixer` (new setting, default `"auto"`):
| `primaryFixer` | Resolved mode | Notes |
|---|---|---|
| `"claude"` | X | ABORT if `copilotSwe.mode == "each-iter"` (would conflict — see `references/config.md`). Otherwise standard Mode X. |
| `"copilotSwe"` | Y | Force Mode Y; derive_mode returns "Y", pre-flight validates copilotSwe.mode == each-iter (ABORTs there if not). |
| `"auto"` (default) | derived | Inspect reviewer config — `derive_mode()` below. |
The prose form of these rules (including the `primaryFixer="claude"` + `each-iter` conflict) is in `${CLAUDE_SKILL_DIR}/references/config.md`; `derive_mode()` below is authoritative.
```python
function derive_mode(config):
pf = config.primaryFixer # default "auto"
swe_each = config.reviewers.copilotSwe.mode == "each-iter" # Mode Y fixer ONLY
any_xreviewer = config.reviewers.cursor.enabled
or config.reviewers.copilot.mode == "each-iter"
or config.reviewers.codex.mode == "each-iter"
or config.reviewers.copilotSwe.mode == "review-score" # SWE Agent as scoring reviewer (Mode X)
if pf == "claude":
if swe_each: return ABORT_CONFIG # conflict — see message in pre-flight
return "X"
if pf == "copilotSwe":
return "Y" # pre-flight validates copilotSwe.mode == each-iter
# pf == "auto"
if swe_each and not any_xreviewer: return "Y"
if any_xreviewer and not swe_each: return "X"
if any_xreviewer and swe_each: return ABORT_CONFIG # ambiguous
return ABORT_NO_DRIVER
```
## Pre-flight: config validation
```python
mode = derive_mode(config)
if mode == ABORT_NO_DRIVER:
push_notification("config error", "no per-iter reviewer or fixer enabled; nothing would drive the loop")
return # terminate (no ScheduleWakeup)
if mode == ABORT_CONFIG
or (mode == "X" and no reviewer in {cursor, copilot, codex, copilotSwe(review-score)} has enabledForEachIter)
or (mode == "Y" and config.reviewers.copilotSwe.mode != "each-iter"):
# exact config-error messages for each case: ${CLAUDE_SKILL_DIR}/references/config.md §"Pre-flight config errors"From MarcinSufa/claude-pr-autopilot, MIT.
More from MarcinSufa/claude-pr-autopilot
- 0.497score
review-spec
MarcinSufa
Dispatch the pre-PR adapter layer against a spec markdown file.
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
approve-spec
MarcinSufa
User-only gate from spec to TDD.
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
assign
MarcinSufa
Atomically claim an assignment from `assignments.yaml`, create a worktree off `origin/main`, write the claim file, and brief the agent.
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
automerge
MarcinSufa
Opt a repo into pr-autopilot safe auto-merge.
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
finish
MarcinSufa
Post-merge cleanup.
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
unassign
MarcinSufa
Release an assignment claim WITHOUT merging — agent changed mind, assignment re-classified, deps blocked indefinitely.
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
pr-opened
MarcinSufa
Bridge from pre-PR (v0.5) to post-PR (v0.4 step loop).
SkillCFreshness: C★ 1Claude Code +9 - 0.494score
allow
MarcinSufa
Add a repo to the pr-autopilot auto-trigger allowlist.
SkillCFreshness: C★ 1Claude Code +9 - 0.489score
pause
MarcinSufa
Temporarily suppress pr-autopilot auto-trigger without changing the allowlist.
SkillCFreshness: C★ 1Claude Code +9 - 0.486score
resume
MarcinSufa
Re-enable pr-autopilot auto-trigger after a pause.
SkillCFreshness: C★ 1Claude Code +9
Signals
- Stars
- 1
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- May 29, 2026 (5 months ago)
- Last release
- May 28, 2026 (5 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from MarcinSufa
- 0.497score
review-spec
MarcinSufa
Dispatch the pre-PR adapter layer against a spec markdown file.
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
approve-spec
MarcinSufa
User-only gate from spec to TDD.
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
assign
MarcinSufa
Atomically claim an assignment from `assignments.yaml`, create a worktree off `origin/main`, write the claim file, and brief the agent.
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
automerge
MarcinSufa
Opt a repo into pr-autopilot safe auto-merge.
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
finish
MarcinSufa
Post-merge cleanup.
SkillCFreshness: C★ 1Claude Code +9 - 0.497score
unassign
MarcinSufa
Release an assignment claim WITHOUT merging — agent changed mind, assignment re-classified, deps blocked indefinitely.
SkillCFreshness: C★ 1Claude Code +9
Cite this page
step skill. Agent Mart. https://agentmart.dev/skills/marcinsufa-step (last updated 2026-10-24)