From flow-next
Resolves GitHub PR feedback by fetching unresolved threads, dispatching per-thread resolver agents, validating changes, committing fixes, and replying via GraphQL. Invoke with /flow-next:resolve-pr.
How this skill is triggered — by the user, by Claude, or both
Slash command
/flow-next:flow-next-resolve-prThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Read [workflow.md](workflow.md) for full phase-by-phase execution. Read [cluster-analysis.md](cluster-analysis.md) for cross-invocation clustering rules.**
Read workflow.md for full phase-by-phase execution. Read cluster-analysis.md for cross-invocation clustering rules.
Coordinate resolution of unresolved GitHub PR review threads, top-level PR comments, and review-submission bodies. Dispatch per-thread resolver agents (parallel on Claude Code and Codex 0.102.0+, serial on Copilot/Droid), validate combined state, commit fixes, reply and resolve via GraphQL.
Role: PR feedback resolution coordinator (NOT the resolver — you dispatch the pr-comment-resolver agent per thread/cluster).
CRITICAL: flowctl is BUNDLED — NOT installed globally. which flowctl will fail (expected). The resolver scripts are bundled alongside the skill:
FLOWCTL="${DROID_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/scripts/flowctl"
[ -x "$FLOWCTL" ] || FLOWCTL=".flow/bin/flowctl"
SCRIPTS="${DROID_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/skills/flow-next-resolve-pr/scripts"
Compare .flow/meta.json setup_version to the plugin version; on mismatch, escalate once per plugin version. Fail-open throughout: a missing jq, .flow/meta.json, or plugin manifest silently continues.
SETUP_VER=$(jq -r '.setup_version // empty' .flow/meta.json 2>/dev/null)
PLUGIN_JSON="${DROID_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/.claude-plugin/plugin.json"
PLUGIN_VER=$(jq -r '.version' "$PLUGIN_JSON" 2>/dev/null || echo "unknown")
VERSION_ACK=$(jq -r '.version_ack // empty' .flow/meta.json 2>/dev/null)
if [[ -n "$SETUP_VER" && "$PLUGIN_VER" != "unknown" && "$SETUP_VER" != "$PLUGIN_VER" ]]; then
if [[ "${FLOW_RALPH:-}" == "1" || -n "${REVIEW_RECEIPT_PATH:-}" \
|| "${FLOW_AUTONOMOUS:-}" == "1" || "${ARGUMENTS:-}" == *mode:autonomous* \
|| "$VERSION_ACK" == "$PLUGIN_VER" ]]; then
echo "Local setup v${SETUP_VER} differs from plugin v${PLUGIN_VER}. Run /flow-next:setup to refresh local scripts." >&2
else
echo "FLOW_SETUP_ASK ${SETUP_VER} ${PLUGIN_VER}"
fi
fi
If the block printed a FLOW_SETUP_ASK line, before proceeding ask the user with AskUserQuestion (local setup differs from the plugin; refresh now?), offering exactly the options Refresh now, Remind me next version, Skip this run, then continue the skill whichever is chosen:
/flow-next:setup in this session (do not run setup yourself), then continue once it finishes.PJ="${DROID_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/.claude-plugin/plugin.json"
PV=$(jq -r '.version' "$PJ" 2>/dev/null)
[[ -n "$PV" && "$PV" != "null" ]] && rm -f .flow/meta.json.tmp && jq --arg v "$PV" '.version_ack = $v' .flow/meta.json > .flow/meta.json.tmp && mv .flow/meta.json.tmp .flow/meta.json
Any other output (the one-line differs notice, or nothing) is non-blocking: continue.
gh CLI must be authenticated (gh auth status). jq must be on PATH.
Arguments: $ARGUMENTS
Format: [PR number | PR URL | comment URL | blank] [--dry-run] [--no-cluster] [mode:autonomous]
gh pr view --json number).--dry-run → fetch + plan + print, no edits / commits / replies.--no-cluster → skip cross-invocation cluster analysis (Phase 3).mode:autonomous → question-suppression only (also derived from FLOW_AUTONOMOUS=1 env): the Phase 10 needs-human surface emits NEEDS_HUMAN: report lines instead of blocking, threads stay open, and the run ends with the machine-readable RESOLVE_PR_VERDICT= terminal line. Sets AUTONOMOUS=1 only — NEVER RALPH, no receipt paths. All other phases identical.Execute the phases in workflow.md in order:
get-pr-comments.files_changed.gh pr comment for pr_comments / review_bodies).needs-human via blocking question (autonomous: NEEDS_HUMAN: report lines + terminal RESOLVE_PR_VERDICT= line instead — threads stay open).Summary (after last phase):
Validation result (bun test / pnpm test / cargo test / etc.) appears when code changed.
Autonomous runs end with the machine-readable RESOLVE_PR_VERDICT=<RESOLVED|PENDING|NEEDS_HUMAN> threads=<n> fixed=<n> needs_human=<n> terminal line as the LAST line of output (absent in interactive runs) — the dispatching loop gates on it.
git add -A / git add . / git add * — stage only files resolvers explicitly report.needs-human — they stay open until user decides./flow-next:land may dispatch this skill with mode:autonomous (autonomy ≠ Ralph — question-suppression only, never sets FLOW_RALPH, no receipt paths).Agent / Task tool with subagent_type — dispatch resolver units in parallel via Task with subagent_type: pr-comment-resolver, respecting file-overlap avoidance.pr-comment-resolver.toml installs into ~/.codex/agents/ via scripts/install-codex.sh. Spawn resolver units in parallel via Codex's multi-agent orchestration, same pattern as the planning scouts. Respect the same file-overlap avoidance.Detect by checking for the Task tool with subagent support (Claude Code) or ~/.codex/agents/pr-comment-resolver.toml (Codex). Default to serial when in doubt (correct output, slightly slower).
Why no backend-split files (vs impl-review / spec-completion-review): this skill's backend divergence is concentrated in a single ~22-line Phase 5 (parallel-vs-serial dispatch) — the other 10 phases are platform-agnostic shell + GraphQL. Per the heuristic in agent_docs/adding-skills.md (≥50 lines of divergence triggers a split), this skill stays inline.
npx claudepluginhub gmickel/flow-next --plugin flow-nextFetches and resolves PR review feedback: triage, fix, reply, and resolve threads. Use when addressing PR comments or picking up after human review.
Resolves PR review feedback by evaluating comments, fixing code, replying, and resolving threads. Supports pipeline mode for autonomous looping.
Evaluates and implements fixes for GitHub PR review feedback, then replies and resolves threads. Supports full PR scans and targeted comment URLs.