AI application security — SBOM generation, vulnerability scanning, behavioral validation, and adversarial red-teaming for AI Agents
Project description
NuGuard Open Source
NuGuard is an open source AI application security CLI. It can generate an AI-focused SBOM from source code, run static security analysis, lint cognitive policy documents, test live AI app behavior, and red-team a live AI app with scenario-driven adversarial testing.
What It Does
- Generate an AI-SBOM from a local codebase or Git repo
- Analyze the SBOM for structural AI security risks and dependency issues
- Cross-check a cognitive policy against the SBOM
- Perform static and dynamic behavioral testing against a live AI application endpoint
- Red-team a running AI application with custom-built scenarios based on the AI-SBOM and the cognitive policy. This includes prompt injection, tool abuse, data exfiltration, and related attack scenarios that exercise the various sub-agents, tools, and capabilities of the target system.
- Export findings in text, JSON, Markdown, and SARIF-oriented workflows
Current CLI Surface
Implemented and usable today:
nuguard sbomnuguard analyzenuguard scannuguard policynuguard behaviornuguard redteam
Present but still stubbed / not yet implemented:
nuguard seednuguard report
Requirements
- Python 3.12+
uvfor the recommended local workflow
Optional external tools used by some analysis paths:
grypecheckovtrivysemgrep
If these tools are not installed, the corresponding checks can be skipped or may report as unavailable depending on the command path.
Installation
For production use, install the package from PyPI with:
pip install nuguard
The steps below describe how to set up a local development environment. This is recommended if you want to run the latest code, contribute to the project, or run the CLI with LLM-assisted features that require local environment variable configuration.
uv sync --dev
Run the CLI with:
uv run nuguard --help
Or, from the virtual environment:
. .venv/bin/activate
nuguard --help
Quick Start
1. Generate an AI-SBOM
nuguard sbom generate --source . --output app.sbom.json
You can also scan a remote repository:
nuguard sbom generate \
--from-repo https://github.com/org/repo \
--ref main \
--output app.sbom.json
2. Run Static Analysis
nuguard analyze --sbom app.sbom.json --format markdown
Typical outputs:
markdownfor human reviewjsonfor automationsariffor code scanning pipelines
3. Behavioral Testing
nuguard behavior \
--sbom app.sbom.json \
--target http://localhost:3000 \
--format markdown
4. Red-Team a Live App
nuguard redteam \
--config nuguard.yaml \
--output reports/redteam.md \
--format markdown
For richer red-team coverage, you can also provide:
- a cognitive policy with
--policy - canary values with
--canary - a config file with
--config
5. Run the Unified Pipeline
nuguard scan \
--source . \
--output-dir nuguard-reports
This is the easiest way to run SBOM generation plus static analysis in one pass.
Configuration
NuGuard supports project configuration through nuguard.yaml. A ready-to-edit example lives at nuguard.yaml.example.
Key areas in the example config:
sbom: existing SBOM pathsource: source directory for generationpolicy: cognitive policy pathllm: model settings for LLM-assisted featuresbehavior: target URL, endpoint, and test profile settings for behavioral testingredteam: target URL, endpoint, canary file, profiles, scenario filters, guided conversation settings, and finding trigger controls (finding_triggers.*)analyze: minimum severity thresholddatabase: SQLite or Postgres-backed storage settingsoutput: output format and failure threshold
CLI flags take precedence over nuguard.yaml, which takes precedence over environment variables and built-in defaults.
Red-Team Canaries
NuGuard can watch for seeded canary values during dynamic testing to produce high-confidence exfiltration findings. Start from canary.example.json, create your local canary.json, seed those values into the target system, then point nuguard redteam at that file with --canary.
More detail is available in docs/redteam-engine.md.
Common Commands
nuguard --help
nuguard sbom --help
nuguard analyze --help
nuguard policy --help
nuguard behavior --help
nuguard redteam --help
nuguard scan --help
Development
Install dev dependencies:
make dev
Run tests:
make test
Run linting and type checks:
make lint
Format the codebase:
make fmt
Publishing
This repo includes GitHub Actions workflows for Trusted Publishing to TestPyPI and PyPI:
Before the workflows can publish, configure Trusted Publishers in TestPyPI and PyPI for the nuguard project with:
- owner/org:
NuGuardAI - repository:
nuguard - workflow file:
publish-testpypi.ymlorpublish-pypi.yml - environment:
testpypiorpypi
Recommended release flow:
- Run the TestPyPI workflow manually from GitHub Actions.
- Verify the package install and CLI behavior from TestPyPI.
- Create a GitHub release to trigger the PyPI publish workflow.
Repo Notes
- The repository currently contains example outputs and benchmark fixtures under
tests/output/ - Some red-team and benchmark tests are opt-in and gated by environment variables
- LLM-assisted features depend on provider credentials being available via environment variables
License
License information is available in the LICENSE file.
Project details
Release history Release notifications | RSS feed
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 nuguard-0.4.2.tar.gz.
File metadata
- Download URL: nuguard-0.4.2.tar.gz
- Upload date:
- Size: 752.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
61a5e049671bee648d442ee33cf6a89a3ee7c7ae5f93566a777c17b4f96c9da3
|
|
| MD5 |
db2b010a4e1ba65f810531c0fda50544
|
|
| BLAKE2b-256 |
bb2e138a9b04086f208a25b9fb4036601dde1cf5ff24740cc47af655bb4f2c9e
|
Provenance
The following attestation bundles were made for nuguard-0.4.2.tar.gz:
Publisher:
publish-pypi.yml on NuGuardAI/nuguard
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
nuguard-0.4.2.tar.gz -
Subject digest:
61a5e049671bee648d442ee33cf6a89a3ee7c7ae5f93566a777c17b4f96c9da3 - Sigstore transparency entry: 1485866361
- Sigstore integration time:
-
Permalink:
NuGuardAI/nuguard@2495331daca97d712511bdc08c6dcacc53ceabf8 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/NuGuardAI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@2495331daca97d712511bdc08c6dcacc53ceabf8 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file nuguard-0.4.2-py3-none-any.whl.
File metadata
- Download URL: nuguard-0.4.2-py3-none-any.whl
- Upload date:
- Size: 914.5 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 |
673a215f806813835de3fedf29734ccc19e8e7f9af5ef0387909408d491d1335
|
|
| MD5 |
42a129dd1afb212b67e452010dc157bd
|
|
| BLAKE2b-256 |
2e5075987d4d8a8e5ca312cf5b7d8309ee22c468f1d30a18b619506a327f1e51
|
Provenance
The following attestation bundles were made for nuguard-0.4.2-py3-none-any.whl:
Publisher:
publish-pypi.yml on NuGuardAI/nuguard
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
nuguard-0.4.2-py3-none-any.whl -
Subject digest:
673a215f806813835de3fedf29734ccc19e8e7f9af5ef0387909408d491d1335 - Sigstore transparency entry: 1485866395
- Sigstore integration time:
-
Permalink:
NuGuardAI/nuguard@2495331daca97d712511bdc08c6dcacc53ceabf8 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/NuGuardAI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@2495331daca97d712511bdc08c6dcacc53ceabf8 -
Trigger Event:
workflow_dispatch
-
Statement type: