{"id":50682281,"url":"https://github.com/ViktorAxelsen/MemSkill","last_synced_at":"2026-06-16T19:00:41.995Z","repository":{"id":335921231,"uuid":"1146040039","full_name":"ViktorAxelsen/MemSkill","owner":"ViktorAxelsen","description":"MemSkill: Learning and Evolving Memory Skills for Self-Evolving Agents","archived":false,"fork":false,"pushed_at":"2026-05-23T17:00:11.000Z","size":5559,"stargazers_count":484,"open_issues_count":5,"forks_count":31,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-05-23T19:04:10.488Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ViktorAxelsen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-30T14:46:19.000Z","updated_at":"2026-05-23T17:00:15.000Z","dependencies_parsed_at":null,"dependency_job_id":"d4850051-684e-4583-bdf9-ca451f71e662","html_url":"https://github.com/ViktorAxelsen/MemSkill","commit_stats":null,"previous_names":["viktoraxelsen/memskill"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ViktorAxelsen/MemSkill","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ViktorAxelsen%2FMemSkill","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ViktorAxelsen%2FMemSkill/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ViktorAxelsen%2FMemSkill/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ViktorAxelsen%2FMemSkill/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ViktorAxelsen","download_url":"https://codeload.github.com/ViktorAxelsen/MemSkill/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ViktorAxelsen%2FMemSkill/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34419350,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-16T02:00:06.860Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-08T20:00:23.311Z","updated_at":"2026-06-16T19:00:41.982Z","avatar_url":"https://github.com/ViktorAxelsen.png","language":"Python","funding_links":[],"categories":["Python","📈 Papers - Memory for Agent Evolution","Memory Systems"],"sub_categories":["🧭 Reinforcement Learning \u0026 Continual Learning"],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"assets/logo.png\" alt=\"LLMRouter Logo\" width=\"300\"\u003e\n\u003c/div\u003e\n\n\n\n\u003ch1 align=\"center\"\u003eMemSkill: Learning and Evolving Memory Skills for Self-Evolving Agents\u003c/h1\u003e\n\n\n\n\n\u003cdiv align=\"center\"\u003e\n  \u003cp\u003e\n    \u003ca href='https://viktoraxelsen.github.io/MemSkill/'\u003e\u003cimg src='https://img.shields.io/badge/Project-Page-00d9ff?style=for-the-badge\u0026logo=github\u0026logoColor=white'\u003e\u003c/a\u003e\n    \u003ca href='https://arxiv.org/abs/2602.02474'\u003e\u003cimg src='https://img.shields.io/badge/arXiv-2602.02474-ff6b6b?style=for-the-badge\u0026logo=arxiv\u0026logoColor=white'\u003e\u003c/a\u003e\n    \u003ca href=\"https://huggingface.co/papers/2602.02474\"\u003e\u003cimg src=\"https://img.shields.io/badge/HuggingFace-Paper-FFD21E?style=for-the-badge\u0026logo=huggingface\u0026logoColor=FFD21E\" alt=\"HuggingFace Paper\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://huggingface.co/collections/XaiverZ/memskill\"\u003e\u003cimg src=\"https://img.shields.io/badge/HuggingFace-Collection-FFD21E?style=for-the-badge\u0026logo=huggingface\u0026logoColor=FFD21E\" alt=\"HuggingFace Collection\"\u003e\u003c/a\u003e\n    \u003cbr\u003e\n    \u003ca href=\"https://github.com/ViktorAxelsen/MemSkill/stargazers\"\u003e\u003cimg src='https://img.shields.io/github/stars/ViktorAxelsen/MemSkill?color=f1e05a\u0026style=for-the-badge\u0026logo=star\u0026logoColor=white' /\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/ViktorAxelsen/MemSkill/forks\"\u003e\u003cimg src='https://img.shields.io/github/forks/ViktorAxelsen/MemSkill?color=2ea44f\u0026style=for-the-badge\u0026logo=git\u0026logoColor=white' /\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/ViktorAxelsen/MemSkill/issues\"\u003e\u003cimg src='https://img.shields.io/github/issues/ViktorAxelsen/MemSkill?color=d73a49\u0026style=for-the-badge\u0026logo=github\u0026logoColor=white' /\u003e\u003c/a\u003e\n    \u003ca href=\"https://deepwiki.com/ViktorAxelsen/MemSkill\"\u003e\u003cimg src=\"https://img.shields.io/badge/DeepWiki-MemSkill-6B4FBB?style=for-the-badge\u0026logo=readthedocs\u0026logoColor=white\" alt=\"DeepWiki\"\u003e\u003c/a\u003e\n    \u003c!-- \u003ca href=\"https://www.python.org/downloads/release/python-3109/\"\u003e\u003cimg src=\"https://img.shields.io/badge/PYTHON-3.10-3776AB?style=for-the-badge\u0026logo=python\u0026logoColor=white\" alt=\"Python\"\u003e\u003c/a\u003e --\u003e\n    \u003c!-- \u003ca href=\"x\" style=\"text-decoration:none;\"\u003e\u003cimg src=\"https://img.shields.io/badge/TWITTER-ANNOUNCEMENTS-1DA1F2?style=for-the-badge\u0026logo=x\u0026logoColor=white\" alt=\"Twitter\"\u003e\u003c/a\u003e --\u003e\n    \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/LICENSE-Apache-2EA44F?style=for-the-badge\" alt=\"License\"\u003e\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n\n\n\n## 🧩 Overview\n\n**MemSkill** is a framework for learning and evolving **memory skills** for long-horizon agents. It replaces static, hand-designed memory operations with a data-driven loop where skills are **learned, refined, and reused** from task feedback, enabling more adaptive memory construction across settings.\n\n❗The skills evolved by **MemSkill** are **NOT** experiential/procedural memory/insights themselves. Rather, they are a form of **meta-memory** that focuses on **what kinds of memory to extract, how to remember and where to focus, and what to preserve or forget**. This is also why we call them **memory skills**: they capture the way or skill of remembering, rather than the remembered content itself.\n\n**Highlights**\n\n- **Skill-conditioned memory construction**: Compose a small set of relevant skills for each span and construct memories in one pass.\n\n- **Skill evolution from hard cases**: Periodically mine challenging examples to refine existing skills and propose new ones.\n\n- **Reusable skill bank**: Maintain a shared, evolving skill bank that supports transfer across datasets and base models.\n\n- **High-throughput evaluation**: Multi-API-key round-robin for stable, parallel calls.\n\n- **Scalable training and runs**: Multi-threading and multi-processing for large-scale training and evaluation.\n\n\n\n\n\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./assets/model.png\" width=\"800\" alt=\"MemSkill\"\u003e\n\u003c/div\u003e\n\n\n\n## 📰 News\n\n- 🚀 **[2026-03]**: `--locomo-train-query-sampling-ratio` is now available for training-time stratified test-query sampling on LoCoMo. It significantly reduces evaluation cost during training by sampling LoCoMo test queries by category, while leaving the full-evaluation protocol unchanged for `eval-only` and formal testing. For more details, please refer to [Commonly Used Configs](#️-commonly-used-configs).\n\n- 🛠️ **[2026-03]**: We have added support for interrupted training recovery. You can now resume training in the `train_*.sh` scripts by passing `--load-checkpoint`, which restores key training state such as the controller/optimizer, operation bank, designer state (for example, the rolling failure-case pool), and other resume-critical metadata. At the moment, recovery is supported only from checkpoints saved at **outer-epoch boundaries**. By default, resumed runs continue logging to the original W\u0026B run; if you prefer a fresh run for logging, use `--resume-new-wandb-run` instead. For more details, please refer to [Commonly Used Configs](#️-commonly-used-configs).\n\n- 🚀 **[2026-03]**: We have improved the parallel memory extraction pipeline for evaluation and cache building, making MemSkill noticeably faster in large-scale runs. We also added clearer controls for concurrency with `--inference-workers` at the sample level and `--inference-session-workers` within each sample at the chunk/span level, which together can significantly accelerate memory extraction. For more details, please refer to [Commonly Used Configs](#️-commonly-used-configs).\n\n- ⭐ **[2026-03]**: We have released the MemSkill controller weights in our [Hugging Face collection](https://huggingface.co/collections/XaiverZ/memskill), which can now be used directly for inference on suitable datasets. Please note that differences in experimental environments and settings may require some adaptation; when necessary, we recommend retraining and tuning key hyperparameters on a held-out validation split, especially `chunk_size` and the number of selected skills during inference (`action_top_k`), to ensure reliable performance. We hope these resources help advance self-evolving agent memory systems, and we'd be glad to hear from the community.\n\n- 🔥 **[2026-02]**: We are honored to be featured in the 🤗 HuggingFace [#3 Paper of the day](https://huggingface.co/papers/2602.02474)\n\n- 🚀 **[2026-02]**: **MemSkill** is officially released — a new paradigm for agent memory that learns reusable skills 🔁 and evolves them from data over time 🧠, improving memory quality and generalization across long, open-ended interactions ✨.\n\n\n\n\n\n## 🔗 Links\n\n- [Overview](#-overview)\n- [News](#-news)\n- [Get Started](#-get-started)\n- [Installation](#installation)\n- [Preparing Training Data](#-preparing-training-data)\n- [Experiments](#-experiments)\n- [Extending to New Datasets and Evaluation Protocol](#-extending-to-new-datasets-and-evaluation-protocol)\n- [Commonly Used Configs](#️-commonly-used-configs)\n- [Citation](#-citation)\n\n\n\n\n\n\n## 🚀 Get Started\n\n### Installation\n\n```bash\n# Clone the repository\ngit clone https://github.com/ViktorAxelsen/MemSkill\ncd MemSkill\n\n# Create and activate virtual environment\nconda create -n memskill python=3.10\nconda activate memskill\n\n# vllm\npip install vllm==0.6.3\n# PyTorch\npip install torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0 --index-url https://download.pytorch.org/whl/cu124\n# Flash-Attn (or you can specify `--disable-flash-attn` in the .sh scripts to disable it)\npip install flash-attn --no-build-isolation\n# Others\npip install -r requirements.txt\n```\n\n\n\n\n### 📊 Preparing Training Data\n\nMemSkill builds training and evaluation data from the datasets below. Please download data from the official sources and place them under `data/`. Unless otherwise noted, splits are already configured in our codebase.\n\n#### **1) LoCoMo**\n- Download LoCoMo from the official repo: [LoCoMo](https://github.com/snap-research/locomo)  \n- **Splits**: LoCoMo splits are **already configured in `main.py`** (no extra split file needed).  \n- Put the downloaded files under:\n  - `data/locomo10.json`\n\n#### **2) LongMemEval**\n- We use **LongMemEval-S** from: [LongMemEval](https://github.com/xiaowu0162/LongMemEval)  \n- **Important**: LongMemEval-S is used for **transfer evaluation only**. That is, skills trained on LoCoMo are **directly evaluated** on LongMemEval-S without additional training.\n- Put the downloaded files under:\n  - `data/longmemeval_s_cleaned.json`\n- Use our split file:\n  - `data/longmemeval_s_splits.json` (**We use test split only**)\n\n\n\n#### **3) HotpotQA**\n- Download HotpotQA from: [HotpotQA-Modified](https://huggingface.co/datasets/BytedTsinghua-SIA/hotpotqa/tree/main) (Source: [HotpotQA](https://hotpotqa.github.io/))\n- We evaluate on three test files:\n  - `data/eval_50.json`\n  - `data/eval_100.json`\n  - `data/eval_200.json`\n\nThese correspond to **increasing context length**, where each query context is constructed by concatenating **50 / 100 / 200 documents** (following the long-context evaluation protocol we adopt in our experiments).\n\n\n\n#### **4) ALFWorld**\nPlease follow the official instructions to install dependencies and download assets: [ALFWorld](https://github.com/alfworld/alfworld)\n\nWe use **offline expert trajectories** as the interaction corpus for memory construction. We provide a one-command script to collect and save trajectories:\n\n```bash\n# Collect expert trajectories for train / seen / unseen splits\npython alfworld_replay.py --split train --output ./data/alfworld_train_offline.json\npython alfworld_replay.py --split eval_in_distribution --output ./data/alfworld_expert_eval_in_distribution.json\npython alfworld_replay.py --split eval_out_of_distribution --output ./data/alfworld_expert_eval_out_of_distribution.json\n```\n\nNote that:\n\n- We collect `seen` and `unseen` expert plans **only to keep data formats consistent** and make evaluation easier. They are not used for training.\n\n- The saved trajectories will be saved under `data/` by default.\n\n\n\u003e **ALFWorld Training Data Preparation Workflow**\n\nWe separate data into **two batches with different roles**.\n\n**Batch A: Offline expert trajectories (memory construction batch)**  \nWe first collect expert rollouts (the JSON files above). During training, we sample a batch of trajectories and:\n- split each trajectory trace into **contiguous spans** (processed sequentially span by span)\n- build an **episode specific memory bank** by running MemSkill on these spans\n- record the controller’s Top-K skill selections (and the associated policy info needed for RL updates)\n\nThis batch is used to teach the controller how to **compose skills** for memory construction from realistic interaction traces, without requiring environment interaction.\n\n**Batch B: Environment evaluation episodes (reward batch)**  \nTo obtain task-level feedback, we sample a batch of ALFWorld tasks and:\n- run the agent in the environment using the memory bank produced by MemSkill in the Batch A\n- compute the **task signal** (e.g., success rate) as the reward feedback\n- log difficult failures as hard cases for the designer\n\nThis batch provides the supervision signal that tells the controller whether its skill composition actually helps long-horizon execution.\n\n**How they work together**\n- Batch A provides the behavior data (skill choices on spans) needed to optimize the controller policy.\n- Batch B provides the downstream task feedback that makes the optimization meaningful.\n- The designer then mines hard cases from Batch B outcomes to refine existing skills and propose new ones.\n\nIn short, ALFWorld uses **offline traces for scalable memory construction training (Batch A)** and **environment rollouts for task feedback and skill evolution (Batch B)**.\n\n\n\n\n\n\n\n\n❗For integrating more datasets, our framework is designed to be flexible and easy to extend to new settings (different interaction formats, query styles, and evaluation protocols). See [Extending to New Datasets and Evaluation Protocol](#-extending-to-new-datasets-and-evaluation-protocol) for step-by-step instructions.\n\n\n\n\n\n## 🧪 Experiments\n\nBefore running, please check the parameter configuration in the `.sh` scripts.\n\n\u003e [!IMPORTANT]\n\u003e\n\u003e **Before running, please review **[Commonly Used Configs](#️-commonly-used-configs)** and update the `.sh` scripts with your dataset paths, API settings, and model choices.**\n\n\n### 🖥️ Training\n\nChoose the training script based on the dataset you want to use. Make sure `--data-file`, `--model`, and API settings are set correctly.\n\n```bash\nbash train_locomo.sh\n# or\nbash train_alfworld.sh\n```\n\n\n### 🧭 Evaluation\n\nUse the matching evaluation script after training. Set --load-checkpoint and dataset paths before running.\n\n```bash\nbash eval_locomo.sh\n# or\nbash eval_alfworld.sh\n# or\nbash eval_hp.sh\n# or\nbash eval_longmemeval.sh\n```\n\n\n\n## 🔧 Extending to New Datasets and Evaluation Protocol\n\nMemSkill is designed to be extensible across diverse datasets and evaluation protocols. To add a new dataset or evaluation protocol:\n\n- Implement a data processor in `src/data_processing/` (parse raw data, build sessions/spans, and expose QA items if applicable).\n- Implement an evaluator in `src/eval/` (prompt construction, answer extraction, metric computation).\n- Register the new processor/evaluator in `src/data_processing/__init__.py` and `src/eval/__init__.py`.\n- Add a run script (train/eval) with the dataset name, data paths, and retrieval settings.\n\nIn practice, you only need to define how to segment interaction history into spans, how to format prompts for memory construction and QA, and how to score outputs. The controller–executor–designer loop and skill‑bank evolution remain unchanged.\n\nNote: `src/trainer.py` usually does not need changes when adding a new dataset; only interactive environments (e.g., ALFWorld‑style) or custom training loops require trainer modifications.\n\n\n\n## ⚙️ Commonly Used Configs\n\nThese are the parameters most frequently used in the training/eval `.sh` scripts:\n\n**Core run settings**\n- `--dataset`: dataset name (`locomo`, `longmemeval`, `hotpotqa`, `alfworld`)\n- `--data-file`: path to the main dataset file\n- `--model`: base LLM name\n- `--designer-model`: base LLM name for designer (default: the same as --model)\n- `--api`: use API-based inference (without this flag, the model is loaded locally with vLLM for inference)\n- `--api-base`: API endpoint\n- `--api-key`: one or more API keys\n- `--disable-flash-attn`: Flash Attention is enabled by default; add this flag to disable it.\n\n\u003e [!NOTE]\n\u003e\n\u003e To reduce the training cost introduced by open-ended skill evolution, one practical option is to use a smaller `--model` together with a larger `--designer-model`. In our experiments, we can still observe an increasing reward curve even when both `--model` and `--designer-model` are small. Generally speaking, however, a larger `--designer-model` makes skill evolution more effective while adding almost no extra training cost, because the designer contributes only a negligible number of LLM calls and token comsumption compared to the controller.\n\u003e\n\u003e Another option is to reduce the number of retrieved memories during training, namely `--mem-top-k`, since the dominant training cost usually comes from evaluating test queries. We also provide `--locomo-train-query-sampling-ratio`, a query-sampling option that can stratify test queries to reduce the evaluation burden during training while preserving stability and effectiveness. We hope these practical insights and experiences help the community follow, reproduce, and adapt MemSkill more easily.\n\n\n**Retrieval \u0026 memory**\n- `--retriever`: retriever type (`contriever`, `dpr`, `dragon`)\n- `--mem-top-k`: top‑K memories for training\n- `--mem-top-k-eval`: top‑K memories for evaluation\n- `--locomo-train-query-sampling-ratio`: LoCoMo-only training-time query sampling ratio for stratified test-query evaluation (`1.0` keeps full evaluation)\n- `--session-mode`: span granularity (`turn`, `turn-pair`, `full-session`, `fixed-length`)\n- `--chunk-size`, `--chunk-overlap`: fixed-length chunking size/overlap\n- `--inference-workers`: number of parallel workers for sample-level memory inference(`1` = serial)\n- `--inference-session-workers`: number of parallel workers for session/span-level memory inference within each sample (`1` = serial; **values \u003e 1 may degrade performance**)\n\n\u003e [!WARNING]\n\u003e\n\u003e `--inference-workers` increases sample-level concurrency and can usually be set higher as long as your API rate limit can sustain it, without affecting model performance. `--inference-session-workers` increases within-sample concurrency for sequential memory extraction and can speed up runs, but values greater than `1` may hurt task performance. Together with `--chunk-size`, these knobs can significantly accelerate memory extraction, so tune them carefully against quality.\n\n**Training**\n- `--batch-size`: episodes per PPO update\n- `--encode-batch-size`: batch size for embedding encoder\n- `--inner-epochs`, `--outer-epochs`: training schedule\n- `--ppo-epochs`: PPO update epochs per batch\n- `--action-top-k`: number of skills selected per step\n- `--reward-metric`: `f1` or `llm_judge`\n- `--llm-judge-model`: model used for LLM-judge scoring during training and text-dataset evaluation\n\n**Designer / evolution**\n- `--enable-designer`: enable skill evolution\n- `--designer-freq`: evolve every N outer epochs\n- `--designer-max-changes`: max changes per evolution cycle\n- `--designer-new-skill-hint`: encourage adding new skills\n\n**Eval / checkpoints**\n- `--eval-only`: run evaluation only\n- `--load-checkpoint`: checkpoint path (Training checkpoints are saved at outer-epoch boundaries; resuming with `--load-checkpoint` continues from the next outer epoch instead of restarting from epoch 0)\n- `--resume-new-wandb-run`: resume training state from a checkpoint but log to a fresh W\u0026B run instead of the saved run ID.\n- `--skip-load-operation-bank` / `--skip-load-snapshot-manager`: partial-load options for special cases; do not use them for full resume training.\n- `--save-dir`: where to save checkpoints\n- `--out-file`: output result file\n- `--overwrite`: force rebuilding memory caches under the run's `memories/` directory instead of reusing existing ones\n- `--device`: `cuda` or `cpu`\n\n**ALFWorld‑specific**\n- `--alfworld-offline-data`: offline trajectories\n- `--alfworld-eval-file`: eval split\n- `--alfworld-eval-query-source`: `objective` or `first_observation`\n\n\n**W\u0026B (logging)**\n- `--wandb-project`: W\u0026B project name.\n- `--wandb-run-name`: W\u0026B run name.\n- `--wandb-key`: W\u0026B API key (optional; you can also set `WANDB_API_KEY` in the environment).\n\n\n\n❗For the full list of configuration options, see `src/config.py`.\n\n\n\n\n## 🙏 Acknowledgments\n\n\nWe thank the authors and maintainers of **[LoCoMo](https://github.com/snap-research/locomo)**, **[LongMemEval](https://github.com/xiaowu0162/LongMemEval)**, **[HotpotQA-Modified](https://huggingface.co/datasets/BytedTsinghua-SIA/hotpotqa/tree/main) (Source: [HotpotQA](https://hotpotqa.github.io/))**, and **[ALFWorld](https://github.com/alfworld/alfworld)** for releasing their datasets, evaluation protocols, and supporting code. Their efforts in building and open-sourcing high-quality benchmarks make it possible to develop, evaluate, and reproduce research on agent memory. We also appreciate the broader open-source LLM/Agent memory community for tooling that supports reliable evaluation and large-scale experimentation.\n\n\n\n\n\n\n## 📚 Citation\n\n```bibtex\n@article{zhang2026memskill,\n  title={MemSkill: Learning and Evolving Memory Skills for Self-Evolving Agents},\n  author={Zhang, Haozhen and Long, Quanyu and Bao, Jianzhu and Feng, Tao and Zhang, Weizhi and Yue, Haodong and Wang, Wenya},\n  journal={arXiv preprint arXiv:2602.02474},\n  year={2026}\n}\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FViktorAxelsen%2FMemSkill","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FViktorAxelsen%2FMemSkill","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FViktorAxelsen%2FMemSkill/lists"}