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."
Metadata
Release files for squash-ai 3.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| squash_ai-3.1.0.tar.gz | 1.2 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| squash_ai-3.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 2.0 MB
Release files / squash_ai-3.1.0.tar.gz
| Download URL | squash_ai-3.1.0.tar.gz |
|---|---|
| Size | 1.2 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0f8246c2163919b5bba3b42535086d8f7e9e144a523e7154c9219bd1dc92d4f6
|
|
BLAKE2b-256 checksum How to use checksums |
5bd092d54b0eee66c25db54abe511c96b2fdc4927551919f7139f4ad46a282c6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 4, 2026.
Transparency logRelease files / squash_ai-3.1.0-py3-none-any.whl
| Download URL | squash_ai-3.1.0-py3-none-any.whl |
|---|---|
| Size | 813.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b4589b3c72b41fb98a7f3b231644d7696b87c342aef1fb125327b471052b0545
|
|
BLAKE2b-256 checksum How to use checksums |
32e1c6d4fba2193e9a8aac180fc60752e986d7afb926a9a7953da9b37ed99459
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 4, 2026.
Transparency log