关于 ais
ais 是面向个人与 Agent 的纯文本关联索引,可按自定义键保存和精确取回链接、文件路径、笔记等。它保留原始文件位置,以轻量前端共享同一索引,并通过只读或可写 MCP 接入 Agent。
主要功能
- 01纯文本本地索引
- 02按自定义键精确取回
- 03保存文件与网页引用
- 04跨端界面共享索引
- 05加密保存秘密信息
适用场景
- 01让 Agent 取回先前归档的信息
- 02按关联键定位文件或链接
- 03在手机和电脑间同步索引
MCP 相关
ais 提供 MCP 服务,向客户端开放 recall、find、tags 和 timeline;默认只读,使用 `ais --mcp rw` 可启用保存。加密值仍保持不可读。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
ais
用自己的键保存任何内容,再通过这些键取回。
一个存放在自己磁盘上的纯文本索引,外加运行其上的手机、浏览器和终端应用。你可以用一个或多个键保存任何内容(链接、文件、笔记、密码),再通过这些键取回:ais venice italy 会返回你用这两个键保存的内容,就像你的思维通过联想来回忆一样。它只存储引用,因此你的文档仍留在原处;索引只是一个视图,不会触碰你的数据。它不是搜索全网内容的搜索引擎,也不是会猜测标签的工具,而是用你自己的词语索引你自己的内容。原因见下文。
一个引擎,多个轻量前端。CLI 就是约定;Web GUI(ais --serve)、Flutter 移动应用和原生 Win32 封装都运行在它之上,而引擎不依赖其中任何一个。使用 C 编写,无数据库,无需安装运行时。
编码 Agent 可以像调用 grep 一样调用 ais,只不过它取回的是你归档的内容,而不是重新搜索:只需一行配置,每个问题使用 2,900 个 token,而不是 24,500 个;40 个答案全部精确。测量结果及复现方法。
由于采用纯文本格式,它比自身的工具更长久:你的索引能经受数十年的归档,五十年后仍可打开,还能导出到任何地方,不会被锁定。让数据长期保持可读,是计算领域尚未解决的数字黑暗时代问题:文件格式和打开它们的应用,比数据本身消亡得更快。纯文本自 20 世纪 60 年代以来就能在任何无需特殊程序的机器上读取,是最古老、最安全的解决方案。
命令行版本是基础:保存一个路径、一条你总要查找的 ssh 隧道、一个链接,每项都用你日后会想到的词语标记。然后通过这些词语查询。
同一索引也有图形界面:浏览器中的 Web GUI、Windows 应用和手机应用。Android:
保存链接、文件路径和笔记,按标签取回;密码会保持加密(🔒)。
同一应用也可运行在 iPhone 上,并通过 Wi-Fi 与上方的 Android 同步:
你的记忆,由你留存。
搜索引擎和自动标签器都会给出平均答案:这些词对大多数人意味着什么、模型最常见到的是什么。当你要找大家都知道的东西时,这是正确答案;当你要找只有你自己保存过的东西时,这就是错误答案。
你的关键词,就是与这个平均值的偏差。对一个人来说,“venice”是 2023 年的一周,对另一个人来说是家玻璃厂,对第三个人来说则是论文中的一章。只有你会记录它到底指哪个意思,而再多的训练数据也无法还原这一点,因为取平均正是消除这种差异的过程。
因此,ais 不会替你猜,也不会替你打标签。它会按你选的词保存你交给它的内容,并在你再次说出这些词时交还给你。交易就是这么简单:你只需花点时间给事物命名一次,换来属于自己的索引,而不是所有人的平均值;内容是你掌控的纯文本,也永远不会让你的文件受制于它。
查看 about.txt,了解项目介绍和 memex 的起源;查看 foundation.md,了解其背后的先验/压缩论述。
Questions
为什么不用 SQLite 或数据库?
数据库适合应用;而这是为个人打造的。SQLite 是一个只能由某个程序理解的二进制文件;ais 则是按行组织的纯文本,你可以读取、用 grep 搜索、比较差异,也可以手动恢复。你放弃了用不上的查询能力,换来纯文本的持久性与透明性(参见 about.txt)。
为什么不用嵌入式引擎(BerkeleyDB、LMDB、gdbm)? 因为捆绑的引擎是你无法掌控的依赖。早期版本的 ais 确实基于 BerkeleyDB 运行(Java 版和 C 版都是),而它恰好在被收购并重新授权时,这个纯文本设计就是我们亲身吸取的教训。只有某个库版本才能打开的格式,意味着你在赌这个库、它的许可证以及磁盘布局都比你的数据更长久;但这种情况很少发生。ais 不依赖任何引擎:未来任何版本的 ais、任何 Unix 工具,或任何你迁移到的格式,都能读取这个存储。
只搜索关键词是不是有局限?
这是刻意为之。你指定的关键词就是重点:它们是你的先验,是你对世界的排序。全文搜索找的是词;关键词找的是你赋予的意义。(ais --find 仍会搜索值和路径。)要搜索文档内容,请将文档保留为文件,并为其路径建立索引。
内置 Web 服务是不是只是个玩具?
它刻意保持精简,也不是主要接口。ais --serve 只是命令行接口的一个轻量封装,仅供单用户使用,而且只绑定到 127.0.0.1。原生 Win32 应用和 Flutter 移动应用也是其他封装;引擎不依赖其中任何一个。完整的前端结构图见 dev/DISTRIBUTION.md。
这不就是书签管理器/recoll/org-mode 吗? 它与这三者都有重叠,但并未照搬其中任何一个。它不是书签管理器:它可以将任何内容按任意关键词保存,而不是只保存浏览器中的 URL。它不是全文搜索(recoll):它为你选择的关键词建立索引,而不是索引文档正文。它也不是 org-mode:没有单一的树形结构,没有应用锁定,也无需学习标记语言,只有纯文件和基于集合的关键词运算(AND / OR)。它的独特之处在于,索引就是你的偏好,不经平均处理,并且可移植。
为什么不用嵌入向量或向量数据库? 嵌入向量会让你的笔记靠近其词语的平均含义,而这种平均正是该索引要避免的。这里的检索是精确的:你选择的关键词,取交集。关键词错误时就不会返回任何结果,而不是返回三个最相近的结果;这样,Agent 得到的要么是可信的答案,要么就没有答案,而且无需重建索引、固定模型,也无需调整相似度阈值。当你不知道自己归档了什么时,嵌入搜索是更好的工具;当你知道时,关键词就是更好的工具。 它会取代我的照片库或文件吗? 不会,它只是指向它们。对于文件、照片和网页,ais 存储的是指针索引,而不是副本:照片仍在 Immich 中,文件仍在磁盘上,网页仍在其 URL 上。你可以用自己的键保存引用,并通过关联找回;原有存储空间仍保存数据。它不会与 Immich 或文件系统竞争,而是跨越它们,成为唯一的关联层,记住某个内容在哪里,以及它为何重要。(唯一的例外是机密信息:这些内容会以内联方式存储,且经过加密,见下文。)
它能保存密码吗?它是密码管理器吗?
可以。机密信息会以内联方式加密存储(-e),因此登录信息可以紧挨着其所属的上下文保存;它还有两点有别于内置管理器。首先,它跨平台:Apple Keychain 和 Google Password Manager 都绑定于各自的生态系统,而 ais 在 Windows、macOS、Linux、Android、iPhone 和命令行上使用同一个纯文本索引,因此机密信息可以随你同行。其次,它对 Agent 安全:解密需要交互操作(你在终端或应用中输入的密码短语),因此 Agent 读取索引时只会看到不透明的 aisc: 标记,而不是机密信息,也没有可供其窃取的主密钥或已解锁保险库。但它不是一款用于批量管理网站登录信息的工具:它没有自动填充、密码生成或共享保险库功能,因此管理数百个网站登录信息时,专用的跨平台密码管理器仍然更方便。参见 about.txt。
为 Agent 提供你的索引
对 Agent 来说,索引就像是先前提取内容的缓存:找到某个内容后将其归档,之后回忆时只需一行命令;而 grep 每次遇到问题都会重复完整搜索。未命中时,仍需照常搜索。回忆结果精确:键不正确时会返回空结果,而不是看似合理的内容。
只需一行即可将其接入客户端:
claude mcp add ais -- ais --mcp # or: {"mcpServers":{"ais":{"command":"ais","args":["--mcp"]}}}
这样就能通过 stdin/stdout 提供 recall、find、tags 和 timeline。它是只读的,ais --mcp rw 会启用保存功能,但无论设置如何,都不能删除或编辑。加密值仍保持不可读。它会打开你的主目录索引、当前命名索引,或 -f 指定的索引;如果 .ais/ 只是通过逐级向上查找发现的,它会拒绝打开,因为克隆仓库可能会附带一个索引:要提供项目索引,需指定其名称,例如 claude mcp add ais -- ais -f /abs/path/of/project/.ais --mcp,而客户端配置中的这一行就是授权。完整说明见 doc/MCP.md。
同一个索引也是跨会话、你与 Agent 之间,以及不同模型的 Agent 之间共享的记忆。在你的主目录索引中,Agent 会向你询问键。在项目或群组索引中(通过 -f 指定),Agent 会从已在使用的键中选择键,因此下一个会话或另一个模型可以用群组使用的词语找回已保存的内容。Agent 会在收到要求时保存;如果没有明确要求,它很少会这么做(测量结果)。多个 Agent 可以同时使用同一个索引:读取无需加锁,写入则通过独占锁串行执行。索引会在笔记本电脑、Android 手机和 iPhone 之间同步。详细信息,以及纯文本文件未展示的内容:锁定、崩溃安全重写、在百万条记录时仍能于毫秒内响应的索引,以及能在设备彼此离线期间的编辑和删除操作后仍成功合并的机制。
Skill 是另一种接入方式,适用于已有 shell 的 Agent:将 .claude/skills/ais/SKILL.md 复制到你自己项目的 .claude/skills/ 中。它通过 CLI 操作,因此可以编辑和删除记录,而 MCP 服务无论采用何种设置都无法做到这一点。
测量方法:八个问题,每个问题重复五次,使用 claude-sonnet-4-6 在同一语料库上分别运行两种方式;recall 组仅根据找回的那一行作答。问题由归档记录的人编写,因此每个问题都对应一个键:表格展示的是命中时的开销,而没有归档在某个键下的问题仍需照常搜索。索引通过 CLI 工具提供给 Agent,这与 ais --mcp 通过管道提供的查找功能相同。
| 文件搜索(grep + read) | 按键回忆 | |
|---|---|---|
| 正确作答数 | 40 个中答对 31 个 | 40 个中答对 40 个 |
| 每个问题的 Token 数,平均值 | 24,500 | 2,900 |
| 其中,检索载荷 | 4,744 | 68 |
中位数下的 Token 数减少了 4 倍,平均值下减少了 9 倍,带入上下文窗口的内容减少了 69 倍。在终端中自行运行 ais,开销为零,因为完全不涉及模型。
测试框架位于 experiment/,已存档的运行结果无需 API 密钥即可复现:
cd experiment && python3 analyze.py --csv results_repeats_sanitized.csv
随附的测试框架会在公开照片库语料上运行此方法;文中的核心数据则来自使用同一方法处理的一个包含 10 万行代码的私有项目。
下载
Android:该应用可在 Google Play 下载:
https://play.google.com/store/apps/details?id=com.aisindex.ais
iPhone:同一款应用已为 iOS 构建并在 TestFlight 中提供;App Store 链接会在应用获批上架后跳转至此。
macOS 和 Linux:一行命令即可安装或更新:
curl -fsSL https://raw.githubusercontent.com/Anode1/ais/main/scripts/install.sh | sh
此命令会下载适用于你的操作系统和 CPU 的构建版本,根据已发布的 .sha256 校验文件,并安装到 ~/.local(如要安装到其他位置,可设置 PREFIX=/usr/local)。它不会编译任何内容,也不需要 root 权限。如果 ~/.local/bin 不在 PATH 中,它会打印需要添加的那一行。如果你不想把脚本通过管道传给 shell,请先阅读 scripts/install.sh。运行 ais --serve 可在浏览器中打开 GUI。
也可以手动获取文件。以下链接始终指向当前版本:
- 不通过 Play 安装 Android 版:下载发布页面上的
.apk,或在 Obtainium 中添加https://github.com/Anode1/ais,它会在每次发布新版本时自动安装;当它询问要选择哪个 APK 时,现代手机适用…-arm64-v8a.apk。 - 不使用脚本安装 macOS / Linux 版:解压
…-<os>-<arch>.zip,然后直接运行其中的ais,或将它复制到 PATH 中。 - Windows:解压
…-windows-x86_64.zip,然后双击ais-web.bat,它会在浏览器中打开 GUI(如果没有打开,请访问http://127.0.0.1:8765);通过 QR 码同步手机的方式与 Linux 上相同。旁边的ais.exe是命令行工具,另一个.exe是用于搜索和添加的小型原生窗口。无需安装,也无需运行时。
桌面二进制文件未经代码签名,因此首次运行时会被标记为无法识别的下载(macOS Gatekeeper 会提示“无法验证”)。这是新文件且未签名的提示,并非恶意软件检测结果:在 macOS 上,请在解压后的文件夹中运行 xattr -dr com.apple.quarantine .。自行构建的副本不会触发此标记。Android 安装包已使用项目自己的上传密钥签名。
验证下载文件
每个发布文件旁边都有对应的 …zip.sha256。下载这两个文件,然后校验哈希(匹配时会显示 OK):
shasum -a 256 -c ais-*-*.zip.sha256 # macOS / Linux
发布版本由 GitHub Actions 在公开环境中构建(.github/workflows/release.yml),而非在任何人的机器上构建。
快速开始(从源代码构建)
make # build ./ais
./ais --init # create an index here (a .ais/ directory, git-style)
./ais --serve # open the web GUI in your browser
ais --help 会列出所有命令;doc/USING.txt 提供日常命令行工具速查表(回忆、添加、编辑),并说明数据存放位置。
提示:alias is='ais' 可让你用两个字符进行回忆:is venice italy 读起来就像它要回答的问题。
了解更多
| 阅读 | 内容 |
|---|---|
doc/USING.txt | 如何使用,以及各操作系统上的 GUI(步骤简单,无术语)。 |
doc/about.txt | ais 是什么,以及它不是什么。 |
doc/command_line.txt | 所有命令和选项,以及完整的 ais --help。 |
doc/MCP.md | ais --mcp Agent 工具:如何将其接入客户端、它打开哪个索引,以及它会拒绝什么。 |
doc/NOTES.md | Agent 写入的笔记格式:使用 ais --doc 归档的纯文本项目符号列表,每处记录一个事实,同时便于人和机器阅读;以及为何不用文档或 JSON。 |
doc/SYNC.md | 在设备间同步索引:通过加密 LAN 同步(--sync),或通过 Syncthing 等工具保持同步的共享文件夹(--sync-folder)。 |
doc/OVERVIEW.md | 为什么采用这种构建方式,以及项目的起源。 |
doc/ROADMAP.md | 计划内容、已知但尚未修复的问题,以及如何提供帮助。 |
doc/dev/LAYOUT.md | 磁盘格式和模块图。 |
AGENTS.md | 如何参与开发:约定、构建和测试流程。 |
doc/dev/README.md | 其他所有开发者说明的索引:同步、前端、打包和发布。 |
man ais | 完整的命令参考。 |
另请参阅
agent-recipes — 用于与编码 Agent 协作的简短提示词;ais 是其中之一(用于存储和调用流程,而不是每次重新推导)。
许可证
新代码:可选择 GNU GPL v2 或更高版本(COPYING)或 MIT(LICENSE-MIT),采用双重许可。旧版材料(legacy/)遵循其原始 Apache License 2.0。作者:Vasili Gavrilov(GitHub Anode1)。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。