OWASP-aligned launch gate for AI agents โ test, simulate, scan, and generate launch evidence
Project description
๐ก๏ธ Pluto AgentGuard
OWASP-aligned launch gate for AI agents. Other tools scan configs โ AgentGuard tests your policy against adversarial attacks, simulates risk impact, maps results to OWASP MCP Top 10, and generates launch evidence.
What Makes This Different
MCP security scanners are multiplying fast (Cisco, AgentShield, ship-safe, mcp-scan). Most focus on config detection. AgentGuard adds policy simulation, OWASP control reporting, drift detection, and launch evidence:
| Capability | Scanners | AgentGuard |
|---|---|---|
| Detect secrets & misconfigs | โ | โ |
| Adversarial policy simulation (17 attack scenarios) | โ | โ
aguard test |
| "What-if" risk impact before applying changes | โ | โ
aguard whatif |
| OWASP MCP Top 10 control coverage (20 controls) | โ | โ
aguard owasp |
| Launch readiness evidence packets | โ | โ
aguard evidence |
| Baseline drift detection | โ | โ
aguard baseline |
| Behavioral trace audit with approval model | โ | โ
aguard monitor |
Quick Start (60 seconds)
pip install pluto-aguard
# Clone for examples
git clone https://github.com/arpitha-dhanapathi/pluto-aguard.git && cd pluto-aguard
# Scan a realistic insecure AI project โ finds 18 real issues
aguard scan ./examples/demo-agent-project/
# Test your policy against 17 adversarial attacks
aguard test --policy ./examples/agent-policy.yaml --attack-pack all
# Generate OWASP MCP Top 10 coverage report
aguard owasp ./examples/demo-agent-project/
# Simulate policy changes โ see risk drop before applying
aguard whatif --config ./examples/insecure-agent-config.yaml
# Generate launch readiness evidence packet
aguard evidence ./examples/ --config ./examples/insecure-agent-config.yaml \
--policy ./examples/agent-policy.yaml
# Save baseline, detect drift later
aguard baseline create ./examples/
aguard baseline compare ./examples/
No cloud accounts. No API keys. Runs entirely locally.
GitHub Action
- name: Agent Security Gate
uses: arpitha-dhanapathi/pluto-aguard@v0.9.0
with:
path: '.'
max-risk: '50'
fail-on: 'high'
policy: 'agent-policy.yaml'
attack-pack: 'all'
sarif-output: 'results.sarif'
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
See docs/github-action-usage.md for full options.
Commands
| Command | What It Does | Maturity |
|---|---|---|
aguard scan |
Static analysis โ secrets, misconfigs, unsafe AI code patterns | โ Stable |
aguard test |
Adversarial policy simulation โ 17 attack scenarios across 5 packs | โ Stable |
aguard owasp |
OWASP MCP Top 10 control coverage report (20 controls) | โ Stable |
aguard whatif |
Policy impact simulation โ risk delta before applying changes | โ Stable |
aguard evidence |
Launch readiness packet with approval checklist | ๐ถ Beta |
aguard baseline |
Security snapshot + drift comparison over time | ๐ถ Beta |
aguard monitor |
Behavioral trace audit โ replays tool calls against policy | ๐ถ Beta |
aguard scan
Finds real issues in any AI project โ no MCP configs needed. Detects eval/exec on LLM output, hardcoded secrets (18+ patterns), Dockerfile misconfigs, unpinned AI deps, LangChain unsafe settings, system prompt leaks, and more.
$ aguard scan ./my-project/
๐ด CRITICAL: Unsafe execution of LLM output: eval() (MCP05:2025)
๐ HIGH: Hardcoded OpenAI Key detected (MCP01:2025)
๐ HIGH: .env file not in .gitignore (MCP01:2025)
๐ก MEDIUM: Unpinned AI dependencies (MCP04:2025)
๐ Risk Score: 100/100 โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ Findings: 1 critical ยท 14 high ยท 3 medium
CI flags: --max-risk 50 / --fail-on high / --format sarif
aguard test
Simulates 17 adversarial attacks against your declared policy. Reports what gets caught vs. what gets through. Pure policy simulation โ no LLM needed.
5 attack packs: prompt-injection, data-exfiltration, permission-escalation, approval-bypass, tool-poisoning.
$ aguard test --policy agent-policy.yaml --attack-pack all
โ
PASS PI-001 Direct instruction override execute Blocked
โ
PASS DE-001 File export of sensitive data file_write Blocked
โ FAIL DE-004 SQL data dump sql_query NOT caught
๐ Results: 16 blocked ยท 1 missed ยท 17 total
Recommended fixes:
โ Add sql_query to require_human_approval
CI flag: --fail-on-miss exits with code 1 if any attacks succeed.
aguard owasp
Evaluates 20 controls mapped to OWASP MCP Top 10 and LLM Top 10. Each control uses precise finding-ID matching.
$ aguard owasp ./my-project/
โ MCP01:2025 Token Mismanagement: 3 failed, 1 passed
โ AGC-MCP01-001: No hardcoded secrets
โ AGC-MCP01-002: No static long-lived tokens
โ
MCP07:2025 AuthN/AuthZ: 2 passed
โ AGC-MCP07-001: Remote servers have auth
โ AGC-MCP07-002: HTTPS transport
๐ OWASP MCP Mapped: 9/10 risks
Controls: 8 passed ยท 6 failed ยท 6 not tested ยท 20 total
aguard whatif
Simulates policy changes and shows risk score impact before applying them.
$ aguard whatif --config agent-config.yaml
Current Risk Score: 100/100
โ
Restrict SQL to SELECT-only โ 68 (โ 17%)
โ
Add human-in-the-loop for file ops โ 54 (โ 34%)
โ
Add rate limits + timeout โ 48 (โ 41%)
๐ก Apply all 3 โ Risk drops to 38 (โ54%)
aguard evidence
Generates a launch readiness packet โ risk summary, findings, tool permissions, policy coverage, required mitigations, and sign-off checklist. See examples/sample-launch-readiness.md.
aguard baseline
Save a security snapshot, compare later to detect drift.
aguard baseline create . # Save current state
aguard baseline compare . # What changed?
aguard baseline compare . --fail-on-drift # CI: fail if new findings
aguard monitor
Replays agent action traces against a declared policy. Detects denied tool calls, unauthorized access, permission escalation, and missing/expired approvals.
aguard monitor --trace-file traces.jsonl --policy policy.yaml
Accepts OpenTelemetry JSONL or simple {"tool_name": "X", "tool_args": {}} format.
How It Fits
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ LAYER 1: Content Guardrails (existing) โ
โ Azure Content Safety ยท NeMo ยท Guardrails AI โ
โ โ Protects what LLMs SAY โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ LAYER 2: Agent Security (Pluto AgentGuard) โ
โ scan ยท test ยท owasp ยท whatif ยท evidence ยท baseline โ
โ โ Watches what agents DO โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Risk Scoring
See docs/risk-scoring.md for the full scoring methodology โ formula, weights, examples, CI threshold guidance, and limitations.
OWASP Control Matrix
See docs/owasp-control-matrix.md for the complete mapping of 20 controls to OWASP MCP Top 10 and LLM Top 10.
Roadmap
- v0.1โv0.5 โ Scanner, monitor, whatif, evidence, baseline, CI gates, SARIF, HTML reports
- v0.8 โ Adversarial policy simulation (17 scenarios, 5 attack packs)
- v0.9 โ OWASP control framework (20 controls, coverage reports)
- v1.0 โ Multi-framework adapters (LangChain, CrewAI, AutoGen)
- v1.1 โ Live agent testing (send attacks to running agents)
- v1.2 โ Runtime proxy / tool-call firewall
Project Structure
pluto-aguard/
โโโ src/pluto_aguard/
โ โโโ cli.py # 7 CLI commands
โ โโโ models.py # Finding, RiskScore, ControlResult, etc.
โ โโโ scanners/ # MCP + AI config + permission scanners
โ โโโ testing/ # 17 adversarial attack scenarios
โ โโโ controls/ # 20 OWASP-aligned control definitions
โ โโโ evidence/ # Launch readiness packet generator
โ โโโ baseline/ # Snapshot + drift comparison
โ โโโ monitor/ # Behavioral trace audit
โ โโโ simulator/ # What-If policy simulation
โ โโโ reports/ # HTML + SARIF output
โโโ examples/ # Demo project + configs + traces
โโโ docs/ # Risk scoring, OWASP matrix, GitHub Action docs
โโโ tests/ # 84 tests
โโโ action.yml # GitHub Action
โโโ SECURITY.md
Contributing
See CONTRIBUTING.md for setup and guidelines.
License
Apache License 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 pluto_aguard-0.9.0.tar.gz.
File metadata
- Download URL: pluto_aguard-0.9.0.tar.gz
- Upload date:
- Size: 72.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 |
7e79cf26008bb031b801d0164baa034e292ec6365887e6bac2e5fc5cebf81a06
|
|
| MD5 |
f2c1f5713694bfcca8be7a79892b7433
|
|
| BLAKE2b-256 |
258a41ca0524dd0188766950a07177ac7e94b59c6d2afc4160718f0717885c05
|
Provenance
The following attestation bundles were made for pluto_aguard-0.9.0.tar.gz:
Publisher:
publish.yml on arpitha-dhanapathi/pluto-aguard
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pluto_aguard-0.9.0.tar.gz -
Subject digest:
7e79cf26008bb031b801d0164baa034e292ec6365887e6bac2e5fc5cebf81a06 - Sigstore transparency entry: 1590222320
- Sigstore integration time:
-
Permalink:
arpitha-dhanapathi/pluto-aguard@7d5b613764dbc3a7ef3ed69cfaf7cb20768fa9a4 -
Branch / Tag:
refs/tags/v0.9.0 - Owner: https://github.com/arpitha-dhanapathi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7d5b613764dbc3a7ef3ed69cfaf7cb20768fa9a4 -
Trigger Event:
release
-
Statement type:
File details
Details for the file pluto_aguard-0.9.0-py3-none-any.whl.
File metadata
- Download URL: pluto_aguard-0.9.0-py3-none-any.whl
- Upload date:
- Size: 55.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 |
a8c674b99317bb0dc512518556523d3bc1fb42d2a3da9114f8c8aa70bbeb5f71
|
|
| MD5 |
6acad3f23845c63665446eddd90014b3
|
|
| BLAKE2b-256 |
9b8140341fa58ea888b1b1780326784e63696a15efd8f81295daf54404928c78
|
Provenance
The following attestation bundles were made for pluto_aguard-0.9.0-py3-none-any.whl:
Publisher:
publish.yml on arpitha-dhanapathi/pluto-aguard
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pluto_aguard-0.9.0-py3-none-any.whl -
Subject digest:
a8c674b99317bb0dc512518556523d3bc1fb42d2a3da9114f8c8aa70bbeb5f71 - Sigstore transparency entry: 1590222350
- Sigstore integration time:
-
Permalink:
arpitha-dhanapathi/pluto-aguard@7d5b613764dbc3a7ef3ed69cfaf7cb20768fa9a4 -
Branch / Tag:
refs/tags/v0.9.0 - Owner: https://github.com/arpitha-dhanapathi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7d5b613764dbc3a7ef3ed69cfaf7cb20768fa9a4 -
Trigger Event:
release
-
Statement type: