A memory layer for AI agents that learns from failures: every resolved error becomes a lesson, lessons are injected into future prompts, and Bayesian trust weights track which model to believe for which job.
error → your fix → lesson → injected into next similar prompt → outcome feedback → trust update
An error you resolve becomes a lesson. The next similar task gets it injected
into the prompt. report_outcome() reinforces lessons that helped and
decays ones that never do — errlore knows whether its own memory works.
Per-model weakness tracking. When gpt-x has failed date extraction four times,
the fifth prompt says so: KNOWN ISSUES: TimeoutError (x4). Models get
warned about their own history.
Bayesian per-model, per-domain trust weights built from observed outcomes.
mem.best_model("code") answers the routing question with data,
not vibes.
from errlore import AgentMemory mem = AgentMemory("./agent_memory") # 1. agent failed — record it err = mem.log_error("gpt-5.5", "extraction", error="hallucinated dates") # 2. you fixed it — extract the lesson mem.resolve(err, "added validation", lesson="For date extraction, demand ISO-8601 and verify against source") # 3. next similar task — memory speaks up inj = mem.inject_for("extract dates from contract", model="gpt-5.5") prompt = task + inj.text # [LESSONS FROM PAST FAILURES] # - hallucinated dates -> For date extraction, demand ISO-8601... # KNOWN ISSUES: # - Past error on similar task: hallucinated dates # 4. close the loop — did it help? mem.report_outcome(inj, success=True)
Optional local embeddings (pip install errlore[embeddings], ~120 MB ONNX model, RU/EN and 50+ languages, no API keys). On a deliberately adversarial gold set — every query paraphrased so it shares zero words with its lesson:
| metric | keyword overlap | errlore embeddings |
|---|---|---|
| recall@1 | 0.000 | 0.375 |
| recall@5 | 0.000 | 0.675 |
| MRR | 0.000 | 0.488 |
Reproduce it yourself: python benchmarks/bench_retrieval.py — the gold set ships in the repo.
Two functions — a Filter that injects lessons into every chat and a feedback Action that closes the loop from a button under each message. Paste, enable, done.
Working examples for the OpenAI SDK, Anthropic SDK, and LangChain in examples/ — each runnable offline, each showing the full learn-inject-reinforce cycle.
| plain logs | vector memory | errlore | |
|---|---|---|---|
| stores failures | yes | sometimes | yes |
| turns them into lessons | no | no | yes |
| injects into future prompts | no | retrieval only | yes, with feedback loop |
| knows if a lesson helped | no | no | reinforce / decay |
| tracks per-model weaknesses | no | no | KNOWN ISSUES + trust |
| works offline, no server | yes | depends | yes |
that keep re-introducing the same class of bug across sessions.
that hallucinate dates, numbers and schema fields the same way every week.
pick the model per task from observed outcomes — mem.best_model("code") — not vibes.