amem について
amemは、コーディングエージェントを使う個人開発者向けのローカルメモリツールです。リポジトリの事実、スキル、タスクをセッション間で保持し、検索可能なメモリを端末内に保存します。ローカル暗号化やバックアップに加え、対応クライアント向けの利用指示も設定できます。
主な機能
- 01検索可能なリポジトリ情報をローカル保存
- 02コーディングエージェントのクライアントを接続
- 03プロジェクトのタスクボードで作業を管理
- 04メモリの暗号化とローカルバックアップ
- 05メモリ整理のスケジュール設定
- 06クライアント別の利用指示を生成
活用シーン
- 01コーディングセッション間で決定事項を再利用
- 02調査前に関連ファイルや制約を確認
- 03エージェントの後続作業をプロジェクト別に整理
- 04暗号化とバックアップでローカルメモリを保護
MCP 対応
amemはローカルエンドポイントを通じてMCPクライアントにメモリとタスク機能を提供し、クライアントをリポジトリに紐付ける設定にも対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
16掲載時のツール一覧 · 1 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| query | string | はい | |
| platform | string | いいえ | |
| sessionId | string | いいえ | |
| workspace | string | いいえ | 名前付きワークスペース(git リポジトリではありません) |
詳細
amem
マシン上にとどまる、個人用エージェントメモリーです。 Claude Code、Cursor、Claude Desktop、Copilot、Codex、Gemini CLI、Windsurf、Continue、Aider、Zedで動作します。
npx @iamem/amem setup

