Adrian
python-sdk-v1.2.0 open-sourceThe section your link pointed to isn't on Adrian's page any more, so we've brought you to the top.
Adrian is an open-source runtime security engine for AI agents that analyses activity logs and reasoning traces to detect and block malicious or out-of-remit behaviour.
curl -sf http://localhost:8080/readyz && echo 'stack ready'
docker compose --profile setup run --rm setup set-model \
--gguf gemma-4-E2B-it-Q4_K_M.gguf \
--ctx-size 16384
docker compose --profile llm up -d
/plugin marketplace add secureagentics/Adrian
/plugin install adrian-cc@adrian
/reload-plugins
/adrian-init
ADRIAN_CC_FAIL_OPEN=false
ADRIAN_API_KEY=adr_live_...
ADRIAN_WS_URL=wss://adrian.secureagentics.ai/ws
ADRIAN_CC_VERDICT_TIMEOUT=15
/adrian-status
import OpenAI from "openai";
import { adrian } from "@secureagentics/adrian-openai";
await adrian.init({
apiKey: "adr_live_...",
wsUrl: "wss://adrian.secureagentics.ai/ws"
});
const client = adrian.openai(new OpenAI());
const response = await client.chat.completions.create({
model: "gpt-4o",
messages: [{ role: "user", content: "Summarize threat intelligence for Q2" }]
});
await adrian.shutdown();
ADRIAN_API_KEY=adr_live_... \
ADRIAN_WS_URL=wss://adrian.secureagentics.ai/ws \
ADRIAN_SESSION_ID=pentest-run-42 \
ADRIAN_BLOCK_TIMEOUT=15 \
node dist/agent.js
import asyncio
import os
import adrian
import anthropic
async def main():
adrian.init(
api_key="adr_live_...",
ws_url="wss://adrian.secureagentics.ai/ws"
)
client = anthropic.AsyncAnthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
async with adrian.anthropic_invocation():
first = await client.messages.create(
model="claude-opus-5", max_tokens=1024,
messages=[{"role": "user", "content": "Step 1"}]
)
second = await client.messages.create(
model="claude-opus-5", max_tokens=1024,
messages=[{"role": "user", "content": "Step 2"}]
) # same invocation_id as first
adrian.shutdown()
asyncio.run(main())
import adrian
adrian.init(
api_key="adr_live_...",
auto_instrument=False
)
# ... other initialisation ...
adrian.patch_anthropic() # idempotent; safe to call more than once
import asyncio
import adrian
from langchain_openai import ChatOpenAI
async def main():
adrian.init(
api_key="adr_live_...",
ws_url="wss://adrian.secureagentics.ai/ws",
block_timeout=10.0,
on_block=lambda ctx: print(f"BLOCKED: {ctx.mad_code}")
)
llm = ChatOpenAI(model="gpt-4o")
response = await llm.ainvoke("Summarise today's threat intelligence feed.")
print(response.content)
adrian.shutdown()
asyncio.run(main())
ADRIAN_API_KEY=adr_live_...
ADRIAN_WS_URL=wss://adrian.secureagentics.ai/ws
ADRIAN_LOG_FILE=/var/log/adrian/events.jsonl
ADRIAN_BLOCK_TIMEOUT=15.0
ADRIAN_REPLAY_BUFFER_FRAMES=2000
ADRIAN_SESSION_ID=prod-agent-42
import adrian
from langchain_openai import ChatOpenAI
adrian.init(
api_key="adr_live_...",
ws_url="wss://adrian.secureagentics.ai/ws",
auto_instrument=False
)
handler = adrian.get_handler()
llm = ChatOpenAI(model="gpt-4o", callbacks=[handler])
import adrian
adrian.init(
api_key="adr_live_...",
ws_url="wss://adrian.secureagentics.ai/ws"
)
# Your existing LangChain / LangGraph agent code runs unchanged below this point.
import adrian
adrian.init(
api_key="adr_live_...",
ws_url="wss://adrian.secureagentics.ai/ws"
)
# Your existing LangChain / LangGraph agent runs unchanged — every call is captured.
export ADRIAN_WS_URL=wss://adrian.secureagentics.ai/ws
Summary
Adrian is an open-source runtime security layer for AI agents, free to use under an Apache-2.0 licence, that watches an agent's actions and reasoning as it runs and can alert, block, or route decisions to a human reviewer before they execute. It ships as an SDK you wrap around existing code (a few lines around a LangChain or Anthropic-based agent, or a Claude Code plugin via hooks) with events streamed to a hosted or self-hosted dashboard, making it a fit for teams building or securing agentic AI systems rather than traditional application security teams. The README frames it as a runtime counterpart to static analysis and network monitoring, catching prompt-injectionprompt-injectionAn attack where text the model reads, such as a web page, file or tool result, carries instructions that override the user's. It is the main security risk for agents with tools. and out-of-remit behaviour those miss, and includes PIIPIIPersonally Identifiable Information — data that can identify a specific individual, such as names, email addresses, or SSNs. Cyber tools flag or redact it to limit exposure and meet privacy regulations. redaction for agent transcripts. Development is active, with recent releases adding reasoning capture across SDKs and deeper Claude Code integration.
Adrian is an open-source runtime security engine for AI agents that analyses activity logs and reasoning traces to detect and block malicious or out-of-remit behaviour.
How Adrian helps
What is my agent actually doing right now that I haven't reviewed?
streams every tool call, LLM invocation, and reasoning trace to a live event feed as the agent runs, classified with a severity code the moment each action happens
Which of my agent's actions would have run unsupervised before anyone caught a problem?
when a profile is set to block or human review, the matching action is held for a verdict before it executes rather than logged after the fact, so those actions surface instead of completing silently
Is my agent's chain-of-thought hiding an intent its final answer doesn't show?
captures the reasoning or thinking output alongside each LLM call, not just the visible response, so the rationale behind an action is available in the event feed
Is my agent leaking personal or sensitive data through its conversation?
scans agent transcripts for categories like email, phone, SSN, credit card, IP address and AWS keys, and redacts them before the transcript is stored
Did a human reviewer actually approve the action my Claude Code agent just took, or did it proceed on its own?
forwards the approval or denial made on the dashboard back to the Claude Code session inline, so the recorded verdict is the one that determined whether the tool call ran
Which of my agents were only watched versus actually stopped when they hit a problem?
each agent profile carries one of three modes recorded with its events - alert-only, block, or human review - so the event history shows whether a given action was ever capable of being blocked or just observed
Languages
Command line
No command matches.
| option | found in | since | description |
|---|
Values are placeholders taken from each option’s declared default. Nothing is executed here — the output shown is a recording of a run that already happened.
Screenshots
From the release notes, newest first. Click one to see it full size.Score card
-
Shipping velocity releases a month, last 12 months
-
Documentation quality release-notes rubric, 0–100
-
Breaking-change discipline how rarely a release breaks users, and notice given
-
Maintenance risk quiet time against its own cadence, maintainers
-
Innovation & surface new capabilities, API and MCP surface
- Community health
-
Contributor trend distinct committers, this year against last
-
Maintainer concentration bus factor now against a year ago
-
Issue backlog trend issues closed per issue opened, 12 months
-
Responsiveness median time to a maintainer’s first reply
Nine scores for Adrian, each built from the releases, notes and API history this site tracks — and, on Researcher and Business, where it stands among every measured tool in its category and how that has moved.
Score cards are part of every paid plan.
See plans → Already subscribed? Sign in →Trajectory
Blank means never measured; nothing here is a filled-in zero.
Peer standings are included with Researcher and Business. See how this tool ranks against its competitors, using data we don't publish anywhere else.
See plans →Each score is 0–100 on a published rubric, derived from data this site already shows. A dimension we cannot measure says so — it is never scored 0 and never enters a rank.
How this is scored
- Shipping velocity — releases a month over the last 12 months, on a log scale where 16 a month scores 100. Needs 3 releases in the window.
- Documentation quality — the release-notes rubric published on the analytics page, unchanged.
- Breaking-change discipline — the share of releases carrying a breaking change (none scores 100, half or more scores 0). Only projects that label breaking changes are measured: a clean record cannot be told from an unlabelled one.
- Maintenance risk — quiet time measured against the tool's own release cadence (quiet longer than 90 days and three typical gaps scores 0), plus the number of active maintainers and whether contributors are growing, where known. Higher is lower risk.
- Innovation & surface — new capabilities in the feature ledger this year, API and MCP operations added, and the share of commits that are features: the mean of whichever we hold.
- Community health (open-source tools only) — each is a direction, not a size: contributors this year against last, the bus factor now against a year ago, and issues closed per issue opened, where steady scores 50, doubled 100 and halved 0; plus the median time to a maintainer's first reply (an hour scores about 100, a month or more 0). A commercial card has no repository and carries none of the four.
- Documented delivery (commercial tools) — when a vendor's documented new capabilities have slowed against its own baseline, that counts against the overall standing as heavily as two low dimensions. Steady delivery, or too little history to judge, leaves the standing alone; it is never a sixth score.
- Open-source tools are scored on repository signals; commercial tools on their published changelog. Ranks compare tools within one category and one profile and need at least five measured peers; the overall standing needs three ranked dimensions. Best-in-breed or consolidator is a shape, not a quality, and is never scored.
Release-note detail over time
See how much detail Adrian puts in its release notes, quarter by quarter, and compare it with tracked tools in the same category. This history uses up to ten retained, reviewed notes per tool; sparse or blank older quarters may reflect that limit.
Checking release-note history…
Website history
secureagentics.ai, every changeSecureAgentics's home page and 5 more pages as they looked each month from May 2026 to October 2026: 7 renders, 1 change of tagline or palette. Step through them, play them, or put any two months side by side.
Website history is included with Researcher and Business.
See plans → Already subscribed? Sign in →← → or h l a month · Shift a year · [ ] previous / next change · Space play · 1 2 3 page · T whole page · C compare · F full size
← → or h l the right month · Shift the left · S swap · W wipe · T whole page · Esc back
Rebranding timeline
Dates bound when a change appeared between captures. Possible rebrands are AI suggestions; a redesign alone does not establish a rebrand.
Releases
11 entries
No entries match these filters.
- August 202611
Project health
Issue, contributor and maintainer activity in secureagentics/Adrian, 2023-10 – 2026-09, as of 2026-09-25. Twelve-month figures first; the trend lines run the whole window.
- Contributors 10 +10 vs prior 12 months
- Maintainers 4 +4 joined · −0 left, last 12 months
- Bus factor 1 committers behind half the commits
- Community-filed 100% of issues opened, last 12 months
- Median time to close < 1 day first maintainer reply 29 hours
- Open backlog 3 of 15 issues ever filed
- Issues opened / month 0 · 0 communitymaintainers
- Open backlog 3
- Contributors / month 1
- Commits / month 2
- Stars 568
- bugs 60%
- features 13%
- other 27%
Counts from the project's public repository and git history; no individuals are identified. Maintainers are the committers covering 80% of the last year's commits. how we measure this
Add the badge to your README
Maintain this project? The badge links readers straight to this page, so they can follow every release here.