mcpField
N
nan-forget

nan-forget

本地服务
github.com/NaNMesh记忆与知识529 周前更新

关于 nan-forget

nan-forget 为 Claude Code、Codex、Cursor 等编码工具提供本地跨会话、跨项目记忆,使用 SQLite 保存并检索决策、偏好和事实。它通过自动化钩子及 MCP、CLI 和 REST API,让不同工具共享记忆。

主要功能

  1. 01SQLite 持久化跨会话记忆
  2. 02语义搜索与跨项目检索
  3. 03自动保存、回忆和整理
  4. 04提供 MCP、CLI 与 REST API

适用场景

  1. 01在新会话恢复项目背景
  2. 02让不同编码工具共享记忆
  3. 03保存任务的问题与解决方案

MCP 相关

MCP 服务提供 13 种记忆工具,包括同步、保存、语义搜索、更新、归档和整理;Claude 可通过 MCP 使用。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"nanmesh-nan-forget": {
"command": "npx",
"args": [
"-y",
"nan-forget"
],
"env": {
"OPENAI_API_KEY": "<OPENAI_API_KEY>",
"NAN_FORGET_EMBEDDING_PROVIDER": "<NAN_FORGET_EMBEDDING_PROVIDER>",
"NAN_FORGET_USER_ID": "<NAN_FORGET_USER_ID>",
"NAN_FORGET_PROJECT_ROOT": "<NAN_FORGET_PROJECT_ROOT>"
}
}
}
}
启动命令npx -y nan-forget
需要配置的环境变量
OPENAI_API_KEY密钥OpenAI API key for embeddings. If not set, falls back to local Ollama.
NAN_FORGET_EMBEDDING_PROVIDEREmbedding provider: openai or ollama
NAN_FORGET_USER_IDUser identifier for multi-user setups
NAN_FORGET_PROJECT_ROOTProject root used for local memory file sync and cleanup

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmnan-forget0.6.8

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

NaN Forget

面向 AI 编码工具的长期记忆。

会话结束后,你的 AI 会忘记一切。NaN Forget 可以解决这个问题。


安装(3 个步骤)

npx nan-forget setup

就这么简单。向导会安装 Ollama、嵌入模型、Claude hooks、MCP 配置,以及供 Codex 风格 Agent 使用的项目 AGENTS.md。重启 Claude Code 或重新打开 Codex。你的 AI 现在会记住信息。

无需 API 密钥。无需 Docker。完全本地运行。永久免费。


工作原理

flowchart LR
    A["You talk to your AI tool"] --> B["It learns things"]
    B --> C["nan-forget saves to SQLite"]
    C --> D["Session ends"]
    D --> E["New session starts"]
    E --> F["nan-forget loads context"]
    F --> G["Your AI remembers"]
  1. 正常工作。 你的 Agent 会在工作过程中将决策、偏好和事实保存到本地 SQLite 记忆数据库。
  2. 会话结束。 记忆会保存在 ~/.nan-forget/memories.db 中。较旧的记忆会自动整合为长期条目。
  3. 开始新会话。 nan-forget 会加载过往会话中的上下文。你今天在项目 B 工作时,3 个月前在项目 A 中做出的身份验证决策也会浮现出来。

自动处理记忆

你无需手动调用保存或搜索。以下是后台的处理流程:

Claude Code(完全自动)
事件触发操作处理方式
会话开始memory_sync轻量级握手——检查健康状态、加载统计信息并列出项目。不会执行繁重的搜索。
你发送消息UserPromptSubmit hooknan-forget recall 会自动搜索相关记忆,并将相关上下文注入对话。
你讨论某个主题memory_search每当可能存在相关上下文时,Claude 都会动态搜索数据库——就像你按需回忆信息一样。
Claude 学到新信息memory_saveClaude 会立即保存决策、偏好和事实。工具说明会告诉 Claude“你必须调用此工具”。
Claude 编写 .md 文件PostToolUse hookmemory-sync.js 会拦截写入、解析 frontmatter,并通过 nan-forget add 自动将内容保存到 SQLite。
会话结束SessionEnd hooksession-end.js 会扫描对话记录,找出尚未保存的决策和事实,并将最重要的 5 项保存到数据库。
每保存 10 次或每隔 24h自动整合较旧的记忆会被聚类并整合为长期条目。原始记忆会被归档。

