From abc
Scan all open PRs (GitHub) and MRs (GitLab) the user authored, triage unresolved reviewer threads via the abc:triage subagent, present a dashboard of fixable vs judgment-required items, and apply confirmed fixes per PR/MR. Auto-detects which platforms to scan. TRIGGER when the user says "/review-sweep", "sweep my MRs", "triage my open PRs", or wants to bulk-process reviewer feedback. Designed to compose with /loop for periodic sweeps.
How this skill is triggered — by the user, by Claude, or both
Slash command
/abc:review-sweep [github | gitlab | both] (default: both)[github | gitlab | both] (default: both)opusThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Scan every open PR/MR you authored across GitHub and GitLab, fetch unresolved reviewer threads, hand each comment to the `abc:triage` subagent for classification, present a dashboard, and apply only the fixes you confirm.
Scan every open PR/MR you authored across GitHub and GitLab, fetch unresolved reviewer threads, hand each comment to the abc:triage subagent for classification, present a dashboard, and apply only the fixes you confirm.
Composes with /loop for periodic sweeps: /loop 30m /abc:review-sweep keeps the queue swept while you work on other things.
main/master. Only push to the PR/MR's source branch.judgment-required when applying fixes to a given PR/MR — don't blast through a thread of mixed-judgment items.--include-drafts.$ARGUMENTS selects platforms:
both → scan GitHub AND GitLab (default)github → GitHub onlygitlab → GitLab onlyRun auth pre-flight in parallel for the targeted platforms:
gh auth status — if not authed, skip GitHub scan and surface the re-auth command.glab auth status — same fallback.If both fail, abort with the re-auth commands. Don't degrade silently.
In parallel per platform:
GitHub (cross-repo, via search API):
gh search prs --author=@me --state=open --json url,number,title,repository,isDraft,updatedAt --limit 50
GitLab (cross-project, via MCP):
mcp__gitlab__list_user_merge_requests with state: opened, author_username: <user> — the user's username comes from glab auth status output, parse it.Filter out drafts unless --include-drafts was passed. Drop any PR/MR with no recent activity (no updates in 60+ days) — too stale to sweep cleanly.
If the resulting list is empty: print "No open PRs/MRs with reviewer activity. Inbox zero." and return.
For each PR/MR (in parallel where possible — gh api calls are cheap, GitLab MCP calls can run concurrently per project):
GitHub: gh api /repos/<owner>/<repo>/pulls/<num>/comments --paginate for inline review comments. Filter for:
GitLab: mcp__gitlab__discussion_list — each discussion has a resolved boolean. Filter for resolved: false. Skip discussions where the latest note is from the MR author.
Skip PRs/MRs with zero unresolved threads.
For each unresolved comment, dispatch the abc:triage subagent (use the Agent tool with subagent_type: triage). Pass:
gh pr diff or mcp__gitlab__list_merge_request_diffs once per PR/MR, then slice)Parallelize — fire all triage subagents for a PR/MR at once. They're independent.
Each subagent returns the structured YAML (see triage agent contract). Collect responses per PR/MR.
After all triage subagents return, print a per-PR/MR dashboard:
/abc:review-sweep — <N> PRs/MRs, <M> unresolved threads
[1] acme/web#4521 "Add WidgetRow to dashboard"
└─ src/WidgetRow.tsx:42 [fixable-code, high]
"Use `useMemo` for the derived rows array"
→ const rows = useMemo(() => derive(input), [input]);
└─ src/WidgetRow.module.css:18 [fixable-doc, high]
"Hardcoded color, use --color-text-primary"
└─ src/WidgetRow.tsx:88 [judgment-required, medium]
"Should this handle the empty state differently?"
[2] eng/super-funnel!231 "Auto-approve threshold tuning"
└─ rules/single_dir.yaml:14 [question, high]
"Why 0.6 not 0.7?"
Summary: 2 fixable-code, 1 fixable-doc, 1 judgment-required, 1 question
Then ask via AskUserQuestion:
For each PR/MR the user chose to act on:
git fetch and gh pr checkout <num> / glab mr checkout <iid>.fixable-code/fixable-doc change as proposed. Use the suggestion block contents from the triage output.pnpm typecheck, pnpm test, or the equivalent from package.json scripts). Abort this PR/MR if anything fails — leave the branch as-is, report the failure, move on to the next PR/MR.Address review feedback on <thread topic> — no AI footer. Use HEREDOC.Fixed in <SHA>. Use:
gh pr comment <num> --body "..." for thread replies — note GitHub's inline reply API is gh api /repos/.../pulls/comments/<id>/replies if you want to nest under the original comment.mcp__gitlab__discussion_add_note with the discussion ID.Surface each PR/MR's status after processing:
[1] acme/web#4521 ✓ 2 fixes applied, pushed <SHA>, 2 threads replied
[2] eng/super-funnel!231 — skipped (only question, no fixable items)
After applying fixes, print a separate "needs your input" block:
Needs your attention:
[1] acme/web#4521 src/WidgetRow.tsx:88
"Should this handle the empty state differently?"
Triage rationale: design decision needed — depends on whether empty is a valid runtime state.
[2] eng/super-funnel!231 rules/single_dir.yaml:14
"Why 0.6 not 0.7?"
Triage rationale: a reply with reasoning would close the thread.
These are intentionally left for the user to handle. Do not auto-reply, even to questions — the user's voice on judgment calls matters.
Print a one-line summary:
Sweep complete: <X> PRs/MRs processed, <Y> fixes applied, <Z> threads pending your input.
Return. The skill is one-shot — do NOT self-arm /loop. If the user wants periodic sweeps, they wrap with /loop 30m /abc:review-sweep.
fixable-code if the rule has a mechanical fix, judgment-required if it's a design lint (architectural pattern violations).npx claudepluginhub semanticpixel/abc --plugin abcGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.