Meta AI proposes a proactive memory agent: teaching agents to "only speak up when it matters," lifting Terminal-Bench accuracy by 8.3 points

The paper says the code is open-sourced — but the repo turns out to be empty, with not a single commit ever pushed.
By arXiv · Meta AI07-13 · 9 min read⚑ Research paper
🎧 Listen to the podcast0:00 / --:--
0:00 / --:--
Research Deep-Dive · XiaoHu Explains
60-second overview
  • Meta AI proposes a "proactive memory agent" that runs alongside an unmodified executor agent, periodically updates a structured memory store, and actively decides whether to interject a reminder for the executor.
  • On Terminal-Bench 2.0, pairing Claude Sonnet 4.5 with the memory agent lifts accuracy from 37.6% to 45.9% (+8.3 percentage points); on τ²-Bench it rises from 55.0% to 61.8% (+6.8 percentage points).
  • Ablations show: letting the memory agent decide "whether to speak" on its own beats showing the full memory store every time, forcing a reminder every step, dropping the memory store and only giving advice, or plugging in a generic memory-retrieval layer like Mem0 — more consistently across the board.
  • The team also tried training the same memory agent on the open-source small model Qwen3.5-27B (supervised fine-tuning plus reinforcement learning); paired with an executor agent swapped to the open-source Qwen3.5-122B, Terminal-Bench accuracy rose from 37.6% (the open-source executor model's own baseline, which happens to match Sonnet 4.5's baseline) to 41.1% — a 3.5-point gain, smaller than the version using Claude Opus 4.6 as the memory agent.
  • The code repository named in the paper's body text was verified to be an empty repo (0 bytes, never pushed to since creation), and as of July 13, 2026 has not actually been open-sourced.
1 What it is · Why it's worth reading

What Meta AI just released

Meta AI's research team published a paper on arXiv on July 9, 2026, proposing that agents executing long-horizon tasks be paired with a "proactive memory agent" whose sole job is deciding when to speak up and when to stay silent.

The approach delivers a counterintuitive result: pairing the weaker Claude Sonnet 4.5 with the memory agent lifts its accuracy on the long command-line-task benchmark Terminal-Bench 2.0 to match the more expensive Claude Opus 4.6 (also paired with the memory agent) — and even surpasses Opus 4.6's own unpaired score.
📊
The hard numbers: On Terminal-Bench 2.0, Sonnet 4.5 with the memory agent scored 45.9%, tying Opus 4.6 with the memory agent (also 45.9%), and beating Opus 4.6 running solo at 43.5%. In other words, a cheap model plus this memory agent matched the performance of a pricier one.

All authors on the paper are from Meta AI. The problem it sets out to solve is specific: when an AI agent runs for hundreds of consecutive steps on a long task, it often "forgets" rules it should have kept following, even when that information is sitting right there in the conversation history. Let's first look at the problem itself.

2 The problem

The longer a task runs, does AI quietly forget the rules it's supposed to follow

The paper gives this failure mode a name: behavioral state decay. The information never actually gets lost — it's still sitting right there in the record — it just stops mattering.

A long task keeps generating new material: task requirements, environment facts, what's already been tried, diagnosed bugs, unfinished sub-goals. As the trajectory stretches out, this information either gets pushed out of the model's visible context window, or — even while still in the window — stops actually shaping what it does next. The paper collectively calls this kind of "information that should keep constraining future actions" execution state.

An analogy

It's like plastering an entire wall with sticky notes. You remember each one clearly when you post it, but once there are too many, you stop looking up at the wall at all. The words are still there — they just no longer shape what you do in the moment.

The timeline below walks through how one requirement, noted early on, drifts step by step from "alive" to "still on record, but no longer shaping the next move":

Step 2 · Noted
Rule: IP segments can be a single digit
Step 4
Rule still on record
Step 6
Rule still on record
Step 8 · Fixing another bug
New regex misses single-digit segments
Result
✗ Violates its own earlier requirement

Swipe left/right to see the timeline through to the end →

The information was there the whole time — it just stopped shaping the next move. The paper notes this relates to the "lost in the middle" phenomenon in long-context models (information buried in the middle gets ignored), but the emphasis here is more on the behavioral failure itself.

Three typical failure patterns from the paper

