Forward Memory Store API で共通するデータ構造、制約、マウント規則です。
Forward Memory Store API では 3 つの共通オブジェクトを使用します。階層は Memory Store → Memory → Memory Version です。
上流の上限は 16 キーです。Forward が
有効な例:
Agent が Memory を書き込むと、エントリのメタデータ全体が
書き込み可能な Store が複数あると上流の書き込み先選択に決定的な順序がないため、Forward は書き込み可能な Store を必ず 1 つに制限します。
Session 作成時、Forward はその
sandbox には
| 階層 | ID プレフィックス | 説明 |
|---|---|---|
| Memory Store | memstore_ | Memory のコンテナ。内容を直接保存せず、(identity, template) にマウントできます。 |
| Memory | mem_ | Store 内の Memory。相対 path で識別され、実際の content を保持します。 |
| Memory Version | memver_ | Memory の作成、更新、削除時に自動生成される変更不可のスナップショット。 |
Memory Store オブジェクト
| フィールド | 型 | 説明 |
|---|---|---|
id | string | memstore_ プレフィックスの Memory Store ID。 |
type | string | 常に memory_store。 |
name | string | Store の表示名。 |
description | string | Store の説明。 |
status | string | active または archived。 |
entry_count | integer | Store 内の Memory エントリ数。 |
total_size | integer | すべての Memory 内容の合計バイト数。 |
metadata | object | メタデータ。サーバーが挿入する created_by=forward を常に含みます。 |
system_managed | boolean | Session 作成時に (identity, template) 用に自動作成されたデフォルト Store は true、ユーザーが明示的に作成した Store は false。 |
identity_id | string/null | システム管理のデフォルト Store を所有する Identity。ユーザー作成の Store は null。 |
created_at | string | RFC 3339 形式の作成時刻。 |
updated_at | string | RFC 3339 形式の最終更新時刻。 |
archived_at | string/null | アーカイブ時刻。active の場合は null。 |
binding_info.identity_template_count | integer | 現在 Store をマウントしている (identity, template) の数。アーカイブと削除時に確認されます。 |
Store メタデータの制約
| 制約 | 値 |
|---|---|
| 最大キー数 | 15 |
| キー長 | 1–64 characters |
| 値の型 | 文字列である必要があります |
| 値の長さ | 512 文字以下 |
| 予約キー | created_by is injected by the server as "forward"; supplying it returns 400 |
created_by を挿入して 1 枠を使用するため、呼び出し元が指定できるのは 15 キーです。
Memory オブジェクト
| フィールド | 型 | 説明 |
|---|---|---|
id | string | mem_ プレフィックスの Memory ID。 |
type | string | 常に memory。 |
memory_store_id | string | 親 Memory Store の ID。 |
path | string | Store 内の大文字と小文字を区別する相対パス。 |
content | string/null | UTF-8 プレーンテキスト。作成、更新、単一取得 API でのみ返され、一覧レスポンスでは省略されます。 |
content_size_bytes | integer | 内容のバイト数。 |
content_sha256 | string | 内容の SHA-256。楽観的同時実行制御に使用できます。 |
metadata | object | メタデータ。 |
created_at | string | RFC 3339 形式の作成時刻。 |
updated_at | string | RFC 3339 形式の最終更新時刻。 |
path の制約
| 制約 | 値 |
|---|---|
| 相対パスであること | / で開始できません |
| 最大長 | 1,024 bytes |
| 最大セグメント数 | 58 |
| セグメント長 | Up to 255 bytes |
| 禁止セグメント | 空セグメント、.、..、または先頭か末尾に空白があるセグメント |
| 禁止文字 | \ and NUL |
| 大文字と小文字 | 区別します |
notes/meeting-2026-08-14.md, config.yaml
無効な例: /notes/meeting.md, a/../b, notes//x.md
content の制約
| 制約 | 値 |
|---|---|
| Encoding | base64 ではない UTF-8 プレーンテキスト |
| 最大サイズ | 元のリクエストバイトで 100 KiB |
| 制御文字 | 改行 \n、復帰 \r、タブ \t を除く非表示制御文字(U+0000~U+001F、U+007F)は使用できません |
Memory メタデータの制約
| 制約 | 値 |
|---|---|
| 最大キー数 | 16 |
| キー長 | 1–64 characters |
| 値の型 | 文字列である必要があります |
| 値の長さ | 512 文字以下 |
| 予約キー | なし。Forward はエントリに created_by を挿入しません。呼び出し元がこのキーを使用でき、値はそのまま保存されて返されます。 |
{"source":"agent"} に置き換えられます。そのため、この API で設定したメタデータが通常の Agent 動作によって消去される場合があります。
Memory Version オブジェクト
| フィールド | 型 | 説明 |
|---|---|---|
id | string | memver_ プレフィックスの Memory Version ID。 |
type | string | 常に memory_version。 |
memory_store_id | string | 親 Memory Store の ID。 |
memory_id | string | 親 Memory の ID。 |
path | string | このバージョンに記録された Memory の path。 |
content | string/null | バージョン内容。単一取得 API でのみ返され、一覧レスポンスでは省略されます。墨消し済みの場合は null。 |
content_size_bytes | integer | バージョン内容のバイト数。 |
content_sha256 | string | バージョン内容の SHA-256。 |
operation | string | バージョンを生成した操作:created、updated、deleted。 |
redacted | boolean | バージョンが墨消しされているかどうか。 |
redacted_at | string/null | 墨消し時刻。未実施の場合は null。 |
created_at | string | RFC 3339 形式のバージョン作成時刻。 |
Memory Store マウントオブジェクト
(identity, template) 上のマウントレコードです。
| フィールド | 型 | 説明 |
|---|---|---|
memory_store_id | string | マウントされた Memory Store の ID。 |
identity_id | string | マウントを所有する Identity。 |
template_id | string | マウントを所有する Template。 |
access | string | read_write または read_only。以下のアクセス規則を参照してください。 |
system_managed | boolean | システムが自動作成したデフォルト Store 枠は true。 |
name | string | マウントした Store の表示名。Store エンティティから取得します。ベストエフォート方式で、Store を読み取れない場合は空文字列です。 |
status | string | マウントした Store の状態(active / archived)。Store エンティティから取得します。ベストエフォート方式で、Store を読み取れない場合は空文字列です。 |
entry_count | integer | マウントした Store の Memory エントリ数。Store エンティティから取得します。ベストエフォート方式で、Store を読み取れない場合は 0 です。 |
created_at | string | RFC 3339 形式のマウント作成時刻。 |
アクセス規則とマウント上限
| ルール | 説明 |
|---|---|
| 唯一の書き込み可能 Store | システム管理のデフォルト Store(system_managed=true)だけが read_write で Session に挿入されます。 |
| 明示的マウントのアクセス | ユーザーがマウントした Store は常に read_only です。Agent は読み取れますが書き込めません。 |
| マウント上限 | 1 つの (identity, template) には、デフォルト枠を除いて最大 10 個を明示的にマウントできます。 |
| 一覧の順序 | デフォルト Store が先頭で、明示的なマウントは作成時刻の昇順で続きます。 |
Session 内での見え方
Session 作成時、Forward はその (identity, template) のすべての active なマウントを Session リソースに挿入します。すべての Store の Memory は path によって sandbox 内のフラットな名前空間に統合されます。
memory_store や mem_ の階層は表示されず、Agent は path で直接ファイルを読み取ります。複数の Store に同じ path があると互いに隠れる可能性があります。優先順はマウント作成時刻に基づいて一定ですが直感的ではないため、Store ごとに異なる path プレフィックスを使用してください。
セルフホスト Environment では読み込まれません:Session がセルフホスト Environment(config.type=self_hosted)で実行される場合、Forward は Memory Store を Session に挿入しません。マウント関係には影響しません。マウント API は通常どおりレスポンスを返し、Store とエントリも Memory Store API から引き続き読み書きできます。ただし、Agent の sandbox からこれらの Memory は見えません。Agent に Memory を使用させるには、マネージド(cloud)Environment で Session を実行してください。