四层保护机制确保不会丢失任何内容:

  1. 每条消息都自动回忆(UserPromptSubmit hook)
  2. Claude 主动保存(指令式工具说明)
  3. Hook 捕获 .md 写入(PostToolUse 拦截)
  4. 会话结束时全面检查(SessionEnd 对话记录扫描)
Codex、Cursor 和其他工具

Codex 和类似的 Agent 可以很好地配合 nan-forget 使用,但它们通常需要通过指令文件或 shell/API 回退方案来实现,而不是使用 Claude 的 hook 模式:

  1. 运行设置命令:npx nan-forget setup
  2. 在仓库中使用生成的 AGENTS.md。它会指示 Codex 风格的 Agent 自动执行 sync、search、save 和 checkpoint。
  3. 在对话期间使用 REST 或 CLI 回退方案。Agent 可以调用 localhost:3456 上的 REST API,或使用 nan-forget sync、nan-forget search、nan-forget add 和 nan-forget checkpoint 等本地命令。

REST API 和 CLI 现在已能充分支持重要的记忆工作流,因此 Claude 保存的记忆可以从 Codex 中搜索,反之亦然。

# Start the REST API
nan-forget api

# The system prompt tells your agent exactly what endpoints to call
nan-forget prompt

斜杠命令

在 Claude Code 中输入以下命令:

命令功能
/nan-forget加载过往会话中的上下文
/nan-forget stats显示记忆健康状态
/nan-forget clean运行垃圾回收
/nan-forget compact强制整合记忆
/nan-forget health检查服务是否正在运行
/nan-forget start启动所有服务

适用于任何大模型

Claude 使用 MCP。Codex 可以使用 AGENTS.md,并搭配 CLI/REST 回退方案:

# Start the API
nan-forget api

# Get the system prompt for your agent
nan-forget prompt

Codex、Cursor 和 Claude 共用同一个记忆数据库。

curl http://localhost:3456/memories/search?q=auth
curl -X POST http://localhost:3456/memories/sync -d '{"project":"my-app"}'
curl -X POST http://localhost:3456/memories/checkpoint \
  -H 'content-type: application/json' \
  -d '{"task_summary":"Fixed auth regression","problem":"Expired tokens were not refreshed","solution":"Added refresh handling in middleware","files":["src/auth.ts"],"concepts":["auth","jwt"],"project":"my-app"}'

快速入门(CLI)

nan-forget add "We use FastAPI, not Django. Railway deploys faster."
nan-forget add --type decision "Auth is Clerk, not custom JWT"
nan-forget search "what auth system"
nan-forget stats

架构(专家部分)

以下内容面向希望了解 nan-forget 底层工作原理的开发者。


问题

大模型在不同会话之间没有记忆。每次对话都从零开始。你得重新解释自己的技术栈,Claude 会推翻上个月做出的决定,会话结束后上下文也会消失。

现有解决方案(Mem0)面向的是将记忆嵌入产品的应用开发者。我们面向的是你——每天使用 AI 工具、希望 AI 能记住信息的开发者。

设计:受大脑启发的双层记忆

flowchart TB
    subgraph Short["Short-Term Memory"]
        MD[".md files<br/>Current session context<br/>Disposable scratch paper"]
    end
    subgraph Long["Long-Term Memory"]
        DB["SQLite + sqlite-vec<br/>~/.nan-forget/memories.db<br/>Semantic search + decay"]
    end
    subgraph Auto["Automatic Processes"]
        Hook["Hooks (3)<br/>PostToolUse: .md → DB<br/>UserPromptSubmit: auto-recall<br/>SessionEnd: transcript sweep"]
        Consolidate["Consolidation Engine<br/>Clusters + summarizes aging memories"]
        GC["Garbage Collection<br/>Decay, dedup, expiry"]
    end
    MD -->|"hook intercepts"| Hook
    Hook -->|"nan-forget add"| DB
    DB --> Consolidate
    Consolidate --> DB
    DB --> GC