①A requirement is discovered early, then later violated while fixing an unrelated bug.
②A command, parameter, or implementation path was already tried and failed — and later, a near-identical variant gets retried anyway.
③An error pattern was already diagnosed, then later gets treated as a brand-new problem and handled from scratch all over again.

From this the paper draws a conclusion: simply feeding the model a longer history isn't enough. What's actually missing is a mechanism to decide "should this remembered piece of information be pulled back out and allowed to shape the decision right now."

3 Method · Core idea

A memory steward standing off to the side, whose only job is deciding whether to speak up

This is the paper's first core idea. The design: the executor agent doing the actual work is left completely unchanged; a separate memory agent runs alongside it. It's woken up at fixed intervals, first curates a structured memory store, then decides whether to inject a reminder into the executor's next step.

Executor agent
⇄
Environment
→woken every step
Memory agent
(sees last 8 messages)
→injects reminder
Next-step decision

Swipe left/right to see the full flow diagram →

Core design

Every time the memory agent wakes up, it goes through two phases: curate the books first, then make the call. Its only effect on the executor agent is that one optional reminder, injected as one-off temporary context and then gone — it doesn't touch the executor's base instructions, tools, or decoding process.

The most important point: staying silent is a formal action, not something skipped by omission. Every single step, the memory agent has to make an explicit either/or choice: inject a reminder, or explicitly choose to stay quiet. It only speaks up when a piece of memory is likely to actually change the next decision.

Phase 1
Curate the memory store

The memory agent doesn't rewrite the store directly — it returns a set of predefined tool calls, which the system then executes. The store has three categories:

status · private progress
The memory agent's own private view of progress, open questions, and potential risks — visible only to itself, never shown to the executor agent.
knowledge · stable facts
Task requirements, environment properties, file paths, config details — facts already verified by tools or by the user.
procedural · attempts and outcomes
What commands were tried, which failed, which fixed the issue, which hypotheses were ruled out, what diagnostic signals showed up.
memory_update_statusUpdates the memory agent's private progress tracker, visible only to itself. memory_save_knowledgeWrites important facts — task requirements, environment facts, file paths, interface details — into the knowledge store. memory_save_proceduralLogs debugging experience: failed attempts, successful fixes, error patterns, performance observations. memory_deleteDeletes an entry by ID once it's stale or proven wrong.
Phase 2
Decide whether to speak

Reads the just-updated memory store and makes a single decision — this step never modifies the store itself:

Speak · inject a reminderTurns a requirement about to be violated, an environment fact that explains the current situation, a failure that shouldn't be repeated, or an unfinished sub-goal into a targeted reminder, injected into the executor's next call.
Stay silent · add nothingIf nothing in memory is important enough, it explicitly chooses not to speak. The paper stresses it's specifically encouraged to speak up only when genuinely useful, avoiding broad strategic advice or restating already-known information that would just distract the executor.

The paper also draws a clear line between this memory agent and an "advisor"-style approach (where a model acts as a strategist, offering all kinds of suggestions to the model doing the work): the memory agent doesn't give broad strategic advice — every word it speaks must be grounded in a maintained piece of execution state: a specific requirement, fact, failure, or diagnosis.

Related read on this site
Anthropic's official move: Claude Fable 5 as "advisor," Claude Sonnet 5 does the work and eats most of the bill
The "advisor"-style approach the paper compares against refers to Anthropic's advisor tool — already fully explained on this site: the mechanism, model compatibility table, and billing details are all covered. The "no memory store · advice only" tier in the ablation below simulates exactly this kind of system.
System integration diagram: executor agent interacting with the environment, memory agent running in parallel
Figure 1(a) | System integration: on the left, the executor agent interacts with the environment; on the right, the memory agent runs in parallel, observing a sliding window of recent steps and the current memory store; it wakes every N steps to update the store and optionally inject a reminder into the next call. Source: arXiv:2607.08716, original paper figure.
Internal two-phase flow of the memory agent
Figure 1(b) | Inside the memory agent: Phase 1 manages the memory store via tool calls (status / knowledge / procedural categories); Phase 2 reads the updated store and either issues a context_for_action reminder or chooses no_intervention. Source: arXiv:2607.08716, original paper figure.

In the main experiments, the trigger is the simplest possible: the memory agent wakes on step one and then every step after, observing a sliding window of the last 8 messages each time. The paper notes this could be swapped for more selective triggers (e.g. only waking on errors, failed tests, or repeated commands), but a fixed cadence was used here to isolate the effect of the reminder policy itself.

4 Data

How much did adding the memory agent actually raise scores

The paper tested on two long-horizon-task benchmarks: Terminal-Bench 2.0 (autonomous command-line operation — editing code, running commands, fixing bugs) and τ²-Bench (multi-turn conversational tool-calling across three real service domains: airline, retail, and telecom). Scoring uses pass@1The AI only gets one attempt at the task — success rate is whether that single attempt gets it right, not the best of several tries..

37.6% → 45.9%
Terminal-Bench 2.0, Sonnet 4.5 before/after the memory agent (+8.3 percentage points)
55.0% → 61.8%
τ²-Bench task-weighted average, Sonnet 4.5 before/after the memory agent (+6.8 percentage points)
45.9% = 45.9%
With the memory agent, the cheaper Sonnet 4.5 ties the pricier Opus 4.6 on Terminal-Bench
45.9% > 43.5%
Sonnet 4.5 with the memory agent even beats Opus 4.6 without it (43.5%)
Sonnet 4.5 · Terminal-Bench37.6% → 45.9% (+8.3pp)
Opus 4.6 · Terminal-Bench43.5% → 45.9% (+2.4pp)
Sonnet 4.5 · τ²-Bench avg55.0% → 61.8% (+6.8pp)
Opus 4.6 · τ²-Bench avg66.2% → 68.7% (+2.5pp)

Two things worth noting. First, the weaker model gains more, but the stronger one doesn't gain nothing either: Opus 4.6 is already strong, yet with the memory agent it still picks up another 2.4 and 2.5 percentage points on the two benchmarks respectively — meaning this isn't just a patch for weaker models. Second, the gains vary noticeably by scenario, consistent with the paper's framing of memory as a "scenario-adapted intervention strategy" rather than a fixed recipe.

Expand: full τ²-Bench breakdown across all three scenarios (Table 1)
Benchmark / scenarioAction modelnBaselineWith memory agentΔ
Terminal-Bench 2.0Sonnet 4.58537.6%45.9%+8.3
Terminal-Bench 2.0Opus 4.68543.5%45.9%+2.4
τ² · airlineSonnet 4.55068.0%78.0%+10.0
τ² · retailSonnet 4.511449.1%58.8%+9.6
τ² · telecomSonnet 4.511455.3%57.9%+2.6
τ² · task-weighted avgSonnet 4.527855.0%61.8%+6.8
τ² · airlineOpus 4.65076.0%76.0%+0.0
τ² · retailOpus 4.611464.9%69.3%+4.4
τ² · telecomOpus 4.611463.2%64.9%+1.8
τ² · task-weighted avgOpus 4.627866.2%68.7%+2.5

The memory agent is Claude Opus 4.6 throughout. All scores are pass@1 percentages; Δ is in percentage points (pp). Note: the τ² task-weighted average here is 61.8%, while the same configuration appears as 61.2% in the ablation table below — these are two separate runs from the paper, with slight discrepancy between the means; reported as-is from the original paper.

5 Ablation · Core idea

Good recall isn't as valuable as knowing when to shut up

This is the paper's second core idea. To pin down exactly which piece is doing the work, the team ran ablation experimentsRemoving or simplifying one component of a system and checking how much performance drops without it — a way to prove whether that piece actually matters, and how much.: the full approach was broken into five variants and compared head-to-head on τ²-Bench. The conclusion points to one thing — what actually matters isn't "how much it remembers," but "whether it can judge when to speak up."

The five variants: the full two-phase approach (self-selected silence), showing the full memory store to the executor at all times, forcing a reminder every single step, dropping the memory store and acting purely as an advisor, and plugging in a generic memory-retrieval layer, Mem0. The chart below shows the most telling case, the airline scenario — note the red-orange bar, which does worse than not having a memory agent at all:

Sonnet baseline
(no memory agent)
68.0%
Full approach
(self-selected silence)
78.0% +10.0
Full memory store shown
74.0% +6.0
Forced reminder every step
72.0% +4.0
No memory store · advice only
62.0% −6.0
Mem0 generic memory layer
68.0% ±0

