Anatoly logo - multi-LLM AI agent that audits your codebase

Use case

Audit the codebase your AI just shipped.

Lovable, Cursor, v0, Bolt and Windsurf ship fast — and leave behind duplicates, dead code, and bugs that type-check but break in prod. Anatoly was built for exactly this codebase.

Three-panel illustration. Panel 1, 'Vibing creates chaos': a fragile green car overloaded with a pile of mismatched electronics on its roof. Panel 2, 'Anatoly audits the chaos': the same car as a stripped chassis on an X-ray scanner, with ANATOLY.md calibration on the side and red callouts pointing to an unnecessary layer and dead code — labelled 'Evidence based'. Panel 3, 'You ship with confidence': the car restored, marked with a 'Ship Ready' shield, motion lines suggesting forward momentum.
From AI-generated pile-up to evidence-based ship — same codebase, three states.

Why vibe-coded codebases need this

AI builders are great at producing the next prompt's worth of code. They're not great at remembering the previous one. Each iteration appends; nothing prunes. After a week of prompting, a Lovable or Cursor project typically has the same Button component re-implemented four times under three different names, a handful of orphan files no route imports, and a function that type-checks against a library API that quietly changed three versions ago.

ESLint won't catch this. The TypeScript compiler won't catch this. The preview looks fine. The bug surfaces in production.

What Anatoly finds

Four of the seven axes hit vibe-coded projects hardest:

One command, drop into the repo

~/my-lovable-project
$ npx anatoly run --plain
→ scanning · 184 files · TS · TSX
→ axes · 7/7 · estimated $6.40
→ deliberation · 71 raw → 38 confirmed
 verdict: NEEDS_REFACTOR · 38 findings · $5.92

# typical first-run breakdown
duplication · 14 semantic duplicates (Button x4, Card x3, fetcher x3, ...)
utility · 11 dead exports (orphan routes, unused hooks)
correction · 7 NEEDS_FIX (stale Supabase + Stripe API usage)
overengineering · 6 OVER (single-use factories, wrapper components)

Findings come with file, line, the offending snippet, and — for duplicates — a pointer to the canonical version Anatoly recommends keeping.

What the report looks like

Typical first audit on a 4-week-old Lovable project

Verdict: NEEDS_REFACTOR

Duplication🟥🟥🟥🟥🟥🟥🟨🟨⬜⬜ 68% unique
Utility🟥🟥🟥🟥🟥🟥🟥🟨⬜⬜ 74% used
Correction🟥🟥🟥🟥🟥🟥🟥🟥🟨⬜ 83% OK
Overengineering🟥🟥🟥🟥🟥🟥🟥⬜⬜⬜ 71% lean
Tests⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0% covered
Best Practices🟥🟥🟥🟥🟥🟨⬜⬜⬜⬜ avg 5.4/10
Documentation⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0% docs

Tell Anatoly which builder you used

Drop an ANATOLY.md at the repo root to tune the audit to your stack and your builder's quirks. Anatoly reads it on every run.

ANATOLY.mdcalibration
# Project context

Stack: Next.js 15 · Supabase · Stripe
Generated with: Lovable, then iterated in Cursor.

## duplication
- The builder re-creates form components per page.
  Flag any <Form>, <Input>, <Button> defined more than once.

## utility
- Routes under app/(legacy)/* are expected to be dead — confirm and recommend deletion.

## correction
- We're on Stripe API 2025-04-30.basil.
  Re-check any payment intent / subscription usage against current docs.

Use it as a cleanup map

The report isn't read-only. Each finding names the file, the line, and the canonical version (for duplicates) or the recommended action (for dead code, overengineering, bugs). Hand the report back to your AI builder as the next prompt and it will grind through the list — Anatoly observes, your builder executes.

Re-run after the cleanup. SHA-256 cache means unchanged files cost $0; you only pay for what was touched. The verdict moves from NEEDS_REFACTOR to CLEAN over a few iterations.

Who this fits

Other use cases

Run your first auditSee a sample report →← All use cases