Skip to main content

AgentShield Python SDK

License: MIT Python 3.8+ PyPI version

Security and monitoring for AI agents. Monitor agent behavior, enforce policies, and get real-time alerts for suspicious activity.

AgentShield provides enterprise-grade security for autonomous AI agents, with seamless integration for LangChain, OpenAI Assistants, and custom agent frameworks.

🔗 Dashboard: https://agent-shield.com 📚 Documentation: https://agent-shield.com/docs


✨ Features

  • 🛡️ Policy Enforcement: Block, flag, or require approval for sensitive operations
  • 📊 Real-Time Monitoring: Track every tool call, API request, and agent decision
  • 🚨 Smart Alerts: Get notified of anomalies, policy violations, and security events
  • 🔍 Anomaly Detection: ML-powered detection of unusual agent behavior
  • ⚡ Zero-Config: Drop-in replacement - no code changes required
  • 🎯 Framework Agnostic: Works with LangChain, OpenAI, or custom agents
  • 📈 Cost Tracking: Monitor and optimize agent operational costs
  • 🔐 Fail-Safe: Configurable fail-open or fail-closed modes

🚀 Quick Start

Installation

pip install agentshield

5-Line Integration

from agentshield import SecureAgent
from langchain.agents import create_openai_functions_agent

# Your existing agent
agent = create_openai_functions_agent(llm, tools, prompt)

# Add security - that's it!
secure_agent = SecureAgent(
    agent=agent,
    shield_key="agsh_your_api_key",
    agent_id="my-assistant"
)

# Use normally - security is automatic
result = secure_agent.invoke({"input": "Search for AI security"})

Get your API key: https://agent-shield.com/dashboard/settings


📖 Examples

Basic Function Wrapping

Secure any Python function with AgentShield:

from agentshield import SecureAgent, SecurityException

def web_search(query: str) -> str:
    """Search the web."""
    return perform_search(query)

# Initialize SecureAgent
secure_agent = SecureAgent(
    agent=agent,
    shield_key="agsh_...",
    agent_id="search-agent"
)

# Wrap the function
secure_search = secure_agent.wrap_function(web_search, "web_search")

# Use it - calls are automatically monitored
try:
    result = secure_search("AI security best practices")
    print(result)
except SecurityException as e:
    print(f"Blocked: {e.message}")
    print(f"Policy: {e.policy_matched}")
    print(f"Call ID: {e.call_id}")

LangChain Integration

AgentShield automatically wraps LangChain tools:

from langchain.agents import AgentExecutor, create_openai_functions_agent
from langchain.tools import Tool
from langchain_openai import ChatOpenAI
from agentshield import SecureAgent

# Define tools
tools = [
    Tool(name="Search", func=search_func, description="Search the web"),
    Tool(name="Calculator", func=calc_func, description="Do math"),
    Tool(name="Database", func=db_func, description="Query database"),
]

# Create LangChain agent
llm = ChatOpenAI(model="gpt-4")
agent = create_openai_functions_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# Wrap with AgentShield - tools are automatically secured
secure_agent = SecureAgent(
    agent=agent_executor,
    shield_key="agsh_...",
    agent_id="langchain-assistant",
    fail_open=False,  # Fail closed for security
)

# Use normally - all tool calls are monitored and enforced
result = secure_agent.invoke({"input": "What's the weather in SF?"})

OpenAI Assistants

from openai import OpenAI
from agentshield import SecureAgent

client = OpenAI()

# Create assistant
assistant = client.beta.assistants.create(
    name="Data Analyst",
    instructions="You analyze data and generate reports.",
    tools=[{"type": "code_interpreter"}],
    model="gpt-4"
)

# Wrap with AgentShield
secure_assistant = SecureAgent(
    agent=assistant,
    shield_key="agsh_...",
    agent_id="data-analyst",
)

# Function calls are now monitored
thread = client.beta.threads.create()
message = client.beta.threads.messages.create(
    thread_id=thread.id,
    role="user",
    content="Analyze this dataset and find trends"
)
run = client.beta.threads.runs.create(
    thread_id=thread.id,
    assistant_id=secure_assistant.id
)

🎛️ Configuration

SecureAgent Options

secure_agent = SecureAgent(
    agent=agent,                    # Required: Your agent instance
    shield_key="agsh_...",          # Required: Your AgentShield API key
    agent_id="unique-agent-id",     # Required: Unique identifier for this agent
    api_url=None,                   # Optional: Custom API endpoint
    timeout=30,                     # Optional: API timeout in seconds
    debug=False,                    # Optional: Enable debug logging
    fail_open=False,                # Optional: Allow calls if API unavailable
)

Policy Actions

AgentShield supports four policy actions:

Action Behavior Use Case
ALLOWED Execute tool normally Safe, approved operations
BLOCKED Raise SecurityException, prevent execution Dangerous operations, PII access
FLAGGED Log warning, allow execution Suspicious but not critical
PENDING_APPROVAL Raise exception, require manual approval High-risk operations

🔐 Security Policies

Create policies in the AgentShield Dashboard:

Example Policies

Block PII Access

name: Block PII Access
action: BLOCK
conditions:
  keywords: ["social security", "ssn", "credit card", "password"]
  tools: ["database_query", "file_read"]

Flag Expensive Operations

name: Flag Expensive Operations
action: FLAG
conditions:
  cost_limit: 1.00  # Flag if cost > $1
  tools: ["gpt4_call", "dalle_generate"]

