Sondera Harness SDK for Python - Agent governance and policy enforcement
Project description
Sondera Harness
Deterministic guardrails for AI agents.
Open-source. Works with LangGraph, ADK, Strands, or any custom agent.
Docs · Quickstart · Examples · Slack
What is Sondera Harness?
Sondera Harness evaluates Cedar policies before your agent's actions execute. When a policy denies an action, the agent gets a reason why and can try a different approach. Same input, same verdict. Deterministic, not probabilistic.
Example policy:
forbid(principal, action, resource)
when { context has parameters_json && context.parameters_json like "*rm -rf*" };
This policy stops your agent from running rm -rf, every time.
Quickstart
1. Install
uv add "sondera-harness[langgraph]" # or: pip install "sondera-harness[langgraph]"
Works with LangChain/LangGraph, Google ADK, Strands, and custom agents.
2. Add to Your Agent (LangGraph)
from langchain.agents import create_agent
from sondera.harness import SonderaRemoteHarness
from sondera.langgraph import SonderaHarnessMiddleware, Strategy, create_agent_from_langchain_tools
# Analyze your tools and create agent metadata
sondera_agent = create_agent_from_langchain_tools(
tools=my_tools,
agent_id="langchain-agent",
agent_name="My LangChain Agent",
agent_description="An agent that helps with tasks",
)
# Create harness with agent
harness = SonderaRemoteHarness(agent=sondera_agent)
# Create middleware
middleware = SonderaHarnessMiddleware(
harness=harness,
strategy=Strategy.BLOCK, # or Strategy.STEER
)
# Create agent with middleware
agent = create_agent(
model=my_model,
tools=my_tools,
middleware=[middleware],
)
[!NOTE] This example uses Sondera Platform (free account), which also enables the TUI below. For local-only development, see CedarPolicyHarness.
3. See It in Action
uv run sondera # or: sondera (if installed via pip)
Why Sondera Harness?
- Steer, don't block: Denied actions include a reason. Return it to the model, and it tries something else.
- Deterministic: Stop debugging prompts. Rules are predictable.
- Drop-in integration: Native middleware for LangGraph, Google ADK, and Strands.
- Full observability: Every action, every decision, every reason. Audit-ready.
Documentation
Community
- Slack for questions and feedback
- GitHub Issues for bugs
- Contributing for development setup
License
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 sondera_harness-0.7.0.tar.gz.
File metadata
- Download URL: sondera_harness-0.7.0.tar.gz
- Upload date:
- Size: 71.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5ae21402f0e998fbd11f828656d1c4bbb7e6b33ab090466ddb1c6563e1bfd79e
|
|
| MD5 |
4ef83b54d372fa3d771da90c31296d17
|
|
| BLAKE2b-256 |
7dcc5c9ab449fcf5de4aa739b2f14fcb7ecae0698c24fbffa847728e33c0955f
|
File details
Details for the file sondera_harness-0.7.0-py3-none-any.whl.
File metadata
- Download URL: sondera_harness-0.7.0-py3-none-any.whl
- Upload date:
- Size: 96.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a8c13a85fdeefe5aac6969afa1f2c79c5dbac17c4964f5b972d5243a0047421c
|
|
| MD5 |
c25a9bc8bd6489da86d3a3fa4d5da56a
|
|
| BLAKE2b-256 |
911365bb40068011748a3b979f8a4468fccf260564a838c5c0b29e5ad6d045a1
|