Skip to main content
Glama

Memory Garden 是一个个人记忆助手。连接 Obsidian 笔记库,或导入自己选择的聊天记录,围绕一个主题找回原话、比较前后表达,并修正助手对你的理解。

合成示例:沿时间线阅读记录,并在右侧核对原文

回看原话

比较前后

修正理解

找回当时写下的表达,打开来源核对语境。

把同一主题的记录沿时间展开,保留变化的线索与反例。

认可、补充或撤回解释,让自己的判断保持可修正。

自然对话需要连接生成模型;离线示例支持查找、规则对照和关系图浏览。连接云端模型时,相关片段可能发送至你配置的服务。

我们的愿景

我们写下日记、保存对话、记录一闪而过的念头。时间久了,记录越来越多,当时为什么这样想、后来又怎样改变,却不一定容易看清。

Memory Garden 希望让这些散落的记录重新产生联系。当你想回看自己时,有一个熟悉这些记录、愿意认真倾听的助手,陪你找回当时的原话,看见想法如何延续、动摇,又慢慢形成新的方向。它对你的理解,也随着交流和你的修正逐渐积累。你始终可以告诉它:“那时我是这样想的,现在已经不同了。”

我们希望,未来每个人都能拥有这样的个人助手,成为陪伴自己成长的记忆伙伴。这座属于个人的花园,可以容纳矛盾、犹豫和暂时没有答案的问题。你可以随时回来,重新认识某一段经历,也为未来的自己留下一些线索。

而人与人的相遇,会让各自的花园产生连接。一次共同经历、一段对话、一个合作项目,都会在不同人的生活中留下印记。同一件事,有着不同的视角;一段关系,也有双方共同走过的时间。

在每个人自主选择分享的前提下,我们希望个人助手能够帮助人们连接这些记忆,找回共同的经历、理解彼此的语境,让交流与合作在时间中延续。一座座个人的记忆花园,由此逐渐生长为人与人之间的记忆网络,保留各自的视角,也承载共同的故事。

Memory Garden 从今天的个人记录与认知回溯出发,探索通向这一未来的可能:让每个人拥有自己的记忆伙伴,让人与人之间的联系拥有可以延续的记忆。

属于你的,慢慢生长的记忆花园。

Related MCP server: MegaMem

开始使用

需要 Python 3.12 和 uv。

git clone https://github.com/drephantom/memory-garden.git
cd memory-garden
uv sync --frozen

先体验示例

Windows 双击 start-demo.bat,浏览器打开 http://127.0.0.1:8876。 示例使用合成笔记,无需提供自己的笔记或 API Key。其他系统可按示例体验指南启动。

离线模式支持查找、规则对照和浏览关系图。要展开自然对话,需要连接生成模型。

使用自己的笔记

Copy-Item .env.example .env

在 .env 中设置 MG_VAULT_PATH 为 Obsidian 笔记库的完整路径,然后启动:

uv run memory-garden serve

打开 http://127.0.0.1:8766。Windows 也可以双击 start-memory-garden.bat。 进入后,点击 连接笔记库,可以连接另一个本机文件夹或切换已连接的库。 详细操作见连接本地笔记库。

连接对话模型

打开 设置 → 对话模型,选择连接模型,填写服务地址、模型名称与 API Key。 保存后重启当前使用的服务入口。

模型连接后,问题、相关对话上下文和检索选出的记录片段可能发送到你配置的服务。 每个新连接的笔记库默认使用本地模式,不会继承其他库的模型权限。

认知回溯:看见想法走过的路

“我以前是怎么想的?”“现在有什么不同?”“这种不同可能从什么时候开始?”长期记录让这些问题有了可以回看的线索。Memory Garden 把同一主题在不同时间的表达放在一起,帮助你核对变化、保留反例,并辨认仍然无法回答的部分。

