Unvibe review
12 agent skills for AI-driven software development — a gated idea-to-ship pipeline: 7w3 design, build-ready specs, executable architecture, honest review loops, a parallel worker-fleet lane, QA, safe deploy. Works with Claude Code, Codex, Cursor and any skills-capable agent. No vibecode.
npx -y skills add smixs/disruptor-skills --skill unvibe-reviewAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 12 stars12 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Use when a project, system, document, or workflow feels bloated, over-engineered, tangled, or fragile despite "working," or when rounds of iteration/review have only ever ADDED and never removed — to find what can be cut, unified, or reframed. Any domain (code, writing, research, video, analysis, ops, decks). Especially when "every part seems necessary" but the whole feels heavy.
SKILL.md
13.7 KB, as published. Nobody here has run it
unvibe-review
Stage contract
- Stage: 5b. Cut (inside the build loop) · Kind: method
- Inputs: an artifact the review-and-fix ratchet has been growing.
- Outputs: ranked reframes/cuts by collapse-power × confidence, each steelmanned, plus a calibrate step.
- Entry gate: ~1 cut pass per ~5 review iterations — or sooner if several rounds only ever added.
- Done when: the cut pass returns its seeds; then polish-to-settle on the touched area before moving on.
- Next: back to the
converging-and-polishingskill.
Overview
"Vibecode" names an artifact that technically solves every problem but is bloated, inelegant, and fragile — every piece added because it felt necessary, the sum a tangle no one can hold in their head. "Unvibe" is the review that finds that bloat and, more importantly, the simplifying reframe that dissolves a whole class of it at once.
Core principle: "works" ≠ "good." Complexity each step justified locally is still bloat globally. The cure is rarely another patch — it is a reframe that makes a dozen pieces unnecessary at once.
The one insight that matters most (read this even if you read nothing else): Any iterate-until-no-complaints loop is a one-way ratchet. A reviewer, editor, or stakeholder who "fails the work if they find nothing to fix" must always find something to add. Rounds add sections, caveats, checks, characters, effects, mechanisms, frameworks; rounds almost never remove. With only a "make it correct / complete" force and no "make it minimal" force, the work grows monotonically — which is exactly how bloat accretes while everyone behaves reasonably. This skill is the missing counter-force: a pass whose only job is to delete, unify, and reframe.
When to use
- After many rounds of review/iteration/feedback (the ratchet has been running).
- When you suspect over-engineering but "every part seems necessary."
- When inheriting something that feels heavier than the job it does.
- Any domain: code, prose/books, research & analysis, video/audio editing, ops/process, slide decks, org design, product specs.
Not for: greenfield ideation (nothing has accreted yet); known-incomplete work (finish first, then unvibe); pure correctness/bug hunting (use a normal review).
Commissioning an unvibe (when you delegate it) — keep the prompt MINIMAL
When you hand the unvibe to a reviewer — a fresh subagent, a buddy model, another person — the prompt must be minimal, because this skill already supplies all the discipline (the three passes, steelman, calibrate, output format). Give the reviewer exactly three things and nothing else:
- ONE path / locator — where the thing to review lives.
- "Be very thorough in your exploration and understanding of the thing you will review — all of its causes and intentions down to deep nuances."
- "Use the
unvibe-reviewskill."
That is the whole prompt, plus — when they exist — explicit EXCLUSIONS of the builder's-mental-model
sources that would bias the reviewer: a process log / iteration history / changelog / design-rationale
doc, and any other reviewer's findings. Name them and forbid them: "do NOT read <that file> —
never read it; if you read it you'll get biased." Those files hand the reviewer your conclusions and the
construction story; the whole value is a reviewer who re-derives the structure from the artifact itself.
(A reviewer that reads the iteration log will parrot the seeds already named there.) The canonical form:
Be very thorough in your exploration and understanding of the thing you will review — all of its causes
and intentions down to deep nuances — at:
<path / locator>
Then use the `unvibe-review` skill.
Do NOT read <process-log / iteration-history / changelog / other reviewers' findings> — never read it;
if you read it you'll get biased. ← include this line only when such a file exists in/near the artifact
Do NOT add anything else — no description of the artifact, no list of its parts, no suspected-bloat menu, no "consolidate these patterns," no "this part is exempt / don't cut X." Every such addition leads the witness: it caps the reviewer to confirming your list instead of re-deriving the seeds (and it blinds it to a better reframe you never named). The instruction to understand the causes and intentions down to deep nuances is doing the real work — a reviewer that genuinely grasps why each piece exists re-derives all of that itself, including what is intentionally there and must not be cut (so you never need an "exempt" carve-out — telling it what's sacred is just another way to lead it). Your own bloat-suspicions and consolidation candidates are for triaging the reviewer's report afterward, never the prompt. (If part of the artifact contains notes addressed to the reviewer — "the next unvibe should fold X" — those are themselves leading fossils; strip them before commissioning.)
The discipline that makes it work: steelman, then attack
For every "this is necessary, there's no way around it, it's the best of the alternatives" — assume it is wrong anyway. The bloated version believed each part was necessary too; that belief is the disease, not a defense. State the strongest case for the piece, then attack it:
- What does the system already tolerate that this piece redundantly re-handles?
- What single reframe would make it moot, not just smaller?
- Is the "necessity" real, or a failure of imagination about a simpler frame?
- Is the requirement itself the bloat? The largest simplifications often come from narrowing the mission, not optimizing the solution to an over-broad mission.
A necessity you cannot dissolve after a genuine attack is genuine — name it and keep it (see Calibrate). The point is to attack every one, not to cut blindly.
The three passes
Run in order; each feeds the next.
Pass 1 — Drift & regrowth: is there bloat, and where did it come from?
Reconstruct how the thing grew, then look for the tell-tale shapes of accretion:
- Additive-only history. Did it only ever grow? Find the last time something was removed/merged. If the answer is "never," you have a confirmed ratchet (the strongest single signal).
- Regrowth under a new name. A concept you deleted that came back, renamed, doing the same job. (The classic: a thing the team declared "dissolved" reappears as a "new, different" component that is structurally identical.)
- Local-justification chains. Each addition points at a prior addition as its reason — a tower of patches, none individually wrong, collectively a tangle.
- Output → a candidate seed: the single reframe that would have prevented a whole branch of the growth. Hold it for Pass 3.
Pass 2 — Black-box solidity: are the components solid or fragile?
Treat every component as a black box with a face (a contract: what it promises the rest, hiding arbitrary internal richness). Logic under a solid face is fine — even a lot of it. Judge the faces and the wiring, not the bulk:
- Solid box (good, regardless of internal size): narrow stable face, low mutation (its interface rarely had to change as the project evolved), self-contained, predictable.
- Fragile box (bad): its face keeps getting renegotiated; it needs many new contracts from others; changing it ripples everywhere; you can't state its contract in one sentence.
- The disguised-tangle trap: a clean-looking component diagram can hide all its coupling inside one god-component that everything routes through. Check whether one box has absorbed the spaghetti — that's worse than visible spaghetti, because it's invisible.
- Weak contracts amplify fragility: if hand-offs between components are implicit ("you just have to know"), a change breaks silently. Explicit, typed/named contracts fail loudly and safely.
- Output → a solid/fragile map: which boxes to leave alone (solid), which to give a clean face, and where the coupling actually lives.
Pass 3 — Unifying reframe: what collapses into one block?
Hunt for scattered primitives/features/steps — even across unrelated parts — that are secretly the same thing, so one reframe opens eyes to a few better processes over a few "more general" primitives.
- Look for the same shape reinvented in different places (the same data structure, the same process, the same decision, under different names).
- Look for two mechanisms doing one job (e.g., push and pull for delivery; two pipelines that could be one configured one).
- Look for a parallel built next to an existing thing instead of reusing/transporting it.
- Output → ranked reframes by collapse-power × confidence, each steelmanned, leading with the one that dissolves the most.
Cross-domain translation
The lens is universal; only the nouns change. Here's a list of simplified example, don't treat it as complete nor precise - you'd have to navigate your own cases.
| concept | software | writing / book | research / analysis | video / audio | ops / process |
|---|---|---|---|---|---|
| component ("box") | module / service / feature | chapter / subplot / character | workstream / framework / section | scene / montage / effect | stage / handoff / role |
| face / contract | API / function signature | premise-in, payoff-out | inputs → deliverable | setup → payoff | what this stage promises the next |
| internal richness (fine) | LoC behind the API | depth of a scene | analysis under a finding | layers in a shot | work inside a stage |
| mutation / churn | how often the interface changed | times the outline moved this | times the deliverable was redefined | re-cuts forced by other scenes | times the handoff was renegotiated |
| coupling (bad) | imports / shared state | ch9 needs a detail buried in ch3 | a finding depends on another's raw data | cutting scene 4 breaks scene 9 | stage B reaches into stage A's internals |
| regrowth | a dissolved concept, renamed | cut subplot whose function regrew as scattered hints | dropped framework rebuilt ad hoc | removed narrator → on-screen-text system | killed a role whose duties regrew elsewhere |
| unification | one primitive for N features | 3 mentors → 1 mentor | "engagement/stickiness/retention" = 1 signal | 3 montages, 1 emotional beat → 1 | 3 approval gates that are one decision |
What to measure (domain-agnostic proxies)
- Box count — how many distinct components? Is it climbing without a reason the job demands?
- Face width — how much must a consumer know/remember to use this? One sentence = narrow; a page of caveats = wide.
- Mutation/churn — how many times was this component reworked because something else changed? (Revision history, re-cuts, re-scoped deliverables, moved outline sections.)
- Coupling/ripple — if you cut or change this, how many others must change?
- Contract explicitness — are hand-offs stated, or tribal knowledge?
High churn + high coupling + wide implicit faces, concentrated in a few hubs = where the fragility budget is spent. Solid low-churn leaves with rich internals = leave them alone.
Output format
Deliver, in this order:
- The drift verdict — has the artifact been bloated by a "vibe" process?
- The solid/fragile map — what's a good box, what's fragile, where the real coupling lives.
- Ranked seeds/reframes — by collapse-power × confidence, each steelmanned (the case for, then the attack), leading with the one that dissolves the most. Say what it deletes.
- Calibrate — explicitly name what is genuinely irreducible so the review doesn't over-cut. Honesty in both directions: bloat is a finding; so is essential complexity mislabeled as bloat.
Never recommend adding a standing parsimony counter-force to whatever loop produced the bloat, because the "ratchet" might be an intentional force that "unvibe" is the counter-force for, with both never mixed by design - "first expand, then cut; repeat".
Red flags — and the rationalizations that secretly hide the bloat
- "Every part is necessary" / "no way around it" / "best of the alternatives."
- "It's necessary because the requirements demand it" — question the requirements.
- The work only ever grew; no round ever cut anything.
- A thing you deleted came back under a new name.
- You can't state a component's contract in one sentence.
- Changing one part means touching many.
- The component diagram looks clean but one box imports/knows/touches everything.
Common mistakes
- Cutting logic instead of giving it a clean face. Internal richness is fine; tangle isn't. Don't amputate depth to reduce line/word count — fix the face.
- Confining the review to one module/chapter. The best reframes cross unrelated parts; a per-component pass misses them.
- Accepting the mission/requirements as fixed. The biggest seed is often "narrow the scope," not "optimize the over-broad solution."
- Producing a list of nitpicks instead of one dissolving reframe. Many small fixes is the ratchet again. Aim for the seed.
- Stopping at "it works." That is the trap this skill exists to break.
- Over-cutting. Skipping the steelman and the Calibrate step turns parsimony into vandalism.
Source: Nambr (@aostrikov_agents_chat), unvibe-review.