ais について
aisは、人やエージェント向けのプレーンテキスト索引です。任意のキーでリンク、ファイルパス、メモなどを保存し、同じキーで正確に取り出せます。各種インターフェースが同じ索引を使い、参照先のファイル自体は移動しません。
主な機能
- 01ローカルのプレーンテキスト索引
- 02任意のキーによる正確な検索
- 03ファイルやウェブの参照を保存
- 04各インターフェースで索引を共有
- 05秘密情報の暗号化保存
活用シーン
- 01エージェントによる保存済み情報の再取得
- 02関連キーを使ったファイルやリンクの特定
- 03スマートフォンとコンピューター間での索引同期
MCP 対応
MCP サーバーとして `recall`、`find`、`tags`、`timeline` を公開します。標準では読み取り専用で、`ais --mcp rw` により保存も可能です。暗号化された値は内容を公開しません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
ais
自分のキーで何でも保存し、そのキーで呼び出せます。
自分のディスク上にあるプレーンテキストのインデックスと、その上で動作するスマートフォン、ブラウザー、ターミナル用アプリです。リンク、ファイル、メモ、パスワードなど、何でも1つ以上のキーを付けて保存し、そのキーで呼び出せます。たとえば ais venice italy と入力すると、連想によって記憶をたどるように、両方のキーを付けて保存したものが返されます。保存するのは参照だけなので、ドキュメントは元の場所に残り、インデックスはその表示にすぎず、データに手を加えることはありません。誰もが使うウェブを検索する検索エンジンでも、推測でタグ付けするツールでもありません。自分のものを、自分の言葉で整理するインデックスです。なぜそれが重要なのかは以下をご覧ください。
エンジンは1つ、フロントエンドは薄い構成です。CLIが仕様となり、ウェブGUI(ais --serve)、Flutterモバイルアプリ、ネイティブWin32ラッパーがその上で動作します。エンジンはこれらのいずれにも依存しません。Cで実装されており、データベースもランタイムのインストールも不要です。
コーディングエージェントは、grepを呼び出すのと同じように ais を呼び出せます。ただし、もう一度検索する代わりに、保存したものを呼び出します。設定は1行、質問あたり2,900トークンで24,500トークンと同等の結果が得られ、40件中40件の回答が正確でした。測定結果と再現方法。
プレーンテキストなので、独自のツールより長く使い続けられます。インデックスは何十年にわたるアーカイブを経ても残り、50年後にも開くことができ、何にでもエクスポートできるため、ロックインもありません。データを長期間読み取り可能な状態に保つことは、コンピューティングがいまだ解決できていない デジタル暗黒時代 の問題です。ファイル形式や、それを開くアプリはデータよりも早く使えなくなります。1960年代からどんなマシンでも特別なプログラムなしに読めるプレーンテキストは、最も古く、最も安全な解決策です。
コマンドライン版は基本となるものです。パス、いつも調べ直すsshトンネル、リンクを、後で思い浮かべる言葉でそれぞれ保存し、その言葉で呼び出します。
同じインデックス上で動作するGUIもあります。ブラウザー上のウェブGUI、Windowsアプリ、スマートフォンアプリです。Android:
リンク、ファイルパス、メモを保存し、タグで呼び出します。パスワードは暗号化されたままです(🔒)。
同じアプリをiPhoneでも使用でき、上記のAndroidとWi-Fi経由で同期できます:
あなたの記憶は、あなたの手元に。
検索エンジンも自動タグ付けツールも、どちらも「平均」を返します。つまり、ほとんどの人にとってそれらの言葉が意味することや、モデルが最も頻繁に目にしたものです。誰もが知っているものを探すときには正しい答えですが、あなただけが保存したものを探すときには間違った答えです。
あなたのキーは、その平均からのずれです。ある人にとって「venice」は2023年の一週間であり、別の人にとってはガラス工場、また別の人にとっては論文の一章です。どれに当たるかを記録できるのはあなただけであり、どれだけ学習データがあってもそれを取り戻すことはできません。平均化とは、まさにその違いを取り除くものだからです。
だから ais は推測もタグ付けもしません。あなたが選んだ言葉のもとに、あなたが渡したものを保存し、あなたが同じ言葉を口にしたときに返します。それが取引のすべてです。何かに名前を付けるという小さな作業を一度行えば、その見返りとして、インデックスはみんなの平均ではなく、あなた自身のものになります。あなたが管理できるプレーンテキストで保存され、ファイルを人質に取られることもありません。
概要とメメックスの起源については about.txt を、背景にある事前分布/圧縮の議論については foundation.md をご覧ください。
よくある質問
SQLite やデータベースではだめですか?
データベースは アプリ には適したツールですが、これは 個人 のためのものです。SQLite は一つのプログラムしか理解できないバイナリファイルですが、ais は行指向のプレーンテキストなので、読み取り、grep、diff、手作業での復旧ができます。必要のないクエリ機能を手放す代わりに、プレーンテキストの堅牢性と透明性を得られます(about.txt をご覧ください)。
組み込みエンジン(BerkeleyDB、LMDB、gdbm)ではだめですか? バンドルされたエンジンは、自分で管理できない依存関係だからです。初期の ais は、買収されてライセンスが変更されたまさにその時期に、実際に BerkeleyDB(Java 版と C 版の両方)上で動作していました。このプレーンテキスト設計は、実体験から学んだ教訓です。特定のライブラリのバージョンでしか開けない形式を使うのは、そのライブラリやライセンス、ディスク上のレイアウトが自分のデータより長く存続することに賭けるようなものですが、そうなることはめったにありません。ais には依存するエンジンがありません。将来の ais、任意の unix ツール、あるいは移行先のどんな形式でも、保存データを読み取れます。
キーだけで検索するのは制限がありませんか?
意図的なものです。あなたが割り当てるキー そのもの が大切なのです。キーは、あなたの事前分布であり、世界に対するあなたの並べ方です。全文検索は単語を見つけますが、キーはあなたが定めた意味を見つけます。(ais --find では引き続き値とパスを検索できます。)文書の内容を検索するには、ファイルとして保存し、そのパスをインデックスに登録してください。
組み込みのウェブサーバーはおもちゃではありませんか?
意図的に最小限にしており、主要なインターフェースではありません。ais --serve は CLI を薄くラップしたものにすぎず、127.0.0.1 のみにバインドする単一ユーザー向けのループです。ネイティブの Win32 アプリと Flutter モバイルアプリも別のラッパーですが、エンジンはそのどれにも依存しません。フロントエンド全体の構成については dev/DISTRIBUTION.md をご覧ください。
これは単なるブックマーク管理ツール/recoll/org-mode ではありませんか? これら3つすべてと重なる部分はありますが、どれもそのままコピーしたものではありません。ブックマーク管理ツールではありません。ブラウザー内の URL ではなく、何でも どんな キーのもとにも保存できます。全文検索(recoll)ではありません。文書の本文ではなく、あなたが選んだキーをインデックス化します。org-mode でもありません。単一のツリーも、アプリへのロックインも、覚える必要のあるマークアップもなく、プレーンファイル上の集合演算(AND/OR)で扱うキーだけがあります。独自の点は、インデックスが あなたの偏りそのもの であり、平均化されずにポータブルな形で保たれることです。
埋め込み表現やベクトルデータベースではだめですか? 埋め込み表現は、メモをその言葉の平均的な意味の近くに配置します。それこそ、このインデックスが避けようとしている平均化です。ここでの想起は厳密です。あなたが選んだキーの積集合を使います。間違ったキーなら何も返さず、最も近い3件を返すことはありません。そのため、エージェントは信頼できる答えを得るか、何も得ないかのどちらかです。インデックスを再構築する必要も、モデルを固定する必要も、類似度のしきい値を調整する必要もありません。何をファイルしたのか分からないときには埋め込み検索が優れたツールですが、分かっているときにはキーのほうが優れたツールです。 写真ライブラリやファイルに置き換わるのでしょうか? いいえ、それらを参照します。ファイル、写真、ページに関して、ais はコピーを保存するのではなく、参照先を示すインデックスです。写真は Immich に、ファイルはディスク上に、ページはその URL にそのまま残ります。独自のキーで参照情報を保存し、関連付けによって呼び出します。実データは元の保存場所に残ります。Immich やファイルシステムと競合するのではなく、それらを横断する唯一の連想レイヤーとして、物事がどこにあり、なぜ重要だったのかを記憶します。(例外はシークレットで、これらは下記のとおり暗号化してインライン保存されます。)
パスワードを保存できますか?パスワードマネージャーですか?
はい。シークレットはインラインで暗号化して保存されるため(-e)、ログイン情報を関連するコンテキストのすぐ隣に置けます。また、組み込みのマネージャーとは異なる特徴が2つあります。1つ目はクロスプラットフォームであることです。Apple Keychain と Google Password Manager はそれぞれ1つのエコシステムに限定されますが、ais は Windows、macOS、Linux、Android、iPhone、CLI で同じプレーンテキストのインデックスを使えるため、シークレットを持ち運べます。2つ目はエージェントに安全であることです。復号は対話形式で行われるため(ターミナルまたはアプリで入力するパスフレーズを使用)、インデックスを読むエージェントに見えるのは不透明な aisc: マーカーであり、シークレットそのものではありません。マスターキーや、解除状態の保管庫が吸い出される心配もありません。一方で、大量の Web ログイン情報を管理するためのものではありません。自動入力も生成も共有保管庫もないため、何百ものサイトのログイン情報を扱うなら、専用のクロスプラットフォームマネージャーのほうが便利です。詳しくは about.txt をご覧ください。
エージェントにインデックスを渡す
エージェントにとって、インデックスは以前の抽出結果をキャッシュしたもののように機能します。情報は一度見つけて登録すれば、後で思い出すときに必要なのは1行だけです。一方、grepでは質問のたびに検索全体を繰り返します。見つからなかった場合は、通常の検索コストがかかります。呼び出しは正確です。間違ったキーを指定すると、もっともらしい別の情報ではなく、何も返りません。
1行でクライアントに接続できます。
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をご覧ください。
同じインデックスは、セッション間、あなたとエージェントの間、そして異なるモデルのエージェント間で共有されるメモリです。ホームインデックスでは、エージェントがキーをあなたに尋ねます。-fで指定するプロジェクトやグループのインデックスでは、すでに使用されているキーからエージェントが選びます。そのため、次のセッションや別のモデルが、グループ内で使われている言葉で保存済みの情報を呼び出せます。エージェントは頼まれたときに保存します。何も指示しない場合、保存することはほとんどありません(測定結果)。複数のエージェントが同時に1つのインデックスを利用できます。読み取りにはロックが不要で、書き込みは排他ロックのもとで順番に処理されます。インデックスはノートPC、Androidスマートフォン、iPhone間で同期されます。詳細と、プレーンテキストファイルには現れない仕組み:ロック、クラッシュに強い書き換え、100万件のレコードに対してミリ秒単位で応答するインデックス、そして離れた場所にあったデバイスで編集や削除が行われても破綻しないマージです。
もう1つの入り口はスキルです。すでにシェルを使えるエージェント向けに、.claude/skills/ais/SKILL.mdを自分のプロジェクトの.claude/skills/にコピーして使います。CLIを操作するため、レコードの編集や削除も可能です。これは、どの設定でもサーバーからはできません。
測定方法:8つの質問をそれぞれ5回実行し、同じコーパスを使ってclaude-sonnet-4-6を2つの方法で動かしました。recall側では、呼び出した行だけをもとに回答しました。質問はレコードを登録した本人が作成したため、すべての質問がキーと一致しています。表はヒット時のコストを示しており、キーに対応する情報が登録されていない質問では、通常の検索コストがかかります。インデックスはCLIツールとしてエージェントに提供しました。これは、ais --mcpがパイプ経由で提供する検索と同じです。
| ファイル検索(grep + read) | キーによるrecall | |
|---|---|---|
| 正しく回答 | 40問中31問 | 40問中40問 |
| 質問あたりのトークン数、平均 | 24,500 | 2,900 |
| うち、取得したペイロード | 4,744 | 68 |
中央値ではトークン数が4分の1、平均では9分の1になり、コンテキストウィンドウに取り込む内容は69分の1になります。ターミナルで自分でaisを実行すれば、モデルを一切使わないためコストはゼロです。
ハーネスはexperiment/にあり、公開されている写真ライブラリのコーパスで手法を実行する同梱のハーネスは、APIキーなしで再現できます。
cd experiment && python3 analyze.py --csv results_repeats_sanitized.csv
見出しの数値は、同じ手法を非公開の10万行のコードプロジェクトに適用した結果です。同梱のハーネスは、公開されている写真ライブラリのコーパスで手法を実行します。
キーが検索に勝る理由はabout.txtと上記をご覧ください。
ダウンロード
Android:アプリは Google Play から入手できます。
https://play.google.com/store/apps/details?id=com.aisindex.ais
iPhone:同じアプリの iOS 版は TestFlight で公開されています。App Store の掲載が承認されると、リンク先はこちらになります。
macOS と Linux:次の1行でインストールまたは更新できます。
curl -fsSL https://raw.githubusercontent.com/Anode1/ais/main/scripts/install.sh | sh
お使いの OS と CPU に合ったビルドをダウンロードし、公開されている .sha256 と照合してから、~/.local にインストールします(別の場所にインストールするには PREFIX=/usr/local を指定します)。コンパイルは不要で、root 権限も必要ありません。~/.local/bin が PATH に含まれていない場合は、追加する行を表示します。スクリプトをシェルにパイプで渡したくない場合は、まず 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は CLI で、もう一方の.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 にはすべてのコマンドが記載されています。日常的に使う CLI のチートシート(検索、追加、編集)とデータの保存場所については、doc/USING.txt をご覧ください。
ヒント: alias is='ais' と設定すると、2文字で検索できます。is venice italy は、答えを返す質問のように読めます。
詳しくはこちら
| 内容 | 説明 |
|---|---|
doc/USING.txt | 使い方と、すべての OS での GUI の操作方法(専門用語を使わない、簡潔な手順)。 |
doc/about.txt | ais とは何か、何ではないか。 |
doc/command_line.txt | すべてのコマンドとオプション、および ais --help の全内容。 |
doc/MCP.md | ais --mcp エージェントツール:クライアントへの接続方法、開くインデックス、拒否する操作。 |
doc/NOTES.md | エージェントが書き込むノートの形式:ais --doc で分類するプレーンテキストの箇条書き。1か所に1つの事実を記し、人にも機械にも読みやすくする理由、および文書や 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 - コーディングエージェントと作業するための短いプロンプト集です。ais もその一つです(手順を毎回導き出すのではなく、保存して呼び出します)。
ライセンス
新しいコードは、GNU GPL v2 以降(COPYING)または MIT(LICENSE-MIT)のいずれかを選べるデュアルライセンスです。レガシー素材(legacy/)には、元の Apache License 2.0 が適用されます。作者:Vasili Gavrilov(GitHub Anode1)。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。