ais

io.github.Anode1由 GitHub 帳號 Anode1 發布v0.3.43更新於 Nov 3, 2026

面向代理程式與人類的記憶:通過純文字索引,按你自己的鍵實現精確回憶。

AI 翻譯由 AI 模型根據下方的原文描述翻譯,可能有誤。

原文描述

Memory for agents and people: exact recall from a plain-text index, by your own keys.

已驗證STDIO僅桌面檔案與儲存知識與記憶

概覽

ais 的本機 MCP 服務;無需登入;STDIO。

暫無 AI 概覽:以下資訊來自註冊中心條目和服務本身。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 ais,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

ais

Save anything under your own keys, recall it by those keys.

An index in plain text on your own disk, with apps for the phone, the browser and the terminal over it. You save anything (a link, a file, a note, a password) under one or more keys, and recall it by those keys: ais venice italy gives back what you saved under both, the way your mind does, by association. It stores only a reference, so your documents stay where you keep them; the index is a view, and your data is never touched. Not a search engine over everyone's web, and not a tagger that guesses: an index of your own things under your own words. Why that matters is below.

One engine, thin front-ends. The CLI is the contract; the web GUI (ais --serve), the Flutter mobile app and a native Win32 wrapper sit over it, and the engine depends on none of them. C, no database, no runtime to install.

A coding agent can call ais the way it calls grep, except that it recalls what you filed instead of searching for it again: one line of config, 2,900 tokens a question against 24,500, and 40 of 40 answers exact. The measurement, and how to reproduce it.

Because it is plain text, it outlives its own tools: your index still opens in fifty years and exports into anything. Keeping data readable that long is computing's unsolved digital dark age, where file formats and the apps that open them die faster than the data. Plain text, readable since the 1960s on any machine with no special program, is the oldest answer.

[Save a photo, two ssh tunnels and a link under your own keys, then recall them by key]

The command line version, which is the base: save a path, the ssh tunnel you always look up, a link, each under the words you would think of later. Then ask by those words.

There are GUIs over the same index: a web GUI in the browser, a Windows app, and the phone app. Android:

[Everything you saved: links, file paths, and encrypted secrets] [Search returns clickable links] [Browse everything by tag]

Save links, file paths and notes, recall them by tag; passwords stay encrypted (🔒).

The same app on an iPhone, synced with the Android above over Wi-Fi:

[The timeline on an iPhone] [Search by tag on an iPhone] [Saving a secret under a password on an iPhone]

Why

Your memory, yours to keep.

A search engine and an automatic tagger both answer with the mean: what these words mean to most people, what the model saw most often. That is the right answer when you are looking for something everyone knows, and the wrong one when you are looking for something only you saved.

Your keys are the deviation from that mean. "venice" is a week in 2023 for one person, a glass factory for another, a chapter of a thesis for a third. Nothing but you records which one it is, and no amount of training data recovers it, because averaging is precisely what removes it.

So ais does not guess and does not tag for you. It saves what you give it under the words you chose, and hands it back when you say them again. That is the whole trade: you do the small work of naming a thing once, and in exchange the index is yours rather than an average of everyone's.

See about.txt for the pitch and the memex origin, and foundation.md for the prior/compression argument behind it.

Questions

Why not SQLite, or a database? SQLite is a binary file one program understands; ais is line-oriented plain text you can read, grep, diff, and recover by hand. You trade query power you do not need for the durability and transparency of plain text (see about.txt).

Why not an embedded engine (BerkeleyDB, LMDB, gdbm)? Because a bundled engine is a dependency you do not control. An early ais version ran on BerkeleyDB (both the Java and the C editions) right as it was acquired and relicensed; this plain-text design is that lesson. A format only one library version can open is a bet that the library, its license, and its on-disk layout outlive your data; they rarely do. ais has no engine to depend on: any future ais, any unix tool, or any format you migrate to can read the store.

Is keys-only search not limiting? On purpose. The keys you assign are your prior, your ordering of the world. (ais --find still searches values and paths.) To search a document's contents, keep it as a file and index its path.

Is the built-in web server not a toy? ais --serve is one thin wrapper over the CLI, a single-user loop that binds 127.0.0.1 only. The full front-end map is in dev/DISTRIBUTION.md.

