Skip to main content

AgentMarshal

Agent work attestation and merge governance: durable, vendor-neutral, SHA-bound evidence rails for agent-driven development.

Agents produce more changes than a human can read. AgentMarshal aims to make "this work was independently reviewed" a property of the repository rather than of someone's memory: task contracts, review verdicts bound to exact commits, and merge gates — with the evidence living in git, not in an ephemeral session log.

Trust boundary (0.4.1): the merge gate enforces that a review's recorded reviewer email differs from the commit authors', and binds the verdict to the exact commit SHA. It does not cryptographically authenticate who recorded a review or which checkout was gated — the recorder and the reviewed tree are operator-trusted. Signing/provenance is roadmap, not a 0.4.1 guarantee.

One consequence is worth stating outright, because the gate's output can read like more than it is: a human reviewer is a self-declaration. The gate compares an email string against the commit authors'; it establishes nothing about a person having read anything. A record an agent produced with --vendor human is indistinguishable from one a person created, and it passes the same check — we have seen exactly that happen in operation. Until review records are signed, vendor and model are labels the recorder chose, and the independence check is a string comparison, not evidence of human involvement.

Built in the open

AgentMarshal governs its own development. Everything under .agentmarshal/journal/ is real: the task contracts we worked to, the review verdicts bound to exact commit SHAs, the lifecycle records, and the token-economics measurements of what each task consumed. The tool's guarantees are demonstrated on the tool's own history — not just described.

We opened this repository with its full history on purpose — the mistakes, the abandoned tasks (CR-036, CR-037), the multi-round reviews, the token spend. We do not rewrite history: the SHA-bound audit trail is the product, and rewriting it would destroy the very property AgentMarshal exists to provide.

That honesty cuts both ways — the shipped design docs are explicit about the historical 0.1.0 boundary and note what has changed since:

  • ADR-0004 and ADR-0005 mark planned supplementary-artifact capture policy, the private store, and the in-toto/attestation projection as roadmap. They remain inactive in 0.4.1; ADR-0005 separately records the advisory leak-scan that has shipped.
  • docs/migration-v1-to-v2.md records what the v1→v2 migration lost (contract prose) and that the machine-readable acceptance array was empty in every contract through CR-038 — without backfilling any historical record.

To see how the project actually evolved, token spend and all, read the journal.

Status

Pre-alpha. Version 0.4.1 ships the governed loop end to end: task contracts, review and operator-acceptance evidence, lifecycle repair, the fail-closed gate, completion, reporting, validation, advisory leak scanning, and local pruning. New in 0.4.1: validate reads a journal 0.4.0 refused over a space separator in a record an earlier release wrote (CR-114). New in 0.4.0: research work lands as hash-pinned findings reviewed by finding rather than by commit; contracts can name the decisions, documents, and process tools a task works under; a model review records the hash of the contract it judged, and the project's capture policy decides whether the reviewer's prose is committed with it — by default it is not, and "capture": {"overrides": {"reviews": "commit"}} in the project file commits it; and init and doctor name the preconditions the tool cannot verify. New in 0.3.0: a journal can live in a repository of its own and record evidence about a host it never writes to — an experimental placement whose gate advises and decides no merge. APIs, schemas, and CLI are subject to change without notice. CHANGELOG.md lists the changes, each with the tasks it comes from.

Install

Install the published release:

pip install agentmarshal==0.4.1
agentmarshal --version

Plain pip install agentmarshal installs the latest published release, which may not be the version described here — pin it if you share a journal, and see UPGRADING.md for why.

Requirements: Python >= 3.12 and git on PATH — the gate, review, and completion commands shell out to git. No Python dependencies.

AgentMarshal is model-agnostic and bundles no reviewer. To review a task, either set AGENTMARSHAL_REVIEWER_CMD to any reviewer command (for example a Codex or Claude CLI — it receives the prompt on stdin and prints the machine verdict, with {model} and {prompt_file} substituted), or record a verdict directly with agentmarshal submit-review. The latter runs no model; its --vendor/--model arguments are recorded provenance labels, not an invoked model (use e.g. --vendor human --model none for a human review).

