All skills
github avatar

/copilot-pr-autopilot

@d47a6c9 official
by githubgithub/awesome-copilot40k stars
5,040

Copilot left 14 review comments on your PR — half are nits. Hours of fix → reply → resolve → re-request, and each round lands MORE comments. This skill runs loop engineering: auto-triggers Copilot Code Review via GraphQL (no @copilot mention), triages every open thread (Copilot, humans, advanced-security) with a fix / decline / escalate rubric, dispatches parallel fix sub-agents that obey the repo build/test/lint conventions, commits per iteration, replies+resolves citing the pushed SHA, then re-triggers until HEAD is reviewed with zero threads awaiting the agent's reply (remaining open threads are explicit hand-offs to the human — escalated declines, design tradeoffs). You merge a clean PR; the bot runs it. Trigger phrases: "address copilot comments", "run a copilot review loop", "fix this PR", "iterate on copilot feedback". Repo-agnostic, gh CLI + PowerShell. Full autopilot needs repo Triage/Write; external PR authors get single-iteration mode plus manual re-trigger (UI 🔄 or substantive-commit push).

Use this Skill: https://skilld.dev/gh/github/awesome-copilot/copilot-pr-autopilot

This session only. Nothing lands on disk.

references04-triage.md

≈2k tokens on demand. Your agent reads this file only when SKILL.md points to it.

Step 4: Triage

Sub-agent type: general-purpose; budget: 5 min per ≤5 threads (parent batches in waves of ≤5 if step 3 returned more).

Inputs

From step 3:

  • Classified thread table — { thread_id, file, line, author, author_class, severity, summary } per open thread.
  • Original PR context (description, recent commits to the affected files) for re-deriving from principles in oscillation cases.

Return contract

Table of rows, one per thread:

{ thread_id, action, rationale }

Where action ∈ fix | decline | escalate-to-user and rationale is a single line citing the rule from the rubric below that fired.

Procedure

For each thread, apply the rubric in this file in order:

  1. Reviewer-type policy — human-or-bot threads default to escalate-to-user unless the user explicitly scoped them in.
  2. ROI vs Risk — score and decide for copilot threads.
  3. Fix / Decline rule lists — match the finding pattern.
  4. Project-specific policy hooks — research repo conventions before applying a generic "fix".
  5. Conflicting-comments resolution — if the finding flips a prior round's edit, apply the oscillation rules; if the agent is about to re-do an edit it already reverted, hard-stop and escalate.
  6. Escalation rules — escalate on design-level tradeoffs, large/cross-cutting changes, or high-risk/irreversible actions.

Return { thread_id, action, rationale } per thread to the parent; step 5 consumes only the fix rows, step 8 consumes the full table.

Gotchas

  • Batch in waves of ≤5 per sub-agent invocation. Larger batches blur the rationale and overrun the 5-min budget.
  • Human / advanced-security default is escalate-to-user. Auto-replying or auto-resolving a human review thread hides unaddressed concerns and is socially wrong.
  • Cite the rule that fired in rationale — one line, concrete. "Style nit per rubric §Decline" is fine; "looks small" is not.
  • The oscillation hard-stop is non-negotiable. If the agent is about to make an edit it already reverted in a prior round, that's the unambiguous signature of an oscillation loop — escalate.

Triage Rubric

Decision rubric for whether to fix or decline each Copilot finding. The goal is correctness, not appeasement — decline confidently when warranted.

ROI vs Risk

Score every proposed change on two axes, then decide:

  • ROI = value of the fix MINUS the cost to implement MINUS the user's cost to review.
  • Risk = blast radius, reversibility, effect on unrelated code.
ROI Risk Action
Clear positive Low Fix unilaterally.
Marginal Low Fix if cheap; otherwise decline with rationale.
Clear positive High / Irreversible Propose to the user first.
Marginal High Decline.
Negative (over-engineering for hypothetical) Any Decline.

Reviewer-type policy (foundation, not a nit)

Each thread's author (returned by 03-list-open-threads.ps1) drives who can decide it:

Reviewer Default action
copilot-pull-request-reviewer / copilot-pull-request-reviewer[bot] Loop-owned — triage with the rubric below. (03-list-open-threads.ps1 reports the raw author.login, which may carry the [bot] suffix on some surfaces; match both forms.)
Human reviewer Default escalate-to-user unless the user explicitly scoped them into the loop. Auto-replying or auto-resolving a human thread can hide unaddressed concerns and is socially wrong.
github-advanced-security / other automated bots Default escalate-to-user unless the project has a documented suppression / fix convention you can follow.

