Dead code and unused imports
Functions that are never called, variables that are assigned but never read, imports that serve no purpose. The agent traces actual usage across your codebase, not just within a single file.
Complexity hotspots
Methods with too many branches, deeply nested conditionals, and functions that do too many things at once. These are the places where bugs hide and new developers get stuck.
Duplicated logic
Significant blocks of repeated code that should be extracted into shared functions. Not trivial one-liners, but actual logic duplication that makes maintenance harder with every copy.
Anti-patterns and code smells
God classes, long parameter lists, feature envy, and other structural patterns that signal deeper design problems. The agent understands object-oriented and functional patterns, not just syntax.
SOLID violations
Classes handling too many responsibilities, tight coupling between modules, and dependency inversion problems. The kind of issues that make refactoring risky and testing difficult.
Missing error handling
Code paths where failures are likely but not handled: unvalidated external responses, unchecked null returns, swallowed exceptions. These are the spots that crash production at 3 AM.
Hardcoded values
Connection strings, API URLs, magic numbers, and other values embedded directly in source code that should live in configuration. Spotted in context, not by matching string patterns.