From vibekit
Self-review skill that critiques completed work against the spec and plan, surfaces issues by severity, and requires user sign-off before outward-facing actions.
How this skill is triggered — by the user, by Claude, or both
Slash command
/vibekit:review-packThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
A structured self-review and user sign-off. The skill:
A structured self-review and user sign-off. The skill:
This is the last reasoning gate before the pipeline touches anything outside the isolated workspace.
verify-gate returns verdict ready.finish-branch, before any merge, PR, push, tag, or deploy.Do not invoke:
verify-gate returned not ready. Review-pack is not a bypass.status: approved in frontmatter.verdict: ready.If any prerequisite fails, stop and surface what is missing.
Run through these critique passes in order. Each pass produces findings with a severity tag.
For each requirement in the spec's Goals and Constraints sections:
Finding severity:
block — a Goal is not satisfied, a Non-goal has been violated, a Constraint has been broken.warn — a Goal is satisfied weakly (e.g. one test where more were reasonable).nit — style, naming, or documentation detail.For each task in the plan:
Finding severity:
block — a plan task's code is missing from the diff.warn — commit messages diverge from the plan's wording.nit — extraneous whitespace or non-functional edits introduced.Finding severity:
block — a public API diverges from the spec (name, signature, semantics).warn — clear duplication or speculative feature; ambiguous tests.nit — local naming nits, minor comments.Run the senior-engineer test on the diff:
git diff --shortstat).Finding severity:
block — a new abstraction has a single caller and could be inlined; speculative configurability with no spec requirement; new code paths/exports with no caller and no test.warn — code that is twice the natural length but functionally correct.nit — micro-bloat (extra wrapper, unused parameter).Tag each over-engineering finding so the cut is unambiguous:
delete: dead code, unused flexibility, speculative feature — replacement: nothing.stdlib: hand-rolled thing the standard library ships — name the function.native: dependency or code doing what the platform already does — name the feature.yagni: abstraction with one implementation, config nobody sets, layer with one caller.shrink: same logic, fewer lines — show the shorter form.End this pass with the metric that matters: net: -<N> lines possible. If there
is nothing to cut, write Lean already. This pass hunts complexity only;
correctness, security, and performance belong to the other passes, not here.
A block here halts the handoff just like a spec violation.
For every changed file in the diff:
Finding severity:
block — a file was modified that no plan task names; or a hunk has no traceable origin.warn — pre-existing dead code was deleted without explicit user request; formatting or comment changes unrelated to the task.nit — touched lines that did not need to change to satisfy the task.Quote the orphan file:line ranges verbatim.
Ask explicitly: "What are three ways this implementation could be wrong that the tests would not catch?" Write down the three answers. For each:
If any of the three risks has no mitigation evidence, raise a warn with a suggested follow-up.
Write a review document at docs/reviews/YYYY-MM-DD-<feature>-review.md containing:
# Review — <feature>
**Date:** YYYY-MM-DD
**Spec:** <path>
**Plan:** <path>
**Verify report:** <path>
**Commits under review:** <base sha>..<head sha> on <branch>
## Diff summary
- Files changed: <count>
- Lines added: <n>, removed: <n>
- Commits: <count>
## Findings
### Block
- <one per finding, with evidence: file:line or commit sha>
### Warn
- <...>
### Nit
- <...>
## Self-critique (three risks)
1. <risk> — mitigation: <...> OR follow-up test: <...>
2. ...
3. ...
## Diff
(Full `git diff <base>..HEAD` inline, or a reference to the command the user can run.)
## Sign-off
- [ ] User reviewed findings.
- [ ] User reviewed diff.
- [ ] User approves proceeding to finish-branch.
After writing the review document, present to the user:
Review: <path>.
Blocks: <n>. Warns: <n>. Nits: <n>.
Diff: <lines added>/<lines removed> across <N commits>.
Approve proceeding to finish-branch? (yes / fix / abort)
Wait for the user's response.
yes → hand off to finish-branch.fix → user gives the specific fixes they want; the orchestrator plans a small targeted update (not a full re-plan).abort → stop. User decides whether to roll back the vibe branch or keep it for later.Never auto-proceed. The user's explicit sign-off is non-optional.
If the review finds any block-severity issue, the handoff to finish-branch is not available — only fix or abort. The user cannot approve a yes that overrides an unresolved block. Surface this clearly:
Review has <N> block finding(s). `yes` is not available. Choose `fix` or `abort`.
This preserves the invariant that finish-branch only runs on work that passed both verify-gate and a clean review.
warn as block to inflate caution. If it is blocking, it is block; otherwise let the user decide.yes after any block finding.docs/reviews/YYYY-MM-DD-<feature>-review.md.yes (→ finish-branch), fix (→ targeted update), or abort.Terminal states: yes unblocks finish-branch. fix returns to exec-dispatch for the specific items the user chose. abort stops the pipeline with the branch retained.
npx claudepluginhub rizukirr/vibekit --plugin vibekitPerforms a single adversarial review pass over an integrated branch diff, judging spec-compliance, code quality, and test adequacy. Triggered via /review or 'review the changes'.
Verifies implementation against a spec with evidence-based checks and three independent self-consistency passes. Ensures every requirement is backed by verbatim evidence before merge.
Reviews code, plans, and scope from multiple angles before acceptance, with security and quality checks. Auto-detects review targets or prompts for clarification.