ウェブサイト · 機能 · amem を選ぶ理由 · 仕組み
コーディングエージェントはセッションをまたぐと忘れてしまいます。同じツリーを何度も再検索し、同じ制約を何度も学び直し、すでに一度コストをかけて決めたことを再発見するためにトークンを消費します。
amem は、Cursor、Claude Code、その他のローカルホストに、あなたのリポジトリに関する永続的な事実を、非公開で検索可能なメモリーとして提供します。何が何を所有しているか、どのファイルが重要か、前回何が壊れたかなどを記憶することで、次のセッションを何も分からない状態ではなく、状況を把握した状態で始められます。
amem context "sync auth startup"
# Agent Memory Context
## Best Claims
### claim.sync_auth_mode_startup
Kind: `constraint`
Why: `keyword+8`, `fts+18.0`, `embed+6.3`, `kind:constraint`, `fresh`
The sync service checks auth mode during startup before enabling Drive sync.
Anchors: `src/background/sync-service.ts`
何もアップロードされません。製品の Git 履歴に何も書き込まれません。メモリーはノートパソコン上の ~/.amem/ にのみ保存されます。
amem が生まれた理由
| amem がない場合 | amem がある場合 |
|---|---|
| エージェントは毎回セッション全体を広く探索します | エージェントはまずメモリーを検索し、適切なファイルを確認します |
| 決定事項はチャットのスクロールバックに埋もれます | 決定事項はファイルへの参照を含む構造化された主張になります |
| チームで「AI コンテキスト」ドキュメントを共有するプレッシャーがあります | 明確に個人用です。プロンプトと学びはローカルにとどまります |
平坦な AGENTS.md は古くなります | コンポーネント → フロー → 主張という小さなグラフを、提案を通じて更新します |
amem は共有の社内 Wiki ではなく、クラウド RAG 製品でもありません。自分の作業をエージェントに覚えさせたい個人開発者向けのローカルツールです。
プライバシー(絶対に譲れない事項)
| 項目 | 保存場所 | 共有されますか? |
|---|---|---|
| amem ツール(このリポジトリ) | GitHub / npm | はい — インストール可能です |
| メモリーデータベース | ~/.amem/graph.db(ロック時は .enc) | いいえ |
| Cursor プロジェクトルール | 製品リポジトリ内の .cursor/rules/amem.mdc | コミットしても安全です — ガイダンスのみで、メモリーの内容は含まれません |
| 作成したエクスポート/バックアップ | 書き出し先 | 非公開にしてください — コミットしないでください |
保証事項:
~/.amemはモード0700で作成されます- ローカル UI は
127.0.0.1のみにバインドされます - メモリーがマシンの外に出ることはありません。管理された同期も、「組織と共有」モードもありません
- 任意の匿名インストール ping のみ送信されます(テレメトリーを参照)。いつでもオプトアウトできます
- エージェントには、独自のプロンプト戦略ではなく、リポジトリの事実を保存するよう指示されます
- AES-256-GCM による任意のロックと暗号化ローカルバックアップに対応します — クラウドは引き続き使用しません
要件
- Node.js 20+(ネイティブの
better-sqlite3) - git(リポジトリの識別にリモート URL/ルートパスを使用)
ツールをインストールする
npx @iamem/amem setup # Node 20+ — installs the `amem` CLI
# or
npm i -g @iamem/amem && amem setup
開発中にクローンから使用する場合:
git clone https://github.com/sslugic/amem.git
cd amem
npm install
npm link
amem setup
docs/npm-release.mdを参照してください。CI では npm test と npm run pack:check を実行します。better-sqlite3 は独自のプリビルドを使用するため、一般的な macOS/Linux と Node 20/22 の組み合わせでは追加のネイティブ手順は不要です。
npm install でネイティブコードのコンパイルに失敗する場合は、Xcode CLT(macOS)または build-essential(Linux)をインストールして再試行するか、プリビルドの対応表に一致する Node 20/22 の公式バイナリを使用してください。
テレメトリー
npm install/npx の実行時(CI およびテスト以外)、amem は https://getamem.com/api/beacon/npm-install に匿名の POST を 1 回送信することがあります。送信される情報は次のとおりです。
- パッケージ名とバージョン
- Node.js のバージョン
- OS のプラットフォームと CPU アーキテクチャ
コード、パス、ユーザー名、メールアドレス、IP アドレス、メモリの内容は含まれません。オプトアウトするには、次のようにします。
AMEM_TELEMETRY_DISABLED=1 npm i -g @iamem/amem
~/.amem 内のメモリがマシンの外に送信されることは、今後もありません。
クイックパス
# Cursor or Claude Code in a git repo
amem init --platform cursor # or: claude
# Other hosts (thin installers, same local DB)
amem init --platform windsurf|continue|aider|zed|claude-desktop
# Any other MCP client — binds the repo and prints the endpoint to paste
amem init --platform codex|copilot|gemini|cline|roo|jetbrains|opencode|goose|…
amem platforms # every id amem accepts (aliases included)
# Cross-repo “how I work” prefs (blended into project context)
amem init --personal
# or: amem setup --personal
保存時の暗号化とローカルバックアップ
amem lock --passphrase '…' # or AMEM_PASSPHRASE
amem unlock --passphrase '…'
amem backup --passphrase '…' # ~/.amem/backups by default
amem backup schedule # daily local timer (no cloud)
amem backup unschedule
ロック中は、DB を開くコマンドを実行する前に AMEM_PASSPHRASE を設定するか、ロックを解除してください。
埋め込みとその他のツールキット
すべて無料です。料金プランはなく、制限される機能もありません。ローカル埋め込み、メモリの整理とそのスケジュール、ルールの同期、アテステーションパケットがすべて含まれています。
amem embed use ngram # local n-gram model, or `external` for your own command
amem embed reindex
amem restore --file ~/.amem/backups/amem-….db.enc
amem hygiene
amem rules sync
amem it-pack --out ~/.amem/it-pack
amem doctor --attest
埋め込みモデルには、デフォルトでハッシュモデルが付属しています(ダウンロード不要)。ngram と external(標準入力のテキスト → JSON ベクトル)もローカルで動作します。クラウドの埋め込み API はなく、何もアップロードされません。
決済とメール配信は、CLI とともに公開されない別個の販売者プロセス(npm run shop)です。別のプロジェクトの .env にある Mailtrap と Stripe の名前をホワイトリストに登録できます。詳しくは shop/README.md を参照してください。
すべてのクライアントに amem の使い方を教える
ホストを MCP エンドポイントに接続すると、amem の存在は伝わりますが、タスクボードを確認したり、調査を始める前にメモリを検索したりするよう指示されるわけではありません。amem init と amem setup は、ホストが実際に読み込むファイルに指示を書き込むようになりました。残りの作業は、次の 1 つのコマンドで行えます。
amem instructions # the client(s) bound to this repo
amem instructions --all # every supported client
amem instructions --check # CI-friendly: exits 1 if missing or stale
amem instructions --platform roo # just one
正規のテキスト(src/instructions.ts)をホストごとに生成するため、クライアント間でガイダンスに差異が生じることはありません。
| ファイル | クライアント |
|---|---|
.cursor/rules/amem.mdc | Cursor |
CLAUDE.md | Claude Code |
AGENTS.md | Codex、Grok、OpenCode、Crush、Amp、Qwen、Droid、OpenHands、Warp、Zed、Cody、Antigravity、Neovim、Claude Desktop、Devin、Jules |
GEMINI.md | Gemini CLI |
.github/copilot-instructions.md | GitHub Copilot |
.windsurf/rules/amem.md · .continue/rules/amem.md · .clinerules/amem.md · .roo/rules/amem.md · .kilocode/rules/amem.md · .augment/rules/amem.md · .kiro/steering/amem.md · .trae/rules/amem.md · .amazonq/rules/amem.md | Windsurf、Continue、Cline、Roo、Kilo、Augment、Kiro、Trae、Amazon Q |
.junie/guidelines.md · .goosehints · .aider.amem.md | Junie、Goose、Aider |
同じファイルを共有するホストには一度だけ書き込むため、--all で生成されるファイルは 30 個ではなく 17 個です。共有ファイル(CLAUDE.md、AGENTS.md、.github/copilot-instructions.md)には、所定のマーカーで囲んだブロックを挿入し、既存の場所で置き換えます。その周囲に書かれた内容はそのまま残ります。
# My Project
Use pnpm, not npm.
…
Aider は MCP に対応していないため、ツール名の代わりに CLI コマンドが渡されます。各ファイルにはガイダンスのみが含まれ、メモリの内容は含まれないため、安心してコミットできます。バインド済みクライアントの指示がない場合や古い場合は、amem doctor がその旨を示します。
自動で整理されるメモリ
不要な情報を整理しないと、メモリは劣化します。amem は依頼を待たず、スケジュールに従ってクリーンアップを実行します。
amem hygiene schedule # daily; amem doctor warns when it is not installed
各実行では安全のためのバックアップを作成してから、リポジトリごとに次の処理を行います。
| シグナル | 意味 | アクション |
|---|---|---|
| 事実ではないもの | チャットの埋め草が主張として保存されている | 削除(リポジトリの 25% を超える場合は保留。コーパスの大部分に一致するヒューリスティックは、ヒューリスティックとして破綻しているため) |
| アンカーの劣化 | 主張が参照するファイルがすべて存在しない | 減衰。タグ形式のアンカーとソースのないワークスペースは対象外 |
| 役に立たない情報 | 3 回以上アテステーションされているが、質問への回答に一度も使われていない | 減衰 |
| 未使用 | 期間内に返されず、利用もされていない | 減衰 |
| ほぼ重複 | 同じ内容で、アンカーが重複している | 統合 |
主張が整理対象になるのは、肯定的な証拠がある場合に限られます。アテステーションがないことは、決して不利な証拠にはなりません。そうでなければ、これを公開したとたん、すべてが一斉に減衰してしまいます。ピン留めされた主張は減衰しません。
確認できる節約量
amem context は引き渡した内容を記録し、エージェント(またはホストのトランスクリプトから停止フック)が、引き続き開く必要があった内容を記録します。節約量は、回避できたファイルの実際のサイズから算出されます。
saved = Σ(measured tokens of anchors returned but not opened) − packet_tokens
モデルに自分の価値を見積もらせることはありません。また、何も回避できなかったパケットは損失として報告されます。ダッシュボードには、30 件のイベントが証明されるまで modelled と表示され、その後 measured に切り替わり、観測された比率に基づいて合計値が補正されます。
amem usage attest --opened "src/db.ts" # or let the stop hook do it
amem usage recompute --scope all --apply # re-measure historical events
初回セットアップ(推奨)
amem ui
これにより、セットアップタブが開いた状態で http://127.0.0.1:7843 が表示されます。ホームフォルダー内の Git リポジトリがスキャンされます(Library、node_modules、Downloads などの不要なフォルダーはスキップされます)。対象のリポジトリを選び、クライアント(Cursor、Claude Code、Windsurf、Continue、Aider、Zed など)を選択して、選択した項目の追跡を開始をクリックします。選択した各項目は ~/.amem に登録され、利用可能な場合は対応するインストーラーが適用されます。
ブラウザーのタブではなくデスクトップウィンドウを使いたい場合(同じ localhost サーバーを使用し、プライバシーも同じです):
# once per machine/checkout (downloads Electron — not included in npm i -g)
npm run app:setup
amem app
amem ui はブラウザーを開き、amem app は Electron を開きます。どちらも 127.0.0.1 とのみ通信します。UI サーバーがすでに実行中の場合、amem app はそのサーバーに接続します。グローバルインストールの場合は、パッケージディレクトリ(またはクローン)から npm run app:setup を実行してから、amem app を実行します。
ヘッダーには、個人用切り替え(リポジトリをまたいだ設定)とロック/バックアップの表示があります。ロック状態、最後のバックアップ、毎日のローカルスケジュールを確認できます。メモリーにも同じロック/バックアップの表示があります。セットアップタブには、任意の MCP ホストで使えるコピー可能な記憶の契約(amem recipe)が含まれます。
オプション:再起動後に localhost サーバーを再び起動するには、このコンピューターへのログイン時に amem ui を起動を選択します。
amem service install # macOS LaunchAgent, Linux systemd --user, or Windows Startup
amem service status
amem service uninstall
セットアップ後のタブ:
- セットアップ — リポジトリ、プラットフォーム、ログイン時の自動起動、ブートストラップ提案のスキャン/選択
- メモリー — ファイルごとの事実、スコア付きの下書き(承認/古い項目を置換/非表示/ノイズとして却下)、編集/ピン留め/削除、検索、最近のヒット/ミス
- タスク — 後回しにしたエージェント作業を管理するプロジェクトごとのカンバン(バックログ → 次へ → 作業中 → ブロック中 → 完了)。MCP:
amem_task_add/amem_task_update/amem_task_complete。未完了のタスクはamem_contextに表示されます。長期的に保持する事実にはメモリーを、「後でやる」作業にはタスクを使います。 - 統計 — LLM ごとの推定節約トークン数と、JSON/Markdown/PDF へのエクスポート(請求額ではなく、あくまで代理指標です)
サーバーのみ(ブラウザーを開かない場合):
amem ui --port 7843 --no-open
追加のフォルダーをスキャンする(または対象を一部のフォルダーのみにする)には、AMEM_SCAN_ROOTS にディレクトリをコロン区切りで指定します。
CLI を使う方法(UI なし)
cd ~/path/to/your-real-project
amem init --platform cursor # or: --platform claude
amem doctor
amem status
両方のエージェントを同じローカルメモリーに接続するには、プラットフォームごとに init を一度実行するか、UI で両方を選択します。
日々のワークフロー
1. 探索する前にクエリを実行する
amem context "billing webhook retry"
エージェントに任せることもできます。Cursor には常時有効なプロジェクトルールを設定し、Claude にはフックのガイダンスを設定します。どちらもスキルをインストールします。
amem-bootstrap— 基本メモリーを登録するamem-update-working-memory— セッション後に長期的に役立つ学びを保存する
フックはセッション開始時/プロンプト送信時にコンテキストを注入し、会話のメモを保存し、セッション終了時の下書きをキューに追加します。また、コンテキストの検索結果が空だった後、エージェントが後から実際のファイルを参照した場合は、検索失敗から学習するための下書きをキューに追加できます。下書きはメモリーで承認するか、ポリシーの auto_apply_kinds でリスクの低い種類を許可してください。
セッション開始時には、最近の個人メモリー(過去 7 日間)も注入されるため、新しいチャットでも前回の続きから始められます。現在のリポジトリに言及している個人メモリーが優先されます。種類が private(またはアンカーが private)の個人メモリーは、作業リポジトリのコンテキストには表示されません。説明が単に「Procedure for 」である自動生成スキルは、使用されたことがない限り、候補に表示されなくなりました。また、注入されるテキストは文の区切りで短縮されます。Claude Code は hookSpecificOutput.additionalContext を通じて、Cursor は additional_context を通じてフックのコンテキストを受け取ります。
停止時のチェックポイント(オプトイン)。 Claude の Stop フックコマンドに AMEM_STOP_CHECKPOINT=1 を設定すると(AMEM_STOP_CHECKPOINT=1 amem hook)、Claude が停止する前に長期的に役立つコンテキストを保存します。ただし、そのターンで何かが変更され(編集、コマンド、書き込みを行う MCP ツール)、かつその作業後に amem へ何も保存されていない場合に限ります。読み取り専用のターンと、すでに保存済みのターンには適用されません。
シークレットフィルター。 記憶、キャプチャ、スキルへの書き込みでは、シークレットの値(書き出されたキー、トークン、パスワード、PEM キー、既知のトークン形式)はブロックされますが、SUMSUB_MOCK_WEBHOOK_SECRET のようなシークレットの名前や、"$(gcloud secrets …)" のような参照はブロックされません。IT ポリシーの deny_claim_patterns で、より厳格なルールを追加できます。
2. いつもどおり作業する
メモリーは真実の情報源ではなく、地図として扱ってください。変更する前に、アンカーされたファイルを読んでください。fresh とマークされた主張を優先し、stale な主張(主張の記録後にアンカーされたファイルが変更されているもの)は検証してください。
3. 残すべきことを保存する
エージェントに amem-update-working-memory を実行するよう依頼し、メモリーの下書きを承認するか、自分で提案を適用してください。
amem propose validate /tmp/memory.json
amem propose diff /tmp/memory.json
amem propose apply /tmp/memory.json
4. エージェントによるワンショットインストール(任意)
製品リポジトリ内から docs/agent-install-prompt.md を Cursor または Claude Code に貼り付け、セットアップを実行させます。
保存される内容
メモリーは SQLite に保存される小規模なローカルグラフです。
| オブジェクト | 意味 |
|---|---|
| コンポーネント | サブシステム/モジュール(component.api) |
| フロー | 作業の進み方(flow.checkout) |
| 主張 | ファイルアンカーを持つ長期的に有効な事実(active または superseded の状態を取る場合があり、任意でピン留め可能) |
| エッジ | リンク(主張 → フロー → コンポーネント)。kind: "supersedes" は対象の主張をアーカイブします |
| 下書き | メモリーでの承認を待つ、保留中のセッション/検索失敗から学習するための提案 |
| タスク | プロジェクトのカンバン上で保留中の作業(Backlog/Next/Doing/Blocked/Done)。長期的に有効な事実ではありません |
| スキル | 再利用可能な複数ステップの手順。SKILL.md ファイルとして保存されます(下記参照) |
| 使用イベント | 各 amem context のヒットとトークン推定値 |
検索単位は主張です。ランキングでは次の要素を組み合わせます。
- SQLite FTS5(Porter ステミング)+キーワードスコア
- デバイス上のハッシュ化埋め込み(モデルのダウンロード不要)
- ピン留めによるブースト、種類ごとの重み(
constraint/gotchaはsessionより高い)、鮮度 - プロジェクトのコンテキストに任意でブレンドされる個人設定の主張
注入される各主張には Why: の行が含まれます。stale な主張(updated_at 以降にアンカーが変更されたもの)は、ランキングが下がります。
主張の例:
{
"id": "claim.webhook_idempotency",
"kind": "constraint",
"text": "Stripe webhooks must be idempotent on event.id before mutating invoices.",
"code_anchors": ["src/webhooks/stripe.ts"],
"supersedes": ["claim.webhook_old_rule"]
}
supersedes(または kind: "supersedes" を持つエッジ)は、古い主張の ID をアーカイブ済みとしてマークし、検索対象から外します。
スキル(手続き的記憶)
主張は「何が真実か」に答えます。スキルは「ここではどう進めるか」に答えます。すでに誰かが経験したデプロイ手順、移行の進め方、デバッグの道筋などです。すべてのプロンプトに含めるには長すぎるため、必要に応じて読み込まれます。
スキルは ~/.amem/skills/ 配下の SKILL.md ファイルとして保存され、ランキング用に SQLite にインデックスされます。
~/.amem/skills/deploy-staging/SKILL.md
~/.amem/skills/deploy-staging/references/runbook.md
段階的な開示。 コンテキストパケットには名前と説明だけが含まれます。エージェントは、その手順が当てはまると判断した段階で amem_skill_view を呼び出して本文を取得するため、使われないスキルライブラリによるトークン消費はほとんどありません。
学習ループ。 amem にはモデルが同梱されていないため、スキルを自ら書き込むことはありません。セッションの終了時に、苦労して確立された手順の特徴、つまり番号付きの手順や実際のコマンドに加え、解決したエラーやユーザーからの修正がないかを調べます。複数のシグナルが一致すると、提案を1件キューに追加し、次のコンテキストパケットでエージェントに提示します。スキルを書くのはエージェントで、承認するのはユーザーです。セッション中にスキルが読み込まれたにもかかわらず問題が解決しなかった場合、重複した提案ではなく改訂案をキューに追加します。
基準は意図的に高く設定されており、1つのセッションでキューに追加できる提案は最大1件です。
amem skills list # index of what is stored
amem skills show deploy-staging # full body
amem skills new deploy-staging --desc "Deploy staging and verify health"
amem skills import ./some-skill # bring in an agentskills.io skill
amem skills drafts # pending suggestions and staged writes
amem skills approve <draft-id>
スキルは amem ui の「Skills」タブからも確認できます。
安全性。 スキルはエージェントが従う指示であるため、書き込み前に認証情報やプロンプトインジェクションのパターンがないか内容をスキャンします。次の3つのポリシーキーで制御します。
| キー | デフォルト | 効果 |
|---|---|---|
skills_enabled | true | 保存、ランキング、注入のマスタースイッチ |
skill_write_approval | false | エージェントによる書き込みをディスクに保存せず、レビュー用に保留します |
skill_capture | true | セッション終了時のスキル提案を許可します |
policy.toml を読み取れない場合、skill_write_approval は強制的に有効になります。amem doctor --attest は、インストールされているすべてのスキルについてコンテンツハッシュを報告するため、エージェントに何をするよう伝えているかを差分比較できます。
現在、バックアップでコピーされるのはデータベースのみです。
~/.amem/skills/はまだ含まれていません。対応されるまでは、大切なスキルをバージョン管理に保存してください。
トークン削減(推定値)
amem context を実行するたびに使用イベントが記録されます。UI の Stats タブでは、プラットフォーム(cursor、claude、…)ごとに内訳を確認できます。
自動推定:
estimated_avoided = max(0, anchors×4000 + claims×200 − packet_tokens)
これは、回避できた探索の代替指標であり、Cursor/Anthropic の請求額ではありません。金額も同じトークンの代替指標を使い、入力トークン100万個あたり3ドル(Sonnet クラスの入力)として算出します。Cursor の利用枠に含まれる使用量と出力トークンはこの方法では課金されないため、$ は概算として扱ってください。
削減時間は別の代替指標です。返されたファイルアンカー1件につき、エージェントが実行せずに済んだツールとの往復に約1.2秒かかったものとして扱います。ローカルでの検索時間は計測されます(localhost 上の SQLite)。ヒット率は amem context でのキーワード一致率であり、Cursor/モデル API の呼び出しではありません(それらの呼び出しは引き続き発生します)。ミスは、クエリに一致する保存済みの事実がなかったことを意味します。最新の事実が弱いフォールバックとして注入される場合があり、エージェントは引き続きモデルとやり取りします。
Stats には月間予測も表示されます。直近7日間の呼び出し回数(開始から7日未満の場合はそれより短い期間)を30日分に換算したものです。これも請求額ではなく、あくまで代替指標です。
後から、より適切な数値が分かった場合:
amem usage report --platform cursor --saved 12000
# or attach to a specific event:
amem usage report --event-id usage_… --saved 12000
LLM クライアント(Git リポジトリ以外)
amem は、Git のチェックアウトではない名前付きワークスペースにもバインドできます。Luna Client や、Cursor/Claude/その他のモデルとやり取りするツールで利用できます。
amem init --workspace my-app
# seeds starter facts and runs a context check automatically
HTTP または MCP を使って、任意の LLM クライアントを自分で接続できます。HTTP を使う場合は amem ui を起動したままにしてください。クライアントから、各モデル呼び出しの前に:
const res = await fetch("http://127.0.0.1:7843/api/context", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
workspace: "my-app",
query: userMessage,
platform: "app",
sessionId,
}),
});
const { markdown } = await res.json();
// prepend markdown to the prompt / tool result so the model skips a large retrieve
永続化する価値のある結果が得られた後:
await fetch("http://127.0.0.1:7843/api/remember", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
workspace: "my-app",
text: takeaway,
kind: "session",
anchors: ["my-app"],
}),
});
MCP の設定(任意の MCP ホスト):
amem ui を起動したままにするか、ログイン時に起動するよう amem service install を実行してください。GUI アプリからは PATH 上の amem を見つけられないことがよくあります。その場合、「live tool discovery failed」や MCP の error が表示されますが、サインインを求められているわけではありません。HTTP を推奨します:
{
"mcpServers": {
"amem": {
"url": "http://127.0.0.1:7843/mcp?workspace=my-app"
}
}
}
ホストがバイナリを起動できる場合は、stdio も使用できます。絶対パスを含む設定を出力してください:
amem mcp --print-config --workspace my-app
Git リポジトリのメモリと同じ localhost DB を使用します。UI の切り替えメニューでは、Git リポジトリとワークスペースがグループ化されています。ワークスペースの表示名はいつでも変更できます。MCP のスラッグ(workspace=luna-ai)と保存されたクレームは、同じ ID に紐付いたままです。
amem rename "Luna Client" --workspace luna-ai
MCP ツール(stdio または HTTP):
| ツール | 使用するタイミング |
|---|---|
amem_context | 現在の質問に関連度順でランク付けされたメモリパケットを取得する |
amem_remember | 結果が得られた後、永続化する価値のある事実を保存する |
amem_recipe | 汎用の読み取り後書き込みコントラクト(任意の MCP ホスト向け) |
amem_skill_list | 保存された手順の軽量インデックスを取得する(名前と説明のみ) |
amem_skill_view | インデックスで適用可能と判断された後、スキルの本文を読み込む |
amem_skill_save | 作成した複数ステップの手順を保存する |
amem_repos | 監視対象を確認する(Git リポジトリと名前付きワークスペース) |
amem_stats | 参照時間、推定節約トークン数/ミリ秒、ヒット率を確認する |
amem_graph | ワークスペースまたはリポジトリに保存されたクレーム/コンポーネント/フローを確認する |
amem_status | バインドと件数を確認する。マシン全体の概要を表示する場合は workspace を省略する |
コマンドリファレンス
amem setup [--personal] [--platform <host>]
amem init --platform <client> # amem platforms lists every id
amem platforms [--json]
amem init --workspace <name> [--path <dir>] [--platform …]
amem init --personal
amem rename "<display name>" --workspace <slug>
amem status [--workspace <name>]
amem doctor [--attest] [--json]
amem context "<query>" [--workspace <name>] [--platform …]
amem remember "<text>" [--workspace <name>] [--kind …] [--anchor <path>]
amem recipe [--json]
amem skills list|show <name>|new <name> [--desc <text>]|rm <name>|sync|import <path>
amem skills drafts|approve <draft-id>|dismiss <draft-id>
amem mcp [--print-config] [--workspace <name>]
amem propose validate|diff|apply <file.json>
amem export [--out <file.json>]
amem wipe --yes
amem wipe --all --yes
amem lock|unlock --passphrase <secret>
amem backup [--out <dir>] [--passphrase <secret>] [--label <name>]
amem backup schedule [--out <dir>] [--hour <0-23>]
amem backup unschedule
amem session touch --platform cursor|claude [--session-id <id>]
amem hook
amem usage report --saved <n> [--platform …] [--event-id …]
amem usage export [--format json|md|pdf] [--days 30] [--scope current|all] [--out <file>]
amem license status|apply|activate|clear|issue|keys
amem embed status|use hash|use ngram|reindex
amem ui [--port 7843] [--no-open]
amem app [--port 7843]
amem service install|uninstall|status
| コマンド | 目的 |
|---|---|
setup | 個人用ワークスペースと、任意のホストへのインストールを一度に設定する |
init | Git リポジトリ、名前付きワークスペース、個人設定、またはホストをバインドする |
rename | ワークスペースの表示名を変更する。MCP のスラッグとメモリのバインドは維持される |
context | Markdown パケットを取得し、使用状況を記録する |
remember | ローカルの事実を1つ保存する |
mcp | stdio MCP ツール。UI の起動中は http://127.0.0.1:7843/mcp で HTTP MCP を利用可能 |
skills | 手続き型メモリを管理する(list、show、new、import、drafts、approve) |
propose diff | 適用前にクレーム/コンポーネント/フローの変更をプレビューする |
propose apply | 構造化メモリをローカルでアップサートする |
lock / unlock | graph.db の保存時暗号化に AES-256-GCM を任意で使用する |
backup | ローカルスナップショットを作成する(暗号化は任意)。日次タイマーには schedule を使用する |
ui | ブラウザー(localhost)でセットアップウィザードと Memory + Stats を表示する |
app | Electron ウィンドウで同じ UI を表示する(初回に npm run app:setup を実行) |
service | 再起動後に amem ui を起動するログイン項目を設定する |
doctor --attest | IT チケット向けのプライバシー/ポリシー適合証明 |
export / wipe | 個人用バックアップの作成、または削除を行う(引き続きローカルで実行) |
wipe --all --yes | オフボーディング:すべてのリポジトリを消去し、~/.amem を削除する |
インストールで配置される場所
Cursor
| 成果物 | パス |
|---|---|
| スキル | ~/.cursor/skills/amem-* |
| プロジェクトルール | .cursor/rules/amem.mdc(製品リポジトリ内) |
| フック | ~/.cursor/hooks.json |
スキルやルールがすぐに表示されない場合は、Cursor を再読み込みしてください。
Claude Code
| 成果物 | パス |
|---|---|
| スキル | ~/.claude/skills/amem-* |
| フック | ~/.claude/settings.json(SessionStart / UserPromptSubmit / Stop / 関連イベント → 完全な amem hook) |
その他のホスト
| ホスト | amem が書き込む内容 |
|---|---|
| Windsurf | ~/.codeium/windsurf/mcp_config.json の MCP エントリー |
| Continue | ~/.continue/config.json の MCP サーバー |
| Aider | リポジトリ内の .aider.amem.md CLI ヒント |
| Zed | settings.json の context_servers/HTTP ヒント |
| Claude Desktop | claude_desktop_config.json の stdio MCP エントリー |
amem platforms にあるその他すべてのクライアント — Codex、Copilot、Gemini CLI、Grok、Cline、
Roo、Kilo、Cody、Augment、JetBrains、Kiro、Trae、Antigravity、Neovim、OpenCode、
Goose、Crush、Amp、Qwen Code、Factory Droid、OpenHands、Amazon Q、Warp、Devin、
Jules — にはローカルインストーラーがありません。amem init --platform <id> はリポジトリを紐付け、
貼り付ける MCP エンドポイントを出力します(完全な設定は amem recipe を参照してください)。
クライアント ID はエイリアスが正規化されるため、claude-code、vscode、pycharm、chatgpt は
policy.allowed_platforms によるエラーにならず、それぞれ claude、copilot、jetbrains、codex に解決されます。
セキュリティとアーキテクチャに関する FAQ
amem はツールポイズニングやプロンプトインジェクションをどのように防ぎますか?
会話の文字起こしを無条件に記録するメモリツールは、会話の残留物、敵対的な指示、または汚染されたコンテキストを保存する脆弱性があります。amem は、複数の防御ゲートを適用します。
- 事実とノイズを構文でフィルタリング(
isFactLike): 文字起こしの文、質問、会話上の挨拶、ユーザーのプロンプトの断片は、実在するファイルパスに言及していても、主張になる前に自動的に拒否されます。 - 組み込みおよびカスタムのシークレット拒否リスト(
BUILTIN_DENY_CLAIM_PATTERNS): 組み込みの正規表現により、パスワード、API キー、トークン、秘密鍵が除外されます。管理者は、システムポリシーを通じて追加の拒否用正規表現パターンを適用できます。 - 品質と具体性のスコアリング(
scoreProposal): 提案は、アンカーの有無、持続性のある語彙(constraint、gotcha、must)、具体性に基づいてスコアリングされます。拒否しきい値を下回る、内容の薄いエントリーやスコアの低いエントリーは除外されます。 - デフォルトでの段階的取り込みキュー(
ProposalDraft): バックグラウンドでの取得内容やセッション終了時の推論は、UI で人が確認できるよう、SQLite に提案として一時保存されます。自動適用はデフォルトで無効です(auto_apply_kinds = [])。 - 競合および置換の追跡: 新しい主張が既存の事実とアンカーを共有する場合、amem は類似度を計算して競合の警告を出し、暗黙の上書きを許さず、明示的な置換を求めます。
amem はコンテキストの肥大化やプロジェクト間のメモリ漏えいをどのように防ぎますか?
- リポジトリごとの分離: すべてのメモリ上の主張、タスク、コンポーネント、メモには、
repo_id(git のリモート URL/ワークスペースのパスから導出)がキーとして付与されます。あるプロジェクトでのクエリが、別のリポジトリのメモリを取得したり漏えいさせたりすることはありません。 - ハイブリッド検索と厳格な上限: グラフ全体をそのまま出力するのではなく、
amem_contextはハイブリッド BM25 全文検索、デバイス上の埋め込み、キーワード一致、新しさの倍率を使用して関連性の高い事実のみを順位付けし、選択します(デフォルトの上限:12)。 - 文字数の厳格な上限: 自動フックによる注入は 2,400 文字を上限とし、プロンプトの肥大化やトークン枯渇攻撃を防ぎます。
- スキルの段階的開示: コンテキストパケットに注入されるのはレベル 0 のインデックス(スキル名と一行の説明)のみです。モデルが
amem_skill_viewを通じて明示的に要求しない限り、手順の全文は注入されません。
amem は古いメモリを提供せずにコード変更をどのように処理しますか?
すべての主張はファイルアンカー(code_anchors)に基づいています。コンテキストの生成時、amem はファイルの存在を確認し、ファイルの更新タイムスタンプを主張の作成時刻と比較します。
- アンカー付きファイルが変更されている場合、その主張は古いとマークされ、ランキングで減点されます。
- コンテキストパケットは、エージェントのプロンプトに次の警告を明示的に注入します:
"_X claim(s) marked stale — anchored files changed after the claim was written. Verify before trusting._"
amem は認証なしのネットワークサーバーを公開したり、コードをアップロードしたりしますか?
- 厳格なループバックバインド: ローカル HTTP UI/MCP デーモンは
127.0.0.1のみにバインドします。ループバック以外へのバインドは、ハードコードされたポリシールールによってブロックされます。 - 外部への通信は一切なし: テレメトリーはハードコードで無効化されています(
telemetry: false)。すべての SQLite データベース(graph.db)、ベクトル、ログは、ローカルファイルシステムの権限が0700に設定された~/.amem内に保持されます。 - 保存データの暗号化は任意: ローカルデータベースは AES-256-GCM を使用して暗号化できます(
amem lock --passphrase '...')。
amem 自体を開発する
cd amem
npm install
npm run build
npm run test # unit + integration + CLI e2e (node:test)
npm run smoke # end-to-end CLI/API smoke
npm run test:all # both
npm link
構成:
src/ CLI, SQLite, policy, attest, installers, localhost API
ui-static/ Setup / Memory / Stats UI
skills/ Agent skill markdown
templates/ Cursor rule + example enterprise policy
docs/ Agent install prompt + IT endpoint runbook + backlog
test/ Comprehensive node:test suite
scripts/ Smoke tests + MDM offboard helper
テスト用にメモリの保存先を変更する:
AMEM_HOME=/tmp/amem-test amem status
エンタープライズエンドポイント(IT 管理)
amem は引き続きノート PC 上の個人用メモリであり、共有ウィキやクラウド RAG ではありません。
IT/DevEx は端末群を管理できます。承認済みインストール、ポリシー、アテステーション、利用終了時の対応を管理します。
| 管理項目 | 仕組み |
|---|---|
| ポリシー | /etc/amem/policy.toml(システム設定)が ~/.amem/policy.toml を上書きします。または AMEM_POLICY_PATH を使用します |
| アテステーション | amem doctor --attest/--json(ローカル UI では GET /api/attest も利用できます) |
| シークレットの衛生管理 | 組み込みの拒否パターンと、提案時に適用されるポリシーの deny_claim_patterns |
| エクスポートのロック | allow_export = false |
| プラットフォーム/リポジトリの許可リスト | allowed_platforms、allowed_remote_hosts |
| ドラフトの自動適用 | auto_apply_kinds(空の場合は適用しません。引き続きローカルで動作します) |
| 利用終了時の対応 | amem wipe --all --yes または scripts/mdm-offboard.sh |
変更不可の保証(設定で無効化できません):
- メモリのテレメトリーやクレームのアップロードはありません。
~/.amemはローカルに保持されます - 任意で匿名の npm インストール ping のみ送信されます(オプトアウトするには
AMEM_TELEMETRY_DISABLED=1を設定します) - UI はループバック(
127.0.0.1)のみにバインドします - メモリは
~/.amem内(モード0700)に保持されます
IT 向けクイックスタート
# 1) Pin / install amem on the endpoint (internal npm, pkg, or npm link)
# 2) Deploy policy (root-owned on managed machines)
sudo mkdir -p /etc/amem
sudo cp templates/policy.example.toml /etc/amem/policy.toml
# 3) Verify for security review
amem doctor --attest --json
# 4) On offboard / laptop return
amem wipe --all --yes
# or: scripts/mdm-offboard.sh
ポリシーの例:templates/policy.example.toml
IT 向け手順書全文:docs/enterprise-endpoint.md
推奨する展開手順:小規模な DevEx パイロット → MDM パッケージとポリシー → 調達から求められた場合は署名済みビルド/SBOM。組織で共有するメモリは、意図的に対象外としています。
対象外
- 会社で共有、または同期するメモリ
- クラウドでホストされる「チームの頭脳」
- プロバイダーの課金との完全な連携
- クラウド/リモートの埋め込み API(ローカルの FTS5 とデバイス上でハッシュ化する埋め込みのみ)
- メモリの内容を製品の git 履歴に書き込むこと
今後のアイデア(予定未定):docs/backlog.md を参照してください。
ライセンス
MIT — LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。