v0.9.1 · MIT · zero dependencies

Repo memory
that can't rot.

Your coding agent learns something every session — and forgets it every session. agentlore keeps the decisions, dead ends, conventions and hazards it learns as a diff in the PR that motivated them, and fails CI when that memory stops being true.

$ uv tool install agentlore
one Python file · standard library only · no service, no account, nothing to configure
billing-service — a settled dead end rides the change that fixed it
$ agentlore check --since "$BASE_SHA"
MEMORY-HEALTH: 17/18 BROKEN  (1 memories, 1 stale, billing)
  ...
  FAIL anchors-not-stale  -- 1 out of date
  ...

stale memories (code moved, memory did not):
  DEAD-2026-10-06-5276  The refund window rejects credit notes too
    changed since d105edc: src/billing/gateway.py
    -> re-verify, or run: agentlore supersede DEAD-2026-10-06-5276

$ agentlore verify DEAD-2026-10-06-5276 --resolved-by "vendor supports credit notes as of v3.2"
verified DEAD-2026-10-06-5276 @ e6d8165

$ agentlore check --brief
MEMORY-HEALTH: 17/18 BROKEN -- compile-current  # the file your agent reads is now stale
$ agentlore compile
$ agentlore check --brief
MEMORY-HEALTH: 18/18 GREEN

The failure it exists for

A memory is true when written, and false the moment the fix lands.

An agent fixes a bug, and records the dead end it just disproved. The note is accurate — and it now reads as a live warning to every future agent that touches that code. Nobody re-reads it. Nothing catches it. The next agent routes around a wall that was already torn down.

The agent's prose hedged ("before the fix"). The heading did not — and the heading is the first thing the next agent reads. So agentlore rewrites it rather than trusting anyone to remember.

01

Memory that can go stale

Every entry is anchored to a path and carries evidence. When the anchored code moves, the gate notices — not the reviewer.

02

Memory that never ships

compile-current checks the file your agent actually loads, not just the file you wrote. Recorded-but-undelivered memory is invisible in every direction.

03

Memory nobody reviewed

It lands as a diff in the PR that motivated it — reviewed like any other change, in the same review, by the same people.

04

Memory that is an instruction

.memory/ compiles into AGENTS.md, so an entry is a persistent instruction. The gate refuses entries that tell an agent to conceal, to skip the gate, or to weaken a control.

How it works

Four commands, and a gate that refuses to be talked out of it.

1

Record

agentlore add writes a typed entry — decision, dead end, convention or hazard — with the evidence that produced it.

2

Compile

agentlore compile folds the memory into the AGENTS.md your agent already reads. Nothing new to configure.

3

Gate

agentlore check runs 18 checks in CI and fails the build when memory rots. It can annotate the exact file that drifted.

4

Review

The memory rides the pull request. It is reviewed, versioned and revertible like every other line in the repo.

The gate

It fails closed, on purpose.

A guard that cannot read its own state has not guarded anything. If the index is unreadable, if a --since ref cannot be resolved, if an id would be ambiguous — agentlore stops rather than passing quietly.

18
checks in the gate
114
tests in the suite
0
third-party dependencies
1
file you have to audit
 A plain AGENTS.mdagentlore
Reviewed in the PR that motivated itnoyes
Fails CI when an entry stops being truenoyes
Checks the compiled file your agent loadsnoyes
Typed entries (dead end ≠ decision ≠ hazard)noyes
Lives in git, no service or accountyesyes
Zero dependenciesyesyes

Where a plain AGENTS.md is a file, agentlore is that file plus the record of why each line is there, the change that put it there, and a gate that notices when it stops being true.

Install

Pick how much of it you want to own.

It is one Python file with no dependencies, so there is nothing to resolve, pin or audit beyond the repository itself.

As a GitHub Action

Usually the right answer — the gate is the part that has to run on every PR.

uses: Rudra5417/agentlore@v1
with:
  since: ${{ github.event.pull_request.base.sha }}

From a package index

A managed copy of the same file.

uv tool install agentlore
pipx install agentlore
pip install agentlore

Vendored into your repo

You own the file: CI needs no network fetch and no action dependency.

curl -fsSL -o tools/agentlore \
  https://raw.githubusercontent.com/\
Rudra5417/agentlore/v0.9.1/agentlore
chmod +x tools/agentlore

On your PATH

For local use, and for an agent to call.

curl -fsSL -o ~/.local/bin/agentlore \
  https://raw.githubusercontent.com/\
Rudra5417/agentlore/v0.9.1/agentlore
chmod +x ~/.local/bin/agentlore
$ agentlore init && agentlore check --brief
MEMORY-HEALTH: 18/18 GREEN  — an empty .memory/ is green on purpose