Control Your AI Agents. Before They Control Your Budget.
Stop the guesswork. AeneasSoft gives you full transparency and audit-readiness for your multi-agent AI systems with two lines of code.
From Endless Boilerplate to Instant Insight.
Stop wiring callbacks, decorators, and custom loggers. AeneasSoft intercepts every LLM call at the HTTP level โ automatically.
# Traditional observability setup - 50+ lines of boilerplate
from langchain.callbacks import BaseCallbackHandler
from langchain.callbacks.manager import CallbackManager
import opentelemetry
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.grpc import OTLPSpanExporter
import logging
import json
import time
class CustomAgentTracer(BaseCallbackHandler):
def __init__(self, service_name: str):
self.provider = TracerProvider()
self.exporter = OTLPSpanExporter(endpoint="...")
self.provider.add_span_processor(
BatchSpanProcessor(self.exporter)
)
trace.set_tracer_provider(self.provider)
self.tracer = trace.get_tracer(service_name)
self.logger = logging.getLogger(__name__)
self._spans = {}
self._costs = {}
def on_llm_start(self, serialized, prompts, **kwargs):
span = self.tracer.start_span("llm_call")
span.set_attribute("prompts", json.dumps(prompts))
span.set_attribute("model", serialized.get("model"))
self._spans[kwargs["run_id"]] = span
self._costs[kwargs["run_id"]] = time.time()
def on_llm_end(self, response, **kwargs):
span = self._spans.pop(kwargs["run_id"])
elapsed = time.time() - self._costs.pop(kwargs["run_id"])
span.set_attribute("latency_ms", elapsed * 1000)
span.set_attribute("tokens", response.usage.total)
span.end()
def on_chain_start(self, serialized, inputs, **kwargs):
span = self.tracer.start_span("chain")
self._spans[kwargs["run_id"]] = span
def on_chain_end(self, outputs, **kwargs):
span = self._spans.pop(kwargs["run_id"], None)
if span: span.end()
def on_tool_start(self, serialized, input_str, **kwargs):
# ... more boilerplate
pass
# Setup callback manager
tracer = CustomAgentTracer("my-agent-service")
callback_manager = CallbackManager([tracer])
# Pass to every single chain and agent...
chain = LLMChain(llm=llm, callbacks=callback_manager)import agentwatch
agentwatch.init()
# That's it. Every LLM call is now traced. Regain control.Works with OpenAI, Anthropic, Gemini, Mistral, Groq, Cohere, Together AI, Fireworks, Azure, Ollama.
Built for the Unpredictability of Multi-Agent Systems.
Everything you need to understand, debug, and audit your AI agents at scale.
Pinpoint Root Causes in Seconds.
Visualize the exact decision path of your AI agents. Find the root cause of any issue fast with interactive causal execution graphs. No more black boxes.
Stop Agent Budget Drain.
Know precisely which agent is burning money. Optimize budget and performance with real-time, per-agent, per-model cost breakdowns. See exactly who spent $47.30 and why.
EU AI Act Article 12 Ready.
Prepare for the future of AI regulation. Generate one-click, signed PDF reports for any audit. Be ready by design, not by panic. Deadline: August 2, 2026.
Your Data, Your Control. Always.
GDPR-compliant by design. Enable Zero Data Retention (ZDR) mode: only metadata is stored โ no prompts, no outputs. Your sensitive data never leaves your infrastructure.
The Universal Interceptor for AI Agents.
One interceptor. All providers. Zero configuration.
โWe needed to understand our multi-agent systems, not just monitor them. AeneasSoft's HTTP-level interception gave us that control, instantly.
โ
EU AI Act Article 12: August 2, 2026.
Is your AI system ready?
The EU AI Act Article 12 requirements are coming. Prepare your AI systems now to ensure transparency and accountability.
Check Article 12 Readiness โYour Questions. Our Answers.
Stop Guessing. Start Controlling.
Free plan. No credit card. 2 lines of code. Full observability in under 2 minutes.
Get Started Free โ