(git archive-based review snapshotting currently assumes a POSIX host; Windows is untested.)

Quickstart

New to the idea? docs/overview.md explains the purpose, the design, and the vocabulary (host repo, task, gate, …) in a page. For every guide, decision, finding, and contributor workflow, see the documentation map.

The whole loop, inside a git repository — see docs/quickstart.md for the annotated walkthrough with a full configuration reference:

agentmarshal init                                     # write .agentmarshal/
agentmarshal open --title "Add greeting" --scope src/ # -> task CR-001 + contract
git add .agentmarshal && git commit -m "open CR-001"
BASE=$(git rev-parse HEAD)

git switch -c feat/CR-001                              # do the work in scope
# ...edit files under src/...
git add src && git commit -m "implement CR-001"
IMPL=$(git rev-parse HEAD)

# record an INDEPENDENT review (reviewer email != commit author)
agentmarshal submit-review --task CR-001 --commit "$IMPL" \
  --verdict approved --role reviewer --vendor human --model none \
  --email reviewer@example.com

# the gate is the merge authority; it passes only when every check holds
AGENTMARSHAL_PIPELINE_OK_SHA="$IMPL" \
  agentmarshal gate --task CR-001 --commit "$IMPL" --base "$BASE"

AGENTMARSHAL_PIPELINE_OK_SHA="$IMPL" \
  agentmarshal complete --task CR-001 --commit "$IMPL" --base "$BASE"

agentmarshal status CR-001   # -> done, with the SHA-bound review evidence
agentmarshal validate        # -> whole-journal integrity check (run this in CI)

The gate only decides; performing the merge is your provider's job. Wiring it to block merges is covered in docs/self-hosting-workflow.md and docs/github-enforcement.md.

Cannot install into the repository you work in, or need the evidence to stay private? A journal can live in a repository of its own and name the one it records evidence about — see docs/sidecar.md. That placement is new in 0.3.0, is experimental, and its gate advises rather than decides.

Development

Requires Python >= 3.12 and uv (development tooling only — not needed to install or run AgentMarshal).

uv sync
uv run pytest
uv run ruff check
uv run ruff format --check
uv run mypy

Initialize a git repository for AgentMarshal:

uv run agentmarshal init

License

Apache-2.0. The full text ships in the LICENSE file of the source distribution.

Metadata

Release files for agentmarshal 0.4.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for agentmarshal 0.4.1
File Size Uploaded Provenance
agentmarshal-0.4.1.tar.gz 102.8 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for agentmarshal 0.4.1
File Interpreter ABI Platform
agentmarshal-0.4.1-py3-none-any.whl Python 3 none any Details

Total release size: 222.7 kB

Release files / agentmarshal-0.4.1.tar.gz

Download URL agentmarshal-0.4.1.tar.gz
Size 102.8 kB
Tags Source
SHA-256 checksum
How to use checksums
6eba5fa9bccd9b79cc3343698e5600cf928b1fb80aae46c41e32a93505e914c5
BLAKE2b-256 checksum
How to use checksums
0140449920a71870391168ffcd05f115ca2c85572bb9c7a5190fa6f3bad000f2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.

Transparency log

Release files / agentmarshal-0.4.1-py3-none-any.whl

Download URL agentmarshal-0.4.1-py3-none-any.whl
Size 119.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
845cfd9f716cf61f273f296e2ce048fff459ee295f329acd6958db8ad2bf6779
BLAKE2b-256 checksum
How to use checksums
346ee3e7182a6fdcedde81f468d1f7bbd30cf19e4cc421e5d0227d074cbf831c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.

Transparency log

Security for agentmarshal 0.4.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for agentmarshal-0.4.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page