Fast, local-first CLI that gives your Python codebase a 0-100 health score
Project description
python-checkup
Fast, local-first Python code health checks with a single command.
A 0-100 health score for Python codebases. Runs Ruff, mypy, Bandit, Radon, Vulture, and deptry in parallel, scores six categories, and tells you what to fix first.
Quickstart
uvx python-checkup .
To see the full report in your browser:
uvx python-checkup . --web
To install persistently:
uv tool install python-checkup
Usage
# quick scan (Ruff + deptry only, ~3s)
uvx python-checkup . --profile quick
# full scan with all optional analyzers
uvx --from 'python-checkup[full]' python-checkup .
# only changed files vs a branch
uvx python-checkup . --diff main
# auto-fix what Ruff can, then rescan
uvx python-checkup . --fix
# filter categories
uvx python-checkup . --only quality,security
uvx python-checkup . --skip dead_code
# output formats
uvx python-checkup . --score # just the number
uvx python-checkup . --json # machine-readable
uvx python-checkup . --badge # shields.io URL
# CI gate
uvx python-checkup . --fail-under 70
What it runs
Default profile:
| Category | Tools |
|---|---|
| Code Quality | Ruff |
| Type Safety | mypy |
| Security | Bandit, Ruff S-rules |
| Complexity | Radon, Ruff C901 |
| Dead Code | Vulture |
| Dependencies | deptry |
Optional analyzers (install via extras):
| Extra | Adds |
|---|---|
vulns |
OSV-backed dependency vulnerability scanning |
secrets |
detect-secrets |
pyright |
basedpyright as type backend |
quality-extra |
typos for spelling checks |
mcp |
MCP server support |
full |
all of the above |
Scoring
Each category gets a 0-100 score. The overall score is a weighted average:
| Category | Default Weight |
|---|---|
| Code Quality | 25 |
| Type Safety | 20 |
| Security | 20 |
| Complexity | 15 |
| Dead Code | 10 |
| Dependencies | 10 |
When a category has no available analyzer, its weight redistributes proportionally to the rest.
| Score | Label |
|---|---|
| 75-100 | Healthy |
| 50-74 | Needs work |
| 0-49 | Critical |
See docs/scoring.md for the full methodology.
Configuration
Works without config. To customize, add to pyproject.toml:
[tool.python-checkup]
timeout = 60
[tool.python-checkup.weights]
quality = 25
types = 20
security = 20
complexity = 15
dead_code = 10
dependencies = 10
[tool.python-checkup.thresholds]
healthy = 75
needs_work = 50
[tool.python-checkup.ignore]
rules = ["S101"]
files = ["tests/**", "migrations/**"]
See docs/configuration.md for the full reference.
CI
Gate on score:
uvx python-checkup . --fail-under 70
GitHub Action:
- uses: nabroleonx/python-checkup@v1
with:
fail-under: 70
Also works as a pre-commit hook. See action.yml and .pre-commit-hooks.yaml.
MCP Server
Expose python-checkup to AI coding agents (Claude Code, Cursor, VS Code):
uvx --from 'python-checkup[mcp]' python-checkup mcp install --editor cursor
Registers five tools: python_checkup_diagnose, python_checkup_lint,
python_checkup_typecheck, python_checkup_security, python_checkup_explain_rule.
See docs/mcp-server.md for details.
Plugins
Add custom analyzers via entry points:
[project.entry-points."python-checkup.analyzers"]
my-analyzer = "my_package:MyAnalyzer"
See docs/plugins.md for the full guide.
Docs
docs/configuration.md-- weights, thresholds, ignore rulesdocs/scoring.md-- scoring methodologydocs/mcp-server.md-- MCP server setupdocs/plugins.md-- custom analyzer developmentdocs/development.md-- contributing
Development
uv sync --all-extras
uv run pytest
uv run ruff check python_checkup tests
uv run mypy python_checkup
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file python_checkup-0.1.1.tar.gz.
File metadata
- Download URL: python_checkup-0.1.1.tar.gz
- Upload date:
- Size: 182.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4b5c41496b2e9de58bccd64842df901340b28d2c1bb0d0e3f5b527adbb0e1dab
|
|
| MD5 |
332ae650f6074fbaf40cf9fa34a9834c
|
|
| BLAKE2b-256 |
a729bb9dc6e9947735dfa2716e62e6b6731284df093fb9df122b5a4732242660
|
File details
Details for the file python_checkup-0.1.1-py3-none-any.whl.
File metadata
- Download URL: python_checkup-0.1.1-py3-none-any.whl
- Upload date:
- Size: 159.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a4161da8b3b9cd300eea6ff272dcec48b8f3ce9f0beb2c9ba8ef9f548d721b52
|
|
| MD5 |
dae7f4a991ab5184038910b9ca7ca68a
|
|
| BLAKE2b-256 |
6cf251eea8cd02b005cceb427cd8306856865061ce375083fd10040b0d13d5e2
|