内容
持久记忆,让AI编码智能体更强大
`funes` 为您的AI编码智能体提供持久索引您在Cl、Codex和pi上的过去会话,让任何智能体都能回忆起过去的决策、理由和发现。
 会检测您的平台,下载匹配的预编译二进制文件,并将其放在您的PATH中(默认为`~/.local/bin`):
```bash
curl -fsSL https://huggingface.co/buckets/huggingface/funes/resolve/install.sh | sh
```
然后试试:
```bash
funes guide
```
或者,手动获取一个[二进制文件](https://huggingface.co/buckets/huggingface/funes):
| 平台 | 二进制文件 |
| --- |
| Linux x86_64 | `funes-x86_64-linux` |
| Linux aarch64 | `funes-aarch64-linux` |
| macOS Apple Silicon | `funes-arm64-apple-darwin` |
```bash
curl -fsSL https://huggingface.co/buckets/huggingface/funes/resolve/funes-x86_64-linux -o funes
chmod +x funes && ./funes guide
```
`funes` 在安装完成后立即生效: **`funes guide`** 会在您索引任何内容之前引导您,而 `funes status` 会告诉您回忆是否正在读取您的存储。
如果已经安装, **`funes update`** 会在原地用您平台的最新版本替换二进制文件( `--force` 会重新安装当前版本); `funes status` 会告诉您何时有新版本发布。
要自己构建,请参阅[从源代码构建](#从源代码构建)。
## 记忆循环
`funes` 适用于一个循环:**索引**您的过去会话,**添加** `funes` 到您的智能体,然后只需**询问您的智能体** — 让它自己回忆。
**1. 索引 — 每个智能体一份存储。**
```bash
funes index # 扫描 ~/.claude/projects, ~/.codex/sessions, ~/.pi/agent/sessions 到一个存储中
```
运行后不带参数,`funes` 会索引它找到的每个受支持智能体的会话到一个存储中。
它是增量的只有新的回合被嵌入 — 所以在工作时重新运行很便宜 — 一个存储运行约 2.3 KB/块,每天增长约 6 MB([存储增长](docs/storage.md))。指向一个路径来索引一个位置,或使用 `--harness codex` 限定为一个智能体。
`funes` 可以索引来自:Claude, Codex, Pi 的会话
**2. 将 funes 添加到您的智能体中。**
```bash
funes add claude # 本地
funes add claude acme/kb # …依赖于您拥有的共享存储(跨机器/团队同步)
```
您的智能体获得了 `recall` 和 `get` 作为工具,以及关于何时使用它们的说明。对于 **Claude 和 Codex**,`funes add` 还会启用自动化:它会为您构建第一个索引(如果您跳过了1),安装一个在每个回合索引的钩子,并在您命名共享存储时发布(并为您执行第一次推送)。无需手动执行任何操作;请参阅 [docs/automation.md](docs/automation.md)。
`funes` 可以添加到:Claude, Codex, Pi, Hermes, OpenCode
**3. 询问您的智能体 — 让它回忆。**
从这里开始,您只需要工作。当某些过去的决策、其理由或早期发现时,智能体会自己调用 `recall`需粘贴上下文。即使模型也是如此:我们测试的每个模型 — Gemma 4 E — 都能自发,而不是需要被告知。
这就关闭了循环:您刚刚完成的工作在您下次变得可回忆 — 对于 Claude 和 Codex,` add` 已经安装了钩子,[自行保持最新](#自动化)。
## 跨智能和模型)工作
您的记忆并不绑定到一个 Claude Code、Codex 都索引到一个存储您可以 **切换智能体丢失任何内容** — Code 中开始一个任务,在 Codex 中继续, 每个智能体都能回忆起 **整个** 历史,而不仅仅是自己的会话(每个命中都显示它来自哪个智能体)。任何其他智能体都可以通过 `.parquet` 跟踪导出加入同一个存储。
模型的工作方式相同。funes 不运行自己的模型,因此您可以使用智能体使用的任何模型进行推理 — 通过 **pi**、任何本地模型或通过 Hugging Face 路由模型。在会话之间切换模型时,记忆不会移动。
## 跨机器或团队共享本地存储是一个数据集其发布到您拥有的 Hugging Face **数据集** 仓库,以便跨机器或团队共享。在将存储绑定到智能体时,它会从那里回忆并自行保持最新:
funes add claude acme/kb # 回忆读取 acme/kb;钩子发布到那里
# (为您构建第一个索引并执行第一次推送)
```
绑定存在于智能体的配置中 — 没有隐藏的全局默认值。在底层,它是两个您可以直接运行的命令:
```bash
funes push acme/kb # 将本地存储的新块发布到 acme/kb
funes recall "..." --store acme/kb # 读取远程存储以调用(无需绑定)
```
第二种形式也可以用于其他人**发布的关于的记忆 — `funes recall "..." --store other-org/subject-kb` — 无需触及您自己的设置。

*一个此机器从未处理过的项目:提示命名 `dacorvo/funes-Glint-Research-Fable-5` — Hub 上约 21.6k 块 — pi 直接从中回忆起过去的需在回忆调用一个存储参数。没有任何附件,也没有本地索引。*
在第一次发布时,`funes push` 还会写入存储库的 **数据集卡** — 什么是 funes 存储,如何从中回忆, 实时统计数据 — 标记为 `funes`,因此每个共享存储在 Hub 上都是可识别的(并且 [可发现](https://huggingface.co/datasets?other=funes))。后续推送会保持统计数据更新。您自己编写的数据集卡永远不会被触及。
第一次推送到与本地存储没有共享任何块的存储(第一次推送、新主机或错误的存储)会要求确认后再上传;从终端拒绝而不是猜测( `--yes` 覆盖)。您不需要 Hub 即可在本地使用 `funes` — 这是一个您可以选择加入的层级远程缓存整个文件到,因此暖调用以本地速度运行([缓存工作原理](docs/hub-caching.md。
## 保护`funes` 在存储每个会话 **之前**凭证删除。在发布时,一个单独的、始终开启的门会扣留任何仍然包含秘密的块,并以非零退出,而不是上传 — 运行 `funes scrub` 以清理旧行,然后再次推送。它只删除凭证;其余部分会原样发布。
例如,当门挡住每一行脏数据时,什么也不发货,推送退出非零:
```console
$ funes push acme/kb
扫描 512 个块以查找秘密…
hf://datasets/acme/kb:未发布 — 扣留 3 行包含秘密(AWS×2,PrivateKey×1);运行 `funes scrub`,然后
$ echo $?
```
## 自动化funes index` 是增量的且廉价的,但您仍然需要记住运行它 — 因此对于 Claude 和 Codex,`funes add` 已经将其连接起来:每个回合都会自动索引,并且绑定了,每个会话都会发布。有关它安装的内容和参见 [docs/automationdocs/automation.md 工作原理
```
~aude/projects, ~/./sessions, ~/.piessions (或quet 跟踪)
解析 确定性 — 回合(文本 / 思考 / 工具使用 / 工具结果),由智能体标记
│ 分块 每个内容块一个块,紧密的出处
│ 嵌入 固定的本地模型(BAAI/bge-small-en-v1.5)
▼ 存储 本地 Lance 数据集(向量 + BM25)
recall(query) ──> 向量 + BM → RRF 交叉编码器 → 最近 邻居
```
都是一个 [`Tracesrc/source.rs),它将其格式读取为通用块形状;下游所有内容 — 块 → 存储 → 回忆 — 都是与源无关的另一个智能体意味着特征,而不是触及索引或查询路径。
### 自己检查
`funes`了智能体的输出,而不是人类的输出。
然而,在运行回忆时,它会注意到 — 并切换到交互手动检查存储:bash
funes recall稀疏注意力掩码必须在 top-k 选择未来键" --store dacorvo/funes-GResearch-Fable-5
```
浏览点击并将一个展开到周围的回合。
安装f](https:///junegunn) 以获得更丰富的界面。
完整的接口 — 输出格式、标志、默认值 — 在 [AGENTS.md](AGENTS.md) 中指定。
## 从源代码构建
需要 Rust 工具链和 **`protoc`** — `l 的构建脚本在构建时编译 protobuf(编译文件不需要它)。两种方式之一安装:
```bash
# 系统范围:
sudo apt-gety protobuf-compiler # Debian/Ubuntu
brew install protobuf # macOS
# …或存储库本地,无需 sudo(下载固定协议到 .tools/):
./scripts/bootstrap-protoc.sh
export PROTOC="$PWD/.tools/bin/protoc"
```
然后 `cargo build -- (二进制文件target/release/funes`cargo test` 运行测试套件。集成测试在第一次运行时下载嵌入器/重排序器权重。
推理(嵌入 + 重排序)运行在内置后端 — macOS 上的 AccelerLinux 上的纯 Rust — 因此默认构建 运行时依赖项,可以在任何 glibc ≥ 35(Ubuntu 22)上运行。ONNX 运行时后端作为一个可选变体提供:
```bash
cargo build --release --no-default-features --features onnx # ONNX 后端
cargo run --release --features onnx --example bench_backends # 基准测试两个后端
```
## 注意
- **嵌入模型** 并被存储中;使用不同的嵌入模型进行查询会被拒绝。要更改它,请从转录中重建(存储是一个可处置的派生工件 — 原始文本保留在每一行中)。这与您 **推理** 的模型是分开的,可以自由更改。
- **子智能体转录** (`.../subagents/agent-l`)也会。
## 为什么是
> *"思考就是忘记差异,概括,*"
> — 豪尔赫·斯·博尔赫斯,《记忆的尤利西斯》
`funes` 的构建方式它与其他记忆工具 — 记录在 [docs/RATIONALE.md/RATIONALE.md) 中。
## 许可证
`funes` 在 License 2.0](LICENSE) 下许可。