短期记忆 = Claude 内置的 .md 文件。可丢弃。仅用于当前会话。

长期记忆 = 使用 sqlite-vec 进行向量搜索的 SQLite 数据库。单个文件。永久保存。可在所有会话、所有项目和所有大模型工具之间搜索。

三个钩子可自动处理记忆:

  • PostToolUse 拦截 .md 文件写入,并将其保存到数据库。
  • UserPromptSubmit 会在每条用户消息上运行 nan-forget recall,自动搜索相关上下文记忆。
  • SessionEnd 会扫描对话记录,查找尚未保存的决定并保存其中最重要的 5 条。

三阶段检索流程

记忆搜索遵循与人类回忆相同的路径:

flowchart LR
    Q["Query"] --> S1["Stage 1: Recognition<br/>Fast vector match<br/>Returns summaries only"]
    S1 --> S2["Stage 2: Recall<br/>Full content fetch<br/>Cross-project expansion"]
    S2 --> S3["Stage 3: Association<br/>Spreading activation<br/>Related memories surface"]
    S3 --> R["Results ranked by<br/>similarity x decay x frequency x confidence"]
阶段执行内容开销
识别(模糊)预取 50 条候选项,返回排名前 5 的摘要。开销低。1 次向量搜索
回忆(清晰)获取完整内容。跨项目扩大搜索范围(不筛选项目)。N 次单点查找
联想基于质心,在 sqlite-vec 中搜索相关记忆。根据正向 ID 进行扩散激活。1 次向量搜索

评分公式:

final_score = vector_similarity * decay_weight * frequency_boost * confidence_boost
decay_weight = (0.5 ^ (days / 30)) ^ (1 - confidence)
frequency_boost = log2(access_count + 1) / 10 + 1
confidence_boost = 0.5 + 0.5 * confidence

高置信度记忆(经过辩论验证、经人工批准)衰减速度慢得多,排名也更高。置信度为 0.85 的核心记忆,衰减速度约为正常速率的 15%——除非被新信息取代,否则实际上会永久保留。跨项目搜索意味着你在处理项目 B 时,项目 A 中有关身份验证的决定也会显示出来。

整合引擎

老化的记忆不会直接删除,而是会压缩整合为长期条目:

flowchart TB
    A["10+ aging memories<br/>about the same topic"] --> B["Cluster by project + type<br/>+ vector similarity > 0.8"]
    B --> C{"OpenAI key<br/>available?"}
    C -->|"Yes"| D["LLM summarizes cluster<br/>into 1-2 sentences"]
    C -->|"No"| E["Deterministic merge<br/>concatenate + deduplicate"]
    D --> F["Save consolidated entry<br/>with fresh vector embedding"]
    E --> F
    F --> G["Archive originals<br/>with backlink"]

每保存 10 条记忆或每隔 24 小时后,都会自动触发。无需用户操作。

13 个 MCP 工具

工具用途
memory_sync轻量级会话握手:健康检查 + 统计信息 + 项目列表
memory_save保存一条记忆(由 Claude 主动自动调用)
memory_search使用三阶段检索进行语义搜索(深度 1–3)
memory_get按 ID 获取特定记忆
memory_update更改内容、类型或标签
memory_archive软删除(从搜索结果中隐藏,但不会真正删除)
memory_consolidate强制整合老化的记忆
memory_clean垃圾回收(衰减、去重、过期处理、同步 MEMORY.md)
memory_stats记忆健康状况面板
memory_health检查 Ollama、REST API 是否正在运行
memory_start启动 Ollama + REST API
memory_checkpoint完成任务后,保存完整的问题→解决方案上下文
memory_compress将持久化的 .md 记忆文件压缩为最简占位文件

结构化记忆

memory_save 接受结构化字段,以生成更丰富的向量表示:

字段类型用途
contentstring完整描述(必填)
typestringfact、decision、preference、task、context
projectstring项目名称
problemstring面临的挑战
solutionstring解决方法
conceptsstring[]可搜索的标签(["auth", "jwt", "middleware"])
filesstring[]涉及的文件(["src/auth.ts"])
confidencenumber信任度 0.0–1.0(默认值根据来源确定)
provenancestringsave、checkpoint、debate、human
tierstringregular 或 core(根据来源自动确定)

所有字段会一同嵌入为单个向量。搜索“JWT auth bug”时,即使记忆内容并未逐字包含这些词,也能找到带有相关概念标签的记忆。

记忆层级

并非所有记忆都同等重要。经过辩论验证和人工批准的记忆属于核心记忆——它们衰减得更慢,在搜索结果中的排名更高,也能更久地保留在垃圾回收中。

来源默认置信度自动层级衰减速率
save0.5regular正常(30 天半衰期)
checkpoint0.65regular慢约 35%
debate0.85core慢约 85%
human0.95core慢约 95%

核心记忆是为即将推出的 nan-debate 系统设计的——经人工批准验证的多 AI 辩论结果会作为高可信知识持久保存,几乎不会随时间淡化。

检查点工作流

完成任务后,调用 memory_checkpoint,并提供 task_summary、problem、solution、files、concepts 和 project。这会将完整的问题→解决方案上下文保存到长期记忆中。每完成一项任务,就创建一个检查点。

记忆压缩