你可以指定一个主题,例如“我对自主判断的看法有变化吗?”,也可以问“有哪些值得回看的变化?”,让 Agent 在已有记录中寻找候选。这里的“发现”发生在你发起探索时;候选表示值得核对,不表示系统已经认定你发生了改变。

一次回溯会看到什么

下面是一个虚构示例,用于说明阅读方式:

回看的材料

可能读到的原话

较早的表达

“只有别人认可我的选择,我才相信自己没有走错。”

较近的表达

“我更愿意先形成自己的判断,再听取别人的意见。”

需要一并考虑的反例

“重要选择前,我仍会先问朋友,借他们的视角检查盲点。”

这些材料可以引出一个待核对的解释:外部意见在你的决策中,可能从“获得认可”变成了“帮助检查”。 但询问朋友本身并不说明你放弃了自主判断,较近的一条记录也未必代表你现在的看法。实际回溯会附上可打开的来源;你可以补充语境、修正解释,或暂时不作判断。

认知回溯如何实现

模型负责理解问题、选择工具和提出解释;程序负责限制证据范围、核对引用,并保存用户主动确认的判断。一次有明确主题的回溯通常沿着以下过程展开,工具顺序由 Agent 根据已有观察选择:

环节

机制与作用

确定这一轮的问题

区分普通交流、原文查找、主题回溯和开放探索,结合对话识别话题的延续或切换。普通交流直接回应,无需进入回溯流程。

找出可比较的记录

检索相关片段并建立主题时间线,寻找前后表达的候选配对。已有立场快照时优先使用快照,否则按主题、时间和措辞差异生成候选;排序信号不是“发生变化的概率”。

核对前后原话

变化端点必须来自本人的两条独立记录,有可核对的引文与先后时间。措辞不同只提供线索,还需要结合上下文判断是否在讨论同一件事。

进一步检验解释

当问题涉及变化原因且已有候选时,检索两端之间的经历,并分别检索支持与挑战假设的材料。反例检索使用扩展查询和词面信号排序,返回的仍是待核对材料;时间相邻不等于因果。

核验后呈现

模型提交结构化结论;程序检查来源是否在本轮观察过、引文是否逐字匹配,以及前后端点和证据角色是否合法。结果区分原话、解释与未知项;证据不足可以保留问题,核验失败会尝试有界修复或明确报告未完成。

交还给用户确认

你可以认可、补充、否认或暂时搁置。主动保存的判断成为可修正、可撤回的长期记忆,供后续同主题回溯参考;助手生成的解释不会自动变成你的永久标签。

回溯的目标是形成有来源、可讨论的理解。 记录可能不完整,候选检索可能遗漏,模型也可能误解语境;引用校验能够核对证据出处,不能证明解释本身正确。关于“现在的我是否仍这样想”,你的补充始终是必要的上下文。

可以做什么

  • 围绕记录对话:连接生成模型后,可以自然交流,也可以查找过去的原话、比较前后表达;引用可打开核对。

  • 浏览时间线:把同一主题的记录按时间放在一起,区分写下记录的日期与其中描述的事件时间。

  • 探索关系图:在局部图和全局图之间切换,缩放、拖动、搜索记录,并查看明确链接对应的原文。

  • 管理自己的记忆:确认、补充或撤回对回溯结果的判断。普通聊天不会自动成为永久的个人标签。

  • 连接多个笔记库:输入本机文件夹路径即可连接;每个库分别保存对话、记忆与模型设置。

  • 导入聊天片段:预览文件或粘贴微信片段,确认哪些发言属于自己,再决定是否加入检索。也支持连接已运行的 QQ 导出服务。

  • 继续之前的对话:历史页支持搜索与分页。离开页面不会取消已提交的回答请求。

在花园里回看

通过示例笔记,体验时间线、关系图与原文对照。

关系图 · 从一条记录走进它的联系

在全局图中缩放、拖动和选择记录,并排阅读两条原文。连线来自笔记中明确写出的链接。

合成示例:306 条记录、748 条明确链接的全局图与原文对照

