mcpField
A
Aletheia

Aletheia

ローカル
aletheia.firattunaarslan.meメモリ・ナレッジ163 日前に更新

Aletheia について

Aletheiaは、コーディングエージェント向けのプロジェクトメモリです。記憶した主張をソースコードの証拠に結び付け、呼び出すたびに検証することで、古いコード情報への依存を防ぎ、関連ファイルのマップや行番号も示します。

主な機能

  1. 01各メモリにコード上の証拠を付与
  2. 02呼び出しのたびに証拠を再検証
  3. 03古い主張を隠し、移動したコードを通知
  4. 04関連ファイルと行番号を含むマップを生成
  5. 05共有メモリをMarkdownファイルで保存

活用シーン

  1. 01コーディングセッション間で検証済みの事実を維持
  2. 02呼び出した主張に対応する現在のソース行を特定
  3. 03コード変更で無効になったメモリの利用を回避
  4. 04チームでプロジェクトメモリを共有

MCP 対応

stdio経由でrecall、remember、get、verifyの4つのMCPツールを提供します。MCP非対応のエージェントはコマンドラインを利用できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"firatmio-aletheia": {
"command": "npx",
"args": [
"-y",
"@firatmio/aletheia"
]
}
}
}
起動コマンドnpx -y @firatmio/aletheia

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@firatmio/aletheia0.1.1

ツール

4

掲載時のツール一覧 · 4 日前に更新

パラメーター型必須説明
tagstringいいえ
fullbooleanいいえ
querystringいいえ
stalebooleanいいえ
budgetnumberいいえ
sessionstringいいえ

詳細

aletheia

コーディングエージェントが検証できるメモリー。

すべてのメモリーには、コードに基づく証拠が含まれます。Aletheia は想起のたびに証拠を再確認し、
エージェントに該当する行を正確に示し、古くなった事実がコンテキストに入らないようにします。

リリース npm MCP レジストリ:io.github.firatmio/aletheia ライセンス:Apache-2.0 Go 1.24+ 依存関係なし

Glama 上の Aletheia MCP サーバー

クイックスタート · 仕組み · 結果 · リファレンス

証拠とともにメモリーが保存され、行番号付きで [ok] として想起されます。ファイルを移動すると、想起結果には新しい場所とともに [moved] と表示されます。値を変更すると、想起結果からメモリーが除外されます。verify は理由を示します:MaxDiscount が変更されました。

問題

コーディングエージェントはセッション間の内容をすべて忘れるため、毎回同じファイルを読み直します。メモリーツールは忘却を解決しますが、メモリーを類似度で順位付けするため、古いメモリーも、それに取って代わった事実と同じくらい関連性が高く見えてしまいます。その結果、エージェントは数週間前に真実ではなくなった情報を前提に作業を進めます。自信満々に誤った内容を示すメモリーは、メモリーがないよりも悪いのです。

仕組み

プロンプトのたびに、Aletheia は検証済みのメモリーと行番号を示すコードマップを追加します。エージェントは該当する行を正確に読み、処理が終わると Aletheia はタスクによって変更されたファイルを記録します。

  • メモリーには証拠が含まれます。 各メモリーは、主張とアンカーで構成されます。アンカーには、存在し続ける必要がある関数、一致し続ける必要がある行、残り続ける必要があるファイルが含まれます。
  • 想起のたびに証拠を確認します。 確認は機械的に行われ、モデル呼び出しも、埋め込みも、ネットワークも必要ありません。証拠が無効になったメモリーはエージェントに表示されず、その旨を1行で伝えます。
  • 移動したコードを追跡します。 Go の宣言が変更されずに別のファイルへ移動すると、そのメモリーは古くならず、新しい場所とともに [moved] として戻ってきます。
  • 想起結果には行番号が示されます。 builtin_test.go:263 のようなポインターは、その時点のファイルから計算されるため、エージェントは該当箇所を探し回らずに正しい行を開けます。
  • マップは自動で作成されます。 エージェントが処理を終えると、Aletheia はセッションのトランスクリプトを読み取り、タスクによって変更されたファイルを記録します。同じ種類の次のタスクはその情報を起点に始まり、エージェントが記録のためにターンを費やす必要はありません。
  • 削除されることはありません。 置き換えられたメモリーは旧版として扱われ、長期間古くなったメモリーは aletheia lethe(忘却の川、Lethe)によってアーカイブされます。

