Total Recall — 自律型エージェント記憶
自律的に監視する唯一の記憶スキル。
データベースもベクトルも手動保存も不要。LLMオブザーバーが会話を優先順位付きのメモに圧縮し、成長に応じて統合し、見逃したものを復旧します。5層の冗長性、ゼロメンテナンス。月額約0ドル(無料モデル使用)。
他の記憶スキルが「覚えておくこと」を要求する中、これだけはただ注意を払います。
アーキテクチャ
Layer 1: Observer (cron, 15~30分ごと)
↓ 最近のメッセージを圧縮 → observations.md
Layer 2: Reflector (observations > 8000語で自動トリガー)
↓ 統合、古い情報を削除 → 40~60%削減
Layer 3: Session Recovery (/new または /reset のたびに実行)
↓ Observerが見逃したセッションをキャッチ
Layer 4: Reactive Watcher (inotifyデーモン、Linuxのみ)
↓ 40回以上の新しいJSONL書き込み後にObserverをトリガー、5分間のクールダウン
Layer 5: Pre-compaction hook (memoryFlush)
↓ OpenClawがコンテキストを圧縮する前に緊急キャプチャ
機能
- Observer: 最近のセッション書き起こし(JSONL)を読み取り、LLMに送信し、優先度レベル(高、中、低)を付けて圧縮された観測結果を
observations.mdに追加します。 - Reflector: 観測結果が大きくなりすぎると作動し、関連項目を統合し、古くなった低優先度エントリを削除します。
- Session Recovery: セッション開始時に実行され、前回のセッションがキャプチャされたかを確認し、キャプチャされていなければ緊急観測を行います。
- Reactive Watcher: inotifyを使用してセッションディレクトリを監視し、高活動期間をcron間隔より速くキャプチャします。
- Pre-compaction hook: OpenClawがコンテキストを圧縮しようとするときに発動し、何も失われないことを保証します。
クイックスタート
1. スキルをインストール
clawdhub install total-recall
2. APIキーを設定
.env または OpenClaw 設定に追加:
OPENROUTER_API_KEY=sk-or-v1-xxxxx
3. セットアップスクリプトを実行
bash skills/total-recall/scripts/setup.sh
これにより以下が行われます:
- メモリディレクトリ構造を作成 (
memory/,logs/, バックアップ) - Linuxでinotify + systemdを使用している場合: リアクティブウォッチャーサービスをインストール
- 手動で追加するためのcronジョブとエージェント設定手順を表示
4. エージェントが観測結果を読み込むように設定
エージェントのワークスペースコンテキスト(例: MEMORY.md やシステムプロンプト)に追加:
セッション起動時に `memory/observations.md` を読み込み、セッション間コンテキストとして使用する。
または、OpenClaw の memoryFlush.systemPrompt を使用して起動指示を注入します。
プラットフォームサポート
| プラットフォーム | Observer + Reflector + Recovery | Reactive Watcher |
|---|---|---|
| Linux (Debian/Ubuntuなど) | フルサポート | inotify-tools あり |
| macOS | フルサポート | 利用不可(cronのみ) |
すべてのコアスクリプトはポータブルなbashを使用しています。stat、date、md5 コマンドは _compat.sh を通じてクロスプラットフォームで処理されます。
設定
すべてのスクリプトは環境変数から読み取り、適切なデフォルト値を持ちます:
| 変数 | デフォルト | 説明 |
|---|---|---|
OPENROUTER_API_KEY | (必須) | LLM呼び出し用のOpenRouter APIキー |
MEMORY_DIR | $OPENCLAW_WORKSPACE/memory | observations.md が置かれる場所 |
SESSIONS_DIR | ~/.openclaw/agents/main/sessions | OpenClawセッション書き起こし |
OBSERVER_MODEL | stepfun/step-3.5-flash:free | 圧縮用のプライマリモデル(無料) |
OBSERVER_FALLBACK_MODEL | nvidia/nemotron-3-nano-30b-a3b:free | プライマリが失敗した場合のフォールバック(無料) |
OBSERVER_LOOKBACK_MIN | 15 | 遡る時間(分)(日中) |
OBSERVER_MORNING_LOOKBACK_MIN | 480 | 遡る時間(分)(午前8時前) |
OBSERVER_LINE_THRESHOLD | 40 | リアクティブトリガーまでの行数(Linux) |
OBSERVER_COOLDOWN_SECS | 300 | リアクティブトリガー間のクールダウン(秒)(Linux) |
REFLECTOR_WORD_THRESHOLD | 8000 | Reflectorが作動するまでの単語数 |
REFLECTOR_MODEL | nvidia/nemotron-3-super-120b-a12b:free | 観測結果統合用モデル(無料) |
REFLECTOR_FALLBACK_MODEL | openrouter/hunter-alpha | Reflectorモデルが失敗した場合のフォールバック(無料) |
OPENCLAW_WORKSPACE | ~/your-workspace | ワークスペースルート |
LLMプロバイダー設定
Total RecallはOpenAI互換のチャット補完APIを使用します。環境変数を設定することでプロバイダーを切り替えられます:
| 変数 | デフォルト | 説明 |
|---|---|---|
LLM_BASE_URL | https://openrouter.ai/api/v1 | APIエンドポイント |
LLM_API_KEY | OPENROUTER_API_KEY にフォールバック | APIキー |
LLM_MODEL | deepseek/deepseek-v3.2 | 使用するモデル |
プロバイダー例
# OpenRouter(デフォルト)
export OPENROUTER_API_KEY="your-key"
# Ollama(ローカル)
export LLM_BASE_URL="http://localhost:11434/v1"
export LLM_API_KEY="ollama"
export LLM_MODEL="llama3.1:8b"
# Groq
export LLM_BASE_URL="https://api.groq.com/openai/v1"
export LLM_API_KEY="your-groq-key"
export LLM_MODEL="llama-3.3-70b-versatile"
作成されるファイル
memory/
observations.md # メインの観測ログ(起動時に読み込まれる)
observation-backups/ # Reflectorのバックアップ(最新10件を保持)
.observer-last-run # 最後にObserverが実行されたタイムスタンプ
.observer-last-hash # 最後に処理されたメッセージの重複排除用ハッシュ
logs/
observer.log
reflector.log
session-recovery.log
observer-watcher.log
Cronジョブ
セットアップスクリプトは以下のOpenClaw cronジョブを作成します:
| ジョブ | スケジュール | 説明 |
|---|---|---|
memory-observer | 15分ごと | 最近の会話を圧縮 |
memory-reflector | 毎時 | 観測結果が大きい場合に統合 |
リアクティブウォッチャー(Linuxのみ)
リアクティブウォッチャーは inotifywait を使用してセッションアクティビティを検出し、cron単独よりも速くObserverをトリガーします。Linux + inotify-tools が必要です。
# inotify-toolsのインストール(Debian/Ubuntu)
sudo apt install inotify-tools
# ウォッチャーステータスの確認
systemctl --user status total-recall-watcher
# ログの表示
journalctl --user -u total-recall-watcher -f
コスト
OpenRouterのデフォルトの無料モデルを使用:
- 通常の使用(observer + reflector)で月額約0ドル(無料モデル使用)
- 1日あたり約15~30回のcron実行、各実行で数百トークンを処理
- すべてのデフォルトモデルは無料枠モデル
モデルに関する注意
スクリプトはAPIレスポンスの .content フィールドと .reasoning フィールドの両方を防御的に処理します。ほとんどのモデルは標準の .content フィールドにコンテンツを返しますが、.reasoning へのフォールバックにより、異なるレスポンス形式を使用するモデルとの互換性が確保されます。
動作の仕組み(技術詳細)
Observer
- 最近変更されたセッションJSONLファイルを検索
- サブエージェント/cronセッションをフィルタリング
- ルックバックウィンドウからユーザー + アシスタントメッセージを抽出
- MD5ハッシュ比較で重複排除
- Observerプロンプトを使用してLLMに送信(優先度ベースの圧縮)
- 結果を
observations.mdに追加 - 観測結果が単語しきい値を超えた場合、Reflectorをトリガー
Reflector
- 現在の観測結果をバックアップ
- 統合指示とともにログ全体をLLMに送信
- 出力が入力より短いことを検証(健全性チェック)
- 観測結果を統合版に置き換え
- 古いバックアップを削除(最新10件を保持)
Session Recovery
/newまたは/resetのたびに実行- 最後のセッションファイルの最近の行をハッシュ化
- 最後のObserver実行時に保存されたハッシュと比較
- 不一致の場合: 回復モードでObserverを実行(4時間ルックバック)
- フォールバック: Observerが失敗した場合、生のメッセージを抽出
Reactive Watcher
inotifywaitを使用してセッションディレクトリを監視- メインセッションファイルへのJSONL書き込みのみをカウント
- 40行以上の場合: Observerをトリガー(5分間のクールダウンあり)
- cron/外部Observerの実行が検出された場合、カウンターをリセット
プロンプトのカスタマイズ
ObserverとReflectorのシステムプロンプトは prompts/ にあります:
prompts/observer-system.txt— 会話の圧縮方法を制御prompts/reflector-system.txt— 観測結果の統合方法を制御
これらを編集して、エージェントの性格や優先順位に合わせてください。
ドリームサイクル
ドリームサイクルはオプションの夜間エージェントで、営業時間外に observations.md を統合します。古いアイテムをアーカイブし、セマンティックフックを追加することで、有用なものが実際に失われることがないようにします。コンテキストはスリムに保たれ、すべてを見つけられる状態が維持されます。
機能
マルチフック検索 — アーカイブされたアイテムごとに4~5の代替検索フレーズ。元の単語と異なる検索でも記憶を見つけられます。
信頼度スコア — すべての観測結果に信頼度スコア(0.0~1.0)とソースタイプ(explicit、implicit、inference、weak、uncertain)が付与されます。高信頼度アイテムはより長く保存され、低信頼度アイテムはより早くアーカイブされます。
メモリタイプシステム — タイプごとにTTLを持つ7つのタイプ: event(14日)、fact(90日)、preference(180日)、goal(365日)、habit(365日)、rule(無期限)、context(30日)。observations.md に非表示のHTMLメタデータコメントとして埋め込まれます。
観測チャンク分割 — 3つ以上の関連する観測結果のクラスターが単一のサマリーエントリに圧縮されます。元の観測結果はアーカイブされ、チャンクフックが代わりに配置されます。最大75%のトークン削減を実現します。
重要度の減衰 — タイプごとの1日あたりの減衰が、各アーカイブ判断の前に重要度スコアに適用されます。アーカイブしきい値を下回ったアイテムは削除対象としてキューに入れられます。レート: event(-0.5/日)、fact(-0.1/日)、preference(-0.02/日)、rule/habit/goal(減衰なし)。
パターンプロモーション — 最近のドリームログから繰り返し発生するテーマ(3日以上にわたって3回以上の発生)をスキャンします。プロモーション提案を memory/dream-staging/ に書き込み、人間のレビューを待ちます。staging-review.sh を使用して、提案の一覧表示、内容確認、承認、または拒否を行います。context タイプは自動的にプロモーションされることはありません。
セットアップ
-
bash skills/total-recall/scripts/setup.shを実行 — ドリームサイクルディレクトリが自動的に作成されます。 -
夜間のcronジョブを完全なエージェントターンとして追加:
# ドリームサイクル — 夜間(午前3時推奨。タイムゾーンに合わせて調整) # ドリームサイクルは完全なエージェントターンとして実行されます — 直接bash呼び出しではありません。 # dream-cycle.shはエージェントが呼び出すファイル操作ヘルパーであり、エントリポイントではありません。 # # 0 3 * * * bash -c 'source ~/.openclaw/shared/secrets/openclaw-secrets.env \ # && openclaw agent --agent main \ # --message "Total Recall ドリームサイクルを実行。$WORKSPACE/skills/total-recall/prompts/dream-cycle-prompt.md の指示に正確に従ってください。\ # READ_ONLY_MODE=false および DREAM_PHASE=1 を使用。" \ # --json >> $WORKSPACE/logs/dream-cycle.log 2>&1' -
システムプロンプトとして
prompts/dream-cycle-prompt.mdを使用してcronエージェントを設定。推奨モデル: Claude Sonnet(Dreamer: 分析+判断)、DeepSeek v3.2(Observer: 安価、高速)。 -
最初の数夜は
READ_ONLY_MODE=trueで開始。各実行後にmemory/dream-logs/をチェックし、何をアーカイブしたかを確認。 -
満足したら
READ_ONLY_MODE=falseに切り替え。
設定
| 変数 | デフォルト | 説明 |
|---|---|---|
DREAM_TOKEN_TARGET | 8000 | 統合後のobservations.mdのトークン目標値 |
READ_ONLY_MODE | false | true に設定して書き込みなしのドライラン分析を有効化 |
ファイル
| ファイル | 説明 |
|---|---|
scripts/dream-cycle.sh | エージェントが呼び出す シェルヘルパー(スタンドアロンランナーではありません): プリフライト、アーカイブ、observationsの更新、ログ書き込み、メトリクス書き込み、検証、ロールバック |
prompts/dream-cycle-prompt.md | 夜間ドリームサイクル実行用のエージェントプロンプト |
dream-cycle/README.md | ドリームサイクルクイックリファレンス |
schemas/observation-format.md | 拡張観測結果メタデータ形式 |
作成されるディレクトリ
memory/
archive/
observations/ # アーカイブされたアイテム(1夜につき1つの.mdファイル)
chunks/ # チャンク化された観測グループ
dream-logs/ # 夜間実行レポート
dream-staging/ # 人間のレビューを待つパターンプロモーション提案
.dream-backups/ # 実行前の安全バックアップ
research/
dream-cycle-metrics/
daily/ # 夜間ごとのJSONメトリクス
トラブルシューティング
Observerが動作しない?
logs/observer.logでエラーを確認OPENROUTER_API_KEYが設定され、有効であることを確認- cronがアクティブであることを確認:
crontab -l
セッション開始時に観測結果が読み込まれない?
- エージェントの起動指示に
memory/observations.mdの読み込みが含まれていることを確認 MEMORY_DIRが正しい場所を指していることを確認
リアクティブウォッチャーがトリガーしない(Linux)?
systemctl --user status total-recall-watcherを実行inotify-toolsがインストールされていることを確認:which inotifywait- ウォッチャーログを表示:
journalctl --user -u total-recall-watcher -f
ドリームサイクルがアーカイブしすぎる?
READ_ONLY_MODE=trueを有効にし、本稼働前にドリームログを確認DREAM_TOKEN_TARGETを引き上げて、1回の実行あたりのアーカイブを減らす
ドリームサイクルが十分にアーカイブしない?
DREAM_TOKEN_TARGETを引き下げて、より積極的な統合をトリガー
インスピレーション
このシステムは、人間の記憶が睡眠中にどのように機能するかに触発されています。海馬(オブザーバー)が経験をキャプチャし、睡眠中の統合(リフレクター)中に重要な記憶が強化され、ノイズが破棄されます。
詳しく読む: Your AI Has an Attention Problem
"Get your ass to Mars." — さあ、エージェントの記憶を機能させましょう。