Skip to content

記憶スコープとライフサイクル:デジタルブレインを管理する

この章で学べること

  • スコープを区別する:どの記憶が「あなたと一緒に移動する」(クロスプロジェクト)ものか、「プロジェクトと一緒に移動する」(プロジェクト専用)ものかを理解します。
  • 記憶を管理する:記憶を手動で確認、追加、削除する方法を学び、Agent の認知を整理しておきます。
  • Agent をデバッグする:Agent が「間違った」ものを覚えている場合、どこを修正すべきかを知ります。

基本的な考え方

opencode-supermemory は記憶を 2 つの分離された スコープ (Scope) に分けます。これはプログラミング言語のグローバル変数とローカル変数に似ています。

1. 2 種類のスコープ

スコープ識別子 (Scope ID)ライフサイクル典型的な用途
User Scope
(ユーザースコープ)
user常にあなたと共に
すべてのプロジェクトで共有
• コーディングスタイルの好み(例:「TypeScript を好む」)
• 個人的な習慣(例:「常にコメントを書く」)
• 一般的な知識
Project Scope
(プロジェクトスコープ)
project現在のプロジェクトのみ
ディレクトリを切り替えると無効になる
• プロジェクトのアーキテクチャ設計
• ビジネスロジックの説明
• 特定の Bug の修正方案

スコープはどのように生成されるのですか?

プラグインは src/services/tags.ts を通じて一意のタグを自動的に生成します:

  • User Scope: Git メールアドレスのハッシュに基づいて生成されます (opencode_user_{hash})。
  • Project Scope: 現在のプロジェクトパスのハッシュに基づいて生成されます (opencode_project_{hash})。

2. 記憶のライフサイクル

  1. 作成 (Add): CLI 初期化または Agent 対話 (Remember this...) を通じて書き込まれます。
  2. 有効化 (Inject): 新しいセッションを開始するたびに、プラグインは関連する User と Project 記憶を自動的に取得してコンテキストに注入します。
  3. 検索 (Search): 会話中に Agent は特定の記憶を能動的に検索できます。
  4. 忘却 (Forget): 記憶が古くなったり間違っていたりする場合、ID を通じて削除します。

実践:記憶を管理する

Agent との対話を通じて、これら 2 つのスコープの記憶を手動で管理します。

ステップ 1:既存の記憶を確認

まず、Agent が現在何を記憶しているかを見てみましょう。

操作:OpenCode チャットボックスに以下を入力します:

text
現在のプロジェクトのすべての記憶をリストアップしてください (List memories in project scope)

期待される出力: Agent は supermemory ツールの list モードを呼び出し、リストを返します:

json
// 出力例
{
  "success": true,
  "scope": "project",
  "count": 3,
  "memories": [
    {
      "id": "mem_123456",
      "content": "プロジェクトは MVC アーキテクチャを使用し、Service レイヤーはビジネスロジックを担当します",
      "createdAt": "2023-10-01T10:00:00Z"
    }
    // ...
  ]
}

ステップ 2:クロスプロジェクト記憶を追加 (User Scope)

すべてのプロジェクトで Agent に日本語で返信してほしいと仮定します。これは User Scope に適した記憶です。

操作:以下のコマンドを入力します:

text
私の個人的な好みを覚えておいてください:どのプロジェクトでも、常に日本語で返信してください。
これを User Scope に保存してください。

期待される出力: Agent は add ツールを呼び出し、パラメータ scope: "user" を渡します:

json
{
  "mode": "add",
  "content": "User prefers responses in Japanese across all projects",
  "scope": "user",
  "type": "preference"
}

システムは記憶が追加されたことを確認し、id を返します。

ステップ 3:プロジェクト専用記憶を追加 (Project Scope)

次に、現在のプロジェクトに特定のルールを追加します。

操作:以下のコマンドを入力します:

text
覚えておいてください:このプロジェクトでは、すべての日付形式は YYYY-MM-DD である必要があります。
Project Scope に保存してください。

期待される出力: Agent は add ツールを呼び出し、パラメータ scope: "project" を渡します(これはデフォルト値なので、Agent は省略するかもしれません):

json
{
  "mode": "add",
  "content": "Date format must be YYYY-MM-DD in this project",
  "scope": "project",
  "type": "project-config"
}

ステップ 4:分離性を確認

スコープが有効であるか確認するために、検索を試みることができます。

操作:以下を入力します:

text
「日付形式」に関する記憶を検索してください

期待される出力: Agent は search ツールを呼び出します。scope: "project" を指定しているか、混合検索を行っている場合、先ほどの記憶が見つかるはずです。

クロスプロジェクト能力の確認

新しいターミナルウィンドウを開き、別の異なるプロジェクトディレクトリに入り、「日付形式」を尋ねると、Agent はこの記憶を見つけられないはずです(元のプロジェクトの Project Scope に分離されているため)。しかし、「どの言語で返信してほしいか」と尋ねると、User Scope から「日本語で返信」の好みを取り出せるはずです。

ステップ 5:古い記憶を削除

プロジェクトの規約が変更された場合、古い記憶を削除する必要があります。

操作

  1. ステップ 1 を実行して記憶 ID を取得します(例:mem_987654)。
  2. 以下のコマンドを入力します:
text
ID が mem_987654 の日付形式に関する記憶を忘れてください。

期待される出力: Agent は forget ツールを呼び出します:

json
{
  "mode": "forget",
  "memoryId": "mem_987654"
}

システムは success: true を返します。


よくある質問 (FAQ)

Q: コンピューターを変えた場合、User Scope の記憶は残っていますか?

A: Git 設定によります。 User Scope は git config user.email に基づいて生成されます。2 台のコンピューターで同じ Git メールアドレスを使用し、同じ Supermemory アカウント(同じ API Key を使用)に接続している場合、記憶は同期されます。

Q: 追加したばかりの記憶が見えないのはなぜですか?

A: キャッシュまたはインデックスの遅延の可能性があります。 Supermemory のベクトルインデックスは通常秒単位ですが、ネットワークの不安定さにより一時的な遅延が発生する場合があります。また、Agent がセッションの開始時に注入するコンテキストは静的(スナップショット)であるため、新しく追加された記憶はセッションを再起動(/clear または OpenCode の再起動)しないと「自動注入」で有効にならない場合がありますが、search ツールを通じてすぐに見つけることができます。


付録:ソースコード参照

クリックしてソースコードの場所を表示

更新日:2026-01-23

機能ファイルパス行番号
Scope 生成ロジックsrc/services/tags.ts18-36
記憶ツールの定義src/index.ts183-485
記憶タイプの定義src/types/index.ts-
クライアントの実装src/services/client.ts23-182

重要な関数

  • getUserTag(): Git メールアドレスに基づいてユーザータグを生成
  • getProjectTag(): ディレクトリパスに基づいてプロジェクトタグを生成
  • supermemoryClient.addMemory(): 記憶の追加 API 呼び出し
  • supermemoryClient.deleteMemory(): 記憶の削除 API 呼び出し

次の章の予告

次の章では 先制圧縮の原理 を学びます。

以下のことができるようになります:

  • なぜ Agent が「記憶を忘れる」のか(コンテキストオーバーフロー)
  • プラグインが Token 使用率を自動的に検出する方法
  • 重要な情報を失わずにセッションを圧縮する方法