Rate Limiting

name: Rate Limit API Calls
action: BLOCK
conditions:
  rate_limit:
    calls: 100
    window: 3600  # 100 calls per hour

📊 Monitoring & Alerts

Dashboard Features

Visit agent-shield.com/dashboard to:

  • 📈 View Activity: See every agent call in real-time
  • 🎯 Create Policies: Define security rules with a visual editor
  • 🚨 Set Alerts: Get notified via email or webhook
  • 📉 Track Metrics: Monitor costs, performance, and anomalies
  • 🔍 Search Logs: Find specific calls, filter by status/tool/agent
  • 📊 Analytics: Understand agent behavior patterns

Webhook Alerts

Configure webhooks to receive alerts:

# Set webhook URL in dashboard settings
webhook_url = "https://your-api.com/agentshield-webhook"

# Receive events:
{
  "event": "call_blocked",
  "agent_id": "my-agent",
  "tool_name": "database_query",
  "policy_matched": "Block PII Access",
  "call_id": "call_abc123",
  "timestamp": "2024-11-06T12:34:56Z",
  "severity": "HIGH"
}

🛠️ Error Handling

SecurityException

from agentshield import SecurityException

try:
    result = secure_agent.invoke({"input": "Delete user data"})
except SecurityException as e:
    print(f"Status: {e.status}")                # BLOCKED or PENDING_APPROVAL
    print(f"Message: {e.message}")              # Human-readable reason
    print(f"Policy: {e.policy_matched}")        # Which policy was violated
    print(f"Call ID: {e.call_id}")              # For debugging/auditing

Other Exceptions

from agentshield import (
    APIKeyError,          # Invalid or revoked API key
    NetworkError,         # Network/connectivity issues
    PolicyEvaluationError,  # Server-side policy evaluation failed
    ConfigurationError,   # Invalid SDK configuration
)

Fail-Open vs Fail-Closed

# Fail-Closed (default): Block calls if API is unavailable
secure_agent = SecureAgent(agent, shield_key, agent_id, fail_open=False)

# Fail-Open: Allow calls if API is unavailable (less secure)
secure_agent = SecureAgent(agent, shield_key, agent_id, fail_open=True)

🧪 Testing

# Install dev dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Run with coverage
pytest --cov=agentshield --cov-report=html

# Run specific test
pytest tests/test_client.py::TestAgentShieldClient::test_log_agent_call_allowed

📚 API Reference

SecureAgent

__init__(agent, shield_key, agent_id, **options)

Initialize SecureAgent wrapper.

wrap_function(func, tool_name=None) -> Callable

Manually wrap a function with AgentShield security.

AgentShieldClient

log_agent_call(tool_name, tool_args, execution_time_ms=None, timestamp=None) -> dict

Log an agent call to AgentShield for policy evaluation.


🔧 Troubleshooting

Common Issues

1. APIKeyError: Invalid or revoked shield_key

2. NetworkError: Failed to connect

  • Check your internet connection
  • Verify firewall allows outbound HTTPS to *.cloudfunctions.net
  • Try with timeout=60 for slower connections

3. Tool calls not being intercepted

  • Enable debug mode: SecureAgent(..., debug=True)
  • Check logs for "Wrapped X tools" message
  • Some agent frameworks require manual wrapping

4. High latency

  • API calls add ~50-200ms overhead
  • Use fail_open=True for non-critical applications
  • Consider caching for repeated calls

Debug Mode

import logging

# Enable debug logging
logging.basicConfig(level=logging.DEBUG)

secure_agent = SecureAgent(
    agent=agent,
    shield_key="agsh_...",
    agent_id="debug-agent",
    debug=True  # Enables verbose logging
)

🤝 Contributing

We welcome contributions! Please see our Contributing Guide.

# Setup development environment
git clone https://github.com/agentshield/python-sdk.git
cd python-sdk
pip install -e ".[dev]"

# Run tests
pytest

# Format code
black agentshield tests examples
flake8 agentshield

# Type check
mypy agentshield

📄 License

MIT License - see LICENSE file for details.



🙋 Support


Made with ❤️ by the AgentShield team

Metadata

Release files for agentshield 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for agentshield 0.1.2
File Size Uploaded Provenance
agentshield-0.1.2.tar.gz 36.4 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for agentshield 0.1.2
File Interpreter ABI Platform
agentshield-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 51.5 kB

Release files / agentshield-0.1.2.tar.gz

Download URL agentshield-0.1.2.tar.gz
Size 36.4 kB
Tags Source
SHA-256 checksum
How to use checksums
ce8d168beb60123d464f2e404ceb464e034bb0291885d3752efb1afdb8b7ef82
BLAKE2b-256 checksum
How to use checksums
795d740b5c77d3cc38d4d4aa302124cabcafa3af835a6258d595ed36d5c7b2c0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.12

Release files / agentshield-0.1.2-py3-none-any.whl

Download URL agentshield-0.1.2-py3-none-any.whl
Size 15.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6305b787abbcef506a061e0137d21bacbf393b4f1116aab16f9c03b547369797
BLAKE2b-256 checksum
How to use checksums
0db1f4b5c98ec1cd173d9b8a06d92f29afb09d12cacb7927cc357ac35e904278
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.12

Security for agentshield 0.1.2

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A 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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page