Each section is one task. DEEDAR_URL names the store; --url overrides it for one command.

Cite deeds from a list#

evidence, current and export take one accession, several, or - to read them from standard input. A tracker or a pack hands its citations over on a pipe:

$ packset accessions seat | deedar current -
$ vissue recall proj-1a2b --deeds-only | deedar evidence -

Both exit non-zero when any accession fails, so a shell hook can stop on them.

Sign what you hand over#

$ mkdir -p ~/.config/deedar
$ head -c 32 /dev/urandom > ~/.config/deedar/host.key && chmod 600 ~/.config/deedar/host.key
$ deedar log head
size=34 root=... ed25519 b2942e7e... <signature>
$ deedar vouch sign bag/manifest-sha256.txt

That path is the default: with DEEDAR_HOST_SIGNING_KEY unset the key at ~/.config/deedar/host.key signs when it exists. Set the variable to sign with a key kept elsewhere, or to off to sign nothing.

The key lives outside the store. A receiver lists the keys they accept in their own store’s layout file, one signer = ed25519:<hex> line each, and deedar vouch check bag/manifest-sha256.txt then says (accepted).

Keep a head between handovers#

$ deedar check bag > /dev/null && deedar log head > sender.head
$ deedar log bridge 34 > bag2/bridge.txt   # on the sender, at the next export
$ deedar check bag2 --since bag2/bridge.txt

The bridge is the consistency path from the head you kept to the new one. A log rewritten in between cannot produce it.

Audit a store#

$ deedar log audit

Walks the log and asks the store for each deed. A deed that was logged and is gone, or changed under its accession, is tampering. Deeds on the shelves that were never logged mean the store predates the log and wants a backfill.

Backfill a log#

$ deedar log backfill

Appends every deed the store serves that the log does not name, in accession order. The entries carry the evidence’s time when there is one, else now; the log says these were logged today.

Demand attestation#

A store can refuse to hand over a deed whose host sidecar is not signed by a key it accepts. In the store’s layout:

1
attestation = required
signer = ed25519:b2942e7e...

Without the line, attestation is optional and a keyed-hash sidecar still opens. A keyed hash proves the bytes are the bytes; it cannot prove who was entitled to make them, because whoever can check it can mint it.

Retract a deed#

$ deedar delete deed-file-the-parser-patch

The deed is tombstoned, the log entry stays, and log audit reports the gap. Nothing is erased, so a citation of a deleted deed still reads as deleted rather than as never having existed.

Serve the store to an agent#

$ deedar-mcp

Every tool reads: deedar_get, deedar_trail, deedar_evidence, deedar_current, deedar_check, deedar_log_head, deedar_log_bridge, deedar_log_audit. Two prompts sequence a handover check and standing behind one deed.