AGENTICONTROL V0 MVP - Control plane for AI agents with synchronous blocking and asynchronous logging
Project description
AGENTICONTROL V0 MVP
Control plane for AI agents with synchronous blocking and asynchronous logging.
Overview
AGENTICONTROL provides:
- Synchronous Blocking: Zero-latency policy checks and loop detection
- Asynchronous Logging: Non-blocking trace event ingestion
- Terminal Viewer: Real-time structured trace output for local debugging
- Cloud Backend: Scalable trace storage and analytics
Key Features
- 🛑 Policy V0 Checks: Block dangerous operations (SQL DROP, DELETE, PII patterns)
- 🔄 Loop Detection: Detect and halt infinite loops (Rule A & B)
- 💰 Cost Monitoring: Track token usage and estimated costs
- 📊 Terminal Viewer: Beautiful real-time trace visualization with
rich - ☁️ Cloud Uplink: Async trace ingestion to Supabase
Installation
pip install agenticontrol
Quick Start
Installation
pip install agenticontrol
Basic Usage with LangChain
from langchain.agents import initialize_agent, AgentType
from langchain.llms import OpenAI
from agenticontrol.hooks.langchain_handler import AgenticontrolCallbackHandler
# Initialize the callback handler
handler = AgenticontrolCallbackHandler(
api_url="http://localhost:8000/api/v1/ingest/trace", # Your backend URL
api_key=None, # Optional API key
enable_blocking=True, # Enable Policy V0 and Loop Detection
enable_logging=True, # Enable async trace logging
)
# Use with LangChain agent
agent = initialize_agent(
tools=tools,
llm=llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
callbacks=[handler],
verbose=True
)
# Run agent - blocking checks happen automatically
try:
result = agent.run("Your query here")
print(f"Result: {result}")
except PolicyViolationError as e:
print(f"Agent blocked: {e}")
# Cleanup
import asyncio
asyncio.run(handler.flush())
asyncio.run(handler.close())
Local-Only Mode (No Cloud Backend)
from agenticontrol.hooks.langchain_handler import AgenticontrolCallbackHandler
# Local-only mode: blocking checks work, but no cloud logging
handler = AgenticontrolCallbackHandler(
api_url=None, # Local-only mode
enable_blocking=True,
enable_logging=False
)
Terminal Viewer
The terminal viewer provides real-time trace visualization:
from agenticontrol.local.viewer import TraceViewer, get_viewer
# Get the viewer instance
viewer = get_viewer()
# Events are automatically displayed when using the callback handler
# The viewer shows:
# - 💭 LLM prompts and responses
# - 🛠 Tool calls and outputs
# - 🛑 Blocked operations (Policy V0, Loop Detection)
# - 💰 Cost tracking
Examples
See the examples/ directory for complete examples:
basic_usage.py- Basic LangChain integrationloop_detection_demo.py- Loop detection demonstrationpolicy_v0_demo.py- Policy V0 checks demonstration
Features
🛑 Policy V0 Checks
Blocks dangerous operations synchronously (zero latency):
- SQL commands:
DROP TABLE,DELETE FROM - File system:
rm -rf, dangerous paths - PII patterns: Email addresses, SSNs, etc.
# Automatically blocks dangerous operations
agent.run("DROP TABLE users") # Raises PolicyV0ViolationError
🔄 Loop Detection
Detects and halts infinite loops (Rule A & B):
- Rule A: Identical LLM prompts repeated
- Rule B: Identical tool calls repeated
# Blocks after 5 identical tool calls
for i in range(10):
agent.run("search for 'test'") # Blocks on 6th identical call
💰 Cost Monitoring
Tracks token usage and estimated costs:
- Accumulates tokens per run
- Calculates USD cost based on model rates
- Updates in real-time
📊 Terminal Viewer
Beautiful real-time trace visualization:
- Tree-like structure showing agent execution
- Color-coded events (LLM, tools, errors)
- Prominent display of blocked operations
☁️ Cloud Uplink
Async trace ingestion to Supabase:
- Non-blocking HTTP calls
- Batched uploads for efficiency
- Never delays agent execution
Architecture
Synchronous Blocking (Zero Latency)
- Policy V0 checks run in-memory
- Loop detection runs synchronously
- Raises
PolicyViolationErrorto halt execution immediately
Asynchronous Logging (Non-Blocking)
- Trace events sent via async HTTP
- Batched uploads for efficiency
- Never blocks agent execution
API Reference
AgenticontrolCallbackHandler
Main callback handler for LangChain integration.
Parameters:
api_url(str, optional): Backend API URL for trace ingestionapi_key(str, optional): API key for authenticationrun_id(UUID, optional): Unique identifier for this run (auto-generated)risk_engine(RiskEngine, optional): Custom risk engine instanceenable_blocking(bool): Enable synchronous blocking checks (default: True)enable_logging(bool): Enable async trace logging (default: True)
Methods:
flush(): Flush pending events to cloud (async)close(): Close client connections (async)
Exceptions
PolicyViolationError: Base exception for all policy violationsPolicyV0ViolationError: Raised when Policy V0 check failsLoopDetectedError: Raised when loop detection triggersCostThresholdExceededError: Raised when cost threshold exceeded
Development
Setup
# Clone repository
git clone https://github.com/yourorg/agenticontrol.git
cd agenticontrol
# Install in development mode
pip install -e ".[dev]"
# Run tests
pytest
# Run with coverage
pytest --cov=src/agenticontrol --cov-report=html
# Format code
black src tests examples
# Lint code
ruff check src tests examples
# Type checking
mypy src
Running Examples
# Basic usage
python examples/basic_usage.py
# Loop detection demo
python examples/loop_detection_demo.py
# Policy V0 demo
python examples/policy_v0_demo.py
Running Backend
cd backend
python run_server.py
# Or: python -m uvicorn backend.app.main:app --reload
Project Structure
src/agenticontrol/
├── models.py # Pydantic models (TraceEvent, RunMetadata, RiskResult)
├── risk_engine.py # Synchronous blocking checks
├── client.py # Async HTTP client
├── exceptions.py # PolicyViolationError hierarchy
└── hooks/
└── langchain_handler.py # LangChain integration
local/
└── viewer.py # Terminal trace viewer
backend/
└── app/ # FastAPI backend (separate repo)
Schema Versioning
The TraceEvent model includes a schema_version field for backward compatibility.
Current version: 1.0.0
License
MIT
Contributing
See CONTRIBUTING.md (coming soon)
Project details
Release history Release notifications | RSS feed
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 agenticontrol-0.1.0.tar.gz.
File metadata
- Download URL: agenticontrol-0.1.0.tar.gz
- Upload date:
- Size: 34.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0348af68133512203321983d30f06a65d8af03fd12891a2fd78933227027dd1e
|
|
| MD5 |
a17c52afac376e8adc1ed86c9e212c78
|
|
| BLAKE2b-256 |
a76e1ae460f62294bfda2590f524276c0fbfe6ae9d05c45be6a1c4c88c8d12ab
|
File details
Details for the file agenticontrol-0.1.0-py3-none-any.whl.
File metadata
- Download URL: agenticontrol-0.1.0-py3-none-any.whl
- Upload date:
- Size: 22.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
74a110139889629779bed122413c1ee9c5d6a1218318d2aefb8556ab19c9de5c
|
|
| MD5 |
24e23fdc603bf1a630ba3f4ee50546b6
|
|
| BLAKE2b-256 |
af0235d6e53eab62e8e2e0fe40b9489d1faac2c8cbbc3e62272cddf1411a21a4
|