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)
Release files for agenticontrol 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| agenticontrol-0.1.0.tar.gz | 34.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| agenticontrol-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 56.9 kB
Release files / agenticontrol-0.1.0.tar.gz
| Download URL | agenticontrol-0.1.0.tar.gz |
|---|---|
| Size | 34.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0348af68133512203321983d30f06a65d8af03fd12891a2fd78933227027dd1e
|
|
BLAKE2b-256 checksum How to use checksums |
a76e1ae460f62294bfda2590f524276c0fbfe6ae9d05c45be6a1c4c88c8d12ab
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.9
|
Release files / agenticontrol-0.1.0-py3-none-any.whl
| Download URL | agenticontrol-0.1.0-py3-none-any.whl |
|---|---|
| Size | 22.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
74a110139889629779bed122413c1ee9c5d6a1218318d2aefb8556ab19c9de5c
|
|
BLAKE2b-256 checksum How to use checksums |
af0235d6e53eab62e8e2e0fe40b9489d1faac2c8cbbc3e62272cddf1411a21a4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.9
|