Integrations

Integration Examples

Drop Prova into your agent runtime and every model call, tool call, and agent step becomes a signed receipt, with coordination loops, runaway cost, prompt injection, and PII caught inline. Pick your framework below. The full reference is the SDK guide.

LangGraph / LangChain (Python)

The callback handler auto-instruments every node, LLM call, and tool call, and flushes one signed agent_run receipt so the coordination-loop detector fires. It warns on a loop by default; pass break_on_loop=True to stop the run.

python
from prova_cp import ProvaClient, ProvaCallbackHandler

prova = ProvaClient(api_key="prv_...")          # free key from /signup
handler = ProvaCallbackHandler(prova, app_id="claims-orchestrator")

# Drop into any LangChain / LangGraph run.
graph.invoke(inputs, config={"callbacks": [handler]})

# Add budget_usd / max_steps / break_on_loop for a one-line circuit breaker.

CrewAI (Python)

CrewAI has no LangChain-style callbacks, so Prova wires its stable step_callback / task_callback hooks instead.

python
from prova_cp import ProvaClient
from prova_cp.crewai import ProvaCrewAI

prova = ProvaClient(api_key="prv_...")
tap = ProvaCrewAI(prova, app_id="research-crew", environment="production")

crew = Crew(
    agents=[...],
    tasks=[...],
    step_callback=tap.step_callback,
    task_callback=tap.task_callback,
)
crew.kickoff()

AutoGen, or any custom runtime

No framework callbacks? RunGuard gives the same loop, budget, and step protection from two calls you place wherever your runtime advances. It imports no framework and the loop algorithm is identical to the server's.

python
from prova_cp import RunGuard, CoordinationLoopError, BoundaryViolationError

guard = RunGuard(budget_usd=0.50, max_steps=40, break_on_loop=True)
try:
    for turn in run_agent():            # AutoGen reply hook, or your own loop
        guard.observe_step(turn.agent, reads=turn.state_in, writes=turn.state_out)
        guard.observe_model_call(turn.model, turn.token_usage)
except (CoordinationLoopError, BoundaryViolationError) as e:
    log.error("circuit breaker tripped: %s", e)

The Node SDK (@cobound/prova-sdk) ships the same ProvaCallbackHandler and RunGuard. See the SDK guide.

Already on LangSmith, Langfuse, or OpenAI logs

No re-instrumentation needed. Score a raw export offline (no account, nothing uploaded), or bulk-import it into the Audit Vault. For continuous mirroring see continuous ingestion.

bash
# Score offline, no account
prova-local --source langsmith --file langsmith-export.ndjson

# Bulk-import into the Audit Vault (needs a key)
PROVA_API_KEY=prv_... prova-migrate --source langfuse --file observations.ndjson

Legacy verifier integrations

These wrap the original reasoning-chain verifier (not the control plane). They are still supported.

GitHub Actions: gate CI on reasoning validity

uses: cobound/prova-action@v1 blocks INVALID reasoning from reaching production, writes a Step Summary, and posts a PR comment.

MCP server: let an agent verify its own reasoning before answering

pip install prova-mcp for Claude Code, Cursor, Windsurf, Zed, or ChatGPT desktop: verify a chain, fetch a certificate, and kernel-check its Lean proof locally.