Skip to main content

Vitnify your agents

Logs tell you what your agent did. Vitnify proves it — a cryptographic, independently-reconstructable record of what an agent computed and did.

Contain what an agent may do, deterministically reconstruct the model behind every decision, and seal the whole run into one bit-for-bit receipt anyone can verify offline — long after it happened.

vitnify (v.) — to turn an agent run into a receipt anyone can reproduce and verify, offline.

vitnify isn't detection. It gives you the primitives to prove exactly what an agent did: a vitnify-receipt v2 binds the model's computation, the granted capabilities, every tool call and result, the entropy, and the order into a single ed25519-signed, self-verifying object.

Install

pip install vitnify

Quickstart

from vitnify.events import EventLog, Kind
from vitnify.engine import Engine, prompt_hash
from vitnify.certificate import issue_certificate, verify_certificate, gen_ed25519

eng = Engine("model.gguf", model_id="my-model")        # deterministic backend
log = EventLog()

step = eng.run(prompt_tokens=[1, 2, 3], n_new=20)       # a model step
log.append_llm_call(prompt_hash([1, 2, 3]), step["tokens"], seed=0,
                    model_digest=step["model_digest"])   # bind the model computation
log.append(Kind.TOOL_CALL, {"tool": "read_docs",  "decision": "allow"})
log.append(Kind.TOOL_CALL, {"tool": "send_email", "decision": "deny"})  # ungranted → blocked

priv, pub = gen_ed25519()
cert, _ = issue_certificate("program_hash", ["read_docs"], log, priv=priv)

checks = verify_certificate(cert, log)   # level 1: offline integrity — no model, no secret
assert checks["ok"]                       # signed, unaltered, and no ungranted tool ran
assert checks["containment_enforced"]     # every tool call was GATED, not merely observed
# A receipt can be ok=True yet containment_enforced=False — a valid transcript from a
# watch-only integration proves what ran, not that anything was contained. A containment
# claim requires BOTH. (level 2: re-run each step through the engine; every model_digest
# reproduces bit-for-bit.)

See vitnify-receipt-v2.md for the receipt format, and examples/demo_receipt_e2e.py for the full loop.

What you get

  • Capability containment — ungranted tools are structurally unreachable.
  • Deterministic replay — re-run any past run and get the identical result.
  • Bit-for-bit receipts — the model's exact computation, bound and signed.
  • Offline verification — anyone verifies with no model, network, or secret.
  • Drop-in — wraps existing LangGraph and MCP agents (pip install vitnify[langgraph] / [mcp]).

The deterministic engine is vitni-tensor; the vitni-receipt binary is the model backend (point VITNI_RECEIPT_BIN at it).

License

Apache-2.0. "vitnify" and "vitnify-verified" are trademarks — see TRADEMARKS.md. A fork may use the code, but not the name or issue vitnify-verified receipts.

Part of Vitnify

This SDK is one of three open repos:

  • vitni-tensor — the deterministic, no_std engine that produces the bit-identical model-computation digest this SDK binds.
  • vitnify-receipt-spec — the canonical vitnify-receipt v2 format the SDK implements.
  • vitnify.com — the project.

Download files

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

Source Distribution

vitnify-0.2.7.tar.gz (44.1 kB view details)

Uploaded Source

Built Distribution

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

vitnify-0.2.7-py3-none-any.whl (34.3 kB view details)

Uploaded Python 3

File details

Details for the file vitnify-0.2.7.tar.gz.

File metadata

  • Download URL: vitnify-0.2.7.tar.gz
  • Upload date:
  • Size: 44.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for vitnify-0.2.7.tar.gz
Algorithm Hash digest
SHA256 758079909da33611441fd8cc7972fa6099ef0326ec158b2a0cee2d6982a59067
MD5 148aa2bf5f18577b57270e70c712ca5d
BLAKE2b-256 d8b173c564db1ebaf173fa8ea9df0f8e9124a4f6d7899e52da4461d854e582b5

See more details on using hashes here.

Provenance

The following attestation bundles were made for vitnify-0.2.7.tar.gz:

Publisher: publish.yml on vitnify/vitnify

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

File details

Details for the file vitnify-0.2.7-py3-none-any.whl.

File metadata

  • Download URL: vitnify-0.2.7-py3-none-any.whl
  • Upload date:
  • Size: 34.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for vitnify-0.2.7-py3-none-any.whl
Algorithm Hash digest
SHA256 d5fb521336e8d7254ae994a6ffdb3c5b7a9b64c279d4f705003ab94aff0a35ee
MD5 6564d776f59f9b79f9d38792c721706f
BLAKE2b-256 984cb4631c1d1df8fa74c97cbfbb12f87bef2d3784eea3a75f7cf4f82c87d07e

See more details on using hashes here.

Provenance

The following attestation bundles were made for vitnify-0.2.7-py3-none-any.whl:

Publisher: publish.yml on vitnify/vitnify

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 Sentry Error logging StatusPage Status page