Skip to main content

Cryptographic audit trails for AI agents

Project description

Veralog Python SDK

Cryptographic audit trails for AI agents. Add one line to your agent, get a tamper-proof signed log of every action.

www.vrlg.tech

Installation

pip install veralog

Quick start

import veralog

veralog.configure(api_key="vrlg_...")

result = veralog.record(
    agent_id="sales-bot",
    action="send_proposal",
    payload={"client": "acme-corp", "deal_value": 50000},
    status="success",
)

print(result.verify_url)

Get an API key

import veralog
account = veralog.register(email="you@yourcompany.com")
print(account["api_key"])

Or register at www.vrlg.tech.

Configuration

# Explicit
veralog.configure(api_key="vrlg_...")

# Or via environment variable
export VERALOG_API_KEY="vrlg_..."

Record an event

result = veralog.record(
    agent_id="sales-bot",           # required: your agent's ID
    action="send_proposal",         # required: what it did
    payload={"client": "acme"},     # required: arbitrary dict
    status="success",               # success | warning | error | crash | timeout | blocked | cancelled
    severity="info",                # debug | info | warning | error | critical
    flags=[],                       # loop_detected | policy_violation | data_exposure | ...
    trace_id="trace-abc-123",       # optional: correlation ID
    tool_name="gmail_api",          # optional: tool used
)

print(result.event_id)    # UUID
print(result.verify_url)  # https://www.vrlg.tech/verify/{id}/page
print(result.events_used) # running total

Query events

events = veralog.get_events(
    status="blocked",
    agent_id="sales-bot",
    since="2026-06-01T00:00:00",
    limit=50,
)
print(events["total"])
print(events["events"])

Export all events

data = veralog.export()
# Returns dict with all events, signatures, and public keys

Verify an event

event = veralog.verify("8b466b96-8663-4742-a6a6-8964ce69e5d4")
print(event["signature"])
print(event["public_key"])

LangChain example

from langchain.agents import AgentExecutor
import veralog

veralog.configure(api_key="vrlg_...")

def run_agent_with_audit(agent_executor, input_text):
    try:
        result = agent_executor.invoke({"input": input_text})
        veralog.record(
            agent_id="langchain-agent",
            action="invoke",
            payload={"input": input_text, "output": result["output"][:200]},
            status="success",
        )
        return result
    except Exception as e:
        veralog.record(
            agent_id="langchain-agent",
            action="invoke",
            payload={"input": input_text, "error": str(e)},
            status="error",
            severity="error",
        )
        raise

CrewAI example

from crewai import Agent, Task, Crew
import veralog

veralog.configure(api_key="vrlg_...")

class AuditedCrew(Crew):
    def kickoff(self, inputs=None):
        result = super().kickoff(inputs=inputs)
        veralog.record(
            agent_id="crewai-crew",
            action="kickoff",
            payload={"inputs": inputs, "result": str(result)[:200]},
            status="success",
        )
        return result

Independent verification

Every event is signed with Ed25519. You can verify any event without Veralog:

from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PublicKey
from cryptography.hazmat.primitives.serialization import Encoding, PublicFormat
import binascii

event = veralog.verify("your-event-id")

public_key = Ed25519PublicKey.from_public_bytes(
    binascii.unhexlify(event["public_key"])
)
message = f"{event['event_id']}:{event['agent_id']}:{event['action']}:{event['timestamp']}".encode()
signature = binascii.unhexlify(event["signature"])

public_key.verify(signature, message)
print("Signature valid — event was not tampered with")

Links

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

veralog-0.1.4.tar.gz (5.6 kB view details)

Uploaded Source

Built Distribution

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

veralog-0.1.4-py3-none-any.whl (5.7 kB view details)

Uploaded Python 3

File details

Details for the file veralog-0.1.4.tar.gz.

File metadata

  • Download URL: veralog-0.1.4.tar.gz
  • Upload date:
  • Size: 5.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for veralog-0.1.4.tar.gz
Algorithm Hash digest
SHA256 2290a40e56d2590f50d84c988e3ebcc40978e11cdc974ee9aa9f2543cded625e
MD5 0707077057e07f0764d59c97be02a127
BLAKE2b-256 7db04b519cea420b1b8d6422b5ab0456377325945c7aa02e67031abe078dcdaf

See more details on using hashes here.

Provenance

The following attestation bundles were made for veralog-0.1.4.tar.gz:

Publisher: release.yml on kupreano/agentledger-api

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file veralog-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: veralog-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 5.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for veralog-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 cf47726e75fa7612c2b555d2ca50207f19370c02f492aea1a01c2cc6487d9f57
MD5 2aaecd7df3a94ebbe39e8493d660e99d
BLAKE2b-256 ec9c5a85a6bf9c4d5e27b98c998ebd24d31261033ac9e6a02d7ceef8a3d75045

See more details on using hashes here.

Provenance

The following attestation bundles were made for veralog-0.1.4-py3-none-any.whl:

Publisher: release.yml on kupreano/agentledger-api

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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