Squash violations, not velocity. Automated EU AI Act compliance for ML teams — CI/CD-native, open-core, developer-first.
Project description
The pytest of AI compliance. Runs in your CI/CD pipeline. Ships in 10 seconds.
⏰ EU AI Act high-risk enforcement: August 2, 2026
Non-compliance: up to €35M or 7% of global turnover. Annex IV documentation alone takes 3–6 months manually. Squash does it in 10 seconds.
v3.0.0 — Bulletproof Edition
Every Tier-0/1 attestation is byte-identical on rerun. Every signed
payload flows through RFC 8785 canonical JSON. Every cert ID is
keyed on the input (UUIDv5, never UUIDv4). Every clock is injectable.
Every release wheel + Docker image carries SLSA Build Level 3
provenance. The full chain — input manifest → canonical body → Ed25519
→ RFC 3161 trusted timestamp → SLSA — is verifiable end-to-end via
squash self-verify.
squash demo --walkthrough # 10-section Bulletproof tour
squash demo --server # interactive HTML demo at localhost:8002
squash self-verify -d ./out # walk the chain on any attestation
See CHANGELOG.md §3.0.0, AUDIT_BASELINE.md, TIER_MAP.md, and demo/ for the full surface.
See it in 10 seconds
pip install squash-ai
squash demo
────────────────────────────────────────────────────
Squash violations, not velocity.
Running demo attestation on sample BERT model…
────────────────────────────────────────────────────
Model: bert-base-uncased (sample)
Policy: eu-ai-act
✅ Attestation PASSED
Artifacts generated:
cyclonedx-mlbom.json 48,392 bytes
sbom.spdx.json 22,104 bytes
attestation.json 3,841 bytes
annex-iv-technical-documentation.md 18,299 bytes
provenance.json 1,203 bytes
────────────────────────────────────────────────────
This is squash. It runs in CI in <10 seconds.
pip install squash-ai && squash attest ./your-model
────────────────────────────────────────────────────
Install
# Community (free, Apache 2.0)
pip install squash-ai
# With REST API server
pip install "squash-ai[api]"
# Full feature set
pip install "squash-ai[api,signing,sbom]"
CI/CD in one line
GitHub Actions
- uses: konjoai/squash@v1
with:
model-path: ./my-model
policy: eu-ai-act
fail-on-violation: true
GitLab CI
include:
- remote: 'https://raw.githubusercontent.com/konjoai/squash/main/integrations/gitlab-ci/squash.gitlab-ci.yml'
CLI
squash attest ./my-model \
--policy eu-ai-act \
--policy nist-ai-rmf \
--sign \
--fail-on-violation
Output:
✓ CycloneDX 1.7 ML-BOM → cyclonedx-mlbom.json
✓ SPDX 2.3 SBOM → sbom.spdx.json
✓ EU AI Act Annex IV: PASS → annex-iv.md
✓ NIST AI RMF: PASS (42/42)
✓ OWASP LLM Top 10: PASS
✓ SLSA Level 2 provenance → provenance.json
✓ ModelScan: PASS (0 findings)
✓ Signed via Sigstore Rekor
Why Squash
| Without Squash | With Squash |
|---|---|
| Annex IV documentation: 3–6 months | Annex IV documentation: 10 seconds |
| Compliance consultant: €150K–€400K/yr | Squash Professional: $299/month |
| Manual risk assessment per model | squash attest ./model --policy eu-ai-act |
| Violation discovered in audit | Violation blocked in CI before merge |
| Zero visibility | squash_models_compliant_ratio 0.979 in Grafana |
Features
| Capability | Detail |
|---|---|
| EU AI Act Annex IV | All 12 required documentation sections, auto-generated |
| CycloneDX 1.7 ML-BOM | Machine-readable model bill of materials |
| SPDX 2.3 SBOM | Full dependency and lineage graph |
| 10+ Policy Frameworks | EU AI Act · NIST AI RMF · ISO 42001 · OWASP LLM Top 10 · FedRAMP · CMMC |
| ModelScan Security | Pickle exploits, serialization attacks, unsafe ops |
| Sigstore Signing | Keyless signing via Rekor transparency log |
| SLSA Provenance | Level 1–3 provenance attestation |
| VEX Feed | Live CVE tracking for deployed AI model components |
| Drift Detection | Alerts when model behavior diverges from attested baseline |
Prometheus /metrics |
Grafana-compatible attestation counts, violations, latency |
| Slack / Teams Alerts | Webhook notifications on violations, drift events, CVE hits |
| JIRA / Linear / GitHub Issues | Auto-creates tickets on policy violations |
| FastAPI / Django Middleware | X-Squash-Compliant header on every inference response |
| Compliance Badge |  |
squash watch |
Re-attests on model file change — continuous local compliance |
squash install-hook |
git pre-push hook — blocks non-compliant pushes |
| 10 MLOps Integrations | MLflow · W&B · HuggingFace · LangChain · SageMaker · Vertex AI · Ray · Kubernetes |
| Open-core | Community tier free forever under Apache 2.0 |
Set up a new project in 60 seconds
squash init ./my-model
# Auto-detects PyTorch / TensorFlow / JAX / MLflow / HuggingFace
# Writes .squash.yml, runs a dry-run attestation
Compliance badge in your README

