コンテンツにスキップ

セッションとエージェント–セッションモデル

reyn は 誰が動いているかどの会話か を明確に分離します。これらを分けておくことが、 1 つのエージェントが複数の会話を並行して持ち、それぞれを独立に永続化できる—会話どうしが 混ざらない—理由です。

2 つのレベル

レベル 何か 持つもの
Agent アイデンティティ / ノード — 名前で addressable な長命のアクター 名前・メモリ・パーミッション・ワークスペーススコープ・ピアアドレッシング
Session Agent 配下の 会話(1 Agent → 複数 Session) メッセージ履歴・inbox / outbox・現在のタスク・一時状態

階層:

AgentRegistry → Agent (identity) → N Sessions

これは主流のエージェントプラットフォームの形です。reyn の差別化はモデルではなく、 その にあるもの: すべての Session がイベントソース・パーミッションゲート・ タイムトラベル可能である点です(後述)。

複数 Session と 複数 Agent

この 2 軸は混同しやすいです。境界は アイデンティティ です:

  • 複数 Agent異なるアイデンティティ — 役割・パーミッション・メモリ・信頼境界 が異なる。「異なる 」。委譲・協調する専門家チーム。
  • 複数 Session同一アイデンティティの並行会話 — メモリ・パーミッション・ ワークスペースを共有。「同じ 、異なる会話」。1 アクターが複数タスクを同時に捌く。

実用ルール:

役割・パーミッション・知識境界が異なる? → 新しい Agent。 同じエージェントが並行で別のことをする? → 新しい Session

パーミッションはアイデンティティ(Agent 境界)に属し、その Agent の Session 間で 共有されるため、異なる パーミッションを要するタスクは定義上 別アイデンティティ= sub-agent であって sub-session ではありません。これで基準が単一・一意に保たれます。 同じ分割は再帰します: Session を fork(sub-session)= アイデンティティ維持で会話を 分岐、sub-agent へ委譲 = アイデンティティを変える。

Session が持つもの

Session は会話の単位です。メッセージ履歴・inbox / outbox・現在のタスク・一時実行状態 を持ちます。アイデンティティスコープのもの(メモリ・パーミッション・ワークスペース スコープ・ピアアドレッシング)は Agent 側にあり同 Agent の全 Session で共有、会話 スコープのものは Session ごとに隔離されます。

永続化と復旧は Session に key します:

  • セッションごとの永続化 — 各 Session の状態は独立にスナップショットされ、1 つの Agent 配下の会話が別々に保存・復元される。
  • タイムトラベル rewind は global cut(per-session ではない)/rewindすべての Session と Agent を対象チェックポイントへ atomically に動かす(global single-seq WAL が 1 つ)。rewind は単一 Session に隔離されず、プロセス全体で一貫 する。per-session 粒度は永続化と replay(上記)にあり、rewind 操作にはない。 タイムトラベル参照。
  • クラッシュ復旧 — 再起動時、単一会話でなくマルチセッション構造全体がイベント ログとスナップショットから再構築される。

トランスポートは Session にルーティングする

トランスポート は、メッセージが Agent に届く経路すべて — 対話 REPL、Web UI、 スケジュールされた cron ジョブ、ピアエージェント等 — です。トランスポートは会話を 所有せず、routing-key で受信メッセージを Session に ルーティング します:

  • デフォルト — 決定的マッピング。 トランスポート固有の会話 id が、トランスポート で名前空間化されて Session にマップ(Web タブ、cron ジョブ名、チャットスレッド)。 最初のメッセージで Session を自動生成、同 id で resume。ゼロ設定でステートフル・ 隔離・会話ごとのルーティングになる。現在 Web UI はブラウザタブごと、cron はジョブ ごとにルーティングします。
  • 明示 — 既存 Session に join。 メッセージは既存 Session を id で指定でき、これが あるトランスポートが別のトランスポートの始めた会話に橋渡しする方法です。存在しない ターゲットはエラー: Session はマッピングデフォルトか明示 spawn でのみ作られ、打ち 間違えた id で暗黙生成されることはありません。

ルーティングは 1 つの Agent 内 にスコープされます — join は同 Agent 自身の Session 間(共有アイデンティティ、安全)。異なる Agent に届くのは委譲であって join では ありません。トランスポートが追加されるたび、同じモデルでルーティングされます。

関連

  • マルチエージェント異なる アイデンティティのための 4 つの 合成サーフェス(委譲・トポロジー・A2A・MCP-serve)。
  • タイムトラベル — rewind / fork / クラッシュ復旧の機構 (rewind は全 Session を貫く global consistent-cut; 永続化と復旧は per-Session)。