Skip to main content
AI agents are moving from chat to autonomous action across real systems. Most people building with them have minimal visibility into what their agents are doing after they have been deployed, and even less control over what they are about to do. Adrian addresses this directly:
  • Oversight. What an agent has done, why, and what it is about to do next.
  • Detection. Malicious, misaligned, or out-of-remit actions, classified by severity.
  • Control. Pause or block specific actions, with optional human-in-the-loop approval.
Install the Python SDK with just 2 lines of code, self-hosted or hosted backend options.

Why Adrian is different

Most agent monitoring stops at activity logs: tool calls, outputs, side effects. Adrian also analyses the agent’s reasoning traces and thought process. Lab research by OpenAI and DeepMind found that combining behaviour and reasoning analysis boosts detection accuracy by around 35%, and Adrian is the first tool to put that into a deployable security control. You understand not just what decisions an agent made, but why, and what it is planning to do next. Similarly, most tools in this space are machine learning classifiers trained to spot patterns in their training data. Adrian takes a different approach: it uses world models that understand risk through reasoning. It correlates behaviours across a session, holds a working understanding of what the agent is meant to be doing, and assesses each new action against that. The thought process is closer to a human reviewer’s than to pattern matching against examples it has seen before.

When to use Adrian

If your agent has write access to any system, takes actions on external services, or operates with any meaningful autonomy, you need runtime monitoring. If you are shipping a tool-less chatbot, you do not need this yet. If you are unsure, start in Audit mode (notify-only, no intervention) and let the events tell you.

Quick look

import adrian
adrian.init(api_key="adr_live_...")

# Your LangChain / LangGraph agent runs unchanged - every call is captured.
The SDK defaults to the hosted Adrian backend. Override via ws_url= or ADRIAN_WS_URL to point at a self-hosted backend.

Get started

Wrap a LangChain agent with two lines of code and see your first detection.