The gray bar is the Sonnet baseline (68.0%). The red-orange bar (advisor-style advice) drops to 62.0% — worse than not having a memory agent at all. Mem0 ties the baseline, failing to improve the airline scenario.

Why is the gap biggest on airline: this type of task is especially vulnerable to over-interruption — a single unnecessary reminder can throw the executor off track. Only the full approach, which actively chooses to stay silent, scored highest here. Conversely, an advisor that only ever offers suggestions, and a Mem0 layer that only retrieves memory, both stumbled on this scenario.

Averaging across the three scenarios (macro = equal weight per scenario, micro = weighted by task count), the full approach has the highest macro score and improves on all three scenarios, with the biggest gain on airline. One detail worth flagging: forcing a reminder every step scores 0.3 points higher on micro, but that falls within normal noise — once scenarios are weighted equally under macro, the silence-capable full approach retakes the lead, with the gap driven mainly by airline.

Expand: full comparison table of all five variants + what each one strips out (Table 2)
Variantairlineretailtelecommacromicro
Sonnet baseline68.049.155.357.555.0
Full memory agent (this approach)78.057.057.964.361.2
Full memory store shown74.052.657.961.558.6
Forced reminder every step72.058.859.663.561.5
No memory store · advice only62.054.466.761.060.8
Mem068.059.658.862.160.8

Full memory store shown: keeps Phase 1's curation but drops Phase 2's filtering — the entire store is dumped in front of the executor at every step, testing whether that alone helps.
Forced reminder every step: keeps the memory store and Phase 2's reminder generation, but removes the "stay silent" option, forcing it to speak every step — testing whether the power to not speak is what matters.
No memory store · advice only: drops the persistent memory store, keeping only Phase 2's advice-giving — corresponding to an advisor-style system whose suggestions have no stable memory to anchor them.
Mem0: swaps in a generic memory layer — memory is written via Mem0's ADD interface and retrieved as top-10 via vector plus BM25 search, testing the difference between "retrieving memory" and "judging whether to intervene."

The paper's takeaway: simply maintaining a memory store helps, but isn't enough; advisor-style advice without a memory store lacks anchoring and is unstable; forcing a reminder every step is competitive but uneven. The full approach wins precisely because it combines "well-maintained execution state" with "an intervention policy that both knows what to say and knows when to shut up."

6 Case studies

Exactly where did the memory agent choose to speak up

The paper's authors manually reviewed trajectories that ran with memory, and found that memory doesn't help through vague summaries — its standout moments come at the exact instant the executor is about to ignore some critical piece of information, reactivating it right then. Below are three real cases.

Terminal-Bench · regex-log task

While the executor was writing a regex to match log lines, the memory agent flagged two things at once: the current regex violated a boundary condition specified by the task, and it also missed single-digit IP segments (like the single-digit part of 1.2.3.4).

τ²-Bench · airline gold-tier mystery

A user claims to be a Gold-tier member, but the tool lookup shows they're actually Regular tier. Without the memory agent, the executor issues compensation based on what the user claimed; with the memory agent, it's reminded to go by the verified record rather than the user's self-reported claim.

"Go by the verified membership record, not what the user claims."
τ²-Bench · basic economy can't be rebooked

Right before the rebooking tool is actually called, the memory agent resurfaces the policy that "basic economy tickets aren't eligible for changes," blocking a would-be policy violation. The paper notes that successful interventions like this tend to land right before a tool call that would change environment state.

Laid out across the full trajectory, this looks like the signature chart: most steps are hollow circles (silence), with only a few nodes lit up (a reminder injected) — and each lit node is labeled with exactly what got said.

① ② ③
Stayed silent Injected a reminder
① Regex boundary
Current regex violates the boundary condition, and misses single-digit IP segments.
② Gold-tier check
Go by verified record, not the user's self-claimed membership tier.
③ Rebooking policy
Basic economy can't be rebooked — resurfaced right before the tool call.

The paper is also upfront about the remaining failure cases: mostly calibration issues — the memory agent occasionally states a merely speculative conclusion with too much confidence, restates something the executor already knows, or raises a plausible-sounding but unnecessary concern that forces an extra round of checking. These are exactly the motivation for the next step: training it to be even better at knowing when to stay silent.

