Open-source CLI for analyzing Python apps and generating Dockerfile + SBOM
Project description
Harden (OSS Core)
Minimal open‑source subset of Harden. It only provides:
analyze— static risk reportlock— deterministic dependency lockgenerate— Dockerfile‑only + SBOM
No runtime loop, no deploy/export, no enterprise features.
Enterprise Edition
The Enterprise Edition extends Harden with:
- Runtime profiling + policy tightening
- Deployment artifacts (K8s, CI/CD, auth, etc.)
- Enterprise buyer workflows and reporting
If you need those capabilities, request access to the Enterprise Edition.
Installation
pip install -e .
Or run directly:
python3 -m harden [command]
Commands
analyze
harden analyze <path>
Produces:
- Terminal report
- JSON report at
<path>/.harden/state/harden-report.json
Highlights:
- Framework + entrypoint detection
- Entry command inference (best‑effort) — shown in terminal and JSON report
- Python version detection
- Secrets scanning (regex + entropy)
- Dependency listing (requirements/pyproject/bare imports)
- OSV CVE checks with severity
- AI usage + external services detection
- Risk score (0–100)
lock
harden lock <path> [--strategy auto|uv|pip-compile|pip-freeze]
Produces:
<path>/requirements.lock<path>/build_report.json
If no manifest exists, lock infers dependencies from imports and writes
.harden/state/requirements.inferred.txt as the lock input.
generate
harden generate <path> [--fail-on-critical]
Produces:
<path>/.harden/Dockerfile<path>/.harden/sbom.json<path>/.dockerignore(only if missing)
Behavior:
- Uses
requirements.lockwhen present (preferred) - Falls back to
requirements.txt - If only
pyproject.tomlexists, installs the project (pip install .)
--fail-on-critical exits non‑zero if critical CVEs are detected.
OSV Cache Behavior
OSV responses are cached at:
<path>/.harden/state/osv_cache.json
Default TTL: 24 hours. Override with:
export HARDEN_OSV_CACHE_TTL_SECONDS=0 # disable cache
Risk Scoring (high‑level)
- Critical secrets: +20 each
- Hardcoded AI keys: +25 each
- Critical CVEs: +15 each
- High‑severity issues: +8–10 each
- Unpinned dependencies: +2 each
Risk levels:
- 0–24: LOW
- 25–49: MEDIUM
- 50–74: HIGH
- 75+: CRITICAL
Project Structure (OSS)
harden/
├── __init__.py
├── __main__.py
├── cli.py
├── locker.py
├── pipeline.py
├── analyzer/
│ ├── models.py
│ ├── detector.py
│ ├── secrets.py
│ ├── dependencies.py
│ ├── ai_usage.py
│ └── report.py
└── generators/
├── dockerfile.py
└── sbom.py
Requirements
- Python 3.8+
- click >= 8.0.0
- pyyaml >= 6.0
- rich >= 13.0.0
License
Apache-2.0. See LICENSE.
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
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 harden-0.1.4.tar.gz.
File metadata
- Download URL: harden-0.1.4.tar.gz
- Upload date:
- Size: 117.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d1c7c3b3afa083ff7373768e3735eaf371aa4054180d0369ae148a9c9a5e4a89
|
|
| MD5 |
1d2d1d1b1fb2eff727382e4358c4d464
|
|
| BLAKE2b-256 |
5fa5a8e42d87467f8d6d13b8b50e60dca1c635e0c223bd954cf7409e8f857ebf
|
Provenance
The following attestation bundles were made for harden-0.1.4.tar.gz:
Publisher:
publish.yml on vizopsai/harden
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
harden-0.1.4.tar.gz -
Subject digest:
d1c7c3b3afa083ff7373768e3735eaf371aa4054180d0369ae148a9c9a5e4a89 - Sigstore transparency entry: 1004619936
- Sigstore integration time:
-
Permalink:
vizopsai/harden@eb692ca2ca4fbc7ef9ba2f73c87e68f7fcd6c1d1 -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/vizopsai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@eb692ca2ca4fbc7ef9ba2f73c87e68f7fcd6c1d1 -
Trigger Event:
push
-
Statement type:
File details
Details for the file harden-0.1.4-py3-none-any.whl.
File metadata
- Download URL: harden-0.1.4-py3-none-any.whl
- Upload date:
- Size: 63.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1714d23954334cb50908b455073f55f6f6ec45da32a87be9b06b162caec78ae4
|
|
| MD5 |
47ff44b6228daae1c8a5e27e147b342c
|
|
| BLAKE2b-256 |
e9eb715e92f67607c41098671ac0f565a814fa3c6c11f9ce5c27f6795b4c6467
|
Provenance
The following attestation bundles were made for harden-0.1.4-py3-none-any.whl:
Publisher:
publish.yml on vizopsai/harden
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
harden-0.1.4-py3-none-any.whl -
Subject digest:
1714d23954334cb50908b455073f55f6f6ec45da32a87be9b06b162caec78ae4 - Sigstore transparency entry: 1004619938
- Sigstore integration time:
-
Permalink:
vizopsai/harden@eb692ca2ca4fbc7ef9ba2f73c87e68f7fcd6c1d1 -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/vizopsai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@eb692ca2ca4fbc7ef9ba2f73c87e68f7fcd6c1d1 -
Trigger Event:
push
-
Statement type: