Catalog PyPI
PACKAGE EXPLORERView in registry

agentbouncr

PyPI

Python SDK for AgentBouncr — Governance for AI Agents

agentsaigovernancelangchainsafety
Versions collected1
Direct dependencies8From release 0.2.0
Last observed20 Oct, 21:33 UTC

README

Version 0.2.0 documentation

agentbouncr

PyPI version Python versions License: MIT

Governance for autonomous AI agents. Every tool call is checked against your policies before execution.

Native adapters for LangChain / LangGraph (drop-in callback) and CrewAI (tool wrapper). Any other framework works via the plain HTTP evaluate() client.

Installation

pip install agentbouncr

For LangChain integration:

pip install "agentbouncr[langchain]"

For CrewAI integration:

pip install "agentbouncr[crewai]"

30-Second Quickstart

from agentbouncr import AgentBouncr

client = AgentBouncr(api_key="sk_live_your_key_here")

result = client.evaluate(
    agent_id="my-research-agent",
    tool="send_email",
    params={"to": "user@example.com"},
)

if result.allowed:
    send_email(to="user@example.com")
else:
    print(f"Blocked by policy: {result.reason}")

LangChain in 3 Lines

from agentbouncr import AgentBouncr
from agentbouncr.langchain import AgentBouncrCallbackHandler

client = AgentBouncr(api_key="sk_live_your_key_here")
handler = AgentBouncrCallbackHandler(client, agent_id="my-research-agent")

executor = AgentExecutor(agent=agent, tools=tools)
executor.invoke({"input": "Find the latest AI news"}, config={"callbacks": [handler]})

Every tool call now passes through AgentBouncr first. Observe-first is the default (enforce=False): denials and unreachable-API errors are logged and execution always proceeds — governance stays off the agent's critical path (not a SPOF). Opt into the fail-closed path with enforce=True:

handler = AgentBouncrCallbackHandler(client, agent_id="my-research-agent", enforce=True)
# enforce=True: a denied call raises GovernanceDeniedError; an unreachable API re-raises.

Important — pass callbacks at invoke time, not in the constructor. In LangChain 0.3.x, passing callbacks=[handler] to AgentExecutor(...) attaches the handler to the executor but does not reliably propagate it to the inner tool runs. The on_tool_start hook then never fires and governance is silently bypassed. Always pass callbacks via the per-call config={"callbacks": [handler]} argument to .invoke() / .stream() / .ainvoke() — this is the supported path and the one we test against.

LangGraph works the same way:

app = create_react_agent(llm, tools)
app.invoke({"messages": [...]}, config={"callbacks": [handler]})

Coverage

The handler intercepts standard LangChain/LangGraph tool runs via on_tool_start. That covers the patterns used by create_react_agent, AgentExecutor with Tool / StructuredTool / BaseTool subclasses, and native function-calling tool wrappers.

It does not intercept code paths that bypass the tool abstraction — for example a raw Runnable chain that calls an external API directly, or a custom node in a LangGraph that invokes an HTTP client without wrapping it as a tool. For those, call client.evaluate(...) yourself before the side effect.

CrewAI in 3 Lines

from agentbouncr import AgentBouncr
from agentbouncr.crewai import govern_tools

client = AgentBouncr(api_key="sk_live_your_key_here")

# Observe-first (default): every tool call is evaluated + logged, execution always proceeds.
agent = Agent(role="researcher", tools=govern_tools(tools, client, "my-research-agent"))

For the fail-closed path, wrap a tool with enforce=True — a denied call then raises GovernanceDeniedError and the wrapped tool never runs:

from agentbouncr.crewai import govern_tool

enforced = govern_tool(my_tool, client, agent_id="my-research-agent", enforce=True)

Both native adapters default to observe-first and share the same enforce flag: denials are advisory (logged, never blocking) and an unreachable API does not block the tool until you opt into enforce=True.

Authentication

Get an API key from your AgentBouncr Dashboard under Settings → API Keys.

client = AgentBouncr(api_key="sk_live_...")

For multi-workspace setups:

client = AgentBouncr(
    api_key="sk_live_...",
    tenant_id="your-workspace-id",
)

Configuration

client = AgentBouncr(
    api_key="sk_live_...",
    base_url="https://agentbouncr.com",  # default
    timeout=5.0,                              # request timeout in seconds
    max_retries=3,                            # exponential backoff for 5xx/429
    tenant_id=None,                           # optional X-Tenant-Id header
)

Error Handling

from agentbouncr import (
    AgentBouncrError,        # base class
    AuthenticationError,     # 401
    ValidationError,         # 400
    RateLimitError,          # 429 after retries exhausted
    ServerError,             # 5xx after retries exhausted
    TimeoutError,            # request exceeded timeout
    GovernanceDeniedError,   # raised by LangChain handler when policy denies
)

License

MIT — see LICENSE.

The AgentBouncr backend is commercial software. The SDK is open source so you can audit, patch, and integrate freely.

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
0.2.02 Jul 20268

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

PENDING
agentbouncr/enterprise

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 21:33 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:14bda62260890927823e0f4fa558e25c2a32e5bcec06978eb011cc2c25fc79c9