Session が終了すると、Agent のコンテキストはデフォルトで失われます。Memory Stores によって、Agent の学習成果や作業成果物を Session をまたいで永続的に保持できます。次回起動時に Agent は以前の内容を「思い出せる」ようになります。
コアコンセプト
| 概念 | 説明 |
|---|
| Memory Store | 記憶リポジトリ。プロジェクトや領域単位で分割 |
| Entry | 1 件の記憶。path で識別。各 Entry には一意の entry_id が付与される |
| Version | 書き込み/更新/削除のたびに自動生成されるバージョンスナップショット |
| Redact | 特定バージョンの内容を不可逆に隠蔽 (コンプライアンスシナリオ) |
階層関係: Store → Entry → Version
API エンドポイント一覧
| メソッド | パス | 説明 |
|---|
| POST | /memory_stores | Memory Store を作成 |
| GET | /memory_stores | Memory Store 一覧を取得 |
| GET | /memory_stores/{id} | Memory Store 詳細を取得 |
| DELETE | /memory_stores/{id} | Memory Store を削除 |
| POST | /memory_stores/{id}/memories | Entry を作成 |
| GET | /memory_stores/{id}/memories | Entry 一覧を取得 |
| GET | /memory_stores/{id}/memories/{entry_id} | Entry を取得(content 含む) |
| PUT | /memory_stores/{id}/memories/{entry_id} | Entry を更新(OCC) |
| DELETE | /memory_stores/{id}/memories/{entry_id} | Entry を削除 |
| POST | /memory_stores/{id}/versions/{version_id}/redact | バージョン内容を隠蔽 |
パスのルール
Entry の path は相対パスでなければなりません。
- 適合:
notes/meeting-2026-05-18.md、config.yaml
- 不適合:
/notes/meeting.md (/ で始めることは不可)
パスは記憶の構造化に使われ、ファイルシステムに似た体系を提供します。
エンドツーエンドフロー
1. Memory Store を作成する
curl -X POST https://api.qoder.com/api/v1/cloud/memory_stores \
-H "Authorization: Bearer $QODER_PAT" \
-H "Content-Type: application/json" \
-d '{
"name": "project-alpha-memory",
"description": "Alpha プロジェクトの Agent ナレッジベース"
}'
レスポンス例:
{
"id": "memstore_019e5cdb9c3f71c3b6505eba937a40b4",
"type": "memory_store",
"name": "project-alpha-memory",
"description": "Alpha プロジェクトの Agent ナレッジベース",
"status": "active",
"entry_count": 0,
"total_size": 0,
"metadata": {},
"created_at": "2026-05-18T08:00:00Z",
"updated_at": "2026-05-18T08:00:00Z"
}
2. Entry を作成する
curl -X POST https://api.qoder.com/api/v1/cloud/memory_stores/memstore_019e5cdb9c3f71c3b6505eba937a40b4/memories \
-H "Authorization: Bearer $QODER_PAT" \
-H "Content-Type: application/json" \
-d '{
"path": "decisions/arch-choice.md",
"content": "# アーキテクチャ判断\n\nマイクロサービスを選択。理由: チーム規模拡大に伴い、独立デプロイが必要。"
}'
一覧エンドポイントは content フィールドを返しません。内容を読むには単一取得エンドポイントを呼び出す必要があります。
3. Entry を取得する
entry_id を指定して、content を含む完全な Entry を取得します。
curl https://api.qoder.com/api/v1/cloud/memory_stores/memstore_019e5cdb9c3f71c3b6505eba937a40b4/memories/mem_019e5cdba1b674e4a6a7d4f8c9b3e2a1 \
-H "Authorization: Bearer $QODER_PAT"
レスポンス例:
{
"content": "# アーキテクチャ判断\n\nチーム規模拡大に伴い独立デプロイが必要なため、マイクロサービスを選択。",
"content_sha256": "1712de0d497a5aeef2beeccf4fbb7d5a16944975438d0c25447b9c1fba13099a",
"created_at": "2026-05-18T08:00:00Z",
"id": "mem_019e5cdb9c3f71c3b6505eba937a40b5",
"metadata": {},
"path": "decisions/arch-choice.md",
"size": 60,
"store_id": "memstore_019e5cdb9c3f71c3b6505eba937a40b4",
"type": "memory",
"updated_at": "2026-05-18T09:30:00Z",
"version": 2
}
4. Entry を更新する
更新は PUT を使用し、URL に entry_id を含め、楽観的同時実行制御 (OCC) のために現在の version を必ず指定します。新しいバージョンスナップショットが自動生成されます。
curl -X PUT https://api.qoder.com/api/v1/cloud/memory_stores/memstore_019e5cdb9c3f71c3b6505eba937a40b4/memories/mem_019e5cdba1b674e4a6a7d4f8c9b3e2a1 \
-H "Authorization: Bearer $QODER_PAT" \
-H "Content-Type: application/json" \
-d '{
"content": "# アーキテクチャ判断 v2\n\nModular Monolith に変更。理由: マイクロサービス運用コストが予算超過。",
"version": 1
}'
リクエストフィールド:
| フィールド | 型 | 必須 | 説明 |
|---|
content | string | はい | 新しい内容 |
version | integer | はい | 現在の Entry のバージョン番号(衝突検出用) |
version がサーバーと一致しない場合(並行書き込みあり)、API は 409 Conflict を返します。最新バージョンを GET で取得し直してから再試行してください。
5. Entry を削除する
entry_id を指定して削除します。
curl -X DELETE https://api.qoder.com/api/v1/cloud/memory_stores/memstore_019e5cdb9c3f71c3b6505eba937a40b4/memories/mem_019e5cdba1b674e4a6a7d4f8c9b3e2a1 \
-H "Authorization: Bearer $QODER_PAT"
削除操作には entry_id(例: mem_019e5cdba1b674e4a6a7d4f8c9b3e2a1)を使用します。path クエリパラメータでの削除はサポートされていません。
6. Session で使用する
Session 作成時に memory_store_ids で関連付けます。
curl -X POST https://api.qoder.com/api/v1/cloud/sessions \
-H "Authorization: Bearer $QODER_PAT" \
-H "Content-Type: application/json" \
-d '{
"agent": "agent_xxx",
"memory_store_ids": ["memstore_019e5cdb9c3f71c3b6505eba937a40b4"]
}'
Session 内で Agent は関連付けた Memory Store を読み書き可能です。
sandbox 内の Memory Entry パス
memory_store を session にバインドすると、各 entry は sandbox 内で以下にマウントされます:
/data/.qoder/awareness/<entry.path>
例: entry の path = "shared/note.txt" → sandbox パス /data/.qoder/awareness/shared/note.txt
注意:sandbox 内には memory_store / mem_ / entry_id のような命名階層はありません。すべて awareness/ 配下にフラット展開されます。Agent は memory_store という概念を認識できず、entry.path で直接ファイルを読み取ることしかできません。
バージョン追跡
Entry に対する作成・更新・削除のたびに、システムはバージョンスナップショットを自動生成します。バージョンは変更不可で、完全な変更履歴を提供します。
Redact (内容の隠蔽)
特定バージョンに機微情報が含まれて永久消去が必要な場合:
curl -X POST https://api.qoder.com/api/v1/cloud/memory_stores/memstore_019e5cdb9c3f71c3b6505eba937a40b4/versions/ver_xyz789/redact \
-H "Authorization: Bearer $QODER_PAT"
重要: Redact 操作は不可逆です。隠蔽後の内容は復元できません。
統計フィールド
| フィールド | 説明 |
|---|
entry_count | Store 内の Entry 総数 |
total_size | すべての Entry 内容の合計バイト数 |
よくある質問
Q: 1 つの Session に何個の Memory Store を関連付けられますか? A: 複数サポートされており、必要に応じて関連付け可能です。
Q: Entry の path にサブディレクトリを含められますか? A: 可能です (例: notes/2026/05/daily.md)。多階層パスをサポートします。
Q: Entry を削除しても過去のバージョンは残りますか? A: 削除操作自体が「削除」バージョンのレコードを生成し、それ以前のバージョンも追跡可能です。
Q: Memory Store に容量制限はありますか? A: 具体的な制限はアカウントクォータをご確認ください。一般的なプロジェクトには十分な容量を提供します。
プロジェクトごとに独立した Memory Store を作成し、異なるプロジェクトの記憶が混ざらないようにすることを推奨します。