クイックスタート

1. インストールします。 お好きな方法でインストールできます。どの方法でも同じ単一のバイナリが提供されます。

npm install -g @firatmio/aletheia                             # Node 18+, any OS
go install github.com/firatmio/aletheia/cmd/aletheia@latest   # Go 1.24+
scoop bucket add firatmio https://github.com/firatmio/scoop-bucket; scoop install aletheia   # Windows
brew install --cask firatmio/tap/aletheia                     # macOS, Linux

Linux、macOS、Windows 用のビルド済みアーカイブはリリースページにあります。

2. エージェントを接続します。

プラグインを使用する Claude Code(推奨)。 MCP サーバーと両方のフックが含まれています。続いて /aletheia:setup を実行すると、プロジェクトが初期化されます。

/plugin marketplace add firatmio/aletheia
/plugin install aletheia@aletheia
/aletheia:setup

プラグインを使用しない Claude Code。 プロジェクトをセットアップし、2 つのフックを自分で追加します。これでプロンプトのたびにリコールが行われ、エージェントのコストはかかりません。

cd your-project
aletheia init --agents --claude-hooks   # .aletheia/, usage notes in CLAUDE.md and AGENTS.md, hooks in .claude/settings.json
aletheia hook --dry-run                 # what an agent would get (add a prompt to try one); changes nothing

--claude-hooks は自分で実行してください。エージェントが自分自身のフックを変更することは通常許可されておらず、それは意図的な設計です。プラグインをインストールしている場合は、これらのフックを追加しないでください。プラグインに同じ 2 つのフックが含まれています。init はプラグインを検出して、その旨を表示します。代わりにファイルを手動で編集するには、次を使用してください。

{
  "hooks": {
    "UserPromptSubmit": [{ "hooks": [{ "type": "command", "command": "aletheia hook" }] }],
    "Stop": [{ "hooks": [{ "type": "command", "command": "aletheia hook" }] }]
  }
}

その他のエージェント。 Cursor、VS Code、Claude Desktop、Codex は MCP 経由で接続します。MCP に対応していないエージェントでは CLI を使用します。詳しくは、以下のその他のエージェントをご覧ください。npx を設定した MCP クライアントは、インストール不要で次のように利用できます。{"command": "npx", "args": ["-y", "@firatmio/aletheia", "serve"]}。

エージェントはエージェントガイドを使ってセットアップを行うこともできます。フックの手順は、あの 1 つのコマンドを実行するよう、あなたに引き継ぎます。

