AI agents write code fast, but they repeat the same anti-patterns everywhere: god components, fat controllers, hardcoded secrets, prop drilling. Left unchecked, these compound into a codebase no one can maintain. You either stay dependent on AI tools to untangle it, or pay a developer to rewrite everything from scratch.
A zero-dependency CLI that scans React, Express, and NestJS codebases for 14 architectural anti-patterns and gives you actionable fixes.
Figure 3. hardcoded-secrets. Secrets in source code end up in version history forever. This sniffer catches passwords, API keys, and AWS credentials at error severity.
Figure 4. god-service. Services with too many injected dependencies violate single responsibility. Split into focused services that each own one domain concern.
Browse issues with keyboard navigation. Expand details, filter by framework, copy fixes as AI prompts for ChatGPT or Claude.
Plugin System
Write custom sniffers in ~20 lines. 5-stage validation for security. Register in .snifferrc.json and run alongside built-in rules.
CI/CD Ready
Exit codes for pass/fail. JSON output for parsing. Husky pre-commit hooks. GitHub Actions workflow included.
Monorepo Support
Auto-detects npm, pnpm, Nx, Turborepo, and Lerna workspaces. Per-package config inheritance. Just run aps — it figures out the rest.
Zero Dependencies
Built entirely on Node.js built-ins. No AST parsers, no transitive deps, no supply chain risk. Fast installs, small footprint.
Fully Configurable
Tune every threshold in .snifferrc.json. Disable sniffers, change severity levels, set per-framework rules. Setup wizard included.
Common questions
How is this different from ESLint?
ESLint checks code style and syntax. APS checks architecture — are your components too big? Are your services doing too much? Are your route handlers too fat? These are structural problems that ESLint doesn't target.
Why regex instead of AST parsing?
Zero dependencies. Regex-based heuristics are fast, portable, and good enough for architectural pattern detection. APS isn't checking syntax — it's checking structure.
Does it work with TypeScript?
Yes. APS scans .ts, .tsx, .js, and .jsx files. Since it uses regex heuristics rather than a parser, TypeScript syntax is handled naturally.
Can I write my own sniffers?
Yes. The plugin system lets you write custom sniffers in ~20 lines of JavaScript. They go through 5-stage validation for security and run alongside built-in rules.
Will it slow down my CI?
No. APS scans files in parallel and uses only regex matching — no AST parsing overhead. A typical project scans in under 2 seconds.
What’s new
V5 False Positive Reduction
v0.6.0 · 2026-03-28
Skip typeof comparisons in magic-strings (e.g. typeof x === 'string')
Detect specialization wrappers, list containers, and render-slot injection in prop-drilling
Tree/recursive node bonus (+4) and SVG/positioning bonus (+3) for prop-explosion
371 tests passing
V4 False Positive Reduction
v0.5.0 · 2026-03-28
Multi-child composition detection for prop-drilling — distinguishes drilling from distribution
Skip method-call return comparisons in magic-strings (e.g. .getIsSorted() === 'asc')
Extended union type extraction for interface properties and function parameters
Reverted prop-explosion threshold from 10 back to 7