From 6244e7eeaa8ceddc424fd958b5de57af30661a88 Mon Sep 17 00:00:00 2001
From: jinliyl <6469360+jinliyl@users.noreply.github.com>
Date: Tue, 30 Jun 2026 19:33:49 +0800
Subject: [PATCH] feat(README): Enhance documentation styling, content, and
layout (#303)
* style(docs): update visual styling and layout of documentation figures
- Change background color from #f7f8fb to #fffdf8
- Update fonts to include Comic Sans MS and Bradley Hand for titles
- Adjust stroke colors and widths for panels and chips
- Modify arrow and line styles with new colors and dimensions
- Update marker sizes and colors for better visual consistency
- Add rounded corners and join styles for smoother appearance
- Apply dashed borders to chip elements
- Refine color palette for text and UI elements
docs(readme): enhance documentation content and formatting
- Improve readability with better line breaks and spacing
- Update core ideas section with expanded descriptions
- Add news section announcing ACL 2026 paper acceptance
- Enhance agent integration section with detailed examples
- Revise automatic memory flow description for clarity
- Update workspace operation interface with improved categorization
- Standardize table formatting and column widths
- Clarify directory structure with better organization
- Add minimal CLI examples for easier integration
- rename session_id to session_event in directory structure
- add example files under digest directory structure
* style(docs): adjust image dimensions in README table
- Changed table cell widths from 45% to 50% for better alignment
- Reduced image width from 100% to 92% to prevent overflow
- Applied consistent sizing across all four documentation images
- Improved visual balance of the feature comparison table
* docs(readme): update documentation with design philosophy and operation interface
- Change background color in design-philosophy.svg from #f7f8fb to #ffffff
- Rename 'Workspace Operation Interface' to 'ReMe Operations' in README.md
- Update Chinese documentation with consistent 'ReMe Operations' title
- Adjust image widths from 100% to 92% in Chinese documentation tables
- Standardize summary titles in both English and Chinese documentation
* docs(readme): add demo videos for auto memory and auto dream features
- Added expandable details section with video demonstrations
- Included side-by-side comparison of Auto Memory and Auto Dream features
- Added video controls with muted loop and inline playback support
- Updated both English and Chinese README files with identical content
- Used table layout for proper alignment of demonstration videos
- Maintained consistent styling and formatting across both language versions
* docs(figure): remove qwenpaw auto memory video file
- Delete the video file qwenpaw-auto-memory.mp4 from docs/figure directory
- Remove all video content related to auto memory demonstration
- Clean up media assets that are no longer needed in documentation
* style(docs): replace details summary with centered paragraph in README files
- Replaced collapsible details/summary elements with centered paragraphs
- Removed unnecessary br tags in both English and Chinese documentation
- Maintained the same visual presentation while simplifying HTML structure
- Updated both README.md and README_ZH.md consistently
* style(docs): update design philosophy diagram styling
- Changed fonts to include Comic Sans MS and Bradley Hand for titles and labels
- Updated color scheme with darker text colors (#1f2430 instead of #172033)
- Increased stroke widths from 1.2 to 2.2 for panels and adjusted other stroke values
- Added rounded line caps and joins for smoother visual appearance
- Modified chip styling with dashed borders and updated stroke properties
- Adjusted arrow markers to smaller sizes with updated dimensions
- Refined color values for arrows, links and file lines for better contrast
- Applied consistent stroke properties across all visual elements
---
README.md | 191 +++++++++++++------
README_ZH.md | 129 +++++++++----
docs/figure/auto-dream-and-proactive.svg | 40 ++--
docs/figure/auto-index-and-memory-search.svg | 36 ++--
docs/figure/auto-memory-resource.svg | 36 ++--
docs/figure/design-philosophy.svg | 42 ++--
docs/figure/memory-as-file.svg | 38 ++--
docs/figure/qwenpaw-auto-dream.gif | Bin 0 -> 3395026 bytes
docs/figure/qwenpaw-auto-memory.gif | Bin 0 -> 2710489 bytes
9 files changed, 322 insertions(+), 190 deletions(-)
create mode 100644 docs/figure/qwenpaw-auto-dream.gif
create mode 100644 docs/figure/qwenpaw-auto-memory.gif
diff --git a/README.md b/README.md
index 667c2871..7ad6a72f 100644
--- a/README.md
+++ b/README.md
@@ -26,14 +26,19 @@
> [0.2.x](https://github.com/agentscope-ai/ReMe/tree/v0.2.0.6) ·
> [MemoryScope](https://github.com/agentscope-ai/ReMe/tree/memoryscope_branch)
-🧠 ReMe is a memory management toolkit for **AI agents**. It turns conversations and resources into readable, editable, and searchable file-based long-term memory.
+🧠 ReMe is a memory management toolkit for **AI agents**. It turns conversations and resources into readable, editable,
+and searchable file-based long-term memory.
## ✨ Core Ideas
-- **Memory as File**: Markdown files with frontmatter and wikilinks serve as memory nodes that both users and agents can read and write directly.
-- **Self-evolving knowledge base**: Auto Memory, Auto Resource, and Auto Dream progressively transform conversations and resources into long-term Markdown memories, while automatically building wikilink relationships.
-- **Progressive hybrid search**: ReMe combines wikilinks, BM25, and embeddings for hybrid retrieval across keyword matching, semantic recall, and relationship expansion.
-- **Agent-friendly integration**: SKILL.md + CLI integration makes it easy for different agents to read, write, maintain, and reuse memory.
+- **Memory as File**: Markdown files with frontmatter and wikilinks serve as memory nodes that both users and agents can
+ read and write directly.
+- **Self-evolving knowledge base**: Auto Memory, Auto Resource, and Auto Dream progressively transform conversations and
+ resources into long-term memories, while automatically building wikilink relationships.
+- **Progressive hybrid search**: ReMe combines wikilinks, BM25, and embeddings for hybrid retrieval across keyword
+ matching, semantic recall, and relationship expansion.
+- **Agent-friendly integration**: SKILL.md + CLI integration makes it easy for different agents to read, write,
+ maintain, and reuse memory.
@@ -44,12 +49,19 @@
-- **Personal assistants**: Provide long-term memory for agents such as [QwenPaw](https://github.com/agentscope-ai/QwenPaw).
+- **Personal assistants**: Provide long-term memory for agents such
+ as [QwenPaw](https://github.com/agentscope-ai/QwenPaw).
- **Coding assistants**: Preserve coding style, project background, and workflow experience across sessions.
-- **Knowledge QA**: Progressively transform resources and conversations into a searchable, traceable, and linked Markdown knowledge base.
-- **Task automation**: Reuse successful paths, lessons from failures, and operation procedures from past tasks.
+- **Knowledge QA**: Progressively transform resources and conversations into a searchable, traceable, and linked
+ Markdown knowledge base.
+- **Task automation**: Reuse successful paths, lessons from failures, and operating procedures from past tasks.
+
+## 📰 News
+
+- Our paper [Remember Me, Refine Me: A Dynamic Procedural Memory Framework for Experience-Driven Agent Evolution](https://aclanthology.org/2026.findings-acl.829/) has been accepted to Findings of ACL 2026.
+
## 🚀 Quick Start
### Installation
@@ -105,14 +117,45 @@ curl -s http://127.0.0.1:2333/version -H 'Content-Type: application/json' -d '{}
### Agent Integration
-ReMe runs as a service and exposes its memory through CLI / MCP jobs. Agents adopt it in whatever way fits them — embedding ReMe directly in their own code, or installing it as a plugin — and wire `auto_memory` / `proactive` into their lifecycle so conversations are consolidated into memory and surfaced at the right time. Indexing (`auto_index`) and resource processing (`auto_resource`) run automatically via file watching, and `auto_dream` consolidates daily memories into long-term digests on a schedule.
+ReMe runs as a service and exposes memory through CLI / MCP jobs. Agents can adopt it in whichever way fits them: deep
+SDK integration, plugin integration, or a lightweight Skill + CLI integration. They can wire `auto_memory` / `proactive`
+into their lifecycle so conversations are consolidated into memory and surfaced at the right time. Indexing (
+`auto_index`) and resource processing (`auto_resource`) run automatically through file watching, and `auto_dream`
+consolidates daily memories into long-term digests on a schedule.
+
+
QwenPaw Auto Memory / Auto Dream demo
+
+
+
+ | Auto Memory |
+ Auto Dream |
+
+
+
+
+ |
+
+
+ |
+
+
Integration status across agents:
-| Agent | Status | How it integrates |
-|------------------------------------------------------------|----------------|-----------------------------------------------------------------------------------------------------------|
-| [QwenPaw](https://github.com/agentscope-ai/QwenPaw) | ✅ Available | [Deep SDK integration](https://github.com/agentscope-ai/QwenPaw/blob/main/src/qwenpaw/agents/memory/reme_light_memory_manager.py) — embeds the ReMe app in-process and drives `search` / `auto_memory` / `auto_dream` jobs via `run_job`, reusing the agent's own model (no separate server). |
-| [Claude Code](plugins/reme) | ✅ Available | Plugin: HTTP MCP server for recall, a `reme-memory` skill, and a Stop hook that records each session via `auto_memory_cc`. |
+| Agent | Status | How it integrates |
+|-----------------------------------------------------|-------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| [QwenPaw](https://github.com/agentscope-ai/QwenPaw) | ✅ Available | [Deep SDK integration](https://github.com/agentscope-ai/QwenPaw/blob/main/src/qwenpaw/agents/memory/reme_light_memory_manager.py) — embeds the ReMe app in-process, drives `search` / `auto_memory` / `auto_dream` jobs via `run_job`, and reuses the agent's own model (no separate server). |
+| [Claude Code](plugins/reme) | ✅ Available | Plugin: HTTP MCP server for recall, a `reme-memory` skill, and a Stop hook that records each session via `auto_memory_cc`. |
+| Other agents | ✅ Available | [Skill + CLI](skills/reme_memory/SKILL.md): install or copy the `reme_memory` skill, then call the `reme` CLI directly for health checks, search, read, write, and memory jobs. |
+
+Minimal CLI examples for Skill + CLI integration:
+
+```bash
+reme version
+reme health_check
+reme search query="" limit=5
+reme auto_memory session_id="" messages='[{"role":"user","content":"..."},{"role":"assistant","content":"..."}]'
+```
For more details, see the [Quick Start](docs/zh/quick_start.md).
@@ -120,7 +163,8 @@ For more details, see the [Quick Start](docs/zh/quick_start.md).
> Memory as File, File as Memory.
-ReMe treats **memory as files**, progressively processing raw conversations and external resources from `session/` and `resource/` into `daily/`, then consolidating them into reusable long-term knowledge nodes under `digest/`.
+ReMe treats **memory as files**, progressively processing raw conversations and external resources from `session/` and
+`resource/` into `daily/`, then consolidating them into reusable long-term knowledge nodes under `digest/`.
### Directory Structure
@@ -138,13 +182,16 @@ ReMe treats **memory as files**, progressively processing raw conversations and
├── daily/ # Lightly processed memory: daily facts, conversation summaries, resource readings
│ ├── YYYY-MM-DD.md
│ └── YYYY-MM-DD/
-│ ├── .md
+│ ├── .md
│ ├── .md
│ └── interests.yaml
└── digest/ # Long-term memory: personal facts, procedural experience, knowledge nodes
├── personal/
+ │ └── {topic/event}.md
├── procedure/
+ │ └── {topic/event}.md
└── wiki/
+ └── {topic/event}.md
```
@@ -153,84 +200,96 @@ ReMe treats **memory as files**, progressively processing raw conversations and
### Automatic Memory Flow
-ReMe's automatic memory flow gradually turns raw conversations and resources into searchable, traceable, and reusable file-based memory. During normal operation, background watchers maintain indexes and process resources, agent hooks trigger conversation memory, and long-term consolidation plus proactive reminders run through scheduled tasks or on-demand calls.
+ReMe's automatic memory flow gradually turns raw conversations and resources into searchable, traceable, and reusable
+file-based memory. During normal operation, background watchers maintain indexes and process resources, agent hooks
+trigger conversation memory, and long-term consolidation plus proactive reminders run through scheduled tasks or
+on-demand calls.
Automatic Memory Capabilities
-| Capability | How it runs | Purpose | Main parameters |
-|-----------------------------------------------|--------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------|
-| [`auto_index`](docs/zh/memory_search.md) | Background maintenance via `index_update_loop` | Scans on startup and continuously watches Markdown/JSONL changes in `daily/`, `digest/`, and `resource/`; updates chunk, BM25, embedding, and wikilink graph indexes. | Config: `watch_dirs`, `watch_suffixes` |
-| [`auto_memory`](docs/zh/auto_memory.md) | Agent after-reply hook; also callable on demand | Saves raw conversation text and turns long-term valuable information into `daily//.md` memory cards. | Required: `messages`; optional: `session_id`, `memory_hint` |
-| [`auto_resource`](docs/zh/auto_resource.md) | Automatically triggered by resource watching; also callable on demand | Reads resource changes under `resource//` and creates or updates LLM-named daily resource cards linked by `source_resource`. | Required: `changes`; each item may include `path`, `file_path`, `change` |
-| [`auto_dream`](docs/zh/auto_dream.md) | Scheduled by `dream_cron`; also callable on demand | Scans daily input for a given date, extracts long-term memory units, integrates them into `digest/`, and writes `daily//interests.yaml`. | `date`, `hint`, `topic_count`, `topic_diversity_days` |
-| [`proactive`](docs/zh/proactive.md) | Read on demand before agent proactive reminders | Reads `interests.yaml` generated by `auto_dream` and exposes topics worth attention to the upper-level agent; the caller decides whether to remind the user. | `date`, `include_content` |
+| Capability | How it runs | Purpose | Main parameters |
+|---------------------------------------------|-----------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------|
+| [`auto_index`](docs/zh/memory_search.md) | Background maintenance via `index_update_loop` | Scans on startup and continuously watches Markdown/JSONL changes in `daily/`, `digest/`, and `resource/`; updates chunk, BM25, embedding, and wikilink graph indexes. | Config: `watch_dirs`, `watch_suffixes` |
+| [`auto_memory`](docs/zh/auto_memory.md) | Agent after-reply hook; also callable on demand | Saves raw conversation text and turns long-term valuable information into `daily//.md` memory cards. | Required: `messages`; optional: `session_id`, `memory_hint` |
+| [`auto_resource`](docs/zh/auto_resource.md) | Automatically triggered by resource watching; also callable on demand | Reads resource changes under `resource//` and creates or updates LLM-named daily resource cards linked by `source_resource`. | Required: `changes`; each item may include `path`, `file_path`, `change` |
+| [`auto_dream`](docs/zh/auto_dream.md) | Scheduled by `dream_cron`; also callable on demand | Scans daily input for a given date, extracts long-term memory units, integrates them into `digest/`, and writes `daily//interests.yaml`. | `date`, `hint`, `topic_count`, `topic_diversity_days` |
+| [`proactive`](docs/zh/proactive.md) | Read on demand before agent proactive reminders | Reads `interests.yaml` generated by `auto_dream` and exposes topics worth attention to the upper-level agent; the caller decides whether to remind the user. | `date`, `include_content` |
-### Workspace Operation Interface
+### ReMe Operations
-ReMe operates the workspace through a unified CLI / Service Job interface. Agents usually only need retrieval, read, write, edit, and automatic memory commands. Lower-level indexing, frontmatter, and file operation commands are mainly for maintenance, debugging, or advanced integration.
+ReMe operates the workspace through a unified CLI / Service Job interface. Agents usually only need retrieval, reading,
+writing, editing, and automatic memory commands. Lower-level indexing, frontmatter, and file operation commands are
+mainly for maintenance, debugging, or advanced integration.
-Workspace Operation Interface
+ReMe Operations
-| Category | name | Description | Parameters |
-|----------------|--------------------------------------|-----------------------------------------------------------------------------|--------------------------------------------------------|
-| System status | `version` | Returns the ReMe package version. | None |
-| System status | `health_check` | Returns a health-check summary for ReMe components. | None |
-| System status | `help` | Lists registered jobs and their metadata. | None |
-| Retrieval/read | [`search`](docs/zh/memory_search.md) | Performs hybrid retrieval in the workspace with vector recall, BM25, and RRF fusion. | Required: `query`; optional: `limit`, `min_score` |
-| Retrieval/read | `node_search` | Recalls similar digest nodes by candidate abstraction name and description, mainly for `auto_dream` deduplication or association. | Required: `query`; optional: `limit` |
-| Retrieval/read | `traverse` | Traverses the wikilink graph from a specified path. | Required: `path`; optional: `depth`, `direction` |
-| Retrieval/read | `read` | Reads a Markdown file under the workspace. | Required: `path`; optional: `start_line`, `end_line` |
-| Retrieval/read | `read_image` | Reads an image file under the workspace and returns base64. | Required: `path` |
-| Index | `reindex` | Clears file-store indexes and rebuilds indexes from existing files. | Config: `watch_dirs`, `watch_suffixes` |
-| Daily | `daily_list` | Lists notes for a day. | `date` |
-| Daily | `daily_reindex` | Rebuilds the day-index page `daily/.md`. | `date` |
-| Metadata | `frontmatter_read` | Reads file frontmatter. | Required: `path` |
-| Metadata | `frontmatter_update` | Merges key-values into file frontmatter. | Required: `path`, `metadata` |
-| Metadata | `frontmatter_delete` | Deletes specified keys from file frontmatter. | Required: `path`, `keys` |
-| File operation | `stat` | Gets workspace path status, including size, mtime, existence, and file/directory type. | Required: `path` |
-| File operation | `list` | Lists files under a workspace path. | `path`, `recursive`, `limit` |
-| File operation | `write` | Creates or overwrites a Markdown file and writes name/description frontmatter. | Required: `path`, `name`, `description`, `content`; optional: `metadata` |
-| File operation | `edit` | Performs full-text find-and-replace on a Markdown file. | Required: `path`, `old`, `new` |
-| File operation | `move` | Moves or renames a workspace file and rewrites inbound wikilinks by default. | Required: `src_path`, `dst_path`; optional: `overwrite`, `retarget` |
-| File operation | `delete` | Deletes a workspace file or folder and returns inbound wikilinks that still exist. | Required: `path` |
+| Category | Command | Description | Parameters |
+|----------------|-------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------|
+| System status | `reme version` | Returns the ReMe package version. | None |
+| System status | `reme health_check` | Returns a health-check summary for ReMe components. | None |
+| System status | `reme help` | Lists registered jobs and their metadata. | None |
+| Retrieval/read | [`reme search`](docs/zh/memory_search.md) | Performs hybrid retrieval in the workspace with vector recall, BM25, and RRF fusion. | Required: `query`; optional: `limit`, `min_score` |
+| Retrieval/read | `reme node_search` | Recalls similar digest nodes by candidate abstraction name and description, mainly for `auto_dream` deduplication or association. | Required: `query`; optional: `limit` |
+| Retrieval/read | `reme traverse` | Traverses the wikilink graph from a specified path. | Required: `path`; optional: `depth`, `direction` |
+| Retrieval/read | `reme read` | Reads a Markdown file under the workspace. | Required: `path`; optional: `start_line`, `end_line` |
+| Retrieval/read | `reme read_image` | Reads an image file under the workspace and returns base64. | Required: `path` |
+| Index | `reme reindex` | Clears file-store indexes and rebuilds indexes from existing files. | Config: `watch_dirs`, `watch_suffixes` |
+| Daily | `reme daily_list` | Lists notes for a day. | `date` |
+| Daily | `reme daily_reindex` | Rebuilds the day-index page `daily/.md`. | `date` |
+| Metadata | `reme frontmatter_read` | Reads file frontmatter. | Required: `path` |
+| Metadata | `reme frontmatter_update` | Merges key-values into file frontmatter. | Required: `path`, `metadata` |
+| Metadata | `reme frontmatter_delete` | Deletes specified keys from file frontmatter. | Required: `path`, `keys` |
+| File operation | `reme stat` | Gets workspace path status, including size, mtime, existence, and file/directory type. | Required: `path` |
+| File operation | `reme list` | Lists files under a workspace path. | `path`, `recursive`, `limit` |
+| File operation | `reme write` | Creates or overwrites a Markdown file and writes name/description frontmatter. | Required: `path`, `name`, `description`, `content`; optional: `metadata` |
+| File operation | `reme edit` | Performs full-text find-and-replace on a Markdown file. | Required: `path`, `old`, `new` |
+| File operation | `reme move` | Moves or renames a workspace file and rewrites inbound wikilinks by default. | Required: `src_path`, `dst_path`; optional: `overwrite`, `retarget` |
+| File operation | `reme delete` | Deletes a workspace file or folder and returns inbound wikilinks that still exist. | Required: `path` |
## 🤝 Community and Support
-- **Issues and requests**: Check [Open Issues](https://github.com/agentscope-ai/ReMe/issues) first. If there is no related discussion, open a new issue with background, expected behavior, and impact scope.
-- **Code contributions**: Before making changes, read the [contribution guide](docs/zh/contributing.md) and [code framework](docs/zh/framework.md), and follow the CLI / Service / Application / Job / Step / Component layering.
-- **Documentation contributions**: For user-visible installation, configuration, invocation, or behavior changes, update `docs/zh/` or `README.md` accordingly.
-- **Commit convention**: Conventional Commits are recommended, for example `feat(search): add link expansion option` or `docs(zh): update quick start`.
-- **Pre-submit checks**: Before submitting a PR, try to run `pre-commit run --all-files` and `pytest`. If tests depending on LLMs, embeddings, or external services cannot run, explain that in the PR.
-- **Get help**: Use [GitHub Issues](https://github.com/agentscope-ai/ReMe/issues) for bugs and feature requests. Project documentation is available at [https://reme.agentscope.io/](https://reme.agentscope.io/).
+- **Issues and requests**: Check [Open Issues](https://github.com/agentscope-ai/ReMe/issues) first. If there is no
+ related discussion, open a new issue with background, expected behavior, and impact scope.
+- **Code contributions**: Before making changes, read the [contribution guide](docs/zh/contributing.md)
+ and [code framework](docs/zh/framework.md), and follow the CLI / Service / Application / Job / Step / Component
+ layering.
+- **Documentation contributions**: For user-visible installation, configuration, invocation, or behavior changes, update
+ `docs/zh/` or `README.md` accordingly.
+- **Commit convention**: Conventional Commits are recommended, for example `feat(search): add link expansion option` or
+ `docs(zh): update quick start`.
+- **Pre-submit checks**: Before submitting a PR, try to run `pre-commit run --all-files` and `pytest`. If tests that
+ depend on LLMs, embeddings, or external services cannot run, explain that in the PR.
+- **Get help**: Use [GitHub Issues](https://github.com/agentscope-ai/ReMe/issues) for bugs and feature requests. Project
+ documentation is available at [https://reme.agentscope.io/](https://reme.agentscope.io/).
### Contributors
@@ -249,6 +308,22 @@ Thanks to everyone who has contributed to ReMe:
url = {https://reme.agentscope.io},
year = {2026}
}
+
+@inproceedings{cao-etal-2026-remember,
+ title = "Remember Me, Refine Me: A Dynamic Procedural Memory Framework for Experience-Driven Agent Evolution",
+ author = "Cao, Zouying and
+ Deng, Jiaji and
+ Yu, Li and
+ Zhou, Weikang and
+ Liu, Zhaoyang and
+ Ding, Bolin and
+ Zhao, Hai",
+ booktitle = "Findings of the {A}ssociation for {C}omputational {L}inguistics: {ACL} 2026",
+ year = "2026",
+ publisher = "Association for Computational Linguistics",
+ url = "https://aclanthology.org/2026.findings-acl.829/",
+ pages = "16803--16822"
+}
```
## ⚖️ License
diff --git a/README_ZH.md b/README_ZH.md
index 698fe7d3..79b20f99 100644
--- a/README_ZH.md
+++ b/README_ZH.md
@@ -31,7 +31,7 @@
## ✨ 核心创新
- **Memory as File**:以带 frontmatter 和 wikilink 的 Markdown 作为记忆节点,让用户和 Agent 都能直接读写。
-- **自进化知识库**:通过 Auto Memory、Auto Resource 和 Auto Dream,把对话与资料逐步加工为长期 Markdown 记忆,并自动建立 wikilink 关系。
+- **自进化知识库**:通过 Auto Memory、Auto Resource 和 Auto Dream,把对话与资料逐步加工为长期记忆,并自动建立 wikilink 关系。
- **渐进式混合搜索**:融合 wikilink、BM25 和 embedding,支持从关键词匹配到语义召回、关系扩展的混合检索。
- **Agent 友好集成**:通过 SKILL.md + CLI 接入,方便不同 Agent 读写、维护与复用记忆。
@@ -43,12 +43,21 @@
适用场景
+
- **个人助理**:为 [QwenPaw](https://github.com/agentscope-ai/QwenPaw) 等 Agent 提供长期记忆。
- **编程助手**:沉淀代码风格、项目背景和流程经验,跨会话保持一致。
- **知识问答**:把资料和对话渐进加工成可检索、可追溯、可链接的 Markdown 知识库。
- **任务自动化**:复用历史任务中的成功路径、失败教训和操作流程。
+
+## 📰 新闻
+
+-
+
+我们的论文 [Remember Me, Refine Me: A Dynamic Procedural Memory Framework for Experience-Driven Agent Evolution](https://aclanthology.org/2026.findings-acl.829/)
+已被 Findings of ACL 2026 接收。
+
## 🚀 快速开始
### 安装
@@ -104,14 +113,43 @@ curl -s http://127.0.0.1:2333/version -H 'Content-Type: application/json' -d '{}
### 快速接入
-ReMe 以服务形式运行,通过 CLI / MCP job 对外暴露记忆。各 Agent 按各自合适的方式接入——可以把 ReMe 直接嵌进自己的代码,也可以作为 plugin 安装——并把 `auto_memory` / `proactive` 接入自身生命周期,让对话沉淀为记忆并在合适时机浮现。索引(`auto_index`)与资源加工(`auto_resource`)由文件监控自动触发,`auto_dream` 则按计划把 daily 记忆整理为可长期复用的 digest。
+ReMe 以服务形式运行,通过 CLI / MCP job 对外暴露记忆。各 Agent 可以按适合自身的方式接入:SDK 深度集成、plugin 集成,或轻量的
+Skill + CLI 集成。它们可以把 `auto_memory` / `proactive` 接入自身生命周期,让对话沉淀为记忆并在合适时机浮现。索引(
+`auto_index`)与资源加工(`auto_resource`)由文件监控自动触发,`auto_dream` 则按计划把 daily 记忆整理为可长期复用的 digest。
-各 Agent 接入状态:
+QwenPaw Auto Memory / Auto Dream 演示
-| Agent | 状态 | 接入方式 |
-|------------------------------------------------------|-------------|----------------------------------------------------------------------------------------------|
-| [QwenPaw](https://github.com/agentscope-ai/QwenPaw) | ✅ 已支持 | [SDK 深度集成](https://github.com/agentscope-ai/QwenPaw/blob/main/src/qwenpaw/agents/memory/reme_light_memory_manager.py)——进程内嵌入 ReMe 应用,通过 `run_job` 驱动 `search` / `auto_memory` / `auto_dream`,并复用 Agent 自身模型(无需独立 server)。 |
-| [Claude Code](plugins/reme) | ✅ 已支持 | Plugin:HTTP MCP server 做召回、`reme-memory` skill,外加在会话结束时经 `auto_memory_cc` 录入的 Stop hook。 |
+
+
+ | Auto Memory |
+ Auto Dream |
+
+
+
+
+ |
+
+
+ |
+
+
+
+各 Agent 接入状态:
+
+| Agent | 状态 | 接入方式 |
+|-----------------------------------------------------|-------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| [QwenPaw](https://github.com/agentscope-ai/QwenPaw) | ✅ 已支持 | [SDK 深度集成](https://github.com/agentscope-ai/QwenPaw/blob/main/src/qwenpaw/agents/memory/reme_light_memory_manager.py):进程内嵌入 ReMe 应用,通过 `run_job` 驱动 `search` / `auto_memory` / `auto_dream`,并复用 Agent 自身模型(无需独立 server)。 |
+| [Claude Code](plugins/reme) | ✅ 已支持 | Plugin:通过 HTTP MCP server 做召回,提供 `reme-memory` skill,并用 Stop hook 在会话结束时经 `auto_memory_cc` 录入记忆。 |
+| 其他 Agent | ✅ 已支持 | [Skill + CLI](skills/reme_memory/SKILL.md):安装或复制 `reme_memory` skill 后,直接调用 `reme` CLI 完成健康检查、搜索、读取、写入和记忆任务。 |
+
+Skill + CLI 集成的最小命令示例:
+
+```bash
+reme version
+reme health_check
+reme search query="" limit=5
+reme auto_memory session_id="" messages='[{"role":"user","content":"..."},{"role":"assistant","content":"..."}]'
+```
更多细节见 [快速开始](docs/zh/quick_start.md)。
@@ -138,13 +176,16 @@ ReMe 将**记忆视为文件**,让原始对话和外部资料从 `session/`、
├── daily/ # 浅加工记忆:当天事实、对话摘要、资源解读
│ ├── YYYY-MM-DD.md
│ └── YYYY-MM-DD/
-│ ├── .md
+│ ├── .md
│ ├── .md
│ └── interests.yaml
└── digest/ # 长期记忆:个人事实、流程经验、知识节点
├── personal/
+ │ └── {topic/event}.md
├── procedure/
+ │ └── {topic/event}.md
└── wiki/
+ └── {topic/event}.md
```
@@ -174,54 +215,54 @@ hook 负责触发对话记忆,长期整理与主动提醒则通过定时任务
-### Workspace 操作接口
+### ReMe Operations
ReMe 通过统一的 CLI / Service Job 接口操作 workspace。Agent 通常只需要使用检索、读取、写入、编辑和自动记忆相关命令;更底层的索引、frontmatter
和文件操作接口主要用于维护、调试或高级集成。
-查看 Workspace 操作接口表
+查看 ReMe Operations 表
-| 分类 | name | 描述 | 参数 |
-|-------|--------------------------------------|---------------------------------------------------------------------------|--------------------------------------------------------|
-| 系统状态 | `version` | 返回 ReMe 包版本。 | 无 |
-| 系统状态 | `health_check` | 返回 ReMe 组件健康检查摘要。 | 无 |
-| 系统状态 | `help` | 列出已注册 jobs 及其 metadata。 | 无 |
-| 检索读取 | [`search`](docs/zh/memory_search.md) | 在 workspace 中执行混合检索,结合向量召回、BM25 和 RRF 融合。 | 必填:`query`;可选:`limit`、`min_score` |
-| 检索读取 | `node_search` | 根据候选抽象的名称与描述召回相似 digest 节点,主要用于 `auto_dream` 去重或关联。 | 必填:`query`;可选:`limit` |
-| 检索读取 | `traverse` | 从指定路径出发遍历 wikilink 图谱。 | 必填:`path`;可选:`depth`、`direction` |
-| 检索读取 | `read` | 读取 workspace 下的 Markdown 文件。 | 必填:`path`;可选:`start_line`、`end_line` |
-| 检索读取 | `read_image` | 读取 workspace 下的图片文件并返回 base64。 | 必填:`path` |
-| 索引维护 | `reindex` | 清空文件存储索引,并基于现有文件重建索引。 | 配置项:`watch_dirs`、`watch_suffixes` |
-| Daily | `daily_list` | 列出某一天的 notes。 | `date` |
-| Daily | `daily_reindex` | 重建 day-index 页面 `daily/.md`。 | `date` |
-| 元数据 | `frontmatter_read` | 读取文件 frontmatter。 | 必填:`path` |
-| 元数据 | `frontmatter_update` | 合并 key-values 到文件 frontmatter。 | 必填:`path`、`metadata` |
-| 元数据 | `frontmatter_delete` | 删除文件 frontmatter 中的指定 keys。 | 必填:`path`、`keys` |
-| 文件操作 | `stat` | 获取 workspace 路径状态,包括大小、mtime、是否存在、是否目录或文件。 | 必填:`path` |
-| 文件操作 | `list` | 列出 workspace 路径下的文件。 | `path`、`recursive`、`limit` |
-| 文件操作 | `write` | 创建或覆盖 Markdown 文件,并写入 name/description frontmatter。 | 必填:`path`、`name`、`description`、`content`;可选:`metadata` |
-| 文件操作 | `edit` | 对 Markdown 文件执行全文 find-and-replace。 | 必填:`path`、`old`、`new` |
-| 文件操作 | `move` | 移动或重命名 workspace 文件,并默认重写入站 wikilink。 | 必填:`src_path`、`dst_path`;可选:`overwrite`、`retarget` |
-| 文件操作 | `delete` | 删除 workspace 文件或文件夹,并返回仍存在的入站 wikilink。 | 必填:`path` |
+| 分类 | 命令 | 描述 | 参数 |
+|-------|-------------------------------------------|-----------------------------------------------------|--------------------------------------------------------|
+| 系统状态 | `reme version` | 返回 ReMe 包版本。 | 无 |
+| 系统状态 | `reme health_check` | 返回 ReMe 组件健康检查摘要。 | 无 |
+| 系统状态 | `reme help` | 列出已注册 jobs 及其 metadata。 | 无 |
+| 检索读取 | [`reme search`](docs/zh/memory_search.md) | 在 workspace 中执行混合检索,结合向量召回、BM25 和 RRF 融合。 | 必填:`query`;可选:`limit`、`min_score` |
+| 检索读取 | `reme node_search` | 根据候选抽象的名称与描述召回相似 digest 节点,主要用于 `auto_dream` 去重或关联。 | 必填:`query`;可选:`limit` |
+| 检索读取 | `reme traverse` | 从指定路径出发遍历 wikilink 图谱。 | 必填:`path`;可选:`depth`、`direction` |
+| 检索读取 | `reme read` | 读取 workspace 下的 Markdown 文件。 | 必填:`path`;可选:`start_line`、`end_line` |
+| 检索读取 | `reme read_image` | 读取 workspace 下的图片文件并返回 base64。 | 必填:`path` |
+| 索引维护 | `reme reindex` | 清空文件存储索引,并基于现有文件重建索引。 | 配置项:`watch_dirs`、`watch_suffixes` |
+| Daily | `reme daily_list` | 列出某一天的 notes。 | `date` |
+| Daily | `reme daily_reindex` | 重建 day-index 页面 `daily/.md`。 | `date` |
+| 元数据 | `reme frontmatter_read` | 读取文件 frontmatter。 | 必填:`path` |
+| 元数据 | `reme frontmatter_update` | 合并 key-values 到文件 frontmatter。 | 必填:`path`、`metadata` |
+| 元数据 | `reme frontmatter_delete` | 删除文件 frontmatter 中的指定 keys。 | 必填:`path`、`keys` |
+| 文件操作 | `reme stat` | 获取 workspace 路径状态,包括大小、mtime、是否存在、是否目录或文件。 | 必填:`path` |
+| 文件操作 | `reme list` | 列出 workspace 路径下的文件。 | `path`、`recursive`、`limit` |
+| 文件操作 | `reme write` | 创建或覆盖 Markdown 文件,并写入 name/description frontmatter。 | 必填:`path`、`name`、`description`、`content`;可选:`metadata` |
+| 文件操作 | `reme edit` | 对 Markdown 文件执行全文 find-and-replace。 | 必填:`path`、`old`、`new` |
+| 文件操作 | `reme move` | 移动或重命名 workspace 文件,并默认重写入站 wikilink。 | 必填:`src_path`、`dst_path`;可选:`overwrite`、`retarget` |
+| 文件操作 | `reme delete` | 删除 workspace 文件或文件夹,并返回仍存在的入站 wikilink。 | 必填:`path` |
@@ -256,6 +297,22 @@ ReMe 通过统一的 CLI / Service Job 接口操作 workspace。Agent 通常只
url = {https://reme.agentscope.io},
year = {2026}
}
+
+@inproceedings{cao-etal-2026-remember,
+ title = "Remember Me, Refine Me: A Dynamic Procedural Memory Framework for Experience-Driven Agent Evolution",
+ author = "Cao, Zouying and
+ Deng, Jiaji and
+ Yu, Li and
+ Zhou, Weikang and
+ Liu, Zhaoyang and
+ Ding, Bolin and
+ Zhao, Hai",
+ booktitle = "Findings of the {A}ssociation for {C}omputational {L}inguistics: {ACL} 2026",
+ year = "2026",
+ publisher = "Association for Computational Linguistics",
+ url = "https://aclanthology.org/2026.findings-acl.829/",
+ pages = "16803--16822"
+}
```
## ⚖️ 许可证
diff --git a/docs/figure/auto-dream-and-proactive.svg b/docs/figure/auto-dream-and-proactive.svg
index 4f134826..0206f496 100644
--- a/docs/figure/auto-dream-and-proactive.svg
+++ b/docs/figure/auto-dream-and-proactive.svg
@@ -3,27 +3,27 @@
A left-to-right flow from changed daily notes to digest integration, interest topic writing, catalog checkpointing, and proactive reads.
-
-
+
+
-
-
+
+
@@ -121,8 +121,8 @@
Proactive material
daily/<date>/interests.yaml
- Boundary
- Read only; caller decides.
+ Boundary
+ Read only; caller decides
proactive reads interests.yaml after auto_dream writes it
diff --git a/docs/figure/auto-index-and-memory-search.svg b/docs/figure/auto-index-and-memory-search.svg
index d03ed607..ae44f889 100644
--- a/docs/figure/auto-index-and-memory-search.svg
+++ b/docs/figure/auto-index-and-memory-search.svg
@@ -3,27 +3,27 @@
A concise left-to-right flow from automatic workspace indexing to memory search and progressive link expansion.
-
-
+
+
-
-
+
+
diff --git a/docs/figure/auto-memory-resource.svg b/docs/figure/auto-memory-resource.svg
index 86c2295a..4fa22dc6 100644
--- a/docs/figure/auto-memory-resource.svg
+++ b/docs/figure/auto-memory-resource.svg
@@ -3,27 +3,27 @@
A concise flow where auto memory and auto resource both create daily cards, which are indexed in the daily memory layer and then used by dream and search.
-
-
+
+
-
-
+
+
diff --git a/docs/figure/design-philosophy.svg b/docs/figure/design-philosophy.svg
index e2c09cad..23692903 100644
--- a/docs/figure/design-philosophy.svg
+++ b/docs/figure/design-philosophy.svg
@@ -3,29 +3,29 @@
A simple diagram showing ReMe's design philosophy: file-native memory, progressive abstraction, and explicit relationship graph for agents.
-
-
+
+
-
-
+
+
diff --git a/docs/figure/memory-as-file.svg b/docs/figure/memory-as-file.svg
index 181ec89d..1223dab1 100644
--- a/docs/figure/memory-as-file.svg
+++ b/docs/figure/memory-as-file.svg
@@ -3,28 +3,28 @@
A diagram showing ReMe workspace files as both a human readable memory interface and an agent operable memory graph, flowing from raw input to daily notes, digest nodes, and metadata indexes.
-
-
+
+
-
-
+
+
diff --git a/docs/figure/qwenpaw-auto-dream.gif b/docs/figure/qwenpaw-auto-dream.gif
new file mode 100644
index 0000000000000000000000000000000000000000..79cd9b7a0ac2296a60fcb87f0daf53507fc1468c
GIT binary patch
literal 3395026
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