7 Open-source training

Teaching this same judgment to a small open-source model

The memory agent in the main experiments is Claude Opus 4.6 — a frontier closed model that has to be called an extra time at every memory step, which isn't cheap. So the team ran an early exploration: can this same judgment be trained into a small open-source model, Qwen3.5-27B, to serve as the memory agent, with the executor model swapped to a frozen Qwen3.5-122B-A10B.

Training used SETA (a scored set of command-line tasks), holding out Terminal-Bench 2.0 as the final transfer test. The method is two steps: SFTSupervised fine-tuning — teaching the model by giving it worked examples to imitate. Here, trajectories from the Opus memory agent serve as the templates, teaching the small model the memory-store operations and the silence/reminder interface. first teaches the interface and basic rules, then GRPOA reinforcement-learning method where the model makes repeated attempts and adjusts its policy based on outcomes, further calibrating "when to speak, when to stay silent" rather than just imitating the templates. reinforcement learning further calibrates the "should I speak up" judgment.

0.693
SETA validation reward
The untrained 27B model straight out of the box actually drags performance down, below the 0.709 baseline.
0.720
SETA validation reward
SFT supervised fine-tuning recovers the loss, and edges slightly above baseline.
0.734
SETA validation reward
GRPO reinforcement learning pushes it further, from 56 to 58 tasks solved.
41.1%
Terminal-Bench pass@1
Transferred to the held-out Terminal-Bench, rising from 37.6% to 41.1% (+3.5 percentage points).

The conclusion: this memory strategy can indeed be learned, but it needs proper calibration — dropping an untrained small model straight in actually makes things worse. It's also worth being clear-eyed about the gap: the trained small model's transfer gain is 3.5 percentage points, well below the 8.3-point gain from using Opus 4.6 as the memory agent. The paper frames this section as "early exploration" — proof the path is viable, not proof it's already caught up to the frontier closed-source version.

8 Caveats

Things to watch if you want to try this yourself

Two easily-overlooked points, laid out here in full.

First, the paper claims open-source, but the repo is empty.The paper's body text gives the code address as github.com/yifannnwu/proactive-memory-agent, but this repository was verified on GitHub to be empty: 0 bytes in size, created on June 12, 2026, with nothing ever pushed since — no README, no description. As of July 13, 2026, the code has not actually been open-sourced. There's currently no usable implementation to run directly.

Second, the best-performing memory agent's cost isn't reported anywhere.The best-performing memory agent in the main experiments is Claude Opus 4.6, a frontier closed model — and in practice it's called on step one and then every single step after, which is more frequent than the "fixed interval" language in the methods section suggests. The paper itself admits this isn't the most practical deployment shape, which is exactly why they trained a small open-source model — to cut this cost. But the paper doesn't report actual figures for the extra token consumption and latency the memory agent adds; that math has to be done yourself before deploying it.

The paper also spells out where this applies: this architecture — a separate memory agent deciding whether to interject — doesn't require modifying the main executor model and can be plugged into existing agent workflows. For teams building long-horizon AI agents — automated command-line operations, or multi-turn tool-calling customer service or business processes — this is a module that can be layered on directly.

Staying silent is itself an explicit action. The memory agent is encouraged to speak only when a remembered piece of information is likely to change the next decision. Translated from the paper's §3.3 description of null intervention
This piece is based on the arXiv paper "Remember When It Matters: Proactive Memory Agent for Long-Horizon Agents" (arXiv:2607.08716v1, authors Yifan Wu, Zhuokai Zhao, et al.), published by Meta AI's team on July 9, 2026. All scores, ablations, and training data cited come from the original paper; the empty-repository status was independently verified on GitHub as of July 13, 2026. Figures 1(a)(b) are original paper figures. This explainer presents facts and mechanisms only and does not represent any evaluation or prediction.
Source
arXiv · Meta AIarXiv · Meta AI·Read the source
↑ End of article
✓ This article is free to read in full

Members can copy or download the full Markdown, and let their AI subscribe and ask.

Read the original ↗
📮 New explainers, straight to your inbox

Found this useful? Leave your email — every new explainer, the moment it's out. Unsubscribe anytime.