[ LE GRAND LIVRE · 0.25.0 ]

A local searchable memory of what your agents have already done. Built into Brigade.

Evidence is the memory ledger built into Brigade, formerly the standalone MiseLedger: it turns scattered AI work history into a searchable evidence graph. Built-in crawlers pull agent sessions, files, git history, and chat exports through one miseledger.adapter.v1 contract into SQLite, deduped and indexed with FTS5. Search and relate the evidence, branch and diff archives, and emit Brigade-ready evidence bundles. No network calls.

View on GitHub →

Part of the Brigade fleet · brigade.tools · escoffierlabs.dev

Evidence Memory GitHub stars Evidence Memory GitHub stars

[ 01 · INGEST ]

One adapter contract in, everything normalized

Your AI work history is scattered across harness logs, notes, exports, and chat archives. Evidence imports it all through one adapter contract.

Source, adapter records: Built-in session crawlers walk Codex, Claude Code, OpenClaw, OpenCode, Hermes, and Cursor logs. Built-in source crawlers harvest notes, files, HTML, JSON, and git history. Crawler binaries (Discord, GitHub, Slack, Granola, Notion, Gmail, Telegram) stream in over the same contract. Records arrive from a file, stdin, or a wrapped exporter, and every record carries its own source.kind for mixed imports.
miseledger.adapter.v1 JSONL: Parse, validate, dedupe.
Archive, the local ledger: Normalizes sources, collections, items, actors, and artifacts. Deduplicates by stable external IDs and preserves raw refs. Indexes evidence with SQLite FTS5 and shallow relations. Serves search, show, explain, export, HTTP, and MCP. Emits Brigade-ready evidence bundles marked as untrusted context.

[ 02 · PIPELINE ]

One binary, one adapter contract

The session and source exporters that began as StationTrail and SourceHarvest live inside the Evidence engine since v0.3.0; anything else can feed the same miseledger.adapter.v1 JSONL.

Session crawlers

crawl sessions walks local harness logs (Codex, Claude Code, OpenClaw, OpenCode, Hermes, Cursor) with per-class redaction. Absorbed from StationTrail in v0.3.0.

Source crawlers

crawl files, crawl docs, and friends harvest outside sources. crawl discord, github, slack, granola, notion, gmail, and telegram wrap adapter-emitting crawler binaries. Absorbed from SourceHarvest in v0.3.0.

Evidence archive

Stores, dedupes, indexes, searches, relates, and emits Brigade-ready evidence bundles.

[ 03 · ARCHIVE ]

What the archive actually does

One adapter contract

Everything enters through miseledger.adapter.v1 JSONL. Built-in session and source crawlers, external crawler binaries, and raw exports all speak the same normalized record shape, so the archive does not care where evidence came from.

Deduped and indexed

Records are normalized into sources, collections, items, actors, and artifacts, deduplicated by stable external IDs and raw refs, and indexed with SQLite FTS5. Re-running the same import is idempotent and never inflates item counts.

Search and explain

search queries the FTS5 index across all imported evidence. explain runs the same path and reports the quoted query, filters, result count, and source and item-kind breakdown so you can see why results matched.

Shallow relations

Import resolves relations when the target already exists: Codex tool calls link to results by call_id, Claude tool_result links to tool_use, and OpenClaw events preserve session and run membership. Unresolved targets are kept for later backfill.

Branch and compare

fork snapshots the archive into a standalone SQLite branch. diff compares two states and reports added, changed, and removed items and relations by content hash. Both are read-only against the original, with no schema change.

Brigade evidence bundles

evidence emits structured bundles with a stable ID, a miseledger://evidence resource URI, provenance, raw refs, source and actor context, snippets, FTS scores, optional related items, and untrusted_context marking. Bundles are cached and re-showable.

Local only, by design

No network calls for init, import, search, evidence, show, export, status, SQL, MCP, HTTP, or doctor. Imported text is stored locally and treated as untrusted evidence, not executable instructions. The HTTP API binds to loopback.

[ 04 · COMMANDS ]

