Free
- Unlimited local scans
- The 8 local MCP tools
- 1 deep scan a month
- Your first 5 Drift Sessions, one time, with a free account
VibeDrift spots drift in real time and steers your AI agent back to your codebase's own patterns, while it keeps writing at full speed.
Open source, MIT. Scans run on your machine, no account needed.
It advises and asks. It never blocks the edit.
Your agent can ask what already exists.
Judged against the directory being edited.
One line, through Claude Code's own hooks.
A fix counts only when the re-check passes.
Drift, flagged while your agent is still writing, and live on your sessions dashboard.
observed: .then() chains
dominant pattern: async/await
Duplicates an existing function elsewhere (84% similar); prefer importing it.
observed: null/undefined sentinels
dominant pattern: throws on error
These paths are shared because you opted in. Turn off with vibedrift watch-session --names off.
$ vibedrift watch-session◆ EVENT TAPE · agent ↔ vibedrift · watching for your next session10:49:27 SESSION capture started10:49:27 USER add a reports endpoint that lists monthly totals10:49:27 INTENT contract locked · add a reports endpoint that lists monthly totals10:49:43 AGENT edits src/api/reports.ts +510:49:43 VIBEDRIFT [FLAGGED] DF-1 [PASSIVE] async_patterns: repo uses async/await, this uses .then() chains10:49:50 AGENT [ACCEPT] DF-1 agreed — rewriting to async/await to match the repo10:49:57 AGENT edits src/api/reports.ts +510:49:57 VIBEDRIFT [RESOLVED] DF-1 src/api/reports.ts10:49:57 VIBEDRIFT [FLAGGED] DF-2 [PASSIVE] duplicates src/api/billing.ts:1 (0.96 similar)10:50:22 AGENT [DECLINE] DF-2 structural near-duplicate only — getBilling fetches /api/bil10:50:32 SESSION session endsession summary 2 edits · 2 flagged · 1 resolved · 1 open · agent said: 1 accepted, 1 declined⟳ watching · 11 events · 2 flagged · 1 open · ● drift 0.34 · Ctrl-C to stop
npm i -g @vibedrift/cliScan the repo once first, then run it in the repo. Typing it is the consent. With the Claude Code plugin, /vibedrift:setup asks for you. Needs Node.js 20 or newer.With sync on. Free for your 5 trial sessions; Pro adds weekly insights and full scan history.
| Project | Sessions | Edits | Flagged | Fixed | Waiting | Declined | Density | Time to fix |
|---|---|---|---|---|---|---|---|---|
| api-core | 3 | 110 | 11 | 8 | 1 | 2 | 12 | 4 min |
| swiftcart | 1 | 26 | 4 | 3 | 0 | 1 | 4 in 21 | — |
| payments-service | 1 | 18 | 3 | 1 | 2 | 1 | 3 in 14 | — |
| web | 1 | 12 | 0 | 0 | 0 | 0 | — | — |
| docs-siteScans only | 0 | — | — | — | — | — | — | — |
Only a derived projection (findings, outcomes, metadata) leaves your machine; never your code or prompts. File paths are also shared for each repo where you turned that on. VibeDrift records what it flagged and what the agent chose; it never blocks a change. Observed, not assumed.
Your agent asks your repo before it writes.
One command. See where your codebase disagrees with itself.
$ npx @vibedrift/cli .╭─────────────────────╮│ VibeDrift v0.20.3 │╰─────────────────────╯Files: 289 (JS: 4, TS: 285) | Lines: 48,090 | Time: 1.8s── Vibe Drift Score ──────────────────────────────── Architectural Consistency 16.3/20 ████████████████░░░░ Redundancy 17.9/20 ██████████████████░░ Security Consistency N/A — nothing to measure in this repoconsistent ≠ safe: measures how uniformly this repo applies its own auth, validation, and rate-limit patterns, not the absence of vulnerabilities Intent Clarity 19.5/20 ████████████████████ ────────────────────────────────── Vibe Drift Score: 85.4/100 (over 3 of 4 categories) Hygiene Score: 96.1/100── Fix Plan ────────────────────────────────────── Highest-impact drifts to re-align first. 1. 9 file(s) in src/components/dashboard/ have burst-authorship shape src/components/dashboard/DangerZone.tsx:1 +1.4pts consistency → New code in this directory will copy the wrong pattern 2. Exact semantic duplicate: formatDate(), formatDate(), formatDate() src/app/blog/page.tsx:160 +0.7pts consistency → Duplicate logic will diverge silently over time 3. 1 file(s) in src/lib/dashboard/ use error-object returns while 6 use null src/lib/dashboard/actions.ts:51 +0.6pts consistency → Callers can't trust a consistent return shape across handlers Fix these 3 → projected ~92.2/100 (B → A)
Consistent overall. A few files drift from the patterns your codebase already follows; the fixes below close the gap.
Vibe Drift Score: how consistently your codebase follows the patterns it already uses. Higher means more consistent.
Composite over 3 of 4 categories — the remaining categories had no signals in this repo.
Nothing to measure in this repo
Consistency of this repo's own auth, validation, and rate-limit patterns, not the absence of vulnerabilities.
9 file(s) in src/components/dashboard/ have burst-authorship shape (single-author, one sitting) while 13 sibling(s) were cultivated over time
src/components/dashboard/DangerZone.tsx:1Copy AI promptExact semantic duplicate: formatDate(), formatDate(), formatDate() have identical normalized bodies across 3 files
src/app/blog/page.tsx:160Copy AI prompt1 file(s) in src/lib/dashboard/ use error-object returns while 6 use null/undefined sentinels
src/lib/dashboard/actions.ts:51Copy AI promptOut of deep scans? Top up 5 for $10 on any plan. Credits never expire.