Skip to main content

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.

CI License: Apache-2.0 Python 3.10+ PyPI

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

pluto_aguard-0.9.0.tar.gz (72.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pluto_aguard-0.9.0-py3-none-any.whl (55.5 kB view details)

Uploaded Python 3

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

Hashes for pluto_aguard-0.9.0.tar.gz
Algorithm Hash digest
SHA256 7e79cf26008bb031b801d0164baa034e292ec6365887e6bac2e5fc5cebf81a06
MD5 f2c1f5713694bfcca8be7a79892b7433
BLAKE2b-256 258a41ca0524dd0188766950a07177ac7e94b59c6d2afc4160718f0717885c05

See more details on using hashes here.

Provenance

The following attestation bundles were made for pluto_aguard-0.9.0.tar.gz:

Publisher: publish.yml on arpitha-dhanapathi/pluto-aguard

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for pluto_aguard-0.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a8c674b99317bb0dc512518556523d3bc1fb42d2a3da9114f8c8aa70bbeb5f71
MD5 6acad3f23845c63665446eddd90014b3
BLAKE2b-256 9b8140341fa58ea888b1b1780326784e63696a15efd8f81295daf54404928c78

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page