SourceryKit is the Python SDK for Provably. Agents self verify API and MCP calls against recorded source evidence and create portable proofs. SourceryKit detects 100% of covered tool calling errors and data hallucinations (see our benchmark). Downstream agents and workflows use those proofs to trigger retries, repair workflows and increase accuracy.
SourceryKit is powered by Provably's QEDB verifiable database, accepted at ACM CCS 2026. QEDB proves that SQL query results were computed correctly over the complete committed data, producing small, database size independent proofs averaging around 1 KB that can be proven and verified in milliseconds.
⚠️ IMPORTANT: Upgrading from a previous version? See the Migration Guides.
PASS, CAUGHT, or ERROR against cryptographically anchored records.Under the hood, these are the pieces doing the work:
claimed_values list of extracted values.Requires Python 3.12+.
pip install sourcerykit
sourcerykit init # one-time setup: account, sandbox, credentialsPrefer installing from source?
git clone [email protected]:ProvablyAI/sourcerykit.git
pip install -e ./sourcerykitGive your agent SourceryKitAgentResponse as its output type, run it inside an intercept context, then check the verdict before you trust its claims:
import uuid
import httpx
import sourcerykit
from agents import Agent, Runner
from sourcerykit import SourceryKitAgentResponse
async def run_verifiable_agent():
# 1. Fire up the system
await sourcerykit.bootstrap_system()
# 2. Tell the registry which URL is allowed
await sourcerykit.insert_trusted_endpoint(url="https://api.example.com/data")
# 3. Make a network call inside an intercept context
async with sourcerykit.async_intercept_context(agent_id="demo-agent", action_name="get_data"):
async with httpx.AsyncClient() as client:
response = await client.get(
"https://api.example.com/data",
params={"query": "example_parameter"}
)
response.raise_for_status()
# 4. Run agent with SourceryKitAgentResponse as the output format
# (e.g., output_type=... for OpenAI, response_format=... for LangChain, output_format=... for Claude).
# The output is a structured response containing `claimed_values`.
prompt = "You are a helpful assistant."
agent = Agent(
name="demo-agent",
instructions=prompt,
tools=[...],
model="model-name",
output_type=SourceryKitAgentResponse,
)
result = await Runner.run(agent, prompt)
final_output: SourceryKitAgentResponse = result.final_output
# 5. Build the handoff payload from the agent's structured output
payload_data = {
"answer": final_output.answer,
"claims": [
{
"action_name": "get_data",
"claimed_value": final_output.claimed_values,
"verification_mode": "field_extraction",
}
],
}
payload = await sourcerykit.build_handoff_payload(
payload_data,
run_id=uuid.uuid4(),
prompt=prompt,
intercept_agent_id="demo-agent",
)
# 6. Ask the evaluator for a verdict
result = await sourcerykit.evaluate_handoff(payload=payload)
print(f"Evaluation Outcome: {result.get('outcome')}") # PASS, CAUGHT, or ERRORTo get things running, SourceryKit must be configured with your project variables. The interactive CLI handles account provisioning, organization workspace initialization, database validation, and persists credentials globally (OS application folder) and locally (project .env).
sourcerykit initThe wizard will guide you through:
--postgres-url.⚠️ IMPORTANT: The wizard only configures SOURCERYKIT_* variables. It does not handle third-party LLM provider infrastructure keys, which must still be exported separately.
Already have credentials, or need to bypass the wizard (CI, containers, debugging)? Environment variables override the stored config:
export PROVABLY_API_KEY="..."
export SOURCERYKIT_ORG_ID="..."
export SOURCERYKIT_POSTGRES_URL="postgresql://user:password@host:5432/db"NOTE
SOURCERYKIT_POSTGRES_URL is set automatically when using a sandbox. Only set it manually if you're using your own database.
For a full list of CLI commands, check out the CLI Documentation file, or simply run:
sourcerykit --helpFor a full list of environment variables, see .env.example.
Want to dig into the details? Check out our documentation and specific guides:
We welcome fixes, features, and doc updates! Check out CONTRIBUTING.md to see how to run tests and open up a pull request.
This project is licensed under the Business Source License 1.1.
See the LICENSE file for full terms and details.