Is this not just a bookmark manager / recoll / org-mode? Not a bookmark manager: it saves anything under any keys, not URLs in a browser. Not full-text (recoll): it indexes the keys you choose, not document bodies. Not org-mode: no single tree, no app lock-in, no markup to learn, keys with set algebra (AND / OR) over plain files.

Why not embeddings or a vector database? An embedding places your note near the average meaning of its words, which is the averaging this index exists to avoid. Recall here is exact: the keys you chose, intersected. A wrong key returns nothing instead of the three nearest neighbours, so an agent gets an answer it can trust or no answer at all, with no index to rebuild, no model to pin, and no similarity threshold to tune. Embedding search is the better tool when you do not know what you filed; keys are the better tool when you do.

Does it replace my photo library or files? No, it points into them: a photo stays in Immich, a file on disk, a page at its URL, and the index holds the reference under your own keys. (Secrets are the one exception: those it stores inline, encrypted, see below.)

Can it hold passwords? Is it a password manager? Yes. A secret is stored encrypted inline (-e), so a login lives right next to the context it belongs to, and two things set it apart from a built-in manager. It is cross-platform: Apple Keychain and Google Password Manager are locked to one ecosystem, while ais is the same plain-text index on Windows, macOS, Linux, Android, iPhone and the CLI, so your secrets travel with you. And it is agent-safe: decryption is interactive (a passphrase you supply at a terminal or in the app), so an agent reading your index sees an opaque aisc: marker, not the secret, with no master key or unlocked vault to drain. For hundreds of site logins a dedicated manager is still more convenient: there is no autofill, no generation, no shared vault here (about.txt).

Give an agent your index

For an agent the index works like a cache of earlier extraction: a thing is found once and filed, and a later recall costs one line, where grep repeats the whole search on every question.

One line wires it into a client:

sh
claude mcp add ais -- ais --mcp        # or: {"mcpServers":{"ais":{"command":"ais","args":["--mcp"]}}}

That serves recall, find, tags, timeline and due over stdin/stdout. It is read-only, ais --mcp rw adds saving, and there is no delete or edit at any setting. Encrypted values stay opaque. It refuses a .ais/ it merely found by walking up, because a clone can ship one; a project index is served by naming it with -f. Which index it opens, what it refuses and what a model never sees: doc/MCP.md.

The same index is memory shared between sessions, between you and an agent, and between agents of different models. On your home index the agent asks you for keys. On a project's or a group's index, named with -f, it chooses them from the keys already in use, so the next session, or another model, recalls what was saved by the group's words. An agent saves when asked; left alone it rarely does (measured). Details, and what the plain-text file does not show: locking, crash-safe rewrites, recall in milliseconds at a million records, and a merge that survives edits and deletes on devices that were apart.

A skill is the other door, for an agent that already has a shell: .claude/skills/ais/SKILL.md, copied into your own project's .claude/skills/. It drives the CLI, so it can edit and delete records, which the server cannot at any setting.

The measurement: eight questions, five repeats each, claude-sonnet-4-6 run both ways over the same corpus, the recall arm answering from the recalled row alone. The questions were written by the person who filed the records, so every question matched a key: the table is the cost of a hit, and a miss costs the usual search. The index reached the agent as CLI tools, which is the same lookup ais --mcp serves over a pipe.

[Tokens a question, file search against recall by key, with the retrieval payload inside each bar, and no model at all at the terminal.]

file search (grep + read)recall by key
answered correctly31 of 4040 of 40
tokens per question, mean24,5002,900
of that, the retrieval payload4,74468

Four times fewer tokens at the median and nine at the mean, and 69x less content dragged into the context window. Run ais yourself at the terminal and the cost is zero, because no model is involved.

The harness is in experiment/, and the deposited run reproduces with no API key:

sh
cd experiment && python3 analyze.py --csv results_repeats_sanitized.csv

The shipped harness runs the method over a public photo-library corpus; the headline numbers come from the same method over a private 100k-line code project.

Download

Android: the app is on Google Play:

https://play.google.com/store/apps/details?id=com.aisindex.ais

iPhone: the same app, built for iOS and in TestFlight; the App Store link lands here once the listing is approved.

macOS and Linux: one line installs or updates:

sh
curl -fsSL https://raw.githubusercontent.com/Anode1/ais/main/scripts/install.sh | sh

It downloads the build for your OS and CPU, checks it against the published .sha256, and installs into ~/.local (PREFIX=/usr/local to put it elsewhere). It compiles nothing and needs no root. If ~/.local/bin is not on your PATH, it prints the line to add. Read scripts/install.sh first if you would rather not pipe a script to a shell. ais --serve opens the GUI in your browser.

Or take the files by hand. The link below always points at the current release:

https://github.com/Anode1/ais/releases/latest

  • Android without Play: the .apk on the release page, or add https://github.com/Anode1/ais in Obtainium, which installs each release as it appears; when it asks which APK, the …-arm64-v8a.apk fits a modern phone.
  • macOS / Linux without the script: unzip the …-<os>-<arch>.zip and run the ais inside it from there, or copy it onto your PATH.
  • Windows: run the …-windows-x86_64-setup.exe. It installs for your user only (no admin prompt), puts AIS in the Start menu and on the Desktop, and the ais command on your PATH. AIS opens in your browser (if nothing opens, go to http://127.0.0.1:8765) and sits in the notification area by the clock: right-click it to quit. Syncing a phone by QR code works as on Linux. Without installing: unzip the …-windows-x86_64.zip and double-click ais-gui.exe; the ais.exe beside it is the CLI. No runtime either way.

The desktop binaries are not code-signed, so the first run is flagged as an unrecognized download (macOS Gatekeeper "could not verify", Windows SmartScreen "Windows protected your PC"). That is a new-and-unsigned notice, not a malware finding: on Windows click More info, then Run anyway, once for the setup exe (what it installs is not flagged again); on macOS run xattr -dr com.apple.quarantine . in the unzipped folder. A copy you build yourself is never flagged. The Android package is signed, with the project's own upload key.

Verify a download

Each release file ships beside a matching …zip.sha256. Download both, then check the hash (prints OK on a match):

sh
shasum -a 256 -c ais-*-*.zip.sha256          # macOS / Linux

Releases are built by GitHub Actions (.github/workflows/release.yml).

Quick start (from source)

sh
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 lists every command; doc/USING.txt has the everyday CLI cheat-sheet (recall, add, edit) and where your data lives.

Tip: alias is='ais' gives you two-character recall: is venice italy reads like the question it answers.

Learn more

ReadFor
doc/USING.txtHow to use it, GUI on every OS (plain steps, no jargon).
doc/about.txtWhat ais is, and what it is not.
doc/command_line.txtEvery command and option, the full ais --help.
doc/MCP.mdThe ais --mcp agent tool: wiring it into a client, which index it opens, what it refuses.
doc/dev/HTTP_API.mdThe /api/... routes ais --serve answers, for curl or any program: the other agent door.
doc/NOTES.mdThe shape of a note an agent writes: plain-text bullets filed with ais --doc, one fact in one place.
doc/SYNC.mdSync your index between devices: encrypted LAN sync (--sync), or through a shared folder a tool like Syncthing keeps in sync (--sync-folder).
doc/OVERVIEW.mdWhy it is built this way, and where it came from.
doc/ROADMAP.mdWhat's planned, what is knowingly unfixed, and where to help.
doc/dev/LAYOUT.mdOn-disk format and module map.
AGENTS.mdHow to develop it: the contract, the build, the test loop.
doc/dev/README.mdEvery other developer note, indexed: sync, front ends, packaging, releases.
man aisFull command reference.

See also

agent-recipes: short prompts for working with coding agents; ais is one of them (store and recall procedures instead of re-deriving them).

License

New code: dual licensed, your choice of GNU GPL v2 or later (COPYING) or MIT (LICENSE-MIT). Legacy material (legacy/) under its original Apache License 2.0. Author: Vasili Gavrilov (GitHub Anode1).

來源:README.md,提交 f92c729

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

7
  1. v0.3.43最新Nov 3, 2026
  2. v0.3.40Nov 1, 2026
  3. v0.3.39Oct 29, 2026
  4. v0.3.38Oct 25, 2026
  5. v0.3.37Oct 15, 2026
  6. v0.3.29Sep 30, 2026
  7. v0.3.28Sep 27, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分