GitHub 趋势 · 第 43 期

换一个 AI 编程助手就要重讲一遍项目,这个 6,499 star 的项目把记忆搬到了服务器上

#Agent记忆#跨工具交接#Rust

先给判断。ai-memory 的价值不在「给 AI 加记忆」这个功能上——那是红海,每家 CLI 都在做。它的价值在把记忆的所有权从厂商的工具里挪了出来:记忆放在一个你自己跑的服务器上,真相是一堆 git 版本化的纯 Markdown 文件,数据库只是随时可以从文件重建的派生索引。而且它默认零 LLM 调用——抓取、搜索、交接全都不需要 API key。

这件事你大概已经遇到过了。你在 Claude Code 里把项目结构讲了一遍,任务做到一半,切到 Codex 想接着干,它一无所知,你只能重讲一遍:目录怎么分、哪条路试过但失败了、还有什么没解决。换台机器,再来一遍;换同事接手,还得再来一遍。每个平台都在给自己的 agent 加记忆,但这些记忆共享同一堵墙——README 的原话是:笔记存在一台机器上、属于一个 agent、一换工具或换人就消失。

这到底是什么

仓库地址 github.com/akitaonrails/ai-memory。一句话简介是原文:Solution for long term memory for agent coding CLIs and to facilitate handoff between different agent vendors。Rust 写的,MIT 许可。

按 GitHub API 抓到的口径:6,499 star、447 fork、8 个未关闭 issue、41 个 watcher,创建于 2026-05-21,最近推送 2026-09-10,默认分支 main,仓库体积 15,559 KB。它有正式 Release,最新 v2.1.1 发布于 2026-09-08;tag 列表一页排满 30 个、从 v1.22.0 一路到 v2.1.1——不到四个月发到这个密度。

还有一句值得单独拎出来。README 结尾的致谢里写着,这份代码是与 Claude Code(Anthropic Claude Opus 4.7)协作构建的,完整设计记在 docs/design-decisions.md。一个专门解决 agent 记忆的项目,自己是这么写出来的。

capture ──▶ consolidate ──▶ recall ──▶ handoff
 hooks        session-end      search     next agent,
 observe      summaries as     + brief    any harness
 silently     wiki pages       injection

一个 Rust 二进制同时跑 MCP/HTTP 服务,并独占一个数据目录:

<data_dir>/
├── wiki/    # markdown source of truth, git-versioned
├── raw/     # immutable sanitized managed-workstream transcript segments
├── db/      # SQLite indexes, including FTS5, entities, and embeddings
├── models/  # reserved for local embedding models
└── logs/    # rolling tracing output

四个设计决定,把它和「顺手加个记忆功能」区分开

我把它和同类项目拉开差距的地方归纳成四条,全部来自 README 原文:

检索侧也不是单一手段。README 列的是一条融合排序:FTS5 全文检索、实体匹配、图邻居 RRF,可选的向量 RRF 融合,再加一层有界的来源权重调整,以及非全局搜索时的原始观测回退。

支持哪些 Agent:二十多个 harness,但状态分等级

README 第一个卖点写的是 Twenty-plus harnesses。支持矩阵里每一行都是一等公民集成(MCP 注册、生命周期钩子,或两者都有),并且由 CI 盯着。但状态确实分等级,别把它看成一律可用:

状态覆盖范围
Supported(完整集成)Claude Code、Codex、Cursor、Gemini CLI、OpenCode、OpenCode 2(beta)、Devin CLI、Command Code、Grok Build CLI、Antigravity CLI、Kimi Code、Kiro CLI、Pi / Oh My Pi(OMP)、Zero、ZCode、OpenClaw
MCP-onlyClaude Desktop、Swival CLI、VS Code Copilot、Zed
Hooks-onlyPool
Managed-onlyCrush
CommunityHermes Agent
平台Linux 原生 / macOS 原生 / WSL2 均 Supported;原生 Windows 为 Experimental

文档量也值得一提:docs/ 目录里躺着 48 个 .md。安装手册、架构、安全模型、多用户归属与审计、生命周期运维(purge / rename / backup / restore 的安全矩阵)、OKF v0.2 格式映射、按时间点回溯查询(as_of)、本地嵌入、benchmarks 全都在里面。一个四个多月大的项目做到这个文档程度,比较少见。

上手:macOS 上从零到跑通

官方推荐 macOS 用原生二进制(预编译 release 或源码构建),既不用 Docker,也不需要 Rust 工具链。docs/macos.md 里 Scenario A 的命令原文如下:

# 1. 按芯片下载并解压到固定位置(aarch64 = Apple Silicon;x86_64 = Intel)
mkdir -p ~/Applications/ai-memory && cd ~/Applications/ai-memory
curl -fsSL -O https://github.com/akitaonrails/ai-memory/releases/latest/download/ai-memory-macos-aarch64.tar.gz
tar -xzf ai-memory-macos-aarch64.tar.gz

# 2. 初始化数据目录(默认 ~/Library/Application Support/ai-memory)
./ai-memory init

