Runtime security for AI agents — evaluate tool calls against policies in real time
Project description
verdicter
Runtime security for AI agents. Evaluate every tool call against your policies — get ALLOW, DENY, MODIFY, or ESCALATE in under 50ms.
→ Get your free API key at verdicter.dev
Install
pip install verdicter
With LangChain support:
pip install "verdicter[langchain]"
Quick start
import asyncio
from verdicter import Verdicter
client = Verdicter(api_key="verdicter_live_...")
async def main():
result = await client.evaluate(
agent_id="support_bot", # registered in your Verdicter dashboard
tool="send_email",
payload={"to": user_email, "subject": subject, "body": body},
)
if result.decision == "ALLOW":
await send_email(payload)
elif result.decision == "MODIFY":
await send_email(result.modified_payload) # Verdicter rewrote the payload
elif result.decision == "DENY":
raise PermissionError(f"Blocked: {result.reason}")
elif result.decision == "ESCALATE":
await request_human_approval(payload)
Wrap a function
Zero per-call boilerplate — evaluation happens automatically on every invocation:
from verdicter import Verdicter, WrapOptions
client = Verdicter(api_key="verdicter_live_...")
safe_send_email = client.wrap(
"send_email",
send_email,
WrapOptions(agent_id="support_bot"),
)
# Policy enforcement is automatic
await safe_send_email(to=user_email, subject=subject, body=body)
LangChain adapter
from verdicter import Verdicter
from verdicter.adapters.langchain import wrap_tools
from langchain_core.tools import tool
client = Verdicter(api_key="verdicter_live_...")
@tool
def send_email(to: str, subject: str, body: str) -> str:
"""Send an email."""
...
# Wrap your tools — every invocation goes through Verdicter
safe_tools = wrap_tools([send_email], client, agent_id="support_bot")
agent = create_react_agent(llm=llm, tools=safe_tools)
Configuration
client = Verdicter(
api_key="verdicter_live_...",
timeout=5.0, # seconds, default 5.0
max_retries=2, # default 2
fail_open=False, # if True, ALLOW on network errors (default: False = fail closed)
)
Decisions
| Decision | Meaning |
|---|---|
ALLOW |
Policy passed — run the tool |
DENY |
Policy blocked it — don't run |
MODIFY |
Policy rewrote the payload — use result.modified_payload |
ESCALATE |
Needs human review — route to your approval flow |
Links
- Sign up free → verdicter.dev
- Dashboard → app.verdicter.dev
- Documentation → docs.verdicter.dev
- npm package → npmjs.com/package/verdicter
MIT License © Verdicter
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 verdicter-1.0.0.tar.gz.
File metadata
- Download URL: verdicter-1.0.0.tar.gz
- Upload date:
- Size: 5.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ea71988c94191c6af73a078eb77c014f8acfad155435ac3c0fb9c23498afa4db
|
|
| MD5 |
402c2873cbc5d9994605a3b65d5c9d0b
|
|
| BLAKE2b-256 |
ab82600390a9b5312912cab8ada050f5d2827d67e5af5e56dcd28403df81e527
|
File details
Details for the file verdicter-1.0.0-py3-none-any.whl.
File metadata
- Download URL: verdicter-1.0.0-py3-none-any.whl
- Upload date:
- Size: 8.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5b3be5bfd6486a6528988b1e9b47a5b104e4766550e62e3a7ec902f2276a60b5
|
|
| MD5 |
8c2b2ef7051603359c0fce4e2b2e6d20
|
|
| BLAKE2b-256 |
e0e953c88adffe32e2640b3b2b6ba470196a51137f2e1b93e61d034873130794
|