Skip to main content

CrewAI integration for LatchGate — execution security kernel for AI agents

Project description

latchgate-crewai

CrewAI integration for LatchGate — execution security kernel for AI agents.

Every tool call goes through LatchGate's enforcement pipeline: auth => policy => WASM sandbox => verification => signed receipt. The LLM never holds credentials and never contacts external systems directly.

Installation

pip install latchgate-crewai

Requires a running LatchGate instance:

curl -fsSL https://raw.githubusercontent.com/latchgate-ai/latchgate/main/install.sh | bash && latchgate up

Quick start

from crewai import Agent, Task, Crew
from latchgate_crewai import LatchGateToolset

# Sync factory (preferred for CrewAI's synchronous kickoff):
toolset = LatchGateToolset.create_sync(gate_url="http://localhost:3000")
tools = toolset.all()

agent = Agent(
    role="Secure Worker",
    goal="Perform tasks through gated tools with full audit trail",
    backstory="You are an agent with access to LatchGate-protected actions.",
    tools=tools,
)

task = Task(
    description="Fetch https://httpbin.org/get and report the response",
    expected_output="The HTTP response body",
    agent=agent,
)

crew = Crew(agents=[agent], tasks=[task])
result = crew.kickoff()
print(result)

API

LatchGateToolset

Main entry point. Discovers actions and wraps them as CrewAI tools.

# Sync factory (works everywhere, including inside running event loops):
toolset = LatchGateToolset.create_sync(
    gate_url="http://localhost:3000",  # Required (or set LATCHGATE_URL)
    agent_id="my-agent",               # Default: "crewai"
    include={"http_fetch", "database"}, # Optional: only these actions
    exclude={"send_message"},           # Optional: skip these actions
    on_audit=my_audit_callback,         # Optional: receipt callback
)

# Async factory:
toolset = await LatchGateToolset.create(gate_url="http://localhost:3000")

tools = toolset.all()              # list[BaseTool]
tool = toolset.get("http_fetch")   # single tool by action_id
ids = toolset.action_ids           # list[str]
client = toolset.client            # LatchGateClient (for direct access)

Use as an async context manager for automatic cleanup:

async with await LatchGateToolset.create(gate_url="...") as toolset:
    tools = toolset.all()

Or create from pre-fetched descriptors (synchronous, no I/O):

toolset = LatchGateToolset.from_descriptors(descriptors, client=client)

LatchGateTool

Individual tool wrapping a single action. Created automatically by LatchGateToolset, but can be used directly:

from latchgate import LatchGateClient
from latchgate_crewai import LatchGateTool, ActionDescriptor

client = LatchGateClient(base_url="http://localhost:3000", agent_id="my-agent")

descriptor = ActionDescriptor(
    action_id="http_fetch",
    version="1.0.0",
    risk_level="low",
    request_schema={"type": "object", "properties": {"url": {"type": "string"}}, "required": ["url"]},
    description="Fetch a URL through LatchGate",
)

tool = LatchGateTool.from_descriptor(descriptor, client)

discover_actions

Low-level discovery function:

from latchgate_crewai import discover_actions

descriptors = await discover_actions("http://localhost:3000", include={"http_fetch"})

Error handling

LatchGate errors are returned as structured error strings (not exceptions) so the CrewAI agent can reason about them:

LatchGate error Tool returns
Policy denied "ERROR: Action '...' denied: {reason}..."
Approval required "ERROR: ... requires human approval..." (approval_id emitted via log, not to the model)
Budget exhausted "ERROR: Budget exhausted..."
Transport / infra "ERROR: LatchGate error..."

Output format

Tool output is a JSON string containing only the action result. Enforcement metadata (receipt ID, trace ID, verification) is never returned to the model — it is emitted at INFO log level and via the optional on_audit callback.

{"status": 200, "body": "{...}"}

License

Apache-2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

latchgate_crewai-0.1.0.tar.gz (296.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

latchgate_crewai-0.1.0-py3-none-any.whl (12.3 kB view details)

Uploaded Python 3

File details

Details for the file latchgate_crewai-0.1.0.tar.gz.

File metadata

  • Download URL: latchgate_crewai-0.1.0.tar.gz
  • Upload date:
  • Size: 296.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for latchgate_crewai-0.1.0.tar.gz
Algorithm Hash digest
SHA256 6721f9e4c6bd47dd5cfa3acd9ecee66826eb34612dd29f04e487b25f316c5c1d
MD5 ed6449f89fcbf797b9edbc0536b4e87f
BLAKE2b-256 5105e4d6f6801c75c5884e9181f7cf54e0aad38d9b448e05c3ff24861b4ffd88

See more details on using hashes here.

File details

Details for the file latchgate_crewai-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for latchgate_crewai-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4dc0e2b05d15cf96a2fc752100386038073cfb12f41bbd0721d6a0d828fb9504
MD5 6c1fbb0eaa0634d264373412fdc2f004
BLAKE2b-256 3082f0b63334bdbacaae7d74f9c3dc82e07b1a14640b1d8c45d5eb0a62ff7c64

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page