Skip to main content

Comprehensive security framework for agentic AI applications โ€” 8-layer defense-in-depth.

Project description

๐Ÿ›ก๏ธ AgentArmor

PyPI version Python License: Apache 2.0 Tests

Comprehensive open-source security framework for agentic AI applications.

AgentArmor provides 8-layer defense-in-depth security for AI agents, covering every point in the data flow where data is at rest, in transit, or in use. Built to address the OWASP Top 10 for Agentic Applications (2026).


๐Ÿš€ What's New in v0.5.0 โ€” Hardened Security Layers

This is a major security release that upgrades four layers from basic implementations to production-grade, adversarially-tested enforcement engines:

  • ๐Ÿง  L3: Hardened Context Assembly โ€” GoalLock anchor prevents goal hijacking mid-conversation. CanaryVault injects multiple unique canary tokens per session. Tiered context assembly strips template injection before it reaches the LLM. Validated against 48 adversarial test cases.

  • ๐ŸŽฏ L4: Hardened Planning & Reasoning โ€” ActionChainTracker detects multi-step attack chains (reconnaissance โ†’ escalation โ†’ exfiltration). Semantic risk scoring evaluates action intent, not just verbs. Validated against 40 adversarial test cases.

  • ๐Ÿ”’ L5: Hardened Execution Control โ€” Five enforcement domains: Network Policy (DNS rebinding + SSRF protection), Rate Limiting (token bucket + circuit breaker), Resource Budget (timeout + size limits), Output Sanitizer (UTF-8 + binary strip), and Side-Effect Auditor (immutable execution records). Validated against 39 adversarial test cases.

  • ๐Ÿ›ก๏ธ L6: Hardened Output Security โ€” Five-scanner pipeline: Credential Scanner (13+ patterns, zero false positives), PII Scanner (confidence-gated Presidio), Harmful Content Detector (jailbreak + system prompt leak detection), Semantic Exfiltration Detector (cross-response tracking), and Schema Validation. Supports both streaming and non-streaming responses. Validated against 12 adversarial test cases.

  • ๐Ÿ” L2: Encrypted Storage โ€” All data stored in Studio's SQLite database is now AES-256-GCM encrypted with HMAC-based MAC signatures for tamper detection.

127+ adversarial test cases validate the hardened layers end-to-end.


Why AgentArmor?

Every existing security tool is a point solution โ€” output validators, prompt injection scanners, or policy engines in isolation. AgentArmor is the first unified framework that secures the entire agentic architecture end-to-end.

The 8 Security Layers

Layer Name What It Protects
L1 Ingestion Input scanning, prompt injection detection, source verification
L2 Storage AES-256-GCM encryption at rest, HMAC integrity, tamper detection
L3 Context GoalLock anchoring, multi-canary injection, template injection stripping
L4 Planning Action chain tracking, semantic risk scoring, multi-step attack detection
L5 Execution DNS rebinding protection, rate limiting, circuit breakers, resource budgets
L6 Output Credential redaction, PII scanning, harmful content blocking, exfiltration detection
L7 Inter-Agent Mutual auth (HMAC), trust scoring with time decay, delegation depth control
L8 Identity Agent identity, JIT permissions, credential rotation

Quick Start

Install

# Using uv (recommended)
uv add agentarmor-core

# With MCP server support (for Claude Code, OpenClaw, etc.)
uv add "agentarmor-core[mcp]"

# With PII detection
uv add "agentarmor-core[pii]"

# With all optional features
uv add "agentarmor-core[all]"

# Available extras: proxy, pii, otel, mcp, oauth, all, dev
# For development
git clone https://github.com/Agastya910/agentarmor.git
cd agentarmor
uv sync --all-extras --dev

Basic Usage

import asyncio
from agentarmor import AgentArmor, ArmorConfig

async def main():
    armor = AgentArmor()

    # Register your agent
    identity, token = armor.l8_identity.register_agent(
        agent_id="my-agent",
        permissions={"read.*", "search.*"},
    )

    # Intercept tool calls
    result = await armor.intercept(
        action="read.file",
        params={"path": "/data/notes.txt"},
        agent_id="my-agent",
        input_data="Read the file please",
    )

    print(f"Safe: {result.is_safe}")
    print(f"Verdict: {result.final_verdict.value}")

asyncio.run(main())

Use as Decorator

@armor.shield(action="database.query")
async def query_database(sql: str) -> dict:
    return db.execute(sql)

Proxy Server Mode

agentarmor serve --config agentarmor.yaml --port 8400
curl -X POST http://localhost:8400/v1/intercept \
  -H "Content-Type: application/json" \
  -d '{"action": "read.file", "agent_id": "my-agent", "input_data": "Hello"}'

Hardened Layer Examples

L3 Context Hardening โ€” GoalLock

AgentArmor's L3 layer prevents goal hijacking by anchoring the agent's purpose at the start of every conversation. Template injection attempts are stripped before reaching the LLM.

