Skip to content

Configuration Profiles

Drift ships 7 built-in profiles — pre-tuned signal weights, thresholds, and policies for common project types.

drift init --profile <name>   # scaffold drift.yaml with chosen profile
drift init --profile vibe-coding --full  # profile + CI + hooks + MCP

Profile overview

Profile Best for fail_on Key emphasis
default Most Python/TS projects none Balanced weights across all signals
vibe-coding AI-accelerated codebases (Copilot, Cursor, Claude) none Copy-paste detection ↑, bypass accumulation ↑, test polarity ↑
strict Mature projects with zero tolerance medium All signals fully weighted, blocks on medium+ severity
fastapi FastAPI / web-API projects none Architecture violations ↑, strict layer boundaries (routes → services → DB)
library Reusable Python packages none API surface quality ↑ (explainability, naming, doc-impl drift)
monorepo Large multi-package repos none Architecture violations ↑, co-change coupling ↑, higher file limits
quick First-run / exploration none AST-only signals, no git, low file limits — fast results

default

Balanced defaults suitable for most Python/TS projects. This is what you get without any configuration.

drift init

Signal emphasis: Pattern fragmentation (0.16), architecture violation (0.16), mutant duplicate (0.13), explainability deficit (0.09).

When to use: Starting out, general-purpose repos, when you're not sure which profile fits.


vibe-coding

Optimised for AI-accelerated codebases. Upweights copy-paste detection, bypass accumulation, and test polarity deficit — the dominant debt vectors in vibe-coded repos.

drift init --profile vibe-coding

Signal emphasis: Mutant duplicate (0.20), pattern fragmentation (0.18), architecture violation (0.14), explainability deficit (0.10), bypass accumulation (0.06).

Includes layer boundaries:

  • No DB imports in API layer
  • No API imports in DB layer

When to use: Any repo where 50%+ of code is AI-generated. If you use Copilot, Cursor, or Claude Code heavily — start here.

📖 Vibe-coding playbook →


strict

Maximum enforcement for mature projects that want zero tolerance on architectural drift.

drift init --profile strict

Key difference: fail_on: medium — CI and pre-push hooks will block on medium+ severity findings.

When to use: Production codebases with established architecture, where every drift regression should be caught immediately.


fastapi

Tuned for FastAPI / web-API projects. Upweights architecture violations and enforces strict layer boundaries.

drift init --profile fastapi

Signal emphasis: Architecture violation (0.20), pattern fragmentation (0.14), mutant duplicate (0.13).

Includes layer boundaries:

  • No DB imports in routers
  • No HTTP imports in services

When to use: FastAPI, Flask, or Django projects with clear router/service/data layers.


library

Tuned for reusable Python libraries. Upweights API surface quality signals to keep the public interface clean.

drift init --profile library

Signal emphasis: Explainability deficit (0.12), pattern fragmentation (0.14), architecture violation (0.12), mutant duplicate (0.10), doc-impl drift (0.08), naming contract (0.08).

When to use: PyPI packages, shared libraries, anything where external API quality matters most.


monorepo

Tuned for large monorepos with multiple packages.

drift init --profile monorepo

Signal emphasis: Architecture violation (0.18), pattern fragmentation (0.14), mutant duplicate (0.13), co-change coupling (0.02 — elevated).

Key difference: max_discovery_files: 20000 (2× the default) for broader coverage.

When to use: Monorepos with 5+ packages, turborepo/nx-style workspaces, micro-service collections in one repo.


quick

Fast first-run scan for new users. Disables git-dependent and expensive signals, raises thresholds to reduce noise.

drift init --profile quick
# or just:
drift analyze . --max-findings 5

Disabled signals: Temporal volatility, system misalignment, exception contract drift, cohesion deficit, co-change coupling.

Key differences: Higher similarity threshold (0.85), larger minimum function size (15 LOC), lower file limit (2000).

When to use: First exploration of a new codebase, demos, quick triage.


Custom profiles

Profiles are starting points. After drift init, edit drift.yaml to fine-tune:

# drift.yaml (generated from vibe-coding profile, then customized)
weights:
  mutant_duplicate: 0.25    # even higher for your codebase
  architecture_violation: 0.10  # less important in your context

thresholds:
  similarity_threshold: 0.70  # catch more near-duplicates

fail_on: high  # block only high+ severity

Use drift calibrate to let Bayesian learning adjust weights based on your feedback over time.

📖 Configuration reference → · Configuration levels → · Feedback & calibration →