Integrations
Connect Sigmodx to your AI agent framework in minutes. Register one callback or add five lines of config. Every agent decision is automatically logged, hashed, and attested.
LangChain
Callback handler
Register one callback. Every tool call is automatically logged to Sigmodx.
pip install sigmodx-integrations
from sigmodx_integrations import \
SigmodxCallbackHandler, \
ANOMALY_DETECTION_CONFIG
handler = SigmodxCallbackHandler(
client=client,
config=ANOMALY_DETECTION_CONFIG,
)LangGraph
Stream handler · Node decorator
Process graph stream events. Every tool-calling node is automatically logged to Sigmodx.
from sigmodx_integrations.langgraph import (
SigmodxLangGraphCallback,
LANGGRAPH_ANOMALY_CONFIG,
)
handler = SigmodxLangGraphCallback(
client=client,
config=LANGGRAPH_ANOMALY_CONFIG,
)
async for event in graph.astream_events(
inputs, version="v2"
):
await handler.aprocess_event(event)CrewAI
Task callback · Step callback
Task callback or crew-level step callback. Every task output and agent step is automatically logged.
pip install "sigmodx-integrations[crewai]"
from sigmodx_integrations.crewai import (
SigmodxTaskCallback,
CREWAI_ANOMALY_CONFIG,
)
task = Task(
description="Analyze transaction",
agent=analyst_agent,
expected_output="flag/clear/escalate",
callback=SigmodxTaskCallback(
client=client,
config=CREWAI_ANOMALY_CONFIG,
),
)OpenAI Agents SDK
RunHooks
RunHooks implementation. Every tool call is logged automatically via on_tool_end.
pip install "sigmodx-integrations[openai-agents]"
from sigmodx_integrations.openai_agents import (
SigmodxRunHooks,
OPENAI_ANOMALY_CONFIG,
)
hooks = SigmodxRunHooks(
client=client,
config=OPENAI_ANOMALY_CONFIG,
)
result = await Runner.run(
agent, "Check TXN-2026-4421", hooks=hooks
)MCP Server
Claude · Cursor · Any MCP client
Expose Sigmodx as tools any MCP-compatible agent can call directly.
pip install sigmodx-mcp
"sigmodx": {
"command": "sigmodx-mcp",
"env": {
"SIGMODX_API_KEY": "...",
"SIGMODX_AGENT_ID": "..."
}
}Universal Adapter
Any framework
Works with any agent framework, orchestration system, or custom agent implementation.
from sigmodx_integrations.universal import SigmodxAdapter
adapter = SigmodxAdapter(
client=client,
scenario="anomaly_detection",
)
adapter.log(inputs={...}, ...)More Frameworks
- AutoGen / Microsoft Agent Framework Coming soon
- Semantic Kernel Coming soon
- Google ADK Coming soon
Request prioritization: github.com/Sigmodx/integrations-python/issues
Available MCP tools
| Tool | Description |
|---|---|
| sigmodx_log_invoice_decision | Log invoice approval/reject/escalate |
| sigmodx_log_gl_decision | Log GL entry review decision |
| sigmodx_log_anomaly_decision | Log anomaly flag/clear/escalate |
| sigmodx_log_trade_decision | Log trade execute/reject/flag |
| sigmodx_log_forecast_decision | Log forecast submit/revise/reject |
| sigmodx_log_capex_decision | Log CapEx vs OpEx classification |
| sigmodx_log_vendor_risk_decision | Log vendor risk approve/reject/flag |
| sigmodx_verify_attestation | Verify a verification string (no auth) |
| sigmodx_get_reliability | Get agent ALLOW/LIMIT/BLOCK state |
| sigmodx_hash_inputs | Hash input payload (no auth needed) |
sigmodx_verify_attestation and sigmodx_hash_inputs require no authentication. Any MCP client can use them to verify attestations or hash inputs without an API key.
What gets logged automatically
When an agent calls a tool through LangChain, a LangGraph node, or an MCP tool call, Sigmodx intercepts the event. The tool inputs are hashed client-side using SHA-256 with sorted keys. The actual input data never leaves the agent's environment. Only the hash travels to Sigmodx.
The decision type, rationale, and scenario-specific metadata are extracted from the tool output. The decision is submitted to Sigmodx's append-only API and logged with a cryptographic hash. The agent continues executing without interruption. Sigmodx failures never block agent operation.
At the end of a period, the org admin generates an attestation covering all decisions logged through any integration. The verification string works identically whether the decision came from the SDK directly, a LangChain callback, or an MCP tool call.