Agent Memory Integrity GitHub

Run it

In your CI, one step

One step in a vendor's CI your pull requestany change to the store the agmi Actionruns T1 to T8 on your adapter all rejectedjob passes one acceptedjob fails, cell annotated Actions summarythe eight-row table
The Action fails a vendor's build the moment their store serves an edited record as genuine, and writes the row into the job summary.

The job fails the moment your store serves an edited record as genuine, and the row lands in the Actions summary.

- uses: tech4biz-yasha/agmi@v0.6.0
  with:
    adapter: agmi.adapters.langgraph_sqlite:LangGraphSqliteAdapter
    extras: langgraph

For your own store, write an adapter against agmi.adapters.base.MemoryAdapter (seed, read raw, write raw, delete raw, reload, verify, plus the three optional replay and metadata hooks) and point the action at it with install: ".".

On a laptop

pip install "agent-memory-integrity[langgraph]==0.6.0"
agmi-check --adapter agmi.adapters.langgraph_sqlite:LangGraphSqliteAdapter

Exit 1 means at least one edit was accepted, exit 2 means nothing could be evaluated, exit 0 means every edit was rejected or reported. The whole scorecard, all stores, is python agmi/full_runner.py --json results/scorecard.json; Letta needs a Postgres (an embedded one starts if none is set) and Mem0 a local Qdrant, both handled by the adapters.

Submit a row

Maintainers of a memory store can open a pull request with an adapter and their measured row. The defended inspeximus rows on the scorecard came in this way from the tool's own maintainer, with the two control cases as tests. Contributions follow CONTRIBUTING.md.