init Create the local config and SQLite archive under XDG paths with private permissions.
import adapter Ingest miseledger.adapter.v1 JSONL from a file or stdin, deduped and indexed.
crawl sessions Walk local harness session logs (Codex, Claude Code, OpenClaw, OpenCode, Hermes, Cursor) straight into the archive, with redaction.
crawl files Harvest notes, Markdown, HTML, JSON, or git history from any directory into the same normalized records.
crawl discord Stream a crawler binary (discrawl, gitcrawl, slacrawl, graincrawl, notcrawl, mailcrawl, telecrawl) through its adapter export into the ledger.
search Query the FTS5 index across imported evidence and return matching items.
evidence Emit a Brigade-ready evidence bundle with provenance, snippets, and untrusted-context marking.
show Print a normalized item by ID with its source, actor, raw refs, and artifacts.
explain Run the same FTS path as search and report the query, filters, and result breakdown.
relations backfill Resolve stored target IDs once a later import adds the related item.
fork Snapshot the archive into a standalone SQLite branch you can inspect or diff without touching the original.
diff Compare two archive states and report added, changed, and removed items and relations by content hash.
prune policy Apply item-level retention to large archives, dry-run by default, exporting matched records to compressed adapter JSONL before any deletion.
export markdown Write normalized items out as Markdown for offline reading or review.
serve Start the local HTTP API bound to loopback for search, item, and evidence endpoints.
mcp Start the stdio MCP server exposing search, show, evidence, and source-listing tools.
stats Summarize the archive by source, item kind, actor type, collection, and recent imports.
doctor Validate config, archive integrity, FTS coverage, and the MCP surface, counts only.

[ 05 · WHY NOT SOMETHING ELSE ]

Evidence vs raw logs

The realistic alternative to Evidence is what most people already do: scroll and grep the raw session logs. This compares the two on concrete capabilities, not benchmarks.

Full-text search across all sessions at once Evidence: yes, SQLite FTS5 index over every imported record. Raw logs: no, grep one file at a time, no ranking, no cross-session view.
Find work after the log has rotated or been deleted Evidence: yes, if it was imported, the archive is the durable copy. Raw logs: no, once the raw log is gone, the record is gone.
One query format across different harnesses Evidence: yes, Codex, Claude, OpenClaw, and others normalize to one record shape. Raw logs: no, each harness writes its own format and location.
Export a result set to Markdown for review Evidence: yes, export markdown writes normalized items out. Raw logs: manual, copy and paste, or hand-roll a script per format.
Bundle results as portable, cited evidence Evidence: yes, evidence emits a bundle with provenance, snippets, and raw refs. Raw logs: no, a pasted log line carries no provenance or stable ID.
Provenance and source on every item Evidence: yes, each item keeps its source, actor, and raw refs. Raw logs: implicit at best, you infer it from the file you happened to open.
Runs entirely local, no network Evidence: yes, no network calls, the HTTP API binds to loopback. Raw logs: yes, plain files on disk.
Setup cost Evidence: run brigade setup, init the archive, import your sessions. Raw logs: none, the logs already exist.

grep and your harness logs are good tools. Reach for them for a quick look at one recent session. Reach for Evidence when the question spans sessions or has to be answered later with a searchable, provenance-bearing record.

[ 06 · WHAT IT IS NOT ]

When to use it, when you do not

Use it when

You need to search across many past agent sessions, you want one query format over several harnesses, you need to export findings to Markdown for review, or you need to hand someone a searchable, provenance-bearing record of what an agent did, with raw refs intact.

You do not need this when

You never need to search or look back at past agent work. If you only ever read the most recent session and never look back, raw logs suffice. grep on a single file is fine for a one-off lookup, and you do not need an archive to do it.

[ 07 · QUICKSTART ]

Try it in 60 seconds

Install the binary, initialize the archive, crawl your harness sessions with the built-in crawler, then search and emit a bundle. Every step is local and idempotent.

miseledger init
miseledger crawl sessions --redact paths,secrets
miseledger search "auth timeout" --json
miseledger evidence "auth timeout" --include-related --json
miseledger fork ~/ledger-snapshot.db
miseledger mcp
Init, crawl, search, evidence, fork, mcp

[ 08 · FLEET ]

Built into Brigade

Evidence is built into Brigade, formerly the standalone MiseLedger from Escoffier Labs. Its crawlers feed the archive, brigade run consumes its evidence bundles, and the cookbook documents the patterns.

Evidence is the bound ledger, Le Grand Livre, for everything your agents have already done. Ingest once, then search, relate, and cite the evidence later.

[ 09 · INSTALL ]

Evidence Memory ships inside brigade-cli. No separate install:

Attach via Brigade: brigade add evidence

Brigade itself: brigade.tools · pipx install brigade-cli

[ MORE FROM ESCOFFIER LABS ]

Local-first tools for AI coding agents

One kitchen, one brigade. Each tool does one job well, and they share one reviewed source of memory, config, and receipts.

See the whole fleet at escoffierlabs.dev →