Skip to content

CLI and detector reference

Generated by pnpm docs:generate from the built CLI and detector registry. Version 0.29.0, JSON schema 0.8.0. See agent usage, configuration, and scoring for interpretation.

Usage: crimes [options] [command]
A crime scene investigator for your codebase. Built for agents, readable by
humans.
Options:
-V, --version output the version number
--no-init suppress the first-run auto-init prompt
--init force the first-run auto-init prompt even if config exists
--no-skill-update skip automatic skill refresh and update notices
-h, --help display help for command
Commands:
init [options] Set up config and optional agent skills, or safely refresh installed skills.
ignore [options] <id-or-fingerprint> Suppress a specific finding by id or fingerprint. Requires --reason and writes .crimes/suppressions.json.
unignore [options] <fingerprint> Remove a suppression entry from .crimes/suppressions.json by stable fingerprint.
audit-suppressions [options] [path] List every entry in .crimes/suppressions.json with age and concerns about stale or vague reasons.
explain [options] <id-or-fingerprint> Show a long-form rationale for one finding, by id or fingerprint.
scan [options] [path] Scan a repository for maintainability crimes.
context [options] <file> Inspect a single file: known crimes, likely tests, and agent-safe editing notes.
hotspots [options] [path] Rank files by change risk using Git churn and current scan findings.
diff [options] <range> Report new, fixed, and unchanged crimes between two Git refs.
baseline Snapshot current findings to .crimes/baseline.json, or check against it.
verdict [options] Summarise whether this branch makes the repo cleaner, worse, unchanged, or mixed.
feedback [options] [fingerprint-or-id] Capture per-finding verdicts (tp/fp/known) to feed the calibration loop. Writes .crimes/feedback.jsonl and, on `fp`, an auto-suppression that resurfaces for re-confirmation on the next minor crimes bump.
triage [options] [path] Walk findings and assign per-finding dispositions (fix-now / fix-this-PR / needs-design / wont-fix / scaffolding).
migrate-pins [options] [path] Preview fingerprint migrations for triage, suppressions and baseline; apply a reviewed JSON plan.
hook [options] Claude pre-edit hook: read tool input on stdin and return advisory context.
Tips:
scope the scan to what you're changing — that's the whole trick:
crimes scan --files a.ts,b.ts planning a change to known files
crimes scan --related-to <file> …and everything importing it, or imported by it
crimes scan --changed --base main reviewing edits you already made
bare `crimes scan` audits the whole repo — useful, but rarely what you want mid-task.
run `crimes context <file>` before editing — findings + likely tests + agent notes for one file.
run `crimes init --agents` once; normal use refreshes generated skills or shows an update notice.

Use crimes <command> --help for that command’s complete options. scan --changed selects files; it does not distinguish old findings from new ones. Use diff, verdict, or a baseline when you need a finding delta.

70 registered detectors; 5 optional and off by default. An optional id in detectors.enable adds that detector without disabling the defaults.

IDChargeDefault
accessible_interaction_riskAccessible Interaction RiskOff (optional)
action_label_driftAction Label DriftOn
agent_permission_sprawlLoaded AgentOn
boolean_naming_driftUnprefixed BooleanOff (optional)
boolean_naming_drift.pyBoolean naming drift (Python)Off (optional)
circular_dependencyCircular DependencyOn
circular_dependency.pyCircular Dependency (Python)On
command_drift_docs_code_driftDocs Reference Missing CommandOn
commented_out_codeCommented-Out CodeOn
commented_out_codeCommented-Out Code (Universal)On
concept_alias_driftConcept Alias DriftOn
config_driftEnvironment RouletteOn
contract_driftContract Split-BrainOn
copy_ia_driftCopy / IA DriftOn
cross_language_concept_alias_driftCross-language concept alias driftOn
cross_language_route_driftCross-language route driftOn
cross_language_type_driftCross-language type driftOn
date_string_concatDate String SewingOn
deep_importDeep Import AbuseOn
deep_import.pyDeep Import (Python)On
dependency_provenance_gapPhantom AccompliceOn
design_token_escapeRaw Style ConcentrationOff (optional)
direct_dateDirect Date.now() / new Date()On
direct_date.pyDirect clock read (Python)On
docs_code_driftDocs-Code DriftOn
dst_naive_arithmeticDST-Naive Day MathOn
duplicate_component_shapeDuplicate Component ShapeOn
duplicated_navigation_sourceDuplicated Navigation SourceOn
duplicated_policyPolicy DoppelgängerOn
duplicated_role_status_plan_checkDuplicated Role / Status / Plan CheckOn
exact_duplicate_blockExact Duplicate BlockOn
finder_duplicate_filenameFinder Duplicate FilenameOn
hardcoded_local_pathLocalhost-on-DiskOn
hardcoded_localhostDev-Server URLOn
high_fan_in_fan_outHigh Fan-In / Fan-OutOn
large_fileLarge FileOn
large_functionLarge FunctionOn
large_function.pyGod Function (Python)On
layer_violationLayer ViolationOn
locale_driftHost-Locale DriftOn
logic_in_commentsLogic in CommentsOn
magic_domain_literal_scatterMagic Domain Literal ScatterOn
missing_agent_contextMissing Agent ContextOn
mixed_utc_local_methodsHalf-UTC, Half-LocalOn
mixed_utc_local_methods.pyMixed UTC and local clock reads (Python)On
mock_saturationMock AlibiOn
name_behavior_mismatchName / Behaviour MismatchOn
near_duplicate_blockNear-Duplicate BlockOn
negative_flag_mazeNegative Flag MazeOn
option_bag_junk_drawerOption Bag Junk DrawerOn
orphaned_destinationOrphaned DestinationOn
oversized_rasterOversized RasterOn
parallel_destinationParallel DestinationOff (optional)
pass_through_abstractionAbstraction LaunderingOn
permission_ia_driftPermission IA DriftOn
raster_should_be_vectorIcon-Sized RasterOn
responsive_fragilityResponsive FragilityOn
return_shape_rouletteReturn Shape RouletteOn
route_metadata_driftRoute Metadata DriftOn
singular_plural_type_mismatchPlural MismatchOn
svg_with_embedded_rasterSVG With Embedded RasterOn
swallowed_errorCatch and ReleaseOn
sync_io_in_hotpathSync I/O in Hot PathOn
sync_io_in_hotpath.pyBlocking I/O in a hot path (Python)On
timezone_unsafe_parseTimezone RouletteOn
todo_densityTODO/FIXME DensityOn
unbounded_async_fanoutConcurrency StampedeOn
unsafe_retryDouble JeopardyOn
weak_test_signalWeak Test SignalOn
weak_test_signal.pyWeak test signal (Python)On