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
191
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.
|
||||
|
||||
<p align="center">
|
||||
<img src="docs/figure/design-philosophy.svg" alt="ReMe Design Philosophy" width="92%">
|
||||
|
|
@ -44,12 +49,19 @@
|
|||
|
||||
<br>
|
||||
|
||||
- **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.
|
||||
|
||||
</details>
|
||||
|
||||
## 📰 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.
|
||||
|
||||
<p align="center"><b>QwenPaw Auto Memory / Auto Dream demo</b></p>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%" align="center"><b>Auto Memory</b></td>
|
||||
<td width="50%" align="center"><b>Auto Dream</b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="50%">
|
||||
<img src="docs/figure/qwenpaw-auto-memory.gif" alt="QwenPaw Auto Memory demo" width="100%">
|
||||
</td>
|
||||
<td width="50%">
|
||||
<img src="docs/figure/qwenpaw-auto-dream.gif" alt="QwenPaw Auto Dream demo" width="100%">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
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="<question or keywords>" limit=5
|
||||
reme auto_memory session_id="<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/
|
||||
│ ├── <session_id>.md
|
||||
│ ├── <session_event>.md
|
||||
│ ├── <resource_stem>.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
|
||||
```
|
||||
|
||||
<p align="center">
|
||||
|
|
@ -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.
|
||||
|
||||
<details>
|
||||
<summary><b>Automatic Memory Capabilities</b></summary>
|
||||
|
||||
<br>
|
||||
|
||||
| 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/<date>/<session_id>.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/<date>/` 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/<date>/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/<date>/<session_id>.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/<date>/` 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/<date>/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` |
|
||||
|
||||
</details>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td align="center" width="50%">
|
||||
<img src="docs/figure/memory-as-file.svg" alt="Memory as File" width="100%">
|
||||
<img src="docs/figure/memory-as-file.svg" alt="Memory as File" width="92%">
|
||||
</td>
|
||||
<td align="center" width="50%">
|
||||
<img src="docs/figure/auto-memory-resource.svg" alt="Auto Memory and Resource" width="100%">
|
||||
<img src="docs/figure/auto-memory-resource.svg" alt="Auto Memory and Resource" width="92%">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" width="50%">
|
||||
<img src="docs/figure/auto-dream-and-proactive.svg" alt="Auto Dream and Proactive" width="100%">
|
||||
<img src="docs/figure/auto-dream-and-proactive.svg" alt="Auto Dream and Proactive" width="92%">
|
||||
</td>
|
||||
<td align="center" width="50%">
|
||||
<img src="docs/figure/auto-index-and-memory-search.svg" alt="Auto Index and Memory Search" width="100%">
|
||||
<img src="docs/figure/auto-index-and-memory-search.svg" alt="Auto Index and Memory Search" width="92%">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### 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.
|
||||
|
||||
<details>
|
||||
<summary><b>Workspace Operation Interface</b></summary>
|
||||
<summary><b>ReMe Operations</b></summary>
|
||||
|
||||
<br>
|
||||
|
||||
| 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/<date>.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/<date>.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` |
|
||||
|
||||
</details>
|
||||
|
||||
## 🤝 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
|
||||
|
|
|
|||
129
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 @@
|
|||
<summary><b>适用场景</b></summary>
|
||||
|
||||
<br>
|
||||
|
||||
- **个人助理**:为 [QwenPaw](https://github.com/agentscope-ai/QwenPaw) 等 Agent 提供长期记忆。
|
||||
- **编程助手**:沉淀代码风格、项目背景和流程经验,跨会话保持一致。
|
||||
- **知识问答**:把资料和对话渐进加工成可检索、可追溯、可链接的 Markdown 知识库。
|
||||
- **任务自动化**:复用历史任务中的成功路径、失败教训和操作流程。
|
||||
|
||||
</details>
|
||||
|
||||
## 📰 新闻
|
||||
|
||||
-
|
||||
|
||||
我们的论文 [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 接入状态:
|
||||
<p align="center"><b>QwenPaw Auto Memory / Auto Dream 演示</b></p>
|
||||
|
||||
| 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。 |
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%" align="center"><b>Auto Memory</b></td>
|
||||
<td width="50%" align="center"><b>Auto Dream</b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="50%">
|
||||
<img src="docs/figure/qwenpaw-auto-memory.gif" alt="QwenPaw Auto Memory 演示" width="100%">
|
||||
</td>
|
||||
<td width="50%">
|
||||
<img src="docs/figure/qwenpaw-auto-dream.gif" alt="QwenPaw Auto Dream 演示" width="100%">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
各 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="<question or keywords>" limit=5
|
||||
reme auto_memory session_id="<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/
|
||||
│ ├── <session_id>.md
|
||||
│ ├── <session_event>.md
|
||||
│ ├── <resource_stem>.md
|
||||
│ └── interests.yaml
|
||||
└── digest/ # 长期记忆:个人事实、流程经验、知识节点
|
||||
├── personal/
|
||||
│ └── {topic/event}.md
|
||||
├── procedure/
|
||||
│ └── {topic/event}.md
|
||||
└── wiki/
|
||||
└── {topic/event}.md
|
||||
```
|
||||
|
||||
<p align="center">
|
||||
|
|
@ -174,54 +215,54 @@ hook 负责触发对话记忆,长期整理与主动提醒则通过定时任务
|
|||
<table>
|
||||
<tr>
|
||||
<td align="center" width="50%">
|
||||
<img src="docs/figure/memory-as-file.svg" alt="Memory as File" width="100%">
|
||||
<img src="docs/figure/memory-as-file.svg" alt="Memory as File" width="92%">
|
||||
</td>
|
||||
<td align="center" width="50%">
|
||||
<img src="docs/figure/auto-memory-resource.svg" alt="Auto Memory and Resource" width="100%">
|
||||
<img src="docs/figure/auto-memory-resource.svg" alt="Auto Memory and Resource" width="92%">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" width="50%">
|
||||
<img src="docs/figure/auto-dream-and-proactive.svg" alt="Auto Dream and Proactive" width="100%">
|
||||
<img src="docs/figure/auto-dream-and-proactive.svg" alt="Auto Dream and Proactive" width="92%">
|
||||
</td>
|
||||
<td align="center" width="50%">
|
||||
<img src="docs/figure/auto-index-and-memory-search.svg" alt="Auto Index and Memory Search" width="100%">
|
||||
<img src="docs/figure/auto-index-and-memory-search.svg" alt="Auto Index and Memory Search" width="92%">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### Workspace 操作接口
|
||||
### ReMe Operations
|
||||
|
||||
ReMe 通过统一的 CLI / Service Job 接口操作 workspace。Agent 通常只需要使用检索、读取、写入、编辑和自动记忆相关命令;更底层的索引、frontmatter
|
||||
和文件操作接口主要用于维护、调试或高级集成。
|
||||
|
||||
<details>
|
||||
<summary><b>查看 Workspace 操作接口表</b></summary>
|
||||
<summary><b>查看 ReMe Operations 表</b></summary>
|
||||
|
||||
<br>
|
||||
|
||||
| 分类 | 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/<date>.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/<date>.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` |
|
||||
|
||||
</details>
|
||||
|
||||
|
|
@ -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"
|
||||
}
|
||||
```
|
||||
|
||||
## ⚖️ 许可证
|
||||
|
|
|
|||
|
|
@ -3,27 +3,27 @@
|
|||
<desc id="desc">A left-to-right flow from changed daily notes to digest integration, interest topic writing, catalog checkpointing, and proactive reads.</desc>
|
||||
<defs>
|
||||
<style>
|
||||
.bg { fill: #f7f8fb; }
|
||||
.title { font: 700 28px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #172033; }
|
||||
.subtitle { font: 14px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #607086; }
|
||||
.step-num { font: 700 12px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #ffffff; }
|
||||
.step-title { font: 700 18px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #172033; }
|
||||
.step-subtitle { font: 13px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #607086; }
|
||||
.chip-title { font: 700 13px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #253246; }
|
||||
.chip-text { font: 12px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #627087; }
|
||||
.note { font: 12px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #5d6a7d; }
|
||||
.panel { fill: #ffffff; stroke: #d7dde7; stroke-width: 1.2; rx: 10; ry: 10; }
|
||||
.chip { fill: #f9fafc; stroke: #dfe5ee; stroke-width: 1; rx: 8; ry: 8; }
|
||||
.bg { fill: #fffdf8; }
|
||||
.title { font: 700 30px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #1f2430; }
|
||||
.subtitle { font: 14px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #556276; }
|
||||
.step-num { font: 700 12px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #ffffff; }
|
||||
.step-title { font: 700 18px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #1f2430; }
|
||||
.step-subtitle { font: 13px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #556276; }
|
||||
.chip-title { font: 700 13px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #1f2430; }
|
||||
.chip-text { font: 12px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #5e6a7c; }
|
||||
.note { font: 12px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #4f5c6f; }
|
||||
.panel { fill: #ffffff; stroke: #1f2430; stroke-width: 2.2; rx: 18; ry: 18; stroke-linecap: round; stroke-linejoin: round; }
|
||||
.chip { fill: #f8fbff; stroke: #1f2430; stroke-width: 1.6; rx: 11; ry: 11; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 6 5; }
|
||||
.badge { fill: #44546a; }
|
||||
.arrow { stroke: #8794a8; stroke-width: 2; fill: none; marker-end: url(#arrow); }
|
||||
.soft-arrow { stroke: #a3adbd; stroke-width: 1.6; stroke-dasharray: 5 5; fill: none; marker-end: url(#arrow-soft); }
|
||||
.line { stroke: #e1e6ee; stroke-width: 1; }
|
||||
.arrow { stroke: #7f8b9d; stroke-width: 1.45; fill: none; stroke-linecap: round; stroke-linejoin: round; marker-end: url(#arrow); }
|
||||
.soft-arrow { stroke: #a3adbd; stroke-width: 1.25; stroke-dasharray: 6 6; fill: none; stroke-linecap: round; stroke-linejoin: round; marker-end: url(#arrow-soft); }
|
||||
.line { stroke: #a3adbd; stroke-width: 1.25; stroke-linecap: round; }
|
||||
</style>
|
||||
<marker id="arrow" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto" markerUnits="strokeWidth">
|
||||
<path d="M0,0 L0,6 L8,3 z" fill="#8794a8"/>
|
||||
<marker id="arrow" markerWidth="6" markerHeight="6" refX="5" refY="2" orient="auto" markerUnits="strokeWidth">
|
||||
<path d="M0,0 L0,4 L5,2 z" fill="#7f8b9d"/>
|
||||
</marker>
|
||||
<marker id="arrow-soft" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto" markerUnits="strokeWidth">
|
||||
<path d="M0,0 L0,6 L8,3 z" fill="#a3adbd"/>
|
||||
<marker id="arrow-soft" markerWidth="6" markerHeight="6" refX="5" refY="2" orient="auto" markerUnits="strokeWidth">
|
||||
<path d="M0,0 L0,4 L5,2 z" fill="#a3adbd"/>
|
||||
</marker>
|
||||
</defs>
|
||||
|
||||
|
|
@ -121,8 +121,8 @@
|
|||
<text class="chip-title" x="748" y="532">Proactive material</text>
|
||||
<text class="chip-text" x="748" y="554">daily/<date>/interests.yaml</text>
|
||||
<line class="line" x1="942" y1="518" x2="942" y2="566"/>
|
||||
<text class="chip-title" x="986" y="532">Boundary</text>
|
||||
<text class="chip-text" x="986" y="554">Read only; caller decides.</text>
|
||||
<text class="chip-title" x="972" y="532">Boundary</text>
|
||||
<text class="chip-text" x="972" y="554">Read only; caller decides</text>
|
||||
|
||||
<path class="soft-arrow" d="M1064 432 C1064 476 600 472 600 432"/>
|
||||
<text class="note" x="834" y="474" text-anchor="middle">proactive reads interests.yaml after auto_dream writes it</text>
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 9 KiB |
|
|
@ -3,27 +3,27 @@
|
|||
<desc id="desc">A concise left-to-right flow from automatic workspace indexing to memory search and progressive link expansion.</desc>
|
||||
<defs>
|
||||
<style>
|
||||
.bg { fill: #f7f8fb; }
|
||||
.title { font: 700 28px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #172033; }
|
||||
.subtitle { font: 14px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #607086; }
|
||||
.step-num { font: 700 12px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #ffffff; }
|
||||
.step-title { font: 700 18px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #172033; }
|
||||
.step-subtitle { font: 13px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #607086; }
|
||||
.chip-title { font: 700 13px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #253246; }
|
||||
.chip-text { font: 12px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #627087; }
|
||||
.note { font: 12px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #5d6a7d; }
|
||||
.panel { fill: #ffffff; stroke: #d7dde7; stroke-width: 1.2; rx: 10; ry: 10; }
|
||||
.chip { fill: #f9fafc; stroke: #dfe5ee; stroke-width: 1; rx: 8; ry: 8; }
|
||||
.bg { fill: #fffdf8; }
|
||||
.title { font: 700 30px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #1f2430; }
|
||||
.subtitle { font: 14px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #556276; }
|
||||
.step-num { font: 700 12px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #ffffff; }
|
||||
.step-title { font: 700 18px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #1f2430; }
|
||||
.step-subtitle { font: 13px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #556276; }
|
||||
.chip-title { font: 700 13px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #1f2430; }
|
||||
.chip-text { font: 12px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #5e6a7c; }
|
||||
.note { font: 12px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #4f5c6f; }
|
||||
.panel { fill: #ffffff; stroke: #1f2430; stroke-width: 2.2; rx: 18; ry: 18; stroke-linecap: round; stroke-linejoin: round; }
|
||||
.chip { fill: #f8fbff; stroke: #1f2430; stroke-width: 1.6; rx: 11; ry: 11; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 6 5; }
|
||||
.badge { fill: #44546a; }
|
||||
.arrow { stroke: #8794a8; stroke-width: 2; fill: none; marker-end: url(#arrow); }
|
||||
.soft-arrow { stroke: #a3adbd; stroke-width: 1.6; stroke-dasharray: 5 5; fill: none; marker-end: url(#arrow-soft); }
|
||||
.line { stroke: #e1e6ee; stroke-width: 1; }
|
||||
.arrow { stroke: #7f8b9d; stroke-width: 1.45; fill: none; stroke-linecap: round; stroke-linejoin: round; marker-end: url(#arrow); }
|
||||
.soft-arrow { stroke: #a3adbd; stroke-width: 1.25; stroke-dasharray: 6 6; fill: none; stroke-linecap: round; stroke-linejoin: round; marker-end: url(#arrow-soft); }
|
||||
.line { stroke: #a3adbd; stroke-width: 1.25; stroke-linecap: round; }
|
||||
</style>
|
||||
<marker id="arrow" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto" markerUnits="strokeWidth">
|
||||
<path d="M0,0 L0,6 L8,3 z" fill="#8794a8"/>
|
||||
<marker id="arrow" markerWidth="6" markerHeight="6" refX="5" refY="2" orient="auto" markerUnits="strokeWidth">
|
||||
<path d="M0,0 L0,4 L5,2 z" fill="#7f8b9d"/>
|
||||
</marker>
|
||||
<marker id="arrow-soft" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto" markerUnits="strokeWidth">
|
||||
<path d="M0,0 L0,6 L8,3 z" fill="#a3adbd"/>
|
||||
<marker id="arrow-soft" markerWidth="6" markerHeight="6" refX="5" refY="2" orient="auto" markerUnits="strokeWidth">
|
||||
<path d="M0,0 L0,4 L5,2 z" fill="#a3adbd"/>
|
||||
</marker>
|
||||
</defs>
|
||||
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 7 KiB |
|
|
@ -3,27 +3,27 @@
|
|||
<desc id="desc">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.</desc>
|
||||
<defs>
|
||||
<style>
|
||||
.bg { fill: #f7f8fb; }
|
||||
.title { font: 700 28px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #172033; }
|
||||
.subtitle { font: 14px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #607086; }
|
||||
.step-num { font: 700 12px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #ffffff; }
|
||||
.step-title { font: 700 18px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #172033; }
|
||||
.step-subtitle { font: 13px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #607086; }
|
||||
.chip-title { font: 700 13px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #253246; }
|
||||
.chip-text { font: 12px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #627087; }
|
||||
.note { font: 12px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #5d6a7d; }
|
||||
.panel { fill: #ffffff; stroke: #d7dde7; stroke-width: 1.2; rx: 10; ry: 10; }
|
||||
.chip { fill: #f9fafc; stroke: #dfe5ee; stroke-width: 1; rx: 8; ry: 8; }
|
||||
.bg { fill: #fffdf8; }
|
||||
.title { font: 700 30px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #1f2430; }
|
||||
.subtitle { font: 14px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #556276; }
|
||||
.step-num { font: 700 12px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #ffffff; }
|
||||
.step-title { font: 700 18px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #1f2430; }
|
||||
.step-subtitle { font: 13px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #556276; }
|
||||
.chip-title { font: 700 13px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #1f2430; }
|
||||
.chip-text { font: 12px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #5e6a7c; }
|
||||
.note { font: 12px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #4f5c6f; }
|
||||
.panel { fill: #ffffff; stroke: #1f2430; stroke-width: 2.2; rx: 18; ry: 18; stroke-linecap: round; stroke-linejoin: round; }
|
||||
.chip { fill: #f8fbff; stroke: #1f2430; stroke-width: 1.6; rx: 11; ry: 11; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 6 5; }
|
||||
.badge { fill: #44546a; }
|
||||
.arrow { stroke: #8794a8; stroke-width: 2; fill: none; marker-end: url(#arrow); }
|
||||
.soft-arrow { stroke: #a3adbd; stroke-width: 1.6; stroke-dasharray: 5 5; fill: none; marker-end: url(#arrow-soft); }
|
||||
.line { stroke: #e1e6ee; stroke-width: 1; }
|
||||
.arrow { stroke: #7f8b9d; stroke-width: 1.45; fill: none; stroke-linecap: round; stroke-linejoin: round; marker-end: url(#arrow); }
|
||||
.soft-arrow { stroke: #a3adbd; stroke-width: 1.25; stroke-dasharray: 6 6; fill: none; stroke-linecap: round; stroke-linejoin: round; marker-end: url(#arrow-soft); }
|
||||
.line { stroke: #a3adbd; stroke-width: 1.25; stroke-linecap: round; }
|
||||
</style>
|
||||
<marker id="arrow" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto" markerUnits="strokeWidth">
|
||||
<path d="M0,0 L0,6 L8,3 z" fill="#8794a8"/>
|
||||
<marker id="arrow" markerWidth="6" markerHeight="6" refX="5" refY="2" orient="auto" markerUnits="strokeWidth">
|
||||
<path d="M0,0 L0,4 L5,2 z" fill="#7f8b9d"/>
|
||||
</marker>
|
||||
<marker id="arrow-soft" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto" markerUnits="strokeWidth">
|
||||
<path d="M0,0 L0,6 L8,3 z" fill="#a3adbd"/>
|
||||
<marker id="arrow-soft" markerWidth="6" markerHeight="6" refX="5" refY="2" orient="auto" markerUnits="strokeWidth">
|
||||
<path d="M0,0 L0,4 L5,2 z" fill="#a3adbd"/>
|
||||
</marker>
|
||||
</defs>
|
||||
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.7 KiB |
|
|
@ -3,29 +3,29 @@
|
|||
<desc id="desc">A simple diagram showing ReMe's design philosophy: file-native memory, progressive abstraction, and explicit relationship graph for agents.</desc>
|
||||
<defs>
|
||||
<style>
|
||||
.bg { fill: #f7f8fb; }
|
||||
.title { font: 700 30px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #172033; }
|
||||
.subtitle { font: 14px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #607086; }
|
||||
.panel { fill: #ffffff; stroke: #d8dee8; stroke-width: 1.2; }
|
||||
.panel-blue { fill: #eef7ff; stroke: #bfd8f2; stroke-width: 1.2; }
|
||||
.panel-green { fill: #effaf4; stroke: #bfdcc9; stroke-width: 1.2; }
|
||||
.panel-yellow { fill: #fff7e5; stroke: #ead59a; stroke-width: 1.2; }
|
||||
.label { font: 700 18px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #172033; }
|
||||
.small { font: 13px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #607086; }
|
||||
.tiny { font: 12px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #66758a; }
|
||||
.chip { fill: #ffffff; stroke: #dfe5ee; stroke-width: 1; }
|
||||
.chip-text { font: 700 13px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #334155; }
|
||||
.arrow { stroke: #8996aa; stroke-width: 2.2; fill: none; marker-end: url(#arrow); }
|
||||
.soft-arrow { stroke: #a8b2c2; stroke-width: 1.8; fill: none; stroke-dasharray: 6 6; marker-end: url(#arrow-soft); }
|
||||
.node { fill: #ffffff; stroke: #64748b; stroke-width: 1.7; }
|
||||
.link { stroke: #93a0b2; stroke-width: 1.5; fill: none; }
|
||||
.file-line { stroke: #c9d3df; stroke-width: 1.4; }
|
||||
.bg { fill: #ffffff; }
|
||||
.title { font: 700 30px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #1f2430; }
|
||||
.subtitle { font: 14px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #556276; }
|
||||
.panel { fill: #ffffff; stroke: #1f2430; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }
|
||||
.panel-blue { fill: #eef7ff; stroke: #1f2430; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }
|
||||
.panel-green { fill: #f0fbf5; stroke: #1f2430; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }
|
||||
.panel-yellow { fill: #fff7e5; stroke: #1f2430; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }
|
||||
.label { font: 700 18px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #1f2430; }
|
||||
.small { font: 13px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #556276; }
|
||||
.tiny { font: 12px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #5e6a7c; }
|
||||
.chip { fill: #ffffff; stroke: #1f2430; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 6 5; }
|
||||
.chip-text { font: 700 13px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #1f2430; }
|
||||
.arrow { stroke: #7f8b9d; stroke-width: 1.45; fill: none; stroke-linecap: round; stroke-linejoin: round; marker-end: url(#arrow); }
|
||||
.soft-arrow { stroke: #a3adbd; stroke-width: 1.25; fill: none; stroke-dasharray: 6 6; stroke-linecap: round; stroke-linejoin: round; marker-end: url(#arrow-soft); }
|
||||
.node { fill: #ffffff; stroke: #1f2430; stroke-width: 1.6; }
|
||||
.link { stroke: #a3adbd; stroke-width: 1.45; fill: none; stroke-linecap: round; stroke-linejoin: round; }
|
||||
.file-line { stroke: #7f8b9d; stroke-width: 1.45; stroke-linecap: round; }
|
||||
</style>
|
||||
<marker id="arrow" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto" markerUnits="strokeWidth">
|
||||
<path d="M0,0 L0,6 L8,3 z" fill="#8996aa"/>
|
||||
<marker id="arrow" markerWidth="6" markerHeight="6" refX="5" refY="2" orient="auto" markerUnits="strokeWidth">
|
||||
<path d="M0,0 L0,4 L5,2 z" fill="#7f8b9d"/>
|
||||
</marker>
|
||||
<marker id="arrow-soft" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto" markerUnits="strokeWidth">
|
||||
<path d="M0,0 L0,6 L8,3 z" fill="#a8b2c2"/>
|
||||
<marker id="arrow-soft" markerWidth="6" markerHeight="6" refX="5" refY="2" orient="auto" markerUnits="strokeWidth">
|
||||
<path d="M0,0 L0,4 L5,2 z" fill="#a3adbd"/>
|
||||
</marker>
|
||||
</defs>
|
||||
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.8 KiB |
|
|
@ -3,28 +3,28 @@
|
|||
<desc id="desc">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.</desc>
|
||||
<defs>
|
||||
<style>
|
||||
.bg { fill: #f7f8fb; }
|
||||
.title { font: 700 28px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #172033; }
|
||||
.subtitle { font: 14px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #607086; }
|
||||
.section-title { font: 700 18px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #172033; }
|
||||
.section-subtitle { font: 13px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #607086; }
|
||||
.chip-title { font: 700 13px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #253246; }
|
||||
.chip-text { font: 12px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #627087; }
|
||||
.note { font: 12px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #5d6a7d; }
|
||||
.label { font: 700 12px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #ffffff; }
|
||||
.panel { fill: #ffffff; stroke: #d7dde7; stroke-width: 1.2; rx: 10; ry: 10; }
|
||||
.chip { fill: #f9fafc; stroke: #dfe5ee; stroke-width: 1; rx: 8; ry: 8; }
|
||||
.bg { fill: #fffdf8; }
|
||||
.title { font: 700 30px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #1f2430; }
|
||||
.subtitle { font: 14px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #556276; }
|
||||
.section-title { font: 700 18px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #1f2430; }
|
||||
.section-subtitle { font: 13px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #556276; }
|
||||
.chip-title { font: 700 13px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #1f2430; }
|
||||
.chip-text { font: 12px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #5e6a7c; }
|
||||
.note { font: 12px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #4f5c6f; }
|
||||
.label { font: 700 12px "Comic Sans MS", "Bradley Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #ffffff; }
|
||||
.panel { fill: #ffffff; stroke: #1f2430; stroke-width: 2.2; rx: 18; ry: 18; stroke-linecap: round; stroke-linejoin: round; }
|
||||
.chip { fill: #f8fbff; stroke: #1f2430; stroke-width: 1.6; rx: 11; ry: 11; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 6 5; }
|
||||
.badge { fill: #44546a; }
|
||||
.soft { fill: #eef2f7; stroke: #d7dde7; stroke-width: 1; rx: 8; ry: 8; }
|
||||
.arrow { stroke: #8794a8; stroke-width: 2; fill: none; marker-end: url(#arrow); }
|
||||
.soft-arrow { stroke: #a3adbd; stroke-width: 1.6; stroke-dasharray: 5 5; fill: none; marker-end: url(#arrow-soft); }
|
||||
.line { stroke: #e1e6ee; stroke-width: 1; }
|
||||
.soft { fill: #eef7ff; stroke: #1f2430; stroke-width: 1.6; rx: 11; ry: 11; stroke-linecap: round; stroke-linejoin: round; }
|
||||
.arrow { stroke: #7f8b9d; stroke-width: 1.45; fill: none; stroke-linecap: round; stroke-linejoin: round; marker-end: url(#arrow); }
|
||||
.soft-arrow { stroke: #a3adbd; stroke-width: 1.25; stroke-dasharray: 6 6; fill: none; stroke-linecap: round; stroke-linejoin: round; marker-end: url(#arrow-soft); }
|
||||
.line { stroke: #a3adbd; stroke-width: 1.25; stroke-linecap: round; }
|
||||
</style>
|
||||
<marker id="arrow" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto" markerUnits="strokeWidth">
|
||||
<path d="M0,0 L0,6 L8,3 z" fill="#8794a8"/>
|
||||
<marker id="arrow" markerWidth="6" markerHeight="6" refX="5" refY="2" orient="auto" markerUnits="strokeWidth">
|
||||
<path d="M0,0 L0,4 L5,2 z" fill="#7f8b9d"/>
|
||||
</marker>
|
||||
<marker id="arrow-soft" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto" markerUnits="strokeWidth">
|
||||
<path d="M0,0 L0,6 L8,3 z" fill="#a3adbd"/>
|
||||
<marker id="arrow-soft" markerWidth="6" markerHeight="6" refX="5" refY="2" orient="auto" markerUnits="strokeWidth">
|
||||
<path d="M0,0 L0,4 L5,2 z" fill="#a3adbd"/>
|
||||
</marker>
|
||||
</defs>
|
||||
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 7 KiB After Width: | Height: | Size: 7.6 KiB |
BIN
docs/figure/qwenpaw-auto-dream.gif
Normal file
|
After Width: | Height: | Size: 3.2 MiB |
BIN
docs/figure/qwenpaw-auto-memory.gif
Normal file
|
After Width: | Height: | Size: 2.6 MiB |