时间线使用 9 篇示例笔记,全局图使用 306 篇合成笔记。选中一个节点,即可突出它的直接联系,并在旁边核对原文。

想亲自试试,可以在“连接笔记库”中输入本机 examples/showcase-vault 文件夹的完整路径。也可以生成全局图示例,再连接生成的文件夹:

python examples/generate_graph_showcase.py .local/graph-showcase-vault

Agent 如何工作

Memory Garden 使用一个带只读工具的 Agent:先理解这一轮想聊什么,再决定是否查阅记录。回溯时,模型可以根据工具返回的证据继续查找,把原话、可能的解释和仍未确认的问题分开呈现。

flowchart TD
    UI[Web / CLI / MCP] --> PLAN

    subgraph HARNESS[单 Agent Harness]
        PLAN[模型规划本轮意图] -->|普通交流| CHAT[结合对话直接回答]
        PLAN -->|查找 / 回溯 / 探索| LOOP[模型选择下一步]
        LOOP -->|调用工具| TOOLS[8 个只读认知工具]
        TOOLS -->|原文与证据索引| LOOP
        LOOP -->|形成回答| CHECK[引用与证据边界校验]
        CHECK -->|需要修复且预算允许| LOOP
        CHECK -->|通过| ANSWER[带来源的回答与待确认问题]
        CHECK -->|无法完成| FAIL[明确说明未完成原因]
    end

    subgraph DATA[本地记录与检索]
        STORE[Obsidian / 已确认聊天<br/>SQLite 原文修订与片段索引]
        SEARCH[BM25 + 向量 → RRF<br/>可选重排]
        STORE --> SEARCH
    end
    TOOLS -->|搜索| SEARCH
    TOOLS -->|读取原文 / 时间线等| STORE

    subgraph MEMORY[两层记忆]
        CONTEXT[原始对话 → 提取式工作上下文]
        LONG[用户确认的长期记忆<br/>可修正 / 可撤回]
    end
    CONTEXT --> PLAN
    LONG --> LOOP
  • 有边界的工具循环:步数、调用次数、超时与重复调用共同限制执行;引用不合规时最多进行一次修复,并共用剩余预算。模型失败会明确报告,离线规则模式独立提供。

  • 可核对的检索:通过 RRF 融合关键词与向量候选;默认向量使用本地哈希表示,可另行配置语义 Embedding 与重排服务。云端检索服务需单独启用,引用返回原始片段供用户核对。

  • 压缩上下文,保留原话:长对话从原始消息中提取工作上下文,不反复压缩旧摘要;整个模型请求受字符预算约束。长期记忆只采用用户确认的判断,支持修正与撤回,按笔记库隔离。

  • 共享工具接口:搜索、原文读取、主题时间线、变化候选、变化探索、区间事件、假设正反证据和用户判断,共 8 个只读工具;MCP 复用同一套工具实现。探索工具是否开放由本轮意图决定。

实现入口:Agent 循环 · 工具 · 混合检索 · 工作上下文 · 记忆管理。使用说明见对话与记忆。

从一个问题开始

例如:

  • “找找我以前关于写作的记录。”

  • “自主判断这个主题,我的想法以前到现在有没有变化?”

  • “这条记录里的说法,现在已经不太贴近我了。”

也可以点击“找一条回看线索”,或在关系图里选一篇记录开始浏览。 对话、时间线、关系图与记忆分别展示同一主题的不同侧面。

数据由你掌握

  • 原始 Obsidian 笔记只读,应用不会改写原文。

  • 索引、对话和导入副本保存在本机;这些文件需要像原始笔记一样妥善保管。

  • 导入前先预览时间和发言人,明确选择本人身份与检索范围。

  • 停止检索会保留导入副本和已有回答,不等同于彻底删除。

  • 云端生成、Embedding 和 Rerank 分别配置;本地导入不代表后续云端模型调用也在本地。

  • 助手的解释可以不同意,也可以暂时不判断。引用存在不代表解释一定正确。

使用指南