# 3. 启动服务,只绑本机回环
./ai-memory serve --transport http --bind 127.0.0.1:49374

关键的一句话在文档里被单独加粗了:第 3 步的服务必须一直开着。init 只创建目录、不启动服务;bootstrap、install-hooks、install-mcp、status 全都是客户端,靠 HTTP 跟服务说话,服务没起就会报 Connection refused (os error 61)。所以把 serve 留在第一个终端,另开一个终端接 agent:

# 第二个终端:serve 必须一直开着,否则下面几条会连接失败
cd ~/Applications/ai-memory
./ai-memory install-hooks --agent claude-code --apply
./ai-memory install-mcp   --client claude-code --apply

# 可选:把二进制放进 PATH
sudo ln -sf ~/Applications/ai-memory/ai-memory /usr/local/bin/ai-memory

换 agent 就是同样两条命令换个名字(--agent codex、--client cursor……)。Docker 是另一条路,官方镜像同时提供 linux/amd64 与 linux/arm64,Apple Silicon 不用加模拟参数:

docker run -d --name ai-memory \
    --restart unless-stopped \
    -p 127.0.0.1:49374:49374 \
    -v ai-memory-data:/data \
    docker.io/akitaonrails/ai-memory:latest

想省 API key,就把所有 LLM 与 EMBEDDING 相关的 -e 行去掉,FTS5 检索照样工作——这正是「零 LLM 是默认路径」的意思。日常真正会用到的命令不多:

ai-memory run claude          # 托管工作流:跨 harness 的会话连续性
ai-memory run codex --yolo    # 之后换 harness,还是同一个 workstream
ai-memory continue            # 恢复最新的托管 checkout
ai-memory bootstrap           # 接入已有几个月历史的老项目时跑一次
ai-memory uninstall --apply   # 只删它自己装过的东西

接好之后捕获是静默的:钩子记录提示词、工具调用和会话边界,会话结束时整理成 wiki 页面,下一个会话开局就带着一份交接简报。你也可以直接问它:where did we leave off?、have we discussed X?、catch me up。服务器加上 --enable-web 会给一个只读的 wiki 浏览界面和 /api/v1 的 JSON API。

我的判断

适合谁:同时用两三个 agent CLI 的人(Claude Code + Codex + Cursor 混着用),这份收益最直接;有 homelab 或者一台常开机器、希望记忆跨设备跟着走的人;以及想让「这个项目踩过什么坑」在团队里共享、但个人交接保持私密的团队——多用户鉴权、按人归属和审计日志都是内置的,不是付费档。

不适合谁:只用单一 agent、单机单人——你的工具自带记忆可能已经够用,多维护一个常驻服务是净成本。以及完全不想跑常驻服务的人:所有命令都是客户端,服务不在就什么都做不了。

三个必须先知道的坑:① 默认配置没有鉴权,只绑 127.0.0.1,想暴露到局域网得自己加 bearer token;② 一个数据目录只能有一个服务,README 把「绝不跑两个」写成了唯一一条必须遵守的规则;③ macOS 上想用 launchd 常驻有细节要处理——launchd 不展开变量、没有 EnvironmentFile,AI_MEMORY_AUTH_TOKEN 只能从进程环境读,而且两个日志文件不会自动轮转,要自己加 newsyslog 条目或者定期截断。

还有两个更具体的:其一,安装顺序会影响结果。如果你先把二进制软链到 PATH、再跑 install-hooks,macOS 下不解析软链,会去错误的父目录找 hooks/,干净机器上直接报错(issue #546);更麻烦的是如果之前装过,它可能悄悄复用旧缓存还回报成功。其二,Docker wrapper 走 posix shell 脚本路径时不执行 [capture] ignore_paths 排除策略,只有原生的 posix-native 钩子会在写入前执行——如果仓库里有你不想被记录的路径,这点要留意。

数据与来源

仓库:github.com/akitaonrails/ai-memory

规模:6,499 star · 447 fork · 8 个未关闭 issue · 语言 Rust · 许可 MIT

版本:最新 Release v2.1.1(2026-09-08 发布);tag 列表一页 30 个,自 v1.22.0 起

时间:创建 2026-05-21 · 最近推送 2026-09-10 · 默认分支 main · 仓库体积 15,559 KB

榜单:GitHub Trending 本月榜在列,本月新增 5,026 star(本期选题依据)

文档:docs/ 目录下 48 个 .md 文件

抓取时间:2026-09-11 17:45(GMT+8)|数据来源:GitHub Trending 官方页面 · GitHub REST API · 仓库 README 与 docs/ 原文

你现在同时用几个编程助手?有没有为「换个工具就得重讲一遍项目」这件事烦过,或者你已经在用某个记忆方案了——评论区聊聊。

下期预告:本期榜单里还有 modular/modular(29,678 star,本月 +3,080,Mojo/MAX)和 apache/maka(5,216 star,本月 +3,941,Apache 孵化中,主打 agent 全程留痕)没写过,看哪边的数据更扎实就写哪个。

#Agent记忆#跨工具交接#Rust