Summary
cekernel の Session Memory Phase 2 (#101) の設計にあたり、MemOS と Letta Context Repositories の知見を整理する。
#86 のリサーチアップデートで「MemOS や Letta の Context Repositories が参考になる」と指摘した点を深掘りした結果。
背景
ADR-0002 Phase 2 は SQLite session DB を想定しているが、Letta Context Repositories の事例は「ファイル + git で驚くほど遠くまで行ける」ことを示している。Phase 2 の設計判断に向けて、3つのアプローチを比較する。
3つのアプローチ比較
| 軸 |
ADR-0002 Phase 2 (SQLite) |
MemOS |
Letta MemFS |
| ストレージ |
SQLite 1ファイル |
Neo4j + Qdrant + Redis + PostgreSQL |
Git リポジトリ (markdown files) |
| メモリの単位 |
テーブル行 (key-value) |
MemCube (メタデータヘッダ + ペイロード) |
Markdown ファイル (YAML frontmatter) |
| ライフサイクル |
なし (暗黙的に session 寿命) |
5状態 (Generated→Activated→Merged→Archived→Expired) |
なし (git history が暗黙的に管理) |
| 共有モデル |
共有DB に直接 read/write |
Pub/Sub (MemStore) |
共有ブロック or git merge |
| 並行制御 |
SQLite WAL (concurrent read) |
未定義 (NLI で事後重複排除) |
last-write-wins or git conflict resolution |
| UNIX哲学 |
○ (sqlite3 CLI, jq, 既存ツール) |
× (専用APIサーバー群) |
◎ (ファイル + git + bash) |
| 運用コスト |
ゼロ (ファイル1つ) |
高 (Docker Compose, 4サービス) |
低 (git + filesystem) |
MemOS から得られる示唆
メモリメタデータの概念
MemOS の MemCube は各メモリに構造化メタデータ (origin, semantic_type, access_frequency, priority) を付与する。ADR-0002 の worker_notes は key + value のフラットな構造で、Worker B が Worker A の発見を見つけられるかは key の命名規約に依存する。
最低限のメタデータ列 (kind: finding / warning / dependency) を追加すると発見性が向上する可能性がある。
ただし MemOS のフル仕様 (TTL, decay, ACL, priority) は cekernel の規模では over-engineering。MemOS 自体も論文上は精緻だが実装では多くが未指定。
参考文献
Letta Context Repositories から得られる示唆
ファイル + git = メモリ管理
Letta MemFS のアーキテクチャは cekernel と驚くほど似ている:
| Letta MemFS |
cekernel (現状) |
| メモリ = markdown ファイル |
タスク/チェックポイント = markdown/JSON ファイル |
| git commit で変更追跡 |
git worktree で変更分離 |
| git merge でマルチエージェント統合 |
FIFO + state file で完了通知 |
system/ フォルダ = 常時ロード |
.cekernel-task.md = spawn 時に注入 |
SQLite ではなくファイル + git を選んだ理由
- Transparency:
git log でメモリの変更履歴が見える
- Composability: bash、jq、grep で操作できる
- Conflict resolution: git merge という枯れたメカニズムを再利用
- Rollback:
git revert でメモリ状態を巻き戻せる
これは ADR-0002 が掲げる UNIX 哲学 (Rule of Transparency, Rule of Composition) と完全に一致する。
参考文献
Phase 2 の設計パス候補
パス A: 現在の ADR-0002 路線 (SQLite)
/tmp/cekernel-ipc/{SESSION_ID}/memory.db
├── issue_cache → spawn 時キャッシュ
└── worker_notes → Worker 間知識共有
- 長所:
sqlite3 CLI で query 可能、WAL で concurrent read 安全、既にADR設計済み
- 短所: session 寿命で消える。cross-session 知識の蓄積なし
パス B: Letta 式ファイルベース
/tmp/cekernel-ipc/{SESSION_ID}/memory/
├── issues/4.json → issue cache
├── notes/4-api-retry.md → Worker A の発見
└── notes/5-auth-fix.md → Worker B の発見
- 長所: 現行の file-based パターンと一貫性がある。UNIX 哲学に最も忠実
- 短所: concurrent write の安全性は自前で保証が必要 (ただし Worker ごとに issue が異なるため実質衝突しない)
パス C: ハイブリッド
issue_cache → 現状の .cekernel-task.md をそのまま維持 (file)
worker_notes → SQLite (structured query が必要な場合のみ)
判断基準
- Worker 間知識共有の具体的ニーズが発生したか? → まだ No なら Rule of Optimization に従い保留
- 発生した場合、知識の検索性が必要か? → Yes なら SQLite (パス A/C)。No なら file (パス B) で十分
- cross-session の知識蓄積が必要か? → Yes なら IPC dir 外への永続化が必要 (ADR-0002 の scope 外)
結論
Letta の事例が示す最大の教訓は「ファイル + git で驚くほど遠くまで行ける」こと。cekernel は既にそのパス上にいるので、SQLite への移行は「ファイルベースでは解決できない具体的な問題」が出てからでも遅くない。
Related: #101, #86
Summary
cekernel の Session Memory Phase 2 (#101) の設計にあたり、MemOS と Letta Context Repositories の知見を整理する。
#86 のリサーチアップデートで「MemOS や Letta の Context Repositories が参考になる」と指摘した点を深掘りした結果。
背景
ADR-0002 Phase 2 は SQLite session DB を想定しているが、Letta Context Repositories の事例は「ファイル + git で驚くほど遠くまで行ける」ことを示している。Phase 2 の設計判断に向けて、3つのアプローチを比較する。
3つのアプローチ比較
MemOS から得られる示唆
メモリメタデータの概念
MemOS の MemCube は各メモリに構造化メタデータ (origin, semantic_type, access_frequency, priority) を付与する。ADR-0002 の
worker_notesはkey+valueのフラットな構造で、Worker B が Worker A の発見を見つけられるかは key の命名規約に依存する。最低限のメタデータ列 (
kind: finding / warning / dependency) を追加すると発見性が向上する可能性がある。ただし MemOS のフル仕様 (TTL, decay, ACL, priority) は cekernel の規模では over-engineering。MemOS 自体も論文上は精緻だが実装では多くが未指定。
参考文献
Letta Context Repositories から得られる示唆
ファイル + git = メモリ管理
Letta MemFS のアーキテクチャは cekernel と驚くほど似ている:
system/フォルダ = 常時ロード.cekernel-task.md= spawn 時に注入SQLite ではなくファイル + git を選んだ理由
git logでメモリの変更履歴が見えるgit revertでメモリ状態を巻き戻せるこれは ADR-0002 が掲げる UNIX 哲学 (Rule of Transparency, Rule of Composition) と完全に一致する。
参考文献
Phase 2 の設計パス候補
パス A: 現在の ADR-0002 路線 (SQLite)
sqlite3CLI で query 可能、WAL で concurrent read 安全、既にADR設計済みパス B: Letta 式ファイルベース
パス C: ハイブリッド
判断基準
結論
Letta の事例が示す最大の教訓は「ファイル + git で驚くほど遠くまで行ける」こと。cekernel は既にそのパス上にいるので、SQLite への移行は「ファイルベースでは解決できない具体的な問題」が出てからでも遅くない。
Related: #101, #86