当前限制

  • 目前面向单人、本机使用,暂不支持在线协作或跨设备同步。

  • 笔记更新后,需要在设置中手动更新索引。

  • 全局图最多展示 500 个节点和 3,000 条边;超出时显示省略量,可继续搜索。连线来自明确的笔记链接。

  • 微信支持已有文件与主动粘贴,不直接读取或解密微信客户端。

  • QQ 服务连接依赖外部程序及其版本,不能代替完整聊天备份。

  • 图片、语音与视频暂不自动识别或转写。

许可

MIT License

Available Tools

9 tools
ask_gardenB

运行完整认知回溯 Agent(本地确定性路径),返回带引用的结构化结论。

Inputs: question (required). Returns: result

discover_cognitive_shiftsC

全库发现可能被忽视的变化候选;较近记录只是 recent 候选,需用户确认。

Inputs: limit. Returns: result

find_change_candidatesA

围绕明确主题提出变化候选端点对(最早端点 × 最近端点);措辞差异不等于变化。

Inputs: topic (required), limit. Returns: result

find_interval_eventsB

在两个日期端点构成的区间内搜索经历/决定/事件候选。时间相邻不等于因果。

Inputs: date_to (required), date_from (required), limit, query. Returns: result

get_topic_timelineB

按时间整理同一主题的历次表达;最近一条只是 recent 候选。

Inputs: topic (required), limit. Returns: result

get_user_verdictsA

读取用户对该主题此前的确认/否认判定;被否认的解释不得复用。

Inputs: topic (required). Returns: result

read_sourceA

读取本轮已发现来源的原文与定位信息(引用前必须先读)。

Inputs: atom_id (required). Returns: result

search_hypothesis_evidenceA

对原因假设分侧检索:stance=support 或 challenge;两侧都必须调用。

Inputs: stance (required), hypothesis (required), query. Returns: result

search_sourcesA

按关键词与时间窗检索用户本人的记录候选,返回 [A{id}] 编号。

Inputs: query (required), limit, date_to, date_from. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 9 tools

    Disambiguation3/5

    Most tools have clear roles, but discover_cognitive_shifts and find_change_candidates both surface 'change candidates' and could be confused; search_sources and find_interval_events also overlap in time-based retrieval. The descriptions help clarify scope, but the boundaries are not always immediately obvious.

    Naming Consistency4/5

    All names use lowercase snake_case and mostly follow a verb_noun pattern such as search_sources, get_topic_timeline, and find_interval_events. Minor inconsistency exists between verbs like discover, find, and search for similar retrieval actions, but the overall pattern remains predictable.

    Tool Count5/5

    Nine tools is a well-scoped size for a cognitive retrospection domain. Each tool contributes to a distinct stage of the workflow, from source discovery through evidence retrieval to the final ask_garden synthesis, with no obvious bloat.

    Completeness4/5

    The toolset covers the main cognitive backtracking pipeline: search sources, read them, build timelines, identify change candidates, find interval events, gather hypothesis evidence, and check user verdicts. A minor gap is that there is no explicit tool to record or update user confirmations/verdicts, but this may be handled outside the server.

    Maintenance

    ActivitySlowing
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      A
      maintenance
      Turns your Obsidian vault into an MCP-enabled workspace with tools for reading/writing notes, managing folders, running semantic searches, and maintaining long-term memory—all while keeping data local to your vault.
      290,601 npm
      159
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Syncs Obsidian notes into a temporal knowledge graph and exposes 23 MCP tools for AI assistants to read, search, and write to your vault, enabling persistent memory across conversations.
      81
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Exposes a typed, provenance-aware knowledge graph over an Obsidian vault to coding agents over MCP, so they can trace what grounds a claim, compute which other notes a change makes wrong, surface contradictions and admitted gaps, and assemble a task-specific token-budgeted subset of the vault. Indexing, retrieval, and impact analysis run with zero third-party runtime dependencies beyond the Python standard library.
      10
      MIT