メモリーは .aletheia/memories/*.md にプレーンな Markdown として保存されます。メモリーをコミットすると、チーム全員とすべてのエージェントが、各マシンで検証される共通のメモリーを使えます。

アップグレード: npm update -g @firatmio/aletheia、scoop update aletheia、または brew upgrade --cask aletheia を実行します。Go の場合は、同じ go install を再度実行してください。プラグインは claude plugin update aletheia@aletheia で更新します。

  • 実行されるバージョン: フックは新しいバイナリをすぐに使います。MCP サーバーはエージェントを再起動するまで古いバイナリを使い続けます。
  • Windows で go install を使用する場合: エージェントの実行中は、MCP サーバーが aletheia.exe を開いたままにするため、インストールは「ファイルが使用中」というエラーで失敗します。先にエージェントを終了するか、古いバイナリを別の場所に移動してください。Windows では、実行中の exe でも移動できます。

これはアップグレードのたびに機能します。使用されなくなった古いコピーを削除し、ランダムな名前を使うため、まだ実行中のバイナリと名前が重複することもありません。

$bin = "$(go env GOPATH)\bin"
Remove-Item "$bin\aletheia-old*.exe" -ErrorAction SilentlyContinue
Rename-Item "$bin\aletheia.exe" "aletheia-old-$(Get-Random).exe"
go install github.com/firatmio/aletheia/cmd/aletheia@latest

結果

実際のリポジトリでヘッドレス Claude Code(Opus 5.5)を使用して測定しました。各タスクを Aletheia の有無それぞれで実行し、同じ非公開の受け入れテストで成否を判定しました。

リポジトリタスクコストその他合格したタスク
gohugoio/hugo、大規模なサイトジェネレーター(Go のコード 233k 行)5 種類のタスクを各 1 回、計 14 タスク−15%:1 種類の 7 タスクでは −22%、複数種類の組み合わせでは −7%入力トークン −27%、ターン数 −21%14/14、Aletheia なしの場合と同じ
expr-lang/expr、中規模の式言語7 タスクを 2 回実行−9%、両方の実行で同じ最初の編集前に読んだコード −48%14/14、Aletheia なしの場合と同じ
go-chi/chi、小規模で整然としたルーター7 つの小規模タスクを 2 回実行+5% と −5%:損益なし14/14、Aletheia なしの場合と同じ

適切な場所を見つけるコストが大きい中規模以上のコードベースでは、Aletheia の効果が得られます。同じ種類の変更が繰り返される場合に、最も効果を発揮します。日常的な作業では、複数種類のタスクを混ぜた場合の数値を目安にしてください。エージェントが 1、2 回の呼び出しで読み取れる小規模なパッケージでは、削減できるコストはほとんどありません。手法、生の測定値、うまくいかなかったことについては、docs/dogfood-4.2.mdをご覧ください。

リファレンス

アンカー
アンカー保持される条件例
symbol:PATH::NAMEファイルがその関数、メソッド(Type.Method)、型、var、または const を宣言しているsymbol:store.go::Store.Get
contains:PATH::REGEXファイルが正規表現に一致しているcontains:go.mod::^go 1\.23$
exists:PATHパスが存在しているexists:src/auth
file:PATHファイルの内容が変更されていない(保存時にハッシュで封印)file:go.mod
- 1つの宣言に関する主張には `symbol`、ファイル内の1つの要素には `contains` を使います。変更があれば再確認すべき場合に限り、`file` を使います。 - Recall には、`symbol` と `contains` の根拠が現在どこにあるかが表示されます。例:`(store.go:15-21)`。Go の宣言は `go/parser` によって全範囲が取得されます。他の言語では、`symbol` アンカーはキーワード(`function`、`class`、`def`、`fn` など)を使って宣言行を見つけます。これは固定されていないため、移動を追跡できません。 - **コードの移動。** Go の `symbol` アンカーは、宣言のフィンガープリントで固定されます(`symbol:store.go::Store.Get@3f9a…`)。フィンガープリントはコメントとレイアウトを無視します。 - **その場での編集:** アンカーが古くなることはありません。宣言がファイル内に残っている場合、フィンガープリントは参照すらされません。 - **宣言の移動:** 宣言がファイルから移動すると、Aletheia はプロジェクト内を検索します。同じ名前で同じフィンガープリントを持つ宣言がちょうど1つ見つかった場合、メモリは新しい行とともに `[moved: old.go → new.go]` として戻り、`verify --reseal` によって新しいパスが記録されます。 - **確証が十分でない場合は古い状態のまま非表示になります:** 移動の過程でコードが変更された場合、一致するコピーが複数ある場合、または主張に古いファイルが記載されている場合です。 - **Go コード内の `contains` アンカー:** 1つの宣言内で一致する場合、`remember` はその宣言に対する固定済みの `symbol` アンカーを追加します。その後、`contains` アンカーは宣言とともに移動しますが、新しい場所の宣言内でもパターンが一致する場合に限ります。 - `contains` パターンでは、連続するスペースはスペースまたはタブの任意の連続に一致するため、整形し直しても古くなりません。 - 主張に記載されたファイルには、自動的に `exists:` アンカーが付与されます。 - アンカーへのパスは記載しないでください。コードが何をするか(「トークンは IssueToken によって発行される」など)を述べ、どこにあるかは記載しません。シンボルのファイル名を記載した主張は、コードが移動すると古い状態になり、`remember` は保存時にその旨を通知します。 - `contains` アンカーがコメントだけに一致する場合、`remember` は警告を出します。コードが変更されてもコメントが残ることがあるためです。 - アンカーのないメモリは `[?]` として戻り、検証済みの事実より下位にランク付けされ、再確認されない場合は90日後に期限切れになります。

メモリが古くなった場合は、主張を再確認してから、次を実行します。

aletheia verify 3f9a1c --reseal                                   # still true: refresh the evidence
aletheia remember "…new claim…" --anchor … --supersedes 3f9a1c   # changed: replace it

--reseal は、contains、exists、symbol のアンカーが成立しなくなっている場合は拒否するため、誤った主張がひそかに承認されることはありません。

コードマップ

aletheia map "<topic>" は、トピックに最も関連するファイルを、それぞれの主要な宣言と現在の行番号とともに一覧表示します。

optimizer/fold.go: fold.Visit 15-311, fold 10-13, toFloat 329-335
builtin/builtin.go: Builtins 35-1081, Index 18

ファイルは Aider のリポジトリマップと同様に、パスと宣言名がトピックにどれだけ一致するかに基づいて、まずランク付けされます。非表示のファイル、依存関係のファイル、生成されたファイルは除外されます。ビルド、テスト、リリースに関する質問の場合、およびトピックを指定しない概要の場合、マップはビルドファイルから始まります。build and CI: go.mod, Makefile, scripts/, .github/workflows/ci.yml。フックはセッションの最初のプロンプトとともに、プロジェクトの規模に合わせたマップを送信します。ソースファイルが25個未満の場合は送信されず、それ以上の場合は300または600トークンです(--map-budget N で上書きできます)。

他のエージェント:Claude Desktop、VS Code、Cursor、Codex、Aider

Aletheia は stdio 経由で MCP を使用し、4つのツール(recall、remember、get、verify)を提供します。また、通常の CLI としても動作するため、シェルコマンドを実行できるエージェントなら利用できます。

{
  "mcpServers": {
    "aletheia": { "command": "aletheia", "args": ["serve", "--dir", "/absolute/path/to/your-project"] }
  }
}

グローバルインストールを行わない場合は、"command": "npx", "args": ["-y", "@firatmio/aletheia", "serve", "--dir", "…"] を使います。サーバーは --dir で指定されたディレクトリ、またはクライアントが起動したディレクトリから .aletheia/ を探します。.aletheia/ がないプロジェクトでは、ツールは失敗する代わりにセットアップ方法を案内し、aletheia init の実行後すぐに動作を開始します。

- **VS Code**(`.vscode/mcp.json`):`"mcpServers"` ではなく `"servers"` を使い、ディレクトリには `${workspaceFolder}` を指定します。 - **Claude Code:**クイックスタートのプラグインを使います。フックも追加されます。Claude Code は MCP ツールの説明を必要に応じて読み込むため、フックのほうがツールより重要です。 - **MCP を使わないエージェント**(Aider、カスタムエージェント):`aletheia init --agents` を実行すると、エージェントが CLI を呼び出す方法を説明する短いブロックが `AGENTS.md` に書き込まれます。Codex も `AGENTS.md` を読み込むため、MCP ツールと併せて同じメモを取得できます。機械可読な出力にするには、読み取りコマンドに `--json` を追加します。
メモリファイル
---
id: "3f9a1c"
claim: "Auth tokens are issued by IssueToken, HS256 with a 15 minute expiry"
confidence: 0.8
status: "active"
source: "claude-code"
created: "2026-10-21T09:12:44Z"
updated: "2026-10-21T09:12:44Z"
tags:
  - "auth"
anchors:
  - "symbol:src/auth/jwt.go::IssueToken@7370a7fe3669256c"
  - "contains:src/auth/jwt.go::jwt\\.SigningMethodHS256"
---
Refresh tokens are handled separately, by RefreshToken.

@7370a7fe3669256c というサフィックスは、IssueToken が移動してもメモリを追跡できるようにする、封印されたフィンガープリントです。

メモリは手作業で編集したり、プルリクエストでレビューしたり、grep したりできます。単なるファイルです。

CLI
aletheia init [dir] [--agents] [--claude-hooks]
aletheia remember <claim> [--anchor SPEC]... [--body TEXT|-] [--tag T]... [--ttl 30d]
                  [--confidence 0.8] [--supersedes ID]... [--source NAME] [--force]
aletheia remember - [--source NAME] [--force]            # several at once: one JSON object per line on stdin
aletheia recall [query] [--budget N] [--limit N] [--full] [--stale] [--tag T] [--session ID] [--json]
aletheia get <id> [--json]
aletheia verify [id] [--reseal] [--ttl 30d] [--json]   # exits 1 if anything is stale (CI-friendly)
aletheia map [topic] [--budget 600]
aletheia hook [--budget N] [--map-budget N] [--dry-run [prompt]]   # Claude Code hook; every command takes --help
aletheia lethe [--days 30] [--apply] [--json]            # archive superseded and long-stale memories
aletheia stats [--json]
aletheia serve [--dir DIR]                               # MCP server on stdio
aletheia version

すべてのコマンドで --help を利用できます。また、別の場所からプロジェクトを指定するには --dir DIR(または ALETHEIA_DIR)を使います。

remember は、主張が既存のメモリと重複するか、よく似ている場合、終了コード 3 を返して該当するメモリの名前を表示します。これにより、エージェントは代わりに --supersedes を指定できます。

remember - を使うと、1 回の呼び出しで複数のメモリを保存できます。標準入力の各行は MCP ツールのキーを含む JSON オブジェクトで、各メモリは個別に保存されます。

aletheia remember - <<'EOF'
{"claim": "Builtins are registered in builtin/registry.go", "anchors": ["symbol:builtin/registry.go::Builtins"]}
{"claim": "go.mod targets Go 1.18", "anchors": ["contains:go.mod::^go 1\\.18$"], "tags": ["toolchain"]}
EOF

結果は 1 行につき 1 件、順番に出力されます。すべて保存された場合は 0、失敗が競合のみの場合は 3、それ以外の場合は 1 を返します。シェルを通る際に \\ が \ に変わった正規表現(1\.18)も受け付けます。MCP の remember ツールでは、同じオブジェクトを memories として渡します。

安全性
  • **何も実行しません。**アンカーはファイルを読み取るだけです。「確認のためにこのコマンドを実行する」というアンカーはありません。
  • **プロジェクト内にとどまります。**アンカーのパスは相対パスであり、シンボリックリンク経由も含め、ルートの外に出ることはできません。
  • **メモリは指示ではなくデータです。**MCP サーバーはその旨をエージェントに伝え、CLAUDE.md/AGENTS.md のブロックでも繰り返し説明します。
  • **ネットワーク通信、テレメトリー、依存関係はありません。**Go の標準ライブラリだけを使う、単一の静的バイナリです。起動する唯一のプログラムは init 中に実行する git check-ignore で、CLAUDE.md が無視対象かどうかを確認します。
  • **プライバシー:**Aletheia は何も収集しません。フックはお使いのマシン上でプロンプトとセッショントランスクリプトを読み取り、マップメモリはプロンプトの短縮コピーを .aletheia/ に保持します。プライバシーポリシーをご覧ください。

ロードマップ

  • 根拠に紐づくメモリ。想起のたびに検証
  • 想起フック、リアルタイムの行ポインター、コードマップ、Stop フックによるタスクマップ
  • 実際のリポジトリでのペア実行に対応したベンチマークハーネス
  • フィンガープリントで追跡する移動後の Go コード([moved])
  • ビルド済みバイナリ、npm、Homebrew、Scoop、Claude Code プラグイン。MCP Registry に掲載
  • Go 以外にも対応する、封印された symbol アンカーと [moved]:まずは TypeScript/JavaScript と Python
  • aletheia doctor:古くなり続けているアンカーを見つけ、より堅牢なものを提案
  • より多くのリポジトリと繰り返し発生する変更パターンを使った、より長期的なベンチマーク
  • 個人の好みに関する、プロジェクト横断のグローバルメモリ

各リリースでの変更点は CHANGELOG.md に記載されています。

貢献

イシューとプルリクエストを歓迎します。CONTRIBUTING.md と行動規範をご覧ください。Aletheia によってエージェントが誤った判断をした場合は、「An agent was misled」イシューフォームから報告するのが最も役立ちます。セキュリティ上の問題は、SECURITY.md の説明に従って非公開で報告してください。

ライセンス

Apache-2.0 © Fırat Tuna Arslan

ἀ-λήθεια:真実。文字どおりには「忘却を取り除くこと」

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。