from agentarmor.layers.context.assembler import L3ContextLayer

l3 = L3ContextLayer(
    agent_id="my-agent",
    agent_config={
        "system_prompt": "You are a helpful assistant.",
        "tools": ["web_search", "file_read"],
    },
)

# Build a hardened system prompt with canary tokens and GoalLock
hardened_prompt = l3.build_secure_system_prompt(
    base_system_prompt="You are a helpful assistant.",
    conversation_id="session-123",
)

# After LLM responds, check for canary leaks and goal drift
safe_response, events = await l3.check_output(
    conversation_id="session-123",
    response=llm_response,
    tool_calls=[],
    turn_number=1,
    user_message=user_input,
)

L5 Execution Hardening โ€” Network Policy

The L5 layer enforces DNS rebinding protection, protocol restrictions, and domain allowlists/blocklists on every outbound request.

from agentarmor.layers.execution.l5_execution import L5ExecutionLayer, NetworkPolicy

l5 = L5ExecutionLayer(
    agent_id="my-agent",
    network_policy=NetworkPolicy(
        allow_http=False,  # HTTPS only
        domain_allowlist=["api.github.com", "*.openai.com"],
        domain_blocklist=["metadata.google.internal", "*.local"],
        dns_rebinding_protection=True,
        max_outbound_payload_bytes=50_000,
    ),
)

# Execute a tool with full L5 enforcement
result, event = await l5.execute(
    tool_name="web_search",
    tool_args={"query": "latest AI news"},
    tool_func=my_search_function,
    session_id="session-123",
    outbound_url="https://api.tavily.com/search",
)

L6 Output Hardening โ€” 5-Scanner Pipeline

The L6 layer scans every output for credentials, PII, harmful content, and semantic exfiltration patterns.

from agentarmor.layers.output.filter import L6OutputLayer

l6 = L6OutputLayer(
    agent_id="my-agent",
    enable_pii_scan=True,
    enable_harmful_scan=True,
)

# Scan a response
safe_text, result = l6.process(llm_response, session_id="session-123")

if result["verdict"] == "block":
    print("Response contained critical security violation!")
else:
    print(f"Cleaned: {result['findings_count']} findings redacted")

Integrations

MCP Server โ€” Zero-Code Security for Any Agent (v0.4.0)

AgentArmor runs as a native MCP server that any MCP-compatible coding agent can call directly โ€” no Python code changes needed in your project.

Setup for Claude Code โ€” add to ~/.claude/claude_desktop_config.json:

{
  "mcpServers": {
    "agentarmor": {
      "command": "uv",
      "args": ["run", "agentarmor-mcp"],
      "cwd": "/path/to/your/project"
    }
  }
}

Available MCP Tools:

Tool What It Does
armor_register_agent Register an agent with a permission set
armor_scan_input Scan text for prompt injection, jailbreaks, DAN attacks
armor_intercept Run a tool call through all 8 security layers
armor_scan_output Redact PII (emails, SSNs, API keys) from output
armor_scan_mcp_server Full TLS + OAuth 2.1 + rug-pull scan of any MCP server
armor_get_status Health check: version, layers, registered agents

๐Ÿ“– Full setup guide: docs/claude_code_setup.md

TLS + OAuth 2.1 Verification (v0.3.0)

from agentarmor import MCPGuard

guard = MCPGuard()
result = guard.full_security_scan("https://api.example.com/mcp")
print(result["overall_risk"])  # "low" / "medium" / "high" / "critical"

OpenClaw Identity Guard (v0.2.0)

from agentarmor import OpenClawGuard
guard = OpenClawGuard(identity_dir="~/.openclaw")
enc_report = guard.encrypt_identity_files()  # AES-256-GCM + BLAKE3

LangChain / OpenAI

# LangChain
from agentarmor.integrations.langchain import AgentArmorCallback
callback = AgentArmorCallback(armor=armor)

# OpenAI
from agentarmor.integrations.openai import secure_openai_client
client = secure_openai_client(OpenAI(), armor=armor)

๐Ÿ“– Full integration guide: docs/integrations.md


CLI Commands

Command Description
agentarmor init Generate a config file
agentarmor validate <config> Validate configuration
agentarmor scan -t "text" Scan text for threats
agentarmor serve Start proxy server
agentarmor keygen Generate encryption key
agentarmor-mcp Start MCP server (stdio transport)

Custom Security Policies

# policies/my_agent.yaml
version: "1.0"
name: "database_agent"
agent_type: "database"
risk_level: "high"

global_denied_actions:
  - "database.drop"
  - "database.truncate"

require_human_approval_for:
  - "database.delete"

rules:
  - name: "limit_transfer_amount"
    action_pattern: "transfer.*"
    conditions:
      - field: "params.amount"
        operator: ">"
        value: "1000"
    verdict: "escalate"
    priority: 100

