Skip to main content

Proactive refactoring audit for Python repositories.

Project description

Cremona

CI License: Apache-2.0 Python

Cremona turns Python structural-debt signals into an agent-ready refactoring queue and CI regression gate.

It combines ruff C901, lizard, complexipy, vulture, git history, and optional coverage data so you can answer two questions quickly:

  • Is structural debt regressing?
  • Which files should be refactored next?

60-second quickstart

Run Cremona against a repository without cloning this repo first:

uvx cremona scan /path/to/repo

Keep it installed for repeated use:

pipx install cremona
cremona scan /path/to/repo

By default, Cremona writes these files in the target repository:

  • output/refactor-audit/report.md
  • output/refactor-audit/report.json
  • output/refactor-audit/raw/

Start with report.md. It gives you the repo verdict, the file queue, the top hotspots, and the baseline diff in one pass.

Why Cremona

  • ruff tells you where control flow is growing.
  • lizard and complexipy show which functions are hard to change safely.
  • Git history shows churn and coupling.
  • Coverage data shows where change risk is still high.
  • Cremona turns those signals into a refactoring queue instead of a pile of unrelated warnings.

Example verdict and queue

This excerpt comes from Cremona's current self-host report.

  • Repo verdict: stable
  • Routing pressure: watch_only
  • Signal health: full
Priority Score File Why it stays visible
watch 33 src/cremona/core/engine.py 5 commits, 2444 churn, branch coverage 0.82, coupled with tests/test_cremona_scan.py
watch 32 tests/test_cremona_scan.py 8 commits, 4168 churn, branch coverage 1.00, coupled with src/cremona/core/engine.py
watch 27 src/cremona/scan.py 2 commits, 5870 churn, line coverage 1.00, coupled with src/cremona/core/__init__.py

On a repository with active structural pressure, the same queue will surface investigate_soon and investigate_now rows.

Codex and agent workflow

Use the bundled Codex skill when you want an agent to turn the report into a concrete refactor plan.

  1. Run uvx cremona scan /path/to/repo.
  2. Open report.md and choose the top file from agent_routing_queue.
  3. Ask Codex to make the smallest safe refactor.
  4. Run Cremona again.
  5. Update the baseline only when debt actually dropped or the schema changed.

When you start Codex inside this repository, it discovers the repo-scoped skill automatically from .agents/skills/cremona-proactive-refactor-audit.

To install the same skill into your personal Codex setup:

$skill-installer install the skill from https://github.com/NeapolitanIcecream/cremona/tree/main/.agents/skills/cremona-proactive-refactor-audit

Read docs/codex-skill.md for the full workflow.

CI gate

Bootstrap the first baseline:

uvx cremona scan /path/to/repo --update-baseline
git add quality/refactor-baseline.json

Use coverage in the gate so routing can score change risk:

uv run coverage run -m pytest -q
uv run coverage json -o coverage.json
uvx cremona scan --baseline quality/refactor-baseline.json --coverage-json coverage.json --fail-on-regression

Read docs/reusable-workflow.md for the fastest GitHub Actions integration, or docs/ci-gate.md if you want the full custom recipe.

Install from source for contributors

Use the source install when you are changing Cremona itself.

git clone https://github.com/NeapolitanIcecream/cremona.git
cd cremona
uv sync --group dev
uv run cremona --help

Read next

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cremona-0.1.1.tar.gz (36.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cremona-0.1.1-py3-none-any.whl (40.8 kB view details)

Uploaded Python 3

File details

Details for the file cremona-0.1.1.tar.gz.

File metadata

  • Download URL: cremona-0.1.1.tar.gz
  • Upload date:
  • Size: 36.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.1 {"installer":{"name":"uv","version":"0.11.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for cremona-0.1.1.tar.gz
Algorithm Hash digest
SHA256 7b5124fb4266a419fddaf73fc64b26c417c439844150a9f6666d191fe3cebb76
MD5 b11130528651f361fa5ee30e9b5fccd6
BLAKE2b-256 18645c745f9fff4f9db8416fd7cd6298c5a485254c7dccfaeefd7fce4312bd62

See more details on using hashes here.

File details

Details for the file cremona-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: cremona-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 40.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.1 {"installer":{"name":"uv","version":"0.11.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for cremona-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 75e06dc3ca066ff239fd9179841bb4bb8e2fe9593b78af71828724bf62ed8dfd
MD5 10372c720eacd320b264c57723f187a3
BLAKE2b-256 aa1f05b325a6a37759300e421b1adefe34729dea2c17bbfe3ccea71b7489b74f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page