Available statuses: compliant · non-compliant · partial · unknown
Available frameworks: eu-ai-act · nist-ai-rmf · iso-42001 · anything
Policy Frameworks
| Framework | Status | Key Checks |
|---|---|---|
| EU AI Act (Annex IV) | ✅ Full | Technical documentation, risk classification, human oversight |
| NIST AI RMF 1.0 | ✅ Full | 42 controls: GOVERN · MAP · MEASURE · MANAGE |
| OWASP LLM Top 10 | ✅ Full | LLM01–LLM10 vulnerability categories |
| ISO 42001 | ✅ Core | Clause 6, 8, 9 |
| NTIA Minimum Elements | ✅ Full | 7 required SBOM fields |
| FedRAMP AI | ✅ Core | Federal AI procurement requirements |
| CMMC Level 2 | ✅ Core | DoD contractor AI requirements |
Python API
from squash import AttestPipeline, AttestConfig
result = AttestPipeline.run(AttestConfig(
model_path="./my-model",
policies=["eu-ai-act", "owasp-llm"],
sign=True,
fail_on_violation=True,
))
print(f"Passed: {result.passed}")
print(f"Attestation ID: {result.attestation_id}")
REST API
pip install "squash-ai[api]"
uvicorn squash.api:app --host 0.0.0.0 --port 4444
curl -X POST http://localhost:4444/v1/attest \
-H "Authorization: Bearer $SQUASH_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model_path": "/models/bert-base", "policies": ["eu-ai-act"]}'
Prometheus metrics
# HELP squash_attestations_total Total attestation runs
squash_attestations_total{result="passed",policy="eu-ai-act"} 142
squash_models_compliant_ratio 0.979
squash_api_latency_seconds_bucket{le="0.1"} 138
Tiers & Pricing
| Tier | Price | Attestations/mo | Features |
|---|---|---|---|
| Community | Free | 10 | Full CLI, SBOM, policy checks, signing, self-hosted |
| Professional | $299/mo | 200 | Cloud API, Annex IV auto-generation, drift alerts, Slack/Teams |
| Startup | $499/mo | 500 | Everything in Pro + VEX read, 3 users, GitHub Issues ticketing |
| Team | $899/mo | 1,000 | Multi-tenant, SAML SSO, HITL workflows, audit export |
| Enterprise | Custom | Unlimited | On-premise, air-gapped, EU data residency, dedicated support |
Architecture
squash attest ./my-model
│
├── ModelScanner → Security scan (pickle, unsafe ops, CVEs)
├── CycloneDXBuilder → ML-BOM (CycloneDX 1.7)
├── SpdxBuilder → SBOM (SPDX 2.3)
├── PolicyEngine → EU AI Act · NIST · OWASP · ISO checks
├── SlsaBuilder → SLSA Level 1–3 provenance
├── AnnexIVGenerator → All 12 Annex IV sections (MD/HTML/PDF)
├── VexEvaluator → Live CVE vulnerability feed
├── OmsSigner → Sigstore keyless signing
├── DriftDetector → Baseline behavioral comparison
└── AttestPipeline → Signed audit record (JSON)
Development
git clone https://github.com/konjoai/squash
cd squash
pip install -e ".[api,signing,sbom,dev]"
# Run all tests (2,299 passing)
python -m pytest tests/ -v --timeout=120
# Try it immediately
squash demo
# Watch mode
squash watch ./my-model
License
Community edition: Apache 2.0
Enterprise features (cloud API, multi-tenant dashboard, VEX feed, on-premise) are available under a commercial license. Contact →
Built by Konjo AI · "Squash violations, not velocity."
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 squash_ai-3.1.0.tar.gz.
File metadata
- Download URL: squash_ai-3.1.0.tar.gz
- Upload date:
- Size: 1.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0f8246c2163919b5bba3b42535086d8f7e9e144a523e7154c9219bd1dc92d4f6
|
|
| MD5 |
e263fa435dfda7dadc07a4dbe0b9dea1
|
|
| BLAKE2b-256 |
5bd092d54b0eee66c25db54abe511c96b2fdc4927551919f7139f4ad46a282c6
|
Provenance
The following attestation bundles were made for squash_ai-3.1.0.tar.gz:
Publisher:
publish.yml on konjoai/squash
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
squash_ai-3.1.0.tar.gz -
Subject digest:
0f8246c2163919b5bba3b42535086d8f7e9e144a523e7154c9219bd1dc92d4f6 - Sigstore transparency entry: 1438037254
- Sigstore integration time:
-
Permalink:
konjoai/squash@8e1d47b1015580ab712e204d52980947f1fe2f46 -
Branch / Tag:
refs/tags/v3.1.0 - Owner: https://github.com/konjoai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8e1d47b1015580ab712e204d52980947f1fe2f46 -
Trigger Event:
release
-
Statement type:
File details
Details for the file squash_ai-3.1.0-py3-none-any.whl.
File metadata
- Download URL: squash_ai-3.1.0-py3-none-any.whl
- Upload date:
- Size: 813.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b4589b3c72b41fb98a7f3b231644d7696b87c342aef1fb125327b471052b0545
|
|
| MD5 |
8269590761a615412a1eb805059f5433
|
|
| BLAKE2b-256 |
32e1c6d4fba2193e9a8aac180fc60752e986d7afb926a9a7953da9b37ed99459
|
Provenance
The following attestation bundles were made for squash_ai-3.1.0-py3-none-any.whl:
Publisher:
publish.yml on konjoai/squash
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
squash_ai-3.1.0-py3-none-any.whl -
Subject digest:
b4589b3c72b41fb98a7f3b231644d7696b87c342aef1fb125327b471052b0545 - Sigstore transparency entry: 1438037259
- Sigstore integration time:
-
Permalink:
konjoai/squash@8e1d47b1015580ab712e204d52980947f1fe2f46 -
Branch / Tag:
refs/tags/v3.1.0 - Owner: https://github.com/konjoai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8e1d47b1015580ab712e204d52980947f1fe2f46 -
Trigger Event:
release
-
Statement type: