Revu – Code review in times of AI Enspirit released Revu, a free, open-source code-review tool installed via `npm install -g @enspirit/revu`, aimed at reviewing agent-written and vibe-coded codebases. Revu lets a reviewer point the tool at a repository, read it in a browser, comment on specific lines, and export a single markdown report for whoever writes the next change, a colleague or an agent. Enspirit argues that diff-based review breaks down when an agent produces 600 files in an afternoon and the author cannot be questioned, and that pointing a second agent at the first agent's output only adds text to read rather than understanding. Want a code review? We read agent-written and vibe-coded codebases for a living, and leave you with the harness as well as the report. Revu is the tool we do it with — free, open source, yours. npm install -g @enspirit/revu The job changed under us A year ago the work was writing software. Today a growing part of it is answering a harder question about software somebody else's agent already wrote: is this safe to run? The projects arriving at our door have a shape in common. A founder with no engineering background has vibe-coded a product that demos beautifully and now holds real customer data. A team has shipped in three weeks what would have taken six months and cannot say which parts are load-bearing. A codebase has a hundred green tests, none of which fail when you break the business rule on purpose. Every time, we are handed a repository nobody on our side wrote , that no one person ever held in their head. That is the new job, and it is not going away: read code you did not write and did not watch being written, well enough to put your name on it — then leave a harness behind, so the next thousand agent-written lines cannot quietly break what matters. Review by diff is dead Code review as practised for fifteen years rests on three assumptions: the change is small , the author is a colleague who can explain their reasoning, and both of you know the base . All three are now false. - The diff is the whole repository. Six hundred files in an afternoon is a normal day for an agent. A three-hundred-file pull request is not a review, it is a wall. - The author cannot be questioned. An agent will explain anything you like, fluently, after the fact. The explanation is generated, not remembered — so asking does not converge. - You do not know the base. What you need is not "what changed" but "what is here, and where do I look first". "The agents will review it" is a dead end The tempting answer is to point a second agent at the first one's output. We tried, repeatedly. It fails for reasons that have nothing to do with how good the models get. - A generated review is more text to read. You end up reviewing the review, and that text is optimised for sounding thorough. The pile grows; the understanding does not. - Accountability cannot be delegated. Asked whether a system can go in front of customers, you owe a signature, not a probability. Signing what nobody has read is the problem we are hired to fix — it cannot also be the method. - The decisive judgements are not in the repository. Whether the code does the right thing for the business, whether a risk is acceptable, whether this is even the system the client needs — none of it can be read off the source, at any model size. So humans will look at the code. The open question is with what — and our honest answer was: nothing built for this. We were reading agent-written repositories in an editor, keeping the map in our heads, and writing feedback into a chat window that lost it by morning. AI writes, humans validate — but only while validating stays cheaper than writing. Every tool we build is measured against that inequality. Agents stay excellent at the part they are genuinely good at: pointing . Run the linter, the type checker, the grep for a rule your project decided on. An instrument, not a judge — which is exactly how Revu uses them. So we built Revu A reading surface for code you did not write. Point it at a repository, read it in your browser, say things about specific lines, and get back one markdown text for whoever writes the next change — a colleague, or the agent. Scopes, not a file tree A tree of six hundred files is not a question anybody has. The left panel is a list of scopes : sets of files that share a property, entered one at a time, stacking as you go. Pick one, read what is in it, say things about the lines that deserve it. | The last commit | what the agent just did, before you lose track of it | | On this branch | everything it has that main does not | | Changed, not committed | the working tree, right now | | Longest documents | the verbose markdown an agent turns out by the bucket | | Largest sources | files that have grown past reading | | No test names it | where the green suite is not actually looking | | Named nowhere else | written, then forgotten: nothing so much as mentions them | | Unlinked documents · Uncited decisions | prose and records nothing points at | | Broken links · Left for later | drift, and what was postponed | | Moving most | where the churn has been, these N days | Each one is a cheap, honest signal. None of them claims a defect; they claim a place to look. You declare which your project offers, and on what numbers, in a small .revu.yml — what counts as a large file is a question about your project, not about our tool. And anything that prints a location becomes a scope of its own: scopes: - use: largest min: 400 your call, not ours - title: Lint run: npm run --silent lint -- --format=compact || true - title: Says deploy, not publish run: git grep -n -i deploy -- ' .md' Output is read in the format every tool already speaks: path:line: message , tsc's path line,col : message , or a bare path. Lines naming a file the project does not have are dropped, so banners and stack frames fall away on their own. An agent can write that file Which linter, which coverage report, which thresholds — that is a reading job, so hand it over. revu --skill prints the instructions: find the harness rather than guess it, prefer the project's own task names, run every command before writing it down , take the numbers from this codebase's own distribution of file lengths, and report what was skipped and why. bash $ mkdir -p .claude/skills/revu-setup $ revu --skill .claude/skills/revu-setup/SKILL.md Remarks that come back as requirements Click a line number, press c , say what should change. Each remark is anchored to its lines, quotes them, and carries a tag — must-fix , question , scope . The export is one markdown document, addressed to whoever writes next, opening with the only instruction that matters: treat a remark as the requirement, not as a suggestion to paraphrase back. What it refuses to do It never writes to the project under review — remarks live outside it, so a review can span days without touching a branch. And there is no AI inside Revu , deliberately. The judgement is the product; the tool's job is to make reading cheap enough that the judgement actually happens. About two thousand lines, three dependencies, no build step. A tool, not a platform. Where it comes from We build with agents every day, and we have the scar tissue. o=f i https://ofi.dev — a formula as a service, where a small program answers at a URL — is largely agent-written, specification first, and reviewing it is what made the gap obvious. Klaro Cards https://klaro.cards , our project-management product, is where the same practices meet years of history and real customers. Revu was built in a day out of that frustration, and the first thing we did was point it at itself — which is how the remark in the screenshot was written. Enspirit https://enspirit.dev Software engineering, done with agents and signed by humans. Klaro Cards https://klaro.cards Project management that reads like a deck of cards, not a spreadsheet. o=f i https://ofi.dev A formula as a service. You publish a calculation; it answers at a URL. Use it, or ask us to Revu is open source under the MIT licence. It runs locally, binds to 127.0.0.1 , and sends nothing anywhere. bash $ npm install -g @enspirit/revu $ revu ~/code/the-project-you-inherited That is the whole installation. It opens in your browser on 127.0.0.1:7777 ; with no path it reads the directory you are standing in. Want a code review? That is our day job. We review vibe-coded products before they meet real users, put test and deployment harnesses around agent-built codebases, and hand back the harness as well as the report — not just an opinion. Tell us what you have inherited. If Revu is useful to you and you would like the open-source work to continue, you can sponsor Enspirit on GitHub https://github.com/sponsors/enspirit . Issues and pull requests are welcome on the repository https://github.com/enspirit/revu ; the thing we most want to hear about is the scope you wished existed while reading somebody else's code.