Fix when the finding is...

  • A real correctness bug: use-after-free / lifetime violation, race that drops user intent, gating logic that skips legitimate transitions, missing link dependency, off-by-one, null deref, unhandled error path.
  • A cross-cutting concern with a clean local fix: moving a mutex one scope up, pulling a duplicated check into a helper.
  • Documentation / test-plan drift: PR description claims behavior the code no longer matches; comment block describes the wrong thing; test-plan checkbox is inverted vs. the code.

Decline when the finding is...

  • A purely hypothetical race requiring cross-class plumbing, where actual exposure is negligible. Cite the interleaving you ruled out.
  • Style, naming, or formatting. Out of scope for the review loop.
  • Suggestions to add abstractions ("introduce a strategy pattern", "extract an interface") that don't pay for themselves at the current scale of the codebase.
  • Suggestions that contradict an established project convention — consistency with surrounding code is usually more valuable than the suggestion in isolation.
  • Micro-optimizations in code that is not on a hot path.

Project-specific policy hooks

Some findings are decided by project policy, not by general correctness reasoning. Before applying a generic "fix", research the repo's own conventions first — .github/instructions/*.md files (often have an applyTo glob that pins them to the changed file's path), .github/skills/, AGENTS.md, CONTRIBUTING.md, CI config, and recent commits to similar files. Fan out multiple explore sub-agents when several axes need checking (lint, format, spell-check, license header, etc.) — don't invent answers. What looks like an obvious fix may violate a project rule:

  • Spell-check / dictionary findings. If the project uses a spell-checker (check-spelling, cspell, typos, or similar), inspect its config and recent commits to learn the local convention (reword the document, add a pattern/regex, extend a dictionary/allowlist, use an inline ignore). Follow that convention; don't invent a new mechanism.
  • Lint suppressions / inline ignore directives. Most projects require an inline rationale comment. Bare suppressions get pushed back.
  • License headers / file boilerplate. Project-specific format, often CI-enforced — copy the existing header from a neighbor file.
  • Test framework, mock library, formatter choices. Follow the convention of the surrounding test files; never introduce a new framework because Copilot suggested one.

Cite the project's config file or convention in your reply.

Conflicting comments — break oscillation early

Failure mode: round N "fixes" what comment A asked for; round N+1 comment B objects and asks to revert it. Blindly flip-flopping ships oscillation and burns rounds.

Resolution rules — apply in order, stop at the first that fires:

  1. Re-derive from principles. Pick the side that wins on the function's contract + surrounding patterns + user's stated preferences — not the latest comment.
  2. Prefer the position with the explicit rationale. Concrete failure modes (security, correctness, data loss, perf) win over stylistic positions.
  3. Prefer human comments over bot comments when they directly conflict.
  4. If still ambiguous, escalate to the user. Summarize both positions side-by-side with a recommendation; do not silently pick.

Hard stop: if you are about to make the same edit you reverted in an earlier round, stop and escalate. That is the unambiguous signature of an oscillation loop.

Reply hygiene

Every reply — fix or decline — states the reasoning. This makes the PR self-documenting and gives the next review visible context. Declined findings cite the prior round and explain why the existing form is correct, so the next reviewer doesn't raise it again.

Escalation rules

Stay in autopilot by default; escalate to the user when:

  • The finding identifies a design-level tradeoff with multiple reasonable resolutions and no clear winner.
  • The fix would be large or cross-cutting (hundreds of lines, new architecture, refactor across modules).
  • The action is high-risk or irreversible (force-push, deletion, credentials, production).

Otherwise, decide and proceed.

Source: SKILL.md on GitHub

2 warnings3mo3 checks · Risk SAFE
  • Gen Agent Trust Hub3mo

    This skill provides a structured autopilot workflow for addressing GitHub pull request review comments. It uses the GitHub CLI and PowerShell to trigger reviews, triage feedback, apply code changes, and verify them via repository-specific build and test commands.

  • Socket3mo

    1 alert: gptAnomaly

  • Snyk3mo

    Risk: MEDIUM · 1 issue

Signed by skilld at d47a6c9. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub yesterday.

Activeupdated 3 months ago

README badge

README badge for github/awesome-copilot/copilot-pr-autopilot