Skip to content
Automation
Skill

/finn-review

Review open PRs against their linked Linear issues and required GitHub checks, then post a three-group verdict with Finn-loop labels. Use when asked to run Finn-loop's reviewer or review its PR queue. Designed for /loop; never merges or pushes code.

From plugin
finn-loop
2953 skills
Install
$ npx -y skills add finna/Finn-loop --skill finn-review --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/finn-review

Context preview

The summary Claude sees to decide when to auto-load this skill.

Review open PRs against their linked Linear issues and required GitHub checks, then post a three-group verdict with Finn-loop labels. Use when asked to run Finn-loop's reviewer or review its PR queue. Designed for /loop; never merges or pushes code.

SKILL.md

finn-review.SKILL.md
name: finn-review
description: Review open PRs against their linked Linear issues and required GitHub checks, then post a three-group verdict with Finn-loop labels. Use when asked to run Finn-loop's reviewer or review its PR queue. Designed for /loop; never merges or pushes code.

Finn-loop reviewer

One pass = one PR reviewed. Under `/loop`, each iteration runs this skill once.

1. Find a PR needing review

gh pr list --state open --json number,title,labels,isDraft,headRefOid,updatedAt,url

Skip drafts. For each PR, find the latest comment whose first line is `Finn-loop review of COMMIT_SHA`.

Skip a PR when that recorded SHA equals its current `headRefOid` and it already has `loop-approved`, `loop-changes-requested`, or `needs-human-review`. Review it again when new commits landed after the recorded SHA. If nothing needs review, say so and end the pass.

2. Read the contract and code

  • Parse the linked issue identifier from `Closes TEAM-NNN` in the PR body and

fetch the full Linear issue, including comments and relations. No linked issue is a must-fix finding.

  • Read the full diff and every changed file in context.
  • Review only against the linked issue: acceptance-criteria gaps, defects,

broken data flow, unnecessary scope expansion, security problems, missing loading/error states, and code future agents will struggle to modify.

  • Do not suggest unrelated improvements unless they are severe.

Every must-fix code finding starts with one of:

  • `[AC-N]` — the PR does not satisfy that acceptance criterion
  • `[DEFECT]` — the implementation is broken while staying inside scope
  • `[SECURITY]` — a severe security issue blocks shipping
  • `[CI]` — a required GitHub check failed

Non-goals are binding. If fixing a finding would require behavior excluded by an `NG-N`, do not prescribe code. Record `[SCOPE-CONFLICT AC-N ↔ NG-N]` with the exact contradiction and mark the PR for human escalation.

3. Check merge evidence

Inspect the current PR head, mergeability, and required checks:

gh pr view NUMBER --json headRefOid,mergeable,mergeStateStatus
gh pr checks NUMBER --required --json bucket,name,state,link
  • If required checks are pending or mergeability is still unknown, report that

the PR is waiting and end without posting a verdict or changing labels. A later loop pass will retry it.

  • Failed required checks are `[CI]` must-fix findings.
  • A merge conflict is a `[DEFECT]` must-fix finding.
  • If the repository has no required checks, mark the PR for human escalation;

do not apply `loop-approved`. Finn-loop does not treat missing CI as green.

Review the exact `headRefOid` used for this evidence. Re-fetch it immediately before posting. If it changed, discard the review and start again on a future pass.

4. Post one verdict

Post one comment in this structure:

Finn-loop review of COMMIT_SHA

CI: required checks passed | failed | not configured
Mergeability: clean | conflicting

## Review

Summary: one or two plain-language sentences on what this PR does.

## 1. Must fix before merge

None.

## 2. Should fix soon

None.

## 3. Safe to merge

Yes — automated review evidence is complete. A human still makes the merge decision.

Then set labels based on the verdict, checking existing labels before removing them so an absent label does not fail the command:

  • No must-fix and no new escalation: add `loop-approved`; remove

`loop-changes-requested`. Preserve a pre-existing `needs-human-review` label because it may represent a separate high-risk human gate.

  • Must-fix present: add `loop-changes-requested`; remove `loop-approved`.
  • Scope conflict or no required CI: add `needs-human-review`; remove both

`loop-approved` and `loop-changes-requested`; set "Safe to merge" to `No — human decision required.`

The escalation path deliberately leaves the automated repair queue. A human must resolve the reason, change the issue or repository configuration as needed, and remove `needs-human-review` before Finn-loop reviews that unchanged commit again.

5. Hard limits

  • Never merge or enable auto-merge.
  • Never push commits to the PR branch.
  • Never approve or request changes through a formal GitHub review. Use one

comment plus labels because the loop may run on the PR author's token and GitHub rejects self-reviews.

  • `loop-approved` is evidence for a human, not merge authorization.
Read more
Ships withfinn-loop

Three Claude Code skills that turn Linear + GitHub into a small, human-gated AI software factory: **idea → /finn-spec interviews you and files the issue → you label it agent-ready → /finn-build claims it and opens a PR → /finn-review posts a verdict → you

Get the whole plugin
Stats
295
Stars
54
Forks
Active
Maintenance
JavaScript
Language
MIT
License
18d ago
Last commit
18d ago
Created

Repo: finna/Finn-loop