enola
Architectural regression testing for AI-assisted development.
Catch structural regressions that builds and tests cannot see: new dependency cycles, violated layer boundaries, undeclared service dependencies, and changes that spread beyond their intended scope.
Enola maps your codebase before a change and compares it with the structure afterward. The result is about this change, not every problem already in the repository, and only the rules you choose can fail the build.
- Exact, local measurement. Parsed source and graph algorithms. No model, no embeddings, no upload, no account, no license check.
- One graph across the repository. 23 languages and formats, detected automatically and combined into one baseline and verdict.
- One loop everywhere. Your coding agent reads the graph before it edits and receives the verdict afterward. The same check runs from the CLI or in CI.
Install
pip install enola-cli
The command is enola. This package ships a prebuilt binary, so there is no
Python dependency at run time and nothing is importable from Python.
Try it read-only
enola --explain /path/to/your/repo
No baseline, config file or MCP client, and nothing is written to disk. Enola prints the architecture it measured (patterns, cycles, layer violations, hotspots, blast radius and structural outliers) and exits.
Documentation
Full documentation, including the CLI reference and architecture internals, lives at https://github.com/enola-labs/enola.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
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 enola_cli-0.4.15-py3-none-win_amd64.whl.
File metadata
- Download URL: enola_cli-0.4.15-py3-none-win_amd64.whl
- Upload date:
- Size: 11.3 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
96e3943f4d8783dd414dcadc5b00fd0e5cde905d68eeb4a6f3bc8a2a0f1cf652
|
|
| MD5 |
48134c7d5df200db9aa4d95f5790f7bc
|
|
| BLAKE2b-256 |
85c552f37b6fa3b103aa24f1129832455e559d650653d35990d67a30ecc02169
|
Provenance
The following attestation bundles were made for enola_cli-0.4.15-py3-none-win_amd64.whl:
Publisher:
release.yml on enola-labs/enola
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
enola_cli-0.4.15-py3-none-win_amd64.whl -
Subject digest:
96e3943f4d8783dd414dcadc5b00fd0e5cde905d68eeb4a6f3bc8a2a0f1cf652 - Sigstore transparency entry: 2743064456
- Sigstore integration time:
-
Permalink:
enola-labs/enola@d8864dfb238718eded7635912bc4a4fd3ef9959f -
Branch / Tag:
refs/tags/v0.4.15 - Owner: https://github.com/enola-labs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d8864dfb238718eded7635912bc4a4fd3ef9959f -
Trigger Event:
push
-
Statement type:
File details
Details for the file enola_cli-0.4.15-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: enola_cli-0.4.15-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 11.1 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
57a24c01ae85aa3fb9da0b22d68f07f862c0b5641c980fe7899cd9a09a23a410
|
|
| MD5 |
3484d460e1e6b73f9696a55f618d22be
|
|
| BLAKE2b-256 |
31e3ed70bf537669117bd4b41065ea0bd281278c693ac7bf2fa8584e9aacd47e
|
Provenance
The following attestation bundles were made for enola_cli-0.4.15-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
release.yml on enola-labs/enola
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
enola_cli-0.4.15-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
57a24c01ae85aa3fb9da0b22d68f07f862c0b5641c980fe7899cd9a09a23a410 - Sigstore transparency entry: 2743064535
- Sigstore integration time:
-
Permalink:
enola-labs/enola@d8864dfb238718eded7635912bc4a4fd3ef9959f -
Branch / Tag:
refs/tags/v0.4.15 - Owner: https://github.com/enola-labs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d8864dfb238718eded7635912bc4a4fd3ef9959f -
Trigger Event:
push
-
Statement type:
File details
Details for the file enola_cli-0.4.15-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: enola_cli-0.4.15-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 10.2 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c7be85ca41ea2574ef90fd6ae09e230a46f9dfbb7c8814d6a047d4932249273e
|
|
| MD5 |
0a6c35c766066ccc76952b5c57ef094f
|
|
| BLAKE2b-256 |
7a120998dccc06dfc2d1ec416c42ed6c4bf494520240857be9a6c8892910834e
|
Provenance
The following attestation bundles were made for enola_cli-0.4.15-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
release.yml on enola-labs/enola
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
enola_cli-0.4.15-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
c7be85ca41ea2574ef90fd6ae09e230a46f9dfbb7c8814d6a047d4932249273e - Sigstore transparency entry: 2743064389
- Sigstore integration time:
-
Permalink:
enola-labs/enola@d8864dfb238718eded7635912bc4a4fd3ef9959f -
Branch / Tag:
refs/tags/v0.4.15 - Owner: https://github.com/enola-labs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d8864dfb238718eded7635912bc4a4fd3ef9959f -
Trigger Event:
push
-
Statement type:
File details
Details for the file enola_cli-0.4.15-py3-none-macosx_12_0_x86_64.whl.
File metadata
- Download URL: enola_cli-0.4.15-py3-none-macosx_12_0_x86_64.whl
- Upload date:
- Size: 11.1 MB
- Tags: Python 3, macOS 12.0+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
36c90e7877ebaa2aa743d4aab326b334545400c142dc551a27384e61594bf06d
|
|
| MD5 |
cd1a81ef5749021080b3c77a1d1cc392
|
|
| BLAKE2b-256 |
3340b7389b625083ca5cd56ac7b73d5cd351f8e51e69655f8be460d4acf6b572
|
Provenance
The following attestation bundles were made for enola_cli-0.4.15-py3-none-macosx_12_0_x86_64.whl:
Publisher:
release.yml on enola-labs/enola
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
enola_cli-0.4.15-py3-none-macosx_12_0_x86_64.whl -
Subject digest:
36c90e7877ebaa2aa743d4aab326b334545400c142dc551a27384e61594bf06d - Sigstore transparency entry: 2743064258
- Sigstore integration time:
-
Permalink:
enola-labs/enola@d8864dfb238718eded7635912bc4a4fd3ef9959f -
Branch / Tag:
refs/tags/v0.4.15 - Owner: https://github.com/enola-labs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d8864dfb238718eded7635912bc4a4fd3ef9959f -
Trigger Event:
push
-
Statement type:
File details
Details for the file enola_cli-0.4.15-py3-none-macosx_12_0_arm64.whl.
File metadata
- Download URL: enola_cli-0.4.15-py3-none-macosx_12_0_arm64.whl
- Upload date:
- Size: 10.6 MB
- Tags: Python 3, macOS 12.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1d87c32e1a2b9359ddb90522c864707f26c91bb8a31ef9ef0824fb500f00be41
|
|
| MD5 |
da3e6bc3582e2f3316b6145cc7fca871
|
|
| BLAKE2b-256 |
0e277e12aaf3e92263e8822e6a6ff9e6455c56ceda5d39e4f86558d5a5668872
|
Provenance
The following attestation bundles were made for enola_cli-0.4.15-py3-none-macosx_12_0_arm64.whl:
Publisher:
release.yml on enola-labs/enola
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
enola_cli-0.4.15-py3-none-macosx_12_0_arm64.whl -
Subject digest:
1d87c32e1a2b9359ddb90522c864707f26c91bb8a31ef9ef0824fb500f00be41 - Sigstore transparency entry: 2743064326
- Sigstore integration time:
-
Permalink:
enola-labs/enola@d8864dfb238718eded7635912bc4a4fd3ef9959f -
Branch / Tag:
refs/tags/v0.4.15 - Owner: https://github.com/enola-labs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d8864dfb238718eded7635912bc4a4fd3ef9959f -
Trigger Event:
push
-
Statement type: