Metadata-Version: 2.4
Name: deviant-scan
Version: 0.1.0
Summary: Finds bugs where code breaks the project's own patterns.
License-Expression: MIT
Project-URL: Homepage, https://github.com/ImalkaPerera/deviant
Project-URL: Documentation, https://github.com/ImalkaPerera/deviant/tree/main/docs
Project-URL: Issues, https://github.com/ImalkaPerera/deviant/issues
Project-URL: Source, https://github.com/ImalkaPerera/deviant
Keywords: static-analysis,bug-detection,code-quality,fastapi,github-actions,claude-code,ai-agents
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Topic :: Software Development :: Quality Assurance
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: PyYAML>=6
Provides-Extra: dev
Requires-Dist: pytest>=8; extra == "dev"
Requires-Dist: ruff==0.17.1; extra == "dev"
Dynamic: license-file

# deviant-scan

**Find the one thing in your code that breaks the pattern.**

Deviant learns your project's own conventions, flags the exceptions, and shows the git history
you need to judge them. You write no rules, and finding the exceptions needs no AI, no API key
and no network.

![A Deviant scan: 47 of 48 routes check auth, and the one that does not is shown with who last changed it and why](https://raw.githubusercontent.com/ImalkaPerera/deviant/main/docs/assets/demo.png)

47 of your 48 API routes check who is calling. The 48th doesn't, and it exports every user's
data. Nobody noticed. Deviant counts what your code already does, picks out the rare item that
breaks the pattern, and shows the git history behind it.

## Use it

```bash
pip install deviant-scan
deviant-scan path/to/your/project --with-git
```

Or without installing it: `uvx deviant-scan path/to/your/project --with-git`.

It checks FastAPI routes and GitHub Actions workflows today. Add `--json` for machine-readable
output. Everything runs on your machine. It reads your files and never runs your code.

## In Claude Code

A plugin judges each exception as a bug, intentional or unsure, with proof:

```text
/plugin install deviant --marketplace ImalkaPerera/deviant
```

## Learn more

- [Source and README](https://github.com/ImalkaPerera/deviant)
- [How it works](https://github.com/ImalkaPerera/deviant/blob/main/docs/how-it-works.md)
- [What it found and got wrong on real projects](https://github.com/ImalkaPerera/deviant/blob/main/docs/tested-on-real-projects.md)
- [Contribute](https://github.com/ImalkaPerera/deviant/blob/main/CONTRIBUTING.md)

MIT licence.