Architecture

                            MCP Agents (Claude Code, OpenClaw, Cursor, etc.)
                                       โ”‚
                                  stdio โ”‚ (agentarmor-mcp)
                                       โ–ผ
Agent Runtime                   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
(LangChain /                    โ”‚  MCP Server      โ”‚
 CrewAI /                       โ”‚  6 tools         โ”‚
 OpenAI SDK /  โ”€โ”€โ”€ Python โ”€โ”€โ”€โ”€โ–บ โ”‚  (v0.4.0)        โ”‚
 MCP)                           โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ”‚                               โ”‚
         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                         โ–ผ
              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
              โ”‚      AgentArmor Pipeline     โ”‚
              โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
              โ”‚  โ”‚  L8: Identity & IAM   โ”‚  โ”‚
              โ”‚  โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค  โ”‚
              โ”‚  โ”‚  L1: Data Ingestion   โ”‚  โ”‚
              โ”‚  โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค  โ”‚
              โ”‚  โ”‚  L2: Memory/Storage   โ”‚  โ”‚
              โ”‚  โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค  โ”‚
              โ”‚  โ”‚  L3: Context Assembly โ”‚  โ”‚
              โ”‚  โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค  โ”‚
              โ”‚  โ”‚  L4: Plan Validation  โ”‚  โ”‚
              โ”‚  โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค  โ”‚
              โ”‚  โ”‚  L5: Action Execution โ”‚  โ”‚
              โ”‚  โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค  โ”‚
              โ”‚  โ”‚  L7: Inter-Agent Sec  โ”‚  โ”‚
              โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
              โ”‚  L6: Output Filter (post)   โ”‚
              โ”‚  Audit Logger (cross-cut)   โ”‚
              โ”‚  Policy Engine (cross-cut)  โ”‚
              โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                         โ”‚
                         โ–ผ
                External Tools / APIs / LLMs

OWASP ASI Coverage

OWASP ASI Risk AgentArmor Layer(s)
ASI01: Goal Hijacking L1 (injection), L3 (GoalLock + canary tokens)
ASI02: Tool Misuse L4 (chain tracking), L5 (execution gates), Policy Engine
ASI03: Identity Abuse L8 (identity), L5 (JIT perms), OpenClaw Guard
ASI04: Supply Chain L1 (source verify), MCP Scanner
ASI05: Code Execution L5 (5-domain enforcement), L4 (risk scoring)
ASI06: Memory Poisoning L2 (AES-256-GCM + MAC integrity), L3 (canary tokens)
ASI07: Inter-Agent L7 (mutual auth, trust scoring with decay)
ASI08: Cascading Failures L4 (chain depth + circuit breaker), L5 (rate limits)
ASI09: Human Trust L6 (5-scanner pipeline), Audit Logger
ASI10: Rogue Agents L8 (credential rotation), L7 (trust decay)

Documentation

Doc Description
Quick Start Installation and first steps
Hardened Layers Deep dive into the v0.5.0 hardened security layers
Claude Code Setup MCP server setup for Claude Code, OpenClaw, Cursor
Architecture 8-layer pipeline design and data flow
Integrations MCP Server, OpenClaw, TLS/OAuth, LangChain, OpenAI
Policy Language YAML policy reference and examples
Threat Model OWASP ASI attack vectors and defenses
Use Cases Financial, coding, RAG, multi-agent, MCP examples
Publishing PyPI & GitHub release guide

Contributing

See CONTRIBUTING.md for guidelines.

License

Apache 2.0. Free for commercial and open-source use.

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

agentarmor_core-0.6.0.tar.gz (318.9 kB view details)

Uploaded Source

Built Distribution

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

agentarmor_core-0.6.0-py3-none-any.whl (109.8 kB view details)

Uploaded Python 3

File details

Details for the file agentarmor_core-0.6.0.tar.gz.

File metadata

  • Download URL: agentarmor_core-0.6.0.tar.gz
  • Upload date:
  • Size: 318.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for agentarmor_core-0.6.0.tar.gz
Algorithm Hash digest
SHA256 24ac9d1c5ed9545008a3c0b1c8f9ee884704595c8b23423f4768718a88227132
MD5 d65e7af51c60d0660a9fc73682edc525
BLAKE2b-256 89864a32cbc7e6e263fd73026a0d2634d792b325810fd88690bedfd2c41f4f8e

See more details on using hashes here.

File details

Details for the file agentarmor_core-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: agentarmor_core-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 109.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for agentarmor_core-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1775929b0c02c0fdb29c07eca29868716e6eb726633aa0c0df1eed92c03efbf7
MD5 cd4f8074bc6f3c8558d9c1747097845e
BLAKE2b-256 76a15bc73b8a41693b1912dfd87c67c45ff68c1f55335a527a7009f614521f34

See more details on using hashes here.

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