Attenuate what stops earning its place.
Forget is a background operation MemState runs under policy — not an API the agent calls after each turn. It attenuates or archives content that has stopped being reinforced by observations or context queries, without deleting it; archived material stays on disk and is reachable by explicit lookup.
Forget applies Pt to Dt without
deleting vertices: low-salience topics are archived and their salience is damped further, matching the
lowest rung of the forgetting ladder. The research names three thresholds
(θsummary, θremove, θarchive);
today’s closest wired constant is forget_salience_threshold — see
threshold ladder mapping.
Non-destructive by design
The forgetting ladder
Forgetting is a progression, not a single toggle. Content moves down the ladder as its importance decays.
Archive is in production today. Summarize and detach are on the roadmap.
| Stage | Effect | Status |
|---|---|---|
| Summarize | Older history is compressed; the topic remains fully active. | Planned |
| Detach | Low-value fields or connectors leave the active working set; still reachable explicitly. | Planned |
| Archive | The topic is marked archived and excluded from default retrieval; everything stays on disk. | Shipped |
How it's triggered
- Forget is not called directly by clients. There is no public HTTP route for it.
- The reasoner calls it in response to specific events.
| Event | When forget runs |
|---|---|
ingest_complete | Runs when topic count is at or above the soft limit. |
query_complete | Runs when topic count is at or above the soft limit. |
cron | Runs on a schedule when topic count is at or above the soft limit. |
memory_pressure | Runs unconditionally; pressure signal bypasses the count gate. |
What archive does today
- Scan active topics. Load non-archived topics via the embedding scan list.
- Compare salience. For each topic, check its salience against the archive threshold.
- Archive and attenuate. If salience is below the threshold, set
archived=trueand halve the salience value. - Record the action. Append an
archived:<topic_id>marker to the reasoner result.
Knobs
| Policy | Default | Role |
|---|---|---|
topic_count_soft_limit | 500 | Gate for running forget on ingest/query/cron events. |
forget_salience_threshold | 0.05 | Salience cut-off below which a topic gets archived. |
max_topics_for_forget_scan | 10,000 | Scan bound used by the forget flow. |
Operational implications
- Archived topics are excluded from default active retrieval. They remain reachable with explicit lookups.
- Forget decisions today look at salience only — not recency or semantic redundancy.
- Because retrieval bumps salience on every touched topic, active use protects a topic from being archived.
Code map
memstate.reasoner.engine.Reasoner.runmemstate.core.executor.Executor.run_forget_low_saliencememstate.store.graph_store.update_topic_meta