memory_compress 会扫描 .claude/projects/*/memory/,查找已持久化到数据库的 .md 文件。已持久化的文件会被替换为最简存根,从而减少上下文窗口膨胀。

REST API(面向非 MCP 大模型)

与 MCP 服务共用同一个 SQLite 数据库——Claude 保存的记忆可从 Codex 中搜索,反之亦然。

POST   /memories              — Save a memory (supports problem/solution/files/concepts)
POST   /memories/checkpoint   — Save completed-task context
POST   /memories/sync         — Lightweight session handshake
GET    /memories/search?q=... — Semantic search
GET    /memories/:id          — Get by ID
PATCH  /memories/:id          — Update
DELETE /memories/:id          — Archive
POST   /memories/consolidate  — Compact aging memories
POST   /memories/clean        — Garbage collection
GET    /memories/stats        — Memory health
GET    /memories/instructions — System prompt for LLMs

获取任意大模型的系统提示词:

nan-forget prompt
# or
curl http://localhost:3456/memories/instructions

嵌入

提供方模型维度费用
Ollama(默认)nomic-embed-text768免费,本地运行
OpenAItext-embedding-3-small1536使用你的 API 密钥

自动检测:Ollama 正在运行?使用它。未运行?检查是否设置了 OPENAI_API_KEY。无需配置。

数据存储

所有数据都存储在单个 SQLite 文件 ~/.nan-forget/memories.db 中。无需 Docker 或服务,更新也不会导致数据丢失。

  • 向量搜索:sqlite-vec 扩展(余弦距离,在进程内嵌入运行)
  • 元数据:标准 SQL 表,并在 user_id、status、project、type 上建立索引
  • 备份:复制一个文件。恢复:放回该文件。
  • 导出:nan-forget export 将所有记忆导出为 JSON。

记忆生命周期

flowchart TB
    A["New memory saved"] --> B["Active in SQLite<br/>Searchable, scored"]
    B --> C{"Accessed<br/>recently?"}
    C -->|"Yes"| D["Score stays high<br/>frequency_boost increases"]
    C -->|"No"| E["Decay weight drops<br/>0.5^(days/30)"]
    E --> F{"Decay < 0.3?"}
    F -->|"Yes"| G["Consolidation candidate<br/>Clustered + summarized"]
    F -->|"No"| B
    G --> H["New consolidated entry<br/>Originals archived"]
    D --> B
    E --> I{"Decay < 0.1?"}
    I -->|"Yes"| J["Archived by GC"]
    I -->|"No"| F

垃圾回收(零大模型成本)

所有清理工作都是确定性的。不调用 API,不进行大模型推理。

  • 衰减 GC:归档衰减权重低于 0.1 的记忆(普通记忆约 100 天,核心记忆约 600 天以上)
  • 过期处理:归档已超过 expires_at 日期的记忆
  • 干扰解决:对相似度 >0.95 的匹配项去重,保留访问次数较多的一项
  • MEMORY.md 同步:使用每个项目评分最高的前 5 条记忆刷新工作记忆

核心记忆(置信度 ≥ 0.85)比普通记忆更能长久地经受垃圾回收,因为其衰减公式会降低时间因子的影响:decay^(1 - confidence)。一条置信度为 0.85、存续 200 天的记忆,其衰减权重仍高于 0.1。

设计理念

NaN Forget 围绕三个原则构建:轻量、自动和本地。

轻量

无需 Docker、云服务或占用 RAM 的后台进程。整个存储层只是一个 SQLite 文件(约 3 MB)。嵌入通过你很可能已经安装的 Ollama 运行。记忆操作(保存、搜索、去重、垃圾回收)完全不调用大模型——全部以确定性方式完成。

自动

四个钩子会在会话的各个阶段捕获上下文——你无需手动调用保存:

  1. UserPromptSubmit 会在你发送每条消息时搜索记忆
  2. 工具描述会指示 Claude 在决策和事实出现时保存它们
  3. PostToolUse 会拦截 .md 文件写入并将其持久化
  4. SessionEnd 会扫描对话记录,找出任何遗漏内容

老化的记忆会自动整合。重复项会合并。未使用的记忆会以 30 天半衰期衰减。无需维护。

本地

你的数据保留在本机的 ~/.nan-forget/memories.db 中。无需账号或 API 密钥(Ollama 免费且在本地运行),也不收集遥测数据。备份只需复制一个文件。适用于 Claude Code(MCP)、Codex/Cursor(REST API)和终端(CLI)——共用同一个数据库和记忆。

与其他记忆工具的区别

大多数 AI 记忆解决方案(Mem0、claude-mem)是为将记忆嵌入产品的应用开发者设计的,或者需要 Docker/云服务才能运行。NaN Forget 专为你而设计——适用于每天使用 AI 工具、希望上下文能跨会话保留且无需管理基础设施的开发者。

主要设计差异:

  • 检索:采用三阶段流程(识别 → 回忆 → 扩散激活),并按衰减加权评分,而非简单的向量搜索
  • 结构:记忆包含 problem、solution、concepts 和 files 字段——即使搜索关键词不匹配,也能找到相关上下文
  • 成本:记忆操作(保存、搜索、去重、整合、GC)都以确定性方式完成——不调用大模型,也不产生 API 费用
  • 设置:只需一条命令(npx nan-forget setup),无需 Docker、容器,也无需管理服务

源码结构

src/
  sqlite.ts         SQLite + sqlite-vec storage layer (schema, CRUD, vector search)
  embeddings.ts     OpenAI / Ollama abstraction
  writer.ts         Memory writer with dedup (>0.92 = merge)
  retriever.ts      Three-stage retrieval pipeline
  consolidator.ts   LLM summarization + deterministic fallback
  cleaner.ts        GC: decay, expiry, dedup, MEMORY.md sync
  services.ts       Service management (Ollama, REST API)
  memory-md.ts      MEMORY.md manager
  types.ts          Shared types (Memory, MemoryType, etc.)
  mcp/server.ts     MCP server, 13 tools
  api/server.ts     REST API server
  cli/index.ts      CLI commands + hook helpers
  setup/index.ts    Setup wizard (Ollama, hooks, MCP config)

.claude/
  commands/nan-forget.md   Slash command for manual control
  hooks/memory-sync.js     PostToolUse hook (auto-saves .md → SQLite)
  hooks/session-end.js     SessionEnd hook (transcript sweep for unsaved memories)
  settings.json            Hook config (PostToolUse + SessionEnd + UserPromptSubmit)

由 NaN Logic LLC 构建

  • NaN Mesh — AI Agent 的信任网络
  • NaN Forget — 适用于任何大模型的长期记忆

MIT 许可证。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。