Observed since 20 Oct, 23:19 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Enterprise Security Monitoring SDK for AI Agents - Secure any AI agent in just 3 lines of code with real-time threat detection, behavioral analysis, and separate logging and threat reporting for comprehensive security monitoring
Enterprise Security Monitoring SDK for AI Agents
Secure any AI agent in just 3 lines of code with real-time threat detection, behavioral analysis, and separate logging and threat reporting for comprehensive security monitoring.
from agent_sentinel import monitor
# Option 1: bare decorator (agent_id auto-derived from module.function)
@monitor
def my_agent_function(data):
return process_data(data)
# Option 2: named agent
@monitor(agent_id="my_agent")
def my_agent_function(data):
return process_data(data)
# That's it! Your agent is now monitored and secured
pip install agent-sentinel
from agent_sentinel import monitor
# Bare decorator — agent_id auto-derived
@monitor
def process_data(data: str) -> str:
return data.upper()
# Named agent with strict validation
@monitor(agent_id="data_processor", validate_inputs=True, strict_validation=True)
def secure_process(data: str) -> str:
return data.upper()
result = secure_process("hello")
from agent_sentinel import sentinel
# Wrap every public method on the class
@sentinel
class MyAgent:
def respond(self, query: str) -> str:
return f"Answer: {query}"
def summarize(self, text: str) -> str:
return text[:100]
# Named agent
@sentinel(agent_id="prod_agent", enable_threat_reports=True)
class ProdAgent:
def process(self, payload: dict) -> dict:
return {"status": "ok", "data": payload}
agent = ProdAgent()
result = agent.process({"input": "hello"})
from agent_sentinel import monitor_mcp
class FileSystemTool:
@monitor_mcp(agent_id="fs_tool")
def read_file(self, params: dict) -> dict:
path = params.get("path", "")
return {"content": open(path).read()}
@monitor_mcp(agent_id="fs_tool")
def write_file(self, params: dict) -> dict:
path = params.get("path", "")
content = params.get("content", "")
with open(path, "w") as f:
f.write(content)
return {"status": "written"}
tool = FileSystemTool()
result = tool.read_file({"path": "/etc/hosts"})
from agent_sentinel.wrappers.decorators import monitor_agent_session
from agent_sentinel import get_all_events
with monitor_agent_session("pipeline_agent", "ingestion_run") as wrapper:
result = process_batch(data)
stats = wrapper.get_agent_stats()
# Retrieve all events across all agents
events = get_all_events()
from agent_sentinel import monitor
@monitor(
agent_id="production_agent",
validate_inputs=True,
validate_outputs=True,
strict_validation=True, # Block on suspicious inputs
enable_separate_logs=True, # Write per-agent log files
enable_threat_reports=True, # Generate JSON threat reports
)
def production_agent(payload: dict) -> dict:
return process_production_data(payload)
The SDK automatically generates structured logs and threat reports:
from agent_sentinel.wrappers.decorators import monitor
@monitor(agent_id="my_agent")
def my_agent_function(data):
return process_data(data)
# Logs are automatically saved to logs/agent_sentinel_logs.json
# Threat reports are automatically saved to reports/threat_reports.json
{
"timestamp": "2025-01-13T10:30:00Z",
"agent_id": "my_agent",
"session_id": "session_123",
"event_type": "method_call",
"method_name": "my_agent_function",
"arguments": {"data": "test"},
"result": {"status": "success"},
"performance": {
"execution_time_ms": 150,
"memory_usage_mb": 45.2
},
"security": {
"threat_level": "low",
"anomalies_detected": []
}
}
{
"report_id": "threat_report_123",
"timestamp": "2025-01-13T10:30:00Z",
"agent_id": "my_agent",
"threat_summary": {
"total_events": 15,
"high_risk_events": 0,
"medium_risk_events": 2,
"low_risk_events": 13
},
"threats_detected": [
{
"type": "suspicious_input",
"severity": "medium",
"description": "Unusual input pattern detected",
"recommendation": "Review input validation rules"
}
],
"recommendations": [
"Implement additional input validation",
"Monitor for similar patterns"
]
}
# Optional: Configure logging
export AGENT_SENTINEL_LOG_LEVEL=INFO
export AGENT_SENTINEL_LOG_FILE=logs/agent_sentinel.log
| Option | Default | Description |
|---|---|---|
agent_id | Required | Unique identifier for your agent |
enable_input_validation | True | Enable input validation |
enable_behavior_analysis | True | Enable behavioral analysis |
enable_performance_monitoring | True | Enable performance monitoring |
strict_validation | False | Use strict validation mode |
max_session_duration | 3600 | Maximum session duration in seconds |
max_concurrent_sessions | 100 | Maximum concurrent sessions |
session_cleanup_interval | 300 | Session cleanup interval in seconds |
memory_threshold_mb | 512 | Memory threshold for cleanup in MB |
log_format | json | Log format (json, txt, csv) |
report_format | json | Report format (json, txt, csv) |
log_retention_days | 30 | Log retention period in days |
report_retention_days | 90 | Report retention period in days |
The SDK includes comprehensive testing with 100% pass rate:
# Run all tests
python test_sdk_improvements.py
# Expected output: 9/9 tests passed ✅
No breaking changes! Your existing code will continue to work:
# v0.2.0 code (still works)
from agent_sentinel.wrappers.agent_wrapper import AgentWrapper
wrapper = AgentWrapper(agent_id="my_agent")
@wrapper.monitor()
def my_function(data):
return process(data)
# v0.3.0 enhancements (optional)
wrapper = AgentWrapper(
agent_id="my_agent",
enable_input_validation=True,
strict_validation=True,
memory_threshold_mb=256
)
We welcome contributions! Please see our Contributing Guide for details.
git clone https://github.com/agentsentinel/agent-sentinel.git
cd agent-sentinel
pip install -e ".[dev]"
pytest
This project is licensed under the MIT License - see the LICENSE file for details.
Agent Sentinel v0.3.0 is production-ready with:
Ready to secure your AI agents in production? Get started with just 3 lines of code!
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.5.0 | 10 Mar 2026 | 33 |
This describes our collected data; it is not a security assessment.
Shared repository data · GitHub
Observed since 20 Oct, 23:19 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:6a2f9cd3c8c7e9231c17482427a43c116143263cfa7ea37c9aec66df60136ca3