The admitted-history layer for agent-native work.
Proofpress is the open Artifact Provenance Protocol for knowledge work. As people and agents split work into atomic items, explore alternatives in parallel, and reassemble results into documents or decisions, Proofpress keeps the admitted history attached to the artifact: what changed, what was accepted, who participated, and what evidence or reason supported the transition.
Its native ledger travels with Markdown and static HTML artifacts—even when Git does not. Its format-agnostic evidence envelope can also bind provenance to the exact bytes of any file without pretending to understand that file's semantics.
Git made code collaborative. Proofpress makes intelligence compound.
Think C2PA for knowledge work: a portable, inspectable record of admitted history—not a claim of C2PA compatibility, signed authorship, or complete capture.
Agent-native work is not a linear document followed from start to finish. It is a graph of hypotheses, source material, decisions, revisions, handoffs, and evidence. Different tools can generate different views of that graph—a brief, a research artifact, a design review, or an executable task—but the work only compounds when collaborators can tell which changes became dependable shared knowledge.
Proofpress operates at that boundary. It does not attempt to orchestrate every agent or capture every thought. It records meaningful, accepted transitions in the artifacts that survive the workflow, so a later person or agent can inspect and verify the history without needing the original session, workspace, or orchestrator.
Requires Python 3.11+, Git, and Node 22+:
npm install --save-dev proofpress
npx --no-install proofpress --version
npx --no-install proofpress setup --agent codexsetup installs the agent adapter and writes .proofpress/manifest.json. Use
--agent claude, cursor, or all for another supported harness.
Start with a real Markdown artifact that already carries two admitted versions.
inspect reads its portable capsule before any local Proofpress ledger exists;
import reconstructs that ledger from the file alone. The demo uses a
repository-local Git identity, so it also works on a clean machine:
mkdir proofpress-quickstart && cd proofpress-quickstart
git init
git config user.name "Proofpress Quickstart"
git config user.email "quickstart@example.invalid"
npm init -y
npm install --save-dev proofpress
curl -LO https://raw.githubusercontent.com/chenmingtang830/proofpress/main/examples/portable-handoff/strategy.md
npx --no-install proofpress inspect strategy.md
npx --no-install proofpress import strategy.md
npx --no-install proofpress log strategy.mdReview the accepted change and check that its recorded claims match the actual document diff:
npx --no-install proofpress diff strategy.md
npx --no-install proofpress verify strategy.mdStatic HTML carries the same native ledger. Download
strategy.html and substitute it for
strategy.md in the commands above.
DOCX uses a sidecar evidence record rather than an embedded revision ledger:
curl -LO https://raw.githubusercontent.com/chenmingtang830/proofpress/main/examples/portable-handoff/proposal.docx
curl -LO https://raw.githubusercontent.com/chenmingtang830/proofpress/main/examples/portable-handoff/proposal.provenance.json
npx --no-install proofpress provenance verify proposal.docx \
--evidence proposal.provenance.jsonTo continue the native-ledger demo, edit the visible Markdown or HTML content, then admit the new version and inspect the updated history:
npx --no-install proofpress snapshot strategy.md --kind human --author you \
--why "accepted the revised volunteer plan"
npx --no-install proofpress log strategy.mdSee the complete portable handoff example for the files, expected behavior, and security boundary.
Run these commands on a Markdown or static HTML file:
npx --no-install proofpress policy proposal.md portable
npx --no-install proofpress anchor proposal.md
npx --no-install proofpress snapshot proposal.md --kind agent --author codex \
--why "accepted the smaller launch scope"
npx --no-install proofpress verify proposal.mdThe policy is sticky. Each accepted snapshot refreshes the hidden capsule in the file. Source code stays in Git; the native Proofpress ledger manages only Markdown and static HTML knowledge artifacts. Artifact evidence may reference other file types without placing them in that ledger.
Create a sidecar evidence record. Proofpress automatically selects the strongest built-in adapter: semantic OOXML verification for Word documents, format-aware byte verification for PDFs, and byte verification for other files.
npx --no-install proofpress provenance create proposal.docx \
--output proposal.provenance.json
npx --no-install proofpress provenance verify proposal.docx \
--evidence proposal.provenance.jsonFor DOCX, semantic verification canonicalizes the meaningful OOXML package:
document content, tables, styles, relationships, headers, footers, comments,
footnotes, and embedded media. Repacking the ZIP does not change the result,
while changing document content does. PDF evidence remains byte level; it
records format metadata but does not claim the document rendered correctly.
Use --level byte when exact DOCX package bytes are required.
Send the original file. The recipient does not need your repository, session, or local ledger:
npx --no-install proofpress inspect proposal.md
npx --no-install proofpress import proposal.md
npx --no-install proofpress log proposal.md//: # (ob:398568bb)
| Route | What travels |
|---|---|
| GitHub | The file and capsule move through ordinary commits and pull requests |
| Outside Git | The raw file carries its own public history |
refs/proofpress/ledger remains the complete local working record. Portable
files do not depend on it: their capsule crosses the repository boundary with
the file. A team that also wants to share the complete ledger must run
npx --no-install proofpress sync explicitly; an ordinary git push does not
push the special ref.
Proofpress records accepted versions, computed block changes, stated actor roles, reasons, and consequential rejections. Claims are checked against the actual document diff.
It does not automatically store raw prompts, transcripts, private reasoning, tool traces, casual brainstorming, or every save. See the privacy boundary for the complete rules.
Keep every original copy. First, ask Proofpress to find the common ancestor and report only genuine block conflicts:
npx --no-install proofpress merge-plan proposal-alice.md \
--from proposal-bob.md --jsonAfter an agent or user resolves the visible body, record the reunion:
npx --no-install proofpress anchor proposal-alice.md
npx --no-install proofpress merge proposal-alice.md --from proposal-bob.md \
--kind agent --author codex --why "resolved the parallel review copies"
npx --no-install proofpress verify proposal-alice.mdSame-document branches become parents. Other source documents remain
ingredients; record those with merge-lineage.