blastcontain-verify
Pre-deployment compliance scanner for AI agents. 27 security checks across 14 categories. Outputs Markdown reports, signed JSON audit packets, and SARIF for GitHub Code Scanning.
pip install blastcontain-verify
blastcontain-verify --agent-id my-agent --env prod --search-path ./src
What it checks
| Group | Checks |
|---|---|
| Environment | kernel isolation, egress restriction, model weight mutability |
| Filesystem | workstation rootfs, container rootfs |
| Credentials | secrets on disk, secrets in process env, wildcard API capability |
| Process | running as root, dangerous Linux capabilities |
| Network | DNS exfiltration channel, external listeners |
| Persistence | writable startup/cron paths |
| Memory | unmasked PII in context, vector store tenant isolation, viable PII exfil path |
| Skills | exfiltration-capable tools, Cisco AI Skill Scanner findings |
| APIs | destructive endpoints, unauthenticated endpoints |
| MCP | unapproved tools, missing auth, dangerous tool combinations |
| Code | dangerous execution patterns (eval/exec/pickle/yaml.load) |
| Supply chain | unattested model weights |
| Transport | plaintext HTTP endpoints |
| Local | developer workstation indicators |
Every check is mapped to the MIT AI Risk Repository taxonomy.
Two checks are conditional: SKILL-02 (Cisco AI Skill Scanner) needs the opt-in
[cisco]extra — see Augmentation; MCP-01 (unapproved tools) is not yet implemented and currently SKIPs. The rest run out of the box.
Container (recommended)
The official image bundles [full] with the spaCy en_core_web_lg model. The image copies both verify/ and the sibling core/, so the build context is the blastcontain-oss repo root:
# from the blastcontain-oss/ root
podman build -t blastcontain-verify:latest -f verify/Containerfile .
podman run --rm \
--read-only --cap-drop ALL --security-opt no-new-privileges \
--network none --tmpfs /tmp:rw,noexec,nosuid,size=64m \
-v "$PWD:/scan:ro,z" -v "$PWD/reports:/reports:rw,z" \
blastcontain-verify:latest \
--agent-id my-agent --env prod \
--search-path /scan --report /reports/report.md \
--output /reports/audit.json --sarif /reports/scan.sarif \
--acknowledge-risk
CLI flags (most common)
--agent-id Agent identifier (required)
--env dev | uat | staging | prod | local_developer_workstation
--search-path Root walked for source/secret/code/TLS scanning
--skills-dir Skill code directory (SKILL-01/02)
--api-spec OpenAPI 3.0 YAML/JSON path (API-01/02)
--mcp-config MCP server config JSON (MCP-01/02/03)
--model-dir Model weights directory (ENV-03, SUP-01)
--context-file Session context text for PII scanning (MEM-01)
--output PATH Write signed JSON audit packet
--report PATH Write Markdown report
--sarif PATH Write SARIF 2.1.0 for GitHub Code Scanning
--skip-checks IDs Comma-separated check IDs to suppress
--api-live-probe Enable live OPTIONS probe in API-01 (off by default)
--egress-probe-target host:port for ENV-02/NET-01 probes
--acknowledge-risk Exit 0 even on CRITICAL
--require-signing Exit 3 unless a real signing key is set (no advisory packet)
Usage guide & examples: docs/usage.md · Full spec: docs/spec.md · Design notes: docs/architecture.md · Custom checks: docs/plugins.md
GitHub Code Scanning integration
--agent-id should be a stable logical identifier for the agent being scanned (e.g. support-bot-prod), not the repository slug — it is the key your audit packets are attributed to over time, so it must stay constant even if the repo is renamed or forked. Store it as a repository or org Actions variable (Settings → Secrets and variables → Actions → Variables):
# .github/workflows/security.yml
- name: BlastContain Verify
run: blastcontain-verify --sarif scan.sarif --agent-id "${{ vars.AGENT_ID }}"
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: scan.sarif
Augmentation
Verify works standalone; optional packages unlock deeper checks. Every augmentation — default and opt-in — is CVE-clean as of 2026-06.
| Extra | Adds | Clean |
|---|---|---|
[pii] |
Microsoft Presidio NER for MEM-01 | ✅ |
[agt] |
Agent Governance Toolkit | ✅ |
[full] |
[pii] + [agt] — the default supported set |
✅ |
[skill] / [cisco] |
Cisco AI Skill Scanner (SKILL-02) | ✅ |
pip install "blastcontain-verify[full]" # default: Presidio + AGT
pip install "blastcontain-verify[full,cisco]" # + SKILL-02 (Cisco skill scanner)
The Cisco MCP scanner (the MCP-01 backend) is not currently packaged — it still pins a CVE-bearing
litellmand MCP-01 is dormant without a Charter. See SECURITY.md.
Without the relevant extra, the dependent check SKIPs with a hint on how to enable it.
Suppressing findings — .blastcontainignore
Drop a .blastcontainignore at the root of --search-path:
tests/fixtures/ # entire directory tree
*.mock.json # filename glob
**/snapshots/** # path glob
Honoured by CRED-01, CODE-01, TLS-01.
Verifying audit packets
import json
from blastcontain_core.signing import verify_packet
packet = json.load(open("audit.json"))
assert verify_packet(packet)
Ed25519 packets carry their public key inline — verification needs nothing else. HMAC packets require BLASTCONTAIN_SIGNING_KEY in the environment.
Be clear about what the default signature means: with no key configured,
packets are signed with a built-in key and marked "advisory": true — that
proves integrity (the packet wasn't modified), not attestation (anyone
can produce one). Attestation requires an Ed25519 key you manage. CI pipelines
that must never emit an advisory packet should pass --require-signing, which
exits 3 before scanning if no real key is configured.
License
Apache 2.0. See NOTICE and THIRD_PARTY_NOTICES.txt.
Contributing
See CONTRIBUTING.md. All contributions require a DCO sign-off (git commit -s).
Metadata
Release files for blastcontain-verify 0.4.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| blastcontain_verify-0.4.1.tar.gz | 124.1 kB | With provenance | Details for blastcontain_verify-0.4.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| blastcontain_verify-0.4.1-py3-none-any.whl | Python 3 | none | any | Details for blastcontain_verify-0.4.1-py3-none-any.whl |
Total release size: 193.6 kB
Release files / blastcontain_verify-0.4.1.tar.gz
| Download URL | blastcontain_verify-0.4.1.tar.gz |
|---|---|
| Size | 124.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d0f0672ac2a08d3769863d763058117e554a3cf55119b002aa3126b01fef88f4
|
|
BLAKE2b-256 checksum How to use checksums |
769b4b2fd2b8db2b7c3195d0fd3ed7ca1377d3e0d2600e48dda9d44a784a28da
|
| 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 Jul 18, 2026.
Transparency logRelease files / blastcontain_verify-0.4.1-py3-none-any.whl
| Download URL | blastcontain_verify-0.4.1-py3-none-any.whl |
|---|---|
| Size | 69.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7ce19fcfa4c736172014919e858a950e4b91ed8f52986ba8aa681ebca810fd97
|
|
BLAKE2b-256 checksum How to use checksums |
1e267006a35a78ff90e05d0009772438892487de30a83d3f327ba3c58a6dab9f
|
| 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 Jul 18, 2026.
Transparency logSecurity for blastcontain-verify 0.4.1
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.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for blastcontain_verify-0.4.1.tar.gz
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 Jul 18, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.