/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.
$ npx -y skills add finna/Finn-loop --skill finn-review --agent claude-codeHow 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.mdname: 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
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.
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
Repo: finna/Finn-loop
Other skills on finn-loop.
- /finn-build
Claim the next safe agent-ready issue from Linear, implement it, and open a PR. Use when asked to run Finn-loop's builder, work the approved queue, or fix Finn-loop review feedback. Designed for /loop; one pass does one unit of work.
Open skill - /finn-spec
Interview the user about a raw idea until confident, then file a build-ready issue in Linear. Use when asked to run Finn-loop's spec interview, draft a queue-ready issue, or plan a feature. Interactive — requires the user present; never run unattended.
Open skill

