我开发了一款免费开源的本地及远程记忆系统,适用于agentw和CL
摘要
LoreKit是一款免费开源的CLI工具,通过本地文件或远程存储为Claude等编码代理提供持久记忆,只需一条命令即可设置。
暂无内容
查看缓存全文
缓存时间: 2026/08/16 18:46
# 用一条命令为你的编程助手赋予记忆——无需注册,只需一个文件夹——LoreKit 博客
来源:https://www.lorekit.io/blog/give-your-agent-a-memory
## 你的助手昨天刚解决过这个问题(https://www.lorekit.io/blog/give-your-agent-a-memory#your-agent-solved-this-yesterday)
昨天你的助手搞清楚了,集成测试需要先启动一个 Postgres 容器。今天它遇到了 `ECONNREFUSED 5432`,认定是连接池配置错误,然后花了九分钟重写了一个本就没问题的文件。还是那堵墙,还是得重新爬,却没有留下任何爬过的记录。每次会话醒来,它都是一片空白。
这里的常见推销话术是一个你必须采用的平台。但它不是。它只是一条命令和一个你拥有的文件夹——你磁盘上的纯文件,没有账户,没有网络,无需任何注册。
而正是这一点让它超越了入门级玩具:**同样的读取路径既能访问本地目录,也能访问托管的 Postgres——从本地扩展到远程是纯粹的*增量式*升级,而非迁移。**你的文件保持原样,`lorekit list` 始终并排显示两个存储,无需导出任何东西。你从一个文件夹开始。你永远不必离开它。
## 两分钟赋予记忆(https://www.lorekit.io/blog/give-your-agent-a-memory#two-minutes-to-memory)
一条命令就能创建 `lorekit-memory`、`lorekit-setup` 和 `lorekit-groom` 技能、一个 MCP 服务器条目,以及嵌入你 `.claude/`(项目级)或 `~/.claude/`(全局级)的生命周期钩子:
```
npx @lorekit/cli install
```
它会问三件事:项目级还是全局级、一个令牌,以及要激活哪些钩子(`all`、`read-only` 或 `none`)。令牌留空,钩子选择 `all`。
两个小文件就能完成设置。首先是在仓库根目录下的 `.lorekit.json`——可以安全提交,不含任何秘密——它将存储固定为磁盘:
```json
{
"mode": "local"
}
```
然后将 MCP 服务器指向你自己的机器,而不是托管服务。`install` 会在你的 `.mcp.json` 中合并一个 `lorekit` 条目——其他服务器不受影响——默认情况下该条目指向托管端点。只需将**该条目**替换为 CLI 的本地 stdio 服务器:
```json
// .mcp.json → mcpServers — 编辑此条目,其他保持不变
"lorekit": {
"command": "npx",
"args": ["-y", "@lorekit/cli", "mcp"]
}
```
整个设置就完成了,运行 `npx @lorekit/cli doctor` 会告诉你当前解析的模式以及由哪个文件决定。
现在触发一次故障。你的助手运行测试,测试失败,而 `PostToolUseFailure` 钩子会说一段话。以下内容来自我写这篇文章时配置的一个仓库的真实输出——一次针对未运行数据库的真正 `pnpm test`:
```
LoreKit: the last Bash call failed. If it's recurring or non-obvious, memory.write to repo::acme/checkout with the fix so the next run avoids it.
```
这是一个提示,而不是写入。写入是由模型调用 `memory.write` 完成的——LoreKit 绝不会在你不知情的情况下记录任何东西。
它记录的也不是别人数据库里的一行数据,而是一个文件:
```
cat ~/.lorekit/repo/acme/checkout/tests-need-local-postgres.md
```
```markdown
---
scope: "repo::acme/checkout"
key: "tests-need-local-postgres"
created: "2026-08-15T17:00:18.477Z"
updated: "2026-08-15T17:00:18.477Z"
seen_count: 1
---
集成测试需要先启动本地 Postgres:docker compose up -d db。没有它,所有测试都会因 ECONNREFUSED 5432 而失败,这看起来像是代码缺陷,但其实不是。
```
(已精简——真实的 frontmatter 包含更多字段,包括标签和来源等。)你可以 `cat` 它。`grep` 它。提交它,或者 `rm` 它。它是你的。
然后开始下一次会话,循环就闭合了:
```
LoreKit: 1 memory loaded · repo::acme/checkout — considerations, not rules; read any in full with memory.read.
- (repo::acme/checkout) tests-need-local-postgres — 集成测试需要先启动本地 Postgres:docker compose up -d db....
```
如果同一个故障在任务中途再次触发,故障钩子现在会首先显示这个经验教训本身,而不是干巴巴的提示——`1 related memory — you've hit something like this before`。
就是这样。这就是那个顿悟时刻。在你自己的磁盘上失败一次,下一个任务开始时就已经知道了。
一个三步循环。安装:一条命令在你自己的磁盘上创建一个由纯 markdown 文件组成的文件夹,无需注册,无需网络。失败:一个测试命令因 ECONNREFUSED 5432 失败,助手使用 memory.write 写下教训。记住:在下一次会话开始时,LoreKit 注入一条已加载的记忆:tests-need-local-postgres,因此下一个任务开始时就已经知道了。一条箭头从第三个面板指向第二个面板,闭合循环。安装、失败、记住。中间没有服务——整个循环在你拥有的目录中的文件里闭合。
## 你现有的配置,加上记忆(https://www.lorekit.io/blog/give-your-agent-a-memory#your-existing-setup-plus-memory)
你可能已经构建了一些东西——一个技能、一个子助手、一个审查工作流。你无需重建它。`lorekit-setup` 将读-失败-写循环接入你已有的宿主:它选择教训存储桶(标签加键命名空间)、作用域,以及“行动前读取”/“遇挫时写入”的触发点。让你的助手运行它并指定宿主名称。
这里有两点人们常搞错。
教训是**建议性的观察,而非规则**。这不是营销上的含糊其辞——注入的代码块里用的词就是:*considerations, not rules*。教训是你的助手留给未来自己的笔记,当它不正确时可以被忽略。
而这正是为什么它不会与你的 `CLAUDE.md` 竞争。`CLAUDE.md` 是你放置已决定规则的地方——经过审查、深思熟虑、纳入版本控制。Lore 是底层的积累层:一堆“嗯,又是这个”的记录,还没资格成为规则。其中一些最终应该升级,但那是人工编辑的任务。大多数永远不会,这没关系——它们仍然值得避免重新学习。
## 三个体现其价值的真实用例(https://www.lorekit.io/blog/give-your-agent-a-memory#three-real-cases-where-it-earns-its-keep)
**它不断重新发现的陷阱。**上面的 Postgres 例子是真实的,也是最典型的单机案例。任何反复出现的环境事实——一个必须运行的服务、构建需要的某个标志、README 中未提及的包管理器——写入一次,之后每个任务都会读取。`seen_count` 会随着相同教训被反复学习而增加,重复出现的教训在代码块中排名更高。
**仅限探索分支的临时教训。**作用域有 `global`、`project::{name}`、`repo::{owner}/{repo}` 和 `branch::{owner}/{repo}::{branch}`,读取时按最具体的优先级。将一次实验的发现写入分支作用域,它就会在该分支出现,其他地方看不到:
```
memory.write {
scope: "branch::acme/checkout::feat/new-cache",
key: "cache-invalidation-strategy",
value: "Session store 用直写(write-through);聚合数据用异步写(write-behind)。",
tags: ["wip"]
}
```
如果分支被废弃,教训也随之消失。如果分支合并,你在 `repo::acme/checkout` 重写该键并删除分支副本。`main` 分支永远不会看到这些混乱。运行 `npx @lorekit/cli tree` 可以在任务开始前查看对于重复键,哪个作用域优先级更高。
**有有效期的备注。**有些事实只在一段时间内有效。传入 `ttl_days`,条目会自动失效:
```
memory.write {
scope: "repo::acme/checkout",
key: "skip-flaky-checkout-test",
value: "checkout.spec 在 CI 上不稳定——后端周五发布修复。别再纠结它。",
ttl_days: 5
}
```
无需清理任务,也不会在十一月还有陈旧的备注误导你的助手。
以上所有内容都无需账户。当你希望在你的笔记本电脑、台式机和队友的机器上共享相同的 lore 时,你无需移动任何东西——只需将 CLI 指向托管存储。三步完成:
1. 在 lorekit.io (https://lorekit.io/) 创建一个免费账户,打开**设置 → API 密钥**,生成一个读写密钥(`lk_rw_...`)。它只显示一次,所以请复制。然后将其交给你之前运行过的同一个安装程序:
```
npx @lorekit/cli install --force
```
2. 当它询问时,粘贴密钥。整个切换就完成了。`install` 会将你的 `.mcp.json` 中的 `lorekit` 条目重新指向带有你令牌的托管端点,并且**远程是默认模式**——所以无需再设置其他内容。(如果你在本地设置时固定了 `"mode": "local"`,删除那一行,默认设置就会生效。)
你的文件从未移动。`npx @lorekit/cli list` 现在会读取**两个**存储并并排打印——一个来自你本地文件的**离线(Offline)**部分,一个来自托管服务的**远程(Remote)**部分——因此你在切换前写入的任何内容都不会丢失。
这个并排视图是为你准备的。要将你已有的教训放入托管存储本身——这样队友的助手或 CI 运行就能读取它们——可以推送一次:
```
npx @lorekit/cli migrate --from ~/.lorekit --to remote # 预览
npx @lorekit/cli migrate --from ~/.lorekit --to remote --yes # 执行推送
```
在添加 `--yes` 之前,这都是预演。它会先检查你的令牌(只读密钥会被拒绝,不会留下半成品),而且它是幂等的——每当你在离线状态下学到了更多东西,可以再次运行。创建日期会随之保留,因此按时间排序仍然有效。最后更新时间和查看次数会在服务器端重新派生。任何你已归档或已过期的内容都会被跳过,不会被恢复。
这是关键部分,让我精确说明:读取*路径*——跨作用域的优先级、排名、去重、字符预算——是一段代码,它接受一个存储作为参数。无论将其指向一个 markdown 文件目录还是一个托管的 Postgres,存储之上的所有逻辑都不会改变。因此 `remote` 并非一个你需要毕业才能使用的不同产品。它只是同一个读取路径,接收了一个更大的数据集。
一个分三步的扩展路径。今天:你拥有的文件夹中的一个本地 markdown 文件存储。然后:通过运行 lorekit install 并粘贴你的读写 API 密钥来连接托管存储;远程是默认模式,因此无需再设置其他内容。结果:一个不变的读取路径,可以接收任一存储——本地模式下的本地文件夹,远程模式下的托管 Postgres——并通过 lorekit list 并排显示两者。你的文件从未移动;没有同步过程。
读取路径从未改变——只是它接收的存储不同了。本地版从来不是玩具;它是其他所有功能的基础层。一个密钥将相同的 lore 带到你自己的多台机器上。一个团队还需要一件事:一个组织。在**设置 → 组织**中,你创建一个组织——你是所有者——并通过 GitHub 用户名或电子邮件邀请队友,每人分配一个角色:`viewer` 只读,`member` 可写,`admin` 管理人员,`owner` 运营整个组织。
然后你按作用域选择共享内容。管理员在**共享作用域**下绑定一个作用域——比如 `repo::myteam/api`。之后,该作用域下任何有写权限成员的写入都会路由到组织。某人编写的部署清单就是每个队友的助手在规划时读取的清单。非成员在绑定作用域下的写入不会被拒绝——他们的写入会静默回退到自己的个人 lore。(希望更明确?可以在单个 `memory.write` 中传入 `org: "my-team"`,而不是绑定作用域。)
相同的 lore 可以到达 CI。将一个只读 `lk_ro_` 令牌放入你的 GitHub Actions 密钥中,进行一次 `memory.list` 调用,你流水线中的 AI 步骤就能以你的笔记本电脑拥有的上下文开始。
令牌前缀在你粘贴之前就能告诉你密钥的权限:`lk_rw_` 读写,`lk_ro_` 只读,`lk_wo_` 只写。免费存储最多 5,000 条记忆,每分钟 120 次请求。
在你做决定时的诚实边界:这里没有语义搜索,也没有任何东西在学习或微调。匹配是基于词法的——重复出现、时间临近和词语重叠。真正的释义可能会错过。你得到的是一个作用域化的备注,你的助手留给未来自己,开始时读取,失败时写入。这比大多数记忆产品的宣称要小,但这是唯一真正可靠的说法。
## 六条教训,或六万条(https://www.lorekit.io/blog/give-your-agent-a-memory#six-lessons-or-sixty-thousand)
对于一个只会增长的存储,明显的担忧是:它学得越多,效果越差。一个包含六条教训的文件夹会注入六行代码。一个包含六万条的、一岁大的团队存储不可能注入六万行。
它不会。读取过程会使用你上下文窗口的一个固定比例——而不是固定数量的教训——来注入信号最强、去重后的内容,并会准确告诉你它忽略了什么。同样的代码,覆盖两端的范围。后续的一篇文章将深入探讨它具体如何扩展。
## 今天就从本地开始(https://www.lorekit.io/blog/give-your-agent-a-memory#start-local-today)
你不需要一个账户、一个决策或一个团队来尝试这个。你需要一条命令和一个你的助手总在犯同样错误的仓库——而你已经有这样的仓库了。:)
```
npx @lorekit/cli install
```
相似文章
分享我一直在做的东西:LoreKit(智能体记忆系统)—— 寻求反馈
Mads 推出了 LoreKit,一个免费且开源的智能体记忆系统,支持 CLI、MCP 和 Web UI,旨在跨会话、团队和环境共享记忆。
rohitg00/agentmemory
agentmemory 是一个开源的持久化记忆层,专为 AI 编程智能体(Claude Code、Cursor、Gemini CLI、Codex CLI 等)设计。它通过知识图谱、置信度评分和混合搜索技术,借助 MCP、Hooks 或 REST API,为智能体提供跨会话的长期记忆能力。该项目基于 iii 引擎构建,无需外部数据库,提供 51 个 MCP 工具。
用于Claude Code、Hermes和OpenClaw Agent的开源自然时序记忆库
agentmemory是一个开源库,为Claude Code、Hermes和OpenClaw等AI代理提供自然时序记忆。它采用三层架构,结合混合检索(BM25、向量、知识图谱)和艾宾浩斯衰减,在达到上下文限制前,可实现约92%的令牌减少和200倍的更多工具调用。
Lore – 让您的编码代理遵循团队做出的决策
Lore 是一款开源工具,可将团队决策存储为类型化的 Markdown 文件,并通过 MCP 确定性地提供给编码代理(如 Claude Code、Cursor),确保代理遵循文档化的需求,而不是猜测。
面向编码代理的开源记忆,通过SSH同步
deja-vu 是一个零依赖的二进制文件,可从 Claude Code、Codex 和 opencode 中索引代理对话历史,形成可搜索的记忆层,支持搜索、通过 MCP 召回、自动召回、编辑、统计、共享以及通过 SSH 同步。