Run it
In your CI, one step
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.