The Markovian provenance extension is a Data-only A2A extension, published permissionlessly under a single URI. It adds no new methods and changes no task states. It exposes a provenance object that travels with an agent's outputs. The extension definition resolves live at the URI below.
An agent declares support in its AgentCard, inside capabilities.extensions. The declaration is additive, so a counterpart that does not understand the extension still interacts normally.
Each produced output carries the provenance object in Artifact.metadata, keyed by the extension URI. Activation is negotiated with the A2A-Extensions header. The object is the canonical markovian-provenance/v1 record, identical across every Markovian integration.
Trust does not come from A2A. A2A treats extension metadata as untrusted by default. Trust derives from independently resolving the verify URL against the public Markovian endpoint, not from A2A asserting anything. The verifiable record is the authority, and the transport is not.
An external stamp carries a BN128 Pedersen commitment and a Merkle root, recorded on the Markovian chain. It carries no validity proof. It establishes that the data was committed at a point in time, which is provenance and not a claim that the data is correct.
The fields below are taken from a real A2A task artifact produced by the reference agent. The output was hashed, committed to the chain, and timestamped. The record can be verified live, in the browser, against the public endpoint.
A reference implementation is built on the official a2a-sdk. It is three parts: a wrapper that calls the live stamp service and assembles the provenance object, a demo agent that declares the extension and stamps every artifact it returns, and a demo consumer that sends a task with the A2A-Extensions header, extracts the provenance from Artifact.metadata, and verifies it against the public endpoint.
The reproducible path uses two public calls. The first resolves the extension definition. The second verifies the stamped artifact above against the public verifier.
The consumer reports a pass only when three conditions hold together. The artifact carried a real stamp, the binding between the output bytes and data_hash holds, and the public verifier confirms the record. Mutating either the bytes or the data_hash makes verification fail.
The live provenance demo verifies a real record in the browser against the public endpoint. The public verifier resolves any Markovian merkle root directly.