★ New, VibeDrift is now open source. See exactly how it works, free to use and fully public. Star us on GitHub →

Your AI agent gets worse as your project grows.

It forgets your patterns, repeats code, and breaks what worked. VibeDrift catches the drift before it spreads.

Agent quality over sessions
With VibeDriftWithout
the drift92 · A41 · Dsession 5session 50
Plays nice with
Claude CodeCursorGitHub CopilotWindsurfAntigravityOpenAI CodexKiroAny MCP clientClaude CodeCursorGitHub CopilotWindsurfAntigravityOpenAI CodexKiroAny MCP clientClaude CodeCursorGitHub CopilotWindsurfAntigravityOpenAI CodexKiroAny MCP clientClaude CodeCursorGitHub CopilotWindsurfAntigravityOpenAI CodexKiroAny MCP clientClaude CodeCursorGitHub CopilotWindsurfAntigravityOpenAI CodexKiroAny MCP clientClaude CodeCursorGitHub CopilotWindsurfAntigravityOpenAI CodexKiroAny MCP clientClaude CodeCursorGitHub CopilotWindsurfAntigravityOpenAI CodexKiroAny MCP clientClaude CodeCursorGitHub CopilotWindsurfAntigravityOpenAI CodexKiroAny MCP clientClaude CodeCursorGitHub CopilotWindsurfAntigravityOpenAI CodexKiroAny MCP clientClaude CodeCursorGitHub CopilotWindsurfAntigravityOpenAI CodexKiroAny MCP client

Same project. Two different styles.

Your AI wrote both files, in two sessions. Both pass the linter. Together they teach it your project has no rules.

user_handler.ts
import { UserRepository } from '../repositories/user';
import { requireAuth } from '../middleware/auth';

export async function getUser(req: Request) {
  requireAuth(req);
  const user = await UserRepository.findById(id);
  if (!user) throw new NotFoundError();
  return user;
}
✓ Uses the repository pattern
✓ Checks the user is logged in
✓ Proper typed error
order_handler.ts
import { db } from '../config/database';

export async function getOrder(req: Request) {
  const id = req.params.id;
  const rows = await db.query('SELECT * FROM orders...');
  if (rows.length === 0) {
    return { status: 404, error: 'not found' };
  }
  return rows[0];
}
Raw SQL, no repository
Anyone can call it, no auth
Random error format
8 checks~2sruns locally

// The moat: in-loop MCP

Your agent checks before it writes.

A report tells you about drift after it lands. The VibeDrift MCP server stops it from landing at all. Mid-task, Claude Code and Cursor ask your codebase what it already does, and get an evidence-backed answer in under a second. That turns drift detection into drift prevention.

get_dominant_pattern
What's this repo's error-handling pattern?
find_similar_function
Does a function like this already exist?
check_file_drift
Does this file match the repo's conventions?
validate_change
Would this change introduce drift?
get_intent_hints
What conventions has the team declared?
Five tools. Local and free, your code never leaves your machine, no login.
Add it in one line (Claude Code, Cursor, Windsurf, any MCP client)
$ claude mcp add vibedrift -- npx -y @vibedrift/cli mcp

// Everything you get

Find it, fix it, keep it clean.

One scan ranks what's wrong by how much it hurts, hands your agent a copy-paste fix, and leaves a memory it reads every session.

Find it. Fix it. In seconds.
0
drifts found
ranked by how much they hurt
my-saas-app
ERRORTwo patterns fighting
orderService.ts:42
ERRORMissing login check
admin/reports.ts:8
WARNSame function, two names
format.ts ↔ money.ts
+ 14 more, worst first
Health 68/100 · Grade C
Three steps, no setup
1
Run npx @vibedrift/cli .
scans locally in ~2s
2
Read worst problems first
ranked by how much they hurt
3
Paste the fix into your agent
every finding ships with one
Agent memory

A .vibedrift/ folder your agent reads every session.

context.md
Patterns & open drifts
fix-plan.md
Top 10 fixes
fix-prompts.md
One fix at a time
patterns.json
Machine-readable
Live checks (MCP)

