From fabrik
Dispatches two competing reviewers to critique code diffs independently, challenge findings adversarially, and produce high-signal reports of vetted issues. Use for rigorous reviews needing second opinions before commits.
npx claudepluginhub maragudk/fabrik --plugin fabrikThis skill uses the workspace's default tool permissions.
A team version of the `code-review` skill. Two reviewers inspect the diff independently, then challenge each other's findings. A finding only reaches the final report if it survives scrutiny -- or if it's serious enough to surface even uncontested. The adversarial step is where the signal lives: anything that survives a capable opponent's challenge is worth your attention.
Guides Next.js Cache Components and Partial Prerendering (PPR): 'use cache' directives, cacheLife(), cacheTag(), revalidateTag() for caching, invalidation, static/dynamic optimization. Auto-activates on cacheComponents: true.
Processes PDFs: extracts text/tables/images, merges/splits/rotates pages, adds watermarks, creates/fills forms, encrypts/decrypts, OCRs scans. Activates on PDF mentions or output requests.
Share bugs, ideas, or general feedback.
A team version of the code-review skill. Two reviewers inspect the diff independently, then challenge each other's findings. A finding only reaches the final report if it survives scrutiny -- or if it's serious enough to surface even uncontested. The adversarial step is where the signal lives: anything that survives a capable opponent's challenge is worth your attention.
Use this when the user wants a thorough review with adversarial rigour. For a quick solo pass, use the code-review skill instead.
Inspect the changes yourself first, so you can brief the reviewers. On the main branch, that's typically the (staged) git diff. On a feature branch, that's the committed and uncommitted changes compared to main. The reviewers will inspect the diff themselves too -- your inspection is just so you know what they're walking into.
code-reviewers.SendMessage.TeamCreate({team_name: "code-reviewers", description: "Two reviewers debating a diff"})
The team exists only for this review. Delete it at the end.
Spawn two agents with the Agent tool, team_name: "code-reviewers", run_in_background: true, distinct names from the roster, and identical prompts (see template below). Real names rather than numbers keep the transcript readable and set the tone.
Default roster (extend if you need more than three):
Default pair for a fresh run: Seymour Bugs and Stack Tracy.
No worktree -- the review is read-only and both reviewers need to see the same repo state.
Each reviewer gets a prompt containing:
main" or "the changes on branch feat/foo vs main").Include this verbatim in every reviewer prompt:
You are <name>, one of two reviewers on this diff. Your counterpart is <counterpart>.
You are competing. Whoever has more *surviving findings* at the end wins -- a surviving finding is one your counterpart did not successfully invalidate. This competition is internal motivation to sharpen your review; it will not be surfaced to the user. Compete hard: be precise on first pass, skeptical on challenge, honest on defence.
You are also on the same team. The real goal is to produce the best possible review of the code under examination. Challenge rigorously, concede gracefully, defend only what you actually believe. Attack findings, not the finder. Good sportsmanship throughout.
You communicate only via `SendMessage`. CC the orchestrator on every message you send so they have a full transcript.
Inspect the diff carefully. Look at both architecture and implementation -- correctness, concurrency, security, data integrity, edge cases, and whether the design is sound, not just whether the code compiles.
Run these three phases strictly in order:
**Phase 1 -- Independent review.** Read the diff. Build your findings list in your own context. Do NOT read any message from your counterpart until you have sent yours. When ready, send one message to your counterpart (CC orchestrator) with a numbered list of findings. For each: location (`file:line`), short headline, reasoning, and severity (critical / major / minor).
**Phase 2 -- Challenge.** Read your counterpart's findings. For each numbered item, reply with either `accept` or `challenge: <reasoning>`. Send one consolidated message back (CC orchestrator). Challenge genuinely -- don't contest things you believe are right, and don't let weak findings pass just to be polite.
**Phase 3 -- Defend or concede.** Read the challenges against your own findings. For each challenged item, reply with `concede` or `defend: <reasoning>`. One consolidated message (CC orchestrator). This is the final word: there is no counter-rebuttal. If your defence doesn't convince your counterpart, the finding will be surfaced as *contested* and the user decides.
After phase 3 the orchestrator will ask you for a final summary. List your surviving findings (accepted by counterpart or successfully defended), your withdrawn findings, and your contested findings. One line of reasoning each. Be honest: you only score on surviving findings, not on contested ones, so inflating won't help you.
Phases advance naturally: each reviewer transitions when they receive the other's message, so the orchestrator does not need to signal phase changes. You just watch the inbox.
If one gets stuck or confused, send a short reminder of which phase they're in. Don't coach them on the review itself -- that defeats the point.
Once both reviewers have sent their phase 3 message, ping each one:
Summarise your final state for me: surviving findings, withdrawn findings, contested findings. One line of reasoning each.
Each reviewer self-reports from their own context. You also have the CC'd transcript as a cross-check if anything looks off.
Produce one report for the user with four sections, in this order:
Minor issues and nitpicks (style preferences, naming, micro-optimisations, comment suggestions) only ever appear in section 1 (consensus). Drop them everywhere else. Signal-to-noise matters more than completeness.
No scoreboard, no "who won". Competition was internal motivation; the report is findings.
SendMessage a shutdown_request to each reviewer.TeamDelete the team.SendMessage only, orchestrator CC'd. The transcript lives in one place, and the orchestrator can recover if a reviewer's context drifts.code-review. Each reviewer is doing roughly what the solo skill asks for, with added coordination. If the solo review criteria change, this skill benefits automatically.