Inspiration
Every coding-agent session starts from zero. A decision explained to Codex today is missing when a new session opens tomorrow, and context learned in Claude Code does not automatically follow the developer into Cursor. Saving every transcript is not a solution: memory stores fill with routine chatter, stale facts, and context from the wrong project.
Forget started from a simple belief: the model may change, but the developer should own the memory. Good memory is not storing everything. It is forgetting well.
What it does
Forget is a local-first, auditable memory layer for coding agents.
- Codex, Claude Code, Cursor, Claude Desktop, and other MCP clients can share one memory.
- An observation gate keeps durable decisions and rejects low-value exhaust.
- Retrieval is scoped by user and project, then temporally reranked.
- Updates are non-destructive: a new decision supersedes the old one without erasing history.
- Git decisions return with receipts showing the commit, author, and date.
- The default runtime uses a user-owned SQLite file and deterministic local embeddings. No model API key is required for the judge demo.
The result is not another transcript archive. A fresh agent can answer, “Why did we switch payment providers?” with the current decision, the reason, and the exact source commit, while preserving the earlier decision for audit.
How we built it
The core is Python 3.11, FastAPI, SQLite, and streamable HTTP MCP. forget-connect, a Node.js CLI, safely connects supported coding clients without overwriting existing MCP configuration. The engine combines scoped storage, an observation gate, temporal reranking, supersession, consolidation, and optional external provider adapters.
The deterministic judge path creates a synthetic Git repository with three commits. Forget mines two decision-shaped commits, ignores a routine typo, stores receipts in an isolated temporary database, and supersedes Stripe with Paddle. A second Python process then recalls Paddle first, prints its receipt, and shows that the prior Stripe decision remains available. The temporary repository and database are deleted after the run.
What changed during Build Week
Forget existed before OpenAI Build Week, and this submission does not claim otherwise. The pre-event engine and first connector were present by July 10.
The original development repository records 51 dated commits from July 13 through July 20 KST. Event-window work included:
- local-first hardening and pure-Python temporal reranking;
- scoped MCP routing;
- Git decision mining with provenance receipts;
- E2EE primitives and an explicit vault design, while encrypted sync remains clearly labeled as not shipped;
- LongMemEval and DirtyStores evaluation harnesses;
- causal contamination experiments, independent-embedder replication, and an end-to-end QA bridge;
- an honest cross-system non-result rather than an unsupported ranking claim.
The public submission repository is a squashed, sanitized snapshot. Raw benchmark observations and per-query outputs were deliberately excluded because benchmark text can contain personal or sensitive information. A dated event-window commit record and the exact research caveats are included in the judge guide.
What we learned
Our most useful result was counterintuitive: generic junk was not the main danger. Wrong-context memory was.
In DirtyStores at a tight retrieval budget (k=4, 90% contamination), synthetic junk caused 0.0 percentage points of evidence-hit harm and translated organic exhaust caused 0.6 points. Cross-user crosstalk caused 14.7 points. A causal donor-distance experiment reproduced the mechanism: contamination becomes harmful when it enters the evidence similarity band and displaces the correct memory.
That result changed the product priority. Scope isolation and receipts are not optional metadata. They are core memory architecture.
On LongMemEval, the strongest checked-in full-500 run reached 81.8%, progressing from a 64.4% baseline after date normalization and dual-layer retrieval. We disclose the limits: this run used a GPT-4o observation generator, reader, and judge; it is Tier 2 evidence and is not presented as absolute SOTA.
How we used Codex and GPT-5.6
A GPT-5.6 Codex session performed the final submission integration and review. It audited the dated evidence and claims, built the isolated cross-process judge demo, added focused tests, found and fixed a Decision serialization bug, ran the full safe Python suite, prepared the public-release scrub, and produced the judge documentation.
This is deliberately precise: GPT-5.6 did not create the pre-event engine or the earlier benchmark results, and it is not misrepresented as a Forget runtime dependency.
Validation result: 78 tests passed, 1 skipped, plus the standalone judge demo passed in both human-readable and JSON modes.
Challenges
The hardest engineering challenge was making memory useful without making it untrustworthy. “Save everything” gives high recall but poor precision and dangerous scope bleed. Destructive deduplication makes the store tidy but can erase the redundancy that protects important evidence. Forget therefore preserves provenance and superseded history while controlling what enters retrieval.
The final release challenge was equally important: separating a real existing product from event-window work, keeping claims reproducible, and publishing useful research evidence without publishing sensitive raw benchmark text.
What’s next
- make project and team scopes easier to inspect and manage;
- add more importers for pull requests, issues, and meeting decisions;
- ship encrypted multi-device sync only after the threat model and recovery design are production-ready;
- expand DirtyStores into a reproducible community protocol for evaluating memory under real contamination.
Forget is open source under Apache-2.0. The engine is local today; encrypted sync is still in design, not presented as shipped.
Built With
- gpt-5.6
- python
Log in or sign up for Devpost to join the conversation.