Your agent asks your codebase mid-task, answer in under a second.

Does this already exist?
Yes, see format.ts
What's our error pattern?
Typed errors, never raw 404s
Will this cause drift?
It would. Use the repo pattern.
Watch mode

Refreshes the memory on every save. Zero network calls.

Open source
VibeDrift / VibeDrift
TypeScript48MIT

// Proof

We checked if it works. Honestly.

With and without VibeDrift, graded by an independent pass, it only changes things when the model would've gotten it wrong, and we show where it did nothing.

Conventions the agent could already infer
≈ 0
No measurable change.

When the model would match your conventions anyway, the signal does nothing, and we're not hiding that.

Conventions it couldn't see or wouldn't pick
Less drift
Cut by a statistically significant margin.
0 · no effect
95% CI [0.57, 1.11] , clears zero.

// Local vs Deep

Patterns catch the visible drift. Deep catches what they can't.

The free local scan catches the obvious drift in seconds. The deep scan reads what your code actually means, so it finds the deeper conflicts a quick scan can't, the kind that quietly pile up in big codebases.

Local scan
Free · Open source · Unlimited
  • Static + Code DNA analysis, pattern, structure, and duplicate checks, all on your machine in ~2s
  • Drift detectors, mismatched patterns and missing auth guards
  • Scaffolding detection, flags half-finished, copy-pasted code
  • Scan-over-scan delta, what changed since your last scan
  • CI-ready, fast enough for every save and pull request

Catches the stuff your code visibly does differently.

Deep scan
Pro · AI-powered
  • Semantic duplicates, the same logic hiding under different names
  • Intent mismatch detection, when a function's name doesn't match what it does
  • AI-validated findings, every result is double-checked by Claude, so you don't chase false alarms
  • Coherence report, a ranked scorecard of how consistent your code is with itself, worst first
  • Fix prompts, a ready-to-paste fix for each finding
  • In-editor via MCP, catches issues right as your agent writes them

Catches the conflicts you can't spot by eye, the ones hiding in what the code means.

The deep scan helps most exactly where your AI agent can't see your conventions on its own, which is right when drift creeps in.


Free to start. Pay only for deep scans.

Local scans and the local MCP tools are free on every plan, forever. Paid plans add a deep-scan budget and in-editor checks.

Free
$0
Start free. No card needed.
1 deep scan / month
+Unlimited local scans
+Free MCP tools, forever
+Vibe Drift Score + reports
+Scan-over-scan delta
Most popular
Pro
$15/mo
For developers shipping every day.
Everything in Free, plus
12 deep scans / month
+Drift trend over time
+In-editor deep checks via MCP
+Coherence report + copy-ready fixes
+Watch mode + git pre-push gate
+Top-ups: 5 scans for $10
Enterprise
Let's talk
Regulated, air-gapped, or self-hosted.
Everything in Pro, plus
Self-host in your cloud (BYOC)
+Team seats + shared dashboard
+SSO / SAML
+Custom rules + SLA
+GitHub App, auto-PR
+Dedicated support

Out of deep scans? Top up 5 for $10, on any plan. Credits never expire.


// FAQ

Questions, answered.

How do I get started?+

Run npx @vibedrift/cli . in any project, no account, no config. Local scans are free and unlimited; sign in only when you want a deep scan or the dashboard.

Does it auto-fix, or just flag drift?+

Both. Every scan writes copy-ready fix prompts to .vibedrift/fix-plan.md so you, or your agent, can apply them. Deep scans add AI-synthesized fixes for the contradictions patterns can't see.

What's the Vibe Drift Score?+

A 0–100 score across five categories, graded against your own codebase's dominant patterns, not a generic rulebook. It tells you how internally consistent your project is and which files drag it down.

Is it really open source?+

Yes. The local scanner is MIT-licensed at github.com/VibeDrift/VibeDrift.

Stop blaming the model.

See what your codebase has been teaching your AI.

Star on GitHub

Not ready to scan? Get notified of updates.