Skip to content

Detectors

Jacob Centner edited this page Apr 10, 2026 · 4 revisions

Detectors

Sentinel ships with 14 built-in detectors organized by tier. Each detector produces evidence-backed findings with severity, confidence, and file location.

Detector tiers

Tier Description LLM needed?
DETERMINISTIC Rule-based, repeatable, zero false negatives from judgment No
HEURISTIC Statistical/AST analysis, high confidence but uses thresholds No
LLM_ASSISTED Uses an LLM for semantic comparison or judgment Yes (BASIC tier minimum)

LLM-assisted detectors adapt their behavior based on your Capability Tiers — basic mode gives binary signals, standard+ mode gives structured analysis with specific mismatches.

All detectors

Detector Tier Languages External Tool LLM Page
Detector: Todo Scanner DETERMINISTIC All git blame No Detector: Todo Scanner
Detector: Dep Audit DETERMINISTIC Python pip-audit No Detector: Dep Audit
Detector: Lint Runner DETERMINISTIC Python ruff No Detector: Lint Runner
Detector: ESLint Runner DETERMINISTIC JS/TS Biome or ESLint No Detector: ESLint Runner
Detector: Go Linter DETERMINISTIC Go golangci-lint No Detector: Go Linter
Detector: Rust Clippy DETERMINISTIC Rust cargo clippy No Detector: Rust Clippy
Detector: Stale Env DETERMINISTIC Python, JS/TS No Detector: Stale Env
Detector: Unused Deps DETERMINISTIC Python, JS/TS No Detector: Unused Deps
Detector: Complexity HEURISTIC Python No Detector: Complexity
Detector: Git Hotspots HEURISTIC All git log No Detector: Git Hotspots
Detector: Dead Code HEURISTIC Python, JS/TS No Detector: Dead Code
Detector: Docs Drift LLM_ASSISTED All (docs) Optional Detector: Docs Drift
Detector: Semantic Drift LLM_ASSISTED All (docs) Required (BASIC) Detector: Semantic Drift
Detector: Test Coherence LLM_ASSISTED Python Required (BASIC) Detector: Test Coherence

Note on LLM_ASSISTED tier: Docs-drift is tiered as LLM_ASSISTED but degrades gracefully — its deterministic sub-checks (stale references, dependency drift) run without any LLM. Only the doc-code semantic comparison requires a model. Semantic-drift and test-coherence produce no findings without an LLM provider.

Enabling/disabling detectors

Via config

[sentinel]
# Run only these detectors:
enabled_detectors = ["todo-scanner", "complexity", "dep-audit"]

# Or skip specific detectors:
disabled_detectors = ["lint-runner", "dead-code"]

enabled_detectors and disabled_detectors are mutually exclusive.

Via CLI

sentinel scan /repo --detectors todo-scanner,complexity,dep-audit
sentinel scan /repo --skip-detectors lint-runner,dead-code

Via profiles

sentinel init /repo --profile minimal   # heuristic-only, no LLM
sentinel init /repo --profile standard   # all detectors, basic LLM
sentinel init /repo --profile full       # all detectors, enhanced analysis

How detectors work

  1. The runner discovers all registered detectors (built-in + entry-point plugins)
  2. Filters by enabled/disabled lists
  3. Each detector receives a DetectorContext with repo root, scope, changed files, config, and optional model provider
  4. Each detector returns a list of Finding objects with evidence
  5. Findings are fingerprinted, deduplicated, and optionally judged by the LLM

See Writing Custom Detectors for building your own.

Clone this wiki locally