[ICML'26] MemEvolve: Meta-Evolution of Agent Memory Systems
May 5, 2026 ยท View on GitHub
Introduction
๐๐๐ MemEvolve has been accepted by ICML 2026!
This repo is the official implementation of MemEvolve: Meta-Evolution of Agent Memory Systems.
Traditional self-improving memory systems operate under a fixed memory architecture, where the memory interface ฮฉ is predefined and remains static. Within this architecture, the agent iteratively populates and updates its memory base through interaction with the environment and task experiences. To transcend this limitation, we propose a dual-evolution process that jointly evolves the agent's memory base and its underlying memory architecture.
Our framework, MemEvolve, enables both the memory content and the memory system itself to adapt and improve over time through meta-evolution, enabling more adaptive and resource-aware memory-driven reasoning.
Setup
1. Environment Setup
conda create -n memevolve python=3.10
conda activate memevolve
cd Flash-Searcher-main
pip install -r requirements.txt
Optional (only if you need to use crawl4ai):
playwright install # Install browser binaries for crawl4ai
2. Configure Environment Variables
Copy .env.example to .env and fill in your API keys:
cp Flash-Searcher-main/.env.example Flash-Searcher-main/.env
# Then edit Flash-Searcher-main/.env with your actual API keys
See .env.example for all available configuration options and their descriptions.
Tip: For better evolution quality, use stronger models like
claude-sonnet-4.5orgpt-5forANALYSIS_MODELandGENERATION_MODEL.
3. Dataset Preparation
GAIA: Download from https://huggingface.co/datasets/gaia-benchmark/GAIA
- Use Feb 13, 2025 version (commit
897f2dfbb5c952b5c3c1509e648381f9c7b70316) - Expected structure:
./data/gaia/validation/ โโโ metadata.jsonl โโโ 076c8171-9b3b-49b9-a477-244d2a532826.xlsx โโโ 1f975693-876d-457b-a649-393859e79bf3.mp3 โโโ ... (various task files)
WebWalkerQA: Download from https://huggingface.co/datasets/callanwu/WebWalkerQA
- Place
main-00000-of-00001.jsonlin./data/webwalkerqa/ - Rename to
webwalkerqa_main.jsonl - Run sampling script to generate subset:
cd data/webwalkerqa python sample_webwalkerqa.py - Expected output:
./data/webwalkerqa/webwalkerqa_subset_170.jsonl
xBench: Download from https://github.com/xbench-ai/xbench-evals
- Use
DeepSearch-2505.csvand rename toDeepSearch.csv - Expected path:
./data/xbench/DeepSearch.csv
EvolveLab
EvolveLab is a Unified Codebase for Self-Evolving Memory.
Evaluate on Datasets
GAIA Dataset:
python run_flash_searcher_mm_gaia.py \
--infile ./data/gaia/validation/metadata.jsonl \
--outfile ./gaia_output/lightweight_results.jsonl \
--memory_provider lightweight_memory \
--sample_num 20 \
--max_steps 40
WebWalkerQA:
python run_flash_searcher_webwalkerqa.py \
--infile ./data/webwalkerqa/webwalkerqa_subset_170.jsonl \
--outfile ./webwalkerqa_output/lightweight_results.jsonl \
--memory_provider lightweight_memory \
--sample_num 20 \
--max_steps 40
xBench:
python run_flash_searcher_mm_xbench.py \
--infile ./data/xbench/DeepSearch.csv \
--outfile ./xbench_output/lightweight_results.jsonl \
--memory_provider lightweight_memory \
--sample_num 20 \
--max_steps 40
Key Parameters
| Parameter | Description | Example |
|---|---|---|
--memory_provider | Memory system to evaluate | agent_kb, lightweight_memory, cerebra_fusion_memory |
--sample_num | Number of tasks to sample | 20 (runs first 20 tasks) |
--max_steps | Maximum agent steps | 40 |
--disable_memory_evolution | Disable online memory evolution | Add flag to skip take_in_memory |
MemEvolve includes 11 baseline memory systems (reproduced from literature) and 2 evolved systems (generated by our framework):
| Memory System | Type | Paper | Source |
|---|---|---|---|
AGENT_KB | Baseline | Agent-KB | https://github.com/OPPO-PersonalAI/Agent-KB |
SKILLWEAVER | Baseline | SkillWeaver | https://github.com/OSU-NLP-Group/SkillWeaver |
MOBILEE | Baseline | Mobile-Agent-E | https://x-plug.github.io/MobileAgent/ |
EXPEL | Baseline | ExpeL | https://github.com/LeapLabTHU/ExpeL |
VOYAGER | Baseline | Voyager | https://github.com/tsinghua-fib-lab/AgentSquare |
DILU | Baseline | DILU | https://github.com/tsinghua-fib-lab/AgentSquare |
GENERATIVE | Baseline | Generative Agents | https://github.com/tsinghua-fib-lab/AgentSquare |
MEMP | Baseline | Memp | N/A |
DYNAMIC_CHEATSHEET | Baseline | Dynamic Cheatsheet | https://github.com/suzgunmirac/dynamic-cheatsheet |
AGENT_WORKFLOW_MEMORY | Baseline | Agent Workflow Memory | https://github.com/zorazrw/agent-workflow-memory |
EVOLVER | Baseline | Evolver | https://github.com/KnowledgeXLab/EvolveR |
LIGHTWEIGHT_MEMORY | Evolved | Generated by MemEvolve | N/A |
CEREBRA_FUSION_MEMORY | Evolved | Generated by MemEvolve | N/A |
MemEvolve
MemEvolve enables meta-evolution of memory systems through a dual-loop process that evolves both memory content and architecture.
Automatic Multi-Round Evolution
Run tournament-style meta-evolution with automatic candidate selection:
python evolve_cli.py auto-evolve gaia \
--num-rounds 3 \
--provider agent_kb \
--num-systems 3 \
--task-batch-x 40 \
--top-t 2 \
--extra-sample-y 20 \
--creativity 0.5 \
Parameters:
--num-rounds: Number of evolution rounds--provider: Initial baseline memory system--num-systems: Number of candidate systems to generate per round--task-batch-x: Number of tasks for initial evaluation--top-t: Number of top systems to advance to finals--extra-sample-y: Additional tasks for final evaluation--creativity: Innovation level (0.0-1.0)--use-pareto-selection: Enable multi-objective Pareto optimization
Process per round:
- Collect base logs: Run current base system on x tasks
- Generate candidates: Generate N candidate systems (each with independent analysis, generation, creation, validation)
- Tournament: Evaluate N+1 systems (N new + 1 base) on the same x tasks
- Finals: Top t systems compete on (y sampled from tournament + new x) tasks
- Selection: Winner becomes base for next round
Note: This is not the final release. A more robust version is still being organized.
If auto-evolution hits an error, it will exit and save a checkpoint. Just fix the issue manually (we'll show you how), then re-run the same command to continue from where it stopped.
Need more control? Use the manual step-by-step approach below โ you decide how many tasks to run and where to save the outputs.
Manual Step-by-Step Evolution
For fine-grained control over each phase:
Step 1: Analyze Task Trajectories
python evolve_cli.py analyze ./test/test_traj/lightweight_memory \
--work-dir ./memevolve_work \
--provider agent_kb
Analyzes execution logs to identify memory system bottlenecks and improvement opportunities.
Step 2: Generate New Memory System
python evolve_cli.py generate \
--work-dir ./memevolve_work \
--creativity 0.5
Step 3: Create System Implementations
python evolve_cli.py create \
--work-dir ./memevolve_work
Generates production-ready Python code for provider classes and configuration files.
Step 4: Validate Systems
python evolve_cli.py validate \
--work-dir ./memevolve_work
Citation
If you use MemEvolve in your research, please cite:
@misc{zhang2025memevolvemetaevolutionagentmemory,
title={MemEvolve: Meta-Evolution of Agent Memory Systems},
author={Guibin Zhang and Haotian Ren and Chong Zhan and Zhenhong Zhou and Junhao Wang and He Zhu and Wangchunshu Zhou and Shuicheng Yan},
year={2025},
eprint={2512.18746},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2512.18746},
}
Acknowledgments
This work builds upon and adapts code from:
- Flash-Searcher โ DAG-based parallel execution framework for agent task execution and trajectory collection
- mini-swe-agent โ Automated code fixing during validation phase
We sincerely thank the contributors of these projects for their excellent work in advancing agent-based systems.
Special thanks to the authors of the baseline memory systems:
- Agent-KB, SkillWeaver, MobileE, ExpeL, Voyager, DILU, Generative Agents, MEMP, Dynamic Cheatsheet, Agent Workflow Memory, Evolver
License
This project is licensed under the Apache License 2.0. See the LICENSE file for details.
