/sibyl-save - セッションメモリ同期+スキル抽出(Sibyl Memory Plugin)
Sibyl Labsオープンスキルコレクションの一部。MITライセンス。Sibyl Labs, LLC制作。
Sibyl Memory Plugin のためのコンパニオンスキルです。このセッションで発生したすべてをキャプチャし、プラグインのローカルメモリデータベース(~/.sibyl-memory/memory.db)に、プラグイン自身のインターフェースを介して注入し、さらに再利用可能なパターンを新しいスキルとして抽出します。
生のメモリファイルには書き込みません。すべてのメモリはプラグインを経由するため、階層化、全文検索、無料枠の上限が適切に尊重されます。プラグインは対応するすべてのハーネス(Claude Code、Codex、および任意のMCPホスト、HermesはPython SDK経由)で同一のMCPツールを公開するため、この単一のスキルは構築上マルチハーネス対応です。
必要条件
Sibyl Memory Plugin がインストールされ、配線されていること:
pip install sibyl-memory-cli
sibyl init # ブラウザ/ウォレットアクティベーション、~/.sibyl-memory/ を作成
sibyl setup claude-code # または: codex | hermes (メモリインターフェースをハーネスに配線)
このスキルは、以下の2つのインターフェースのいずれかを介してプラグインと通信します:
- MCP(Claude Code、Codex、Cursor、任意のMCPホスト):以下の8つの
memory_*ツール - Python SDK(Hermesまたは任意のPythonエージェント):
sibyl_memory_client.MemoryClient/sibyl_memory_hermes.SibylMemoryProvider
プラグインインターフェース
| 目的 | MCPツール | Python SDK |
|---|---|---|
| 事実/エンティティの保存 | memory_remember(category, name, body) | client.set_entity(category, name, body) |
| エンティティの検索 | memory_recall(category, name) | client.get_entity(category, name) |
| エンティティの一覧表示 | memory_list(category, limit) | client.list_entities(category) |
| 全文検索 | memory_search(query, limit, tiers) | client.search(query) |
| 状態ドキュメントの設定 | memory_set_state(key, body) | client.set_state(key, body) |
| 状態ドキュメントの取得 | memory_get_state(key) | client.get_state(key) |
| ジャーナルイベントの記録 | memory_record_event(kind, body, category, name) | client.write_event(...) |
| アーカイブ/忘却 | memory_forget(category, name, reason) | client.archive_entity(category, name, reason) |
以下の例ではMCP名を使用しています。HermesまたはPythonエージェントの場合はSDK列を使用してください。
階層マッピング
| セッションコンテンツ | 階層 | 呼び出し |
|---|---|---|
| セッションポインタ/サマリー/フォワードアイテム | HOT(状態) | memory_set_state("session", ...) |
| ランク付けされた優先順位 | HOT(状態) | memory_set_state("priorities", ...) |
| セッションログエントリ | COLD(ジャーナル) | memory_record_event("session_save", ...) |
| プロジェクト/人/製品 | WARM(エンティティ) | memory_remember(category, name, body) |
| クローズ/終了アイテム | ARCHIVE | memory_forget(category, name, reason) |
| このスキルの設定+デルタマーカー | HOT(状態) | memory_set_state("sibyl_save:config" / "sibyl_save:last_save", ...) |
モード
- run(デフォルト):
/sibyl-save、save session、sync memory。セッションコンテキストをプラグインに注入し、その後スキル抽出を提案。 - setup:
/sibyl-save setup、/sibyl-save config。対話的。設定(状態キーsibyl_save:configにプラグインに保存)を構築または編集します。初回使用前に一度実行してください。 - preview(ドライラン):
/sibyl-save preview、/sibyl-save --dry-run。完全な分析を実行し、計画されたすべての書き込みを報告します。DBを変更するものは呼び出しません。デルタマーカーは更新しません。
モード: setup(動的設定)
目標:設定をプラグインの状態キー sibyl_save:config に書き込みます。対話的かつ最小限に抑えてください。推測できることは推測し、どうしても必要なことだけ尋ねてください。
- ハーネス。これがどのハーネス(claude-code、codex、cursor、hermes、その他)かを検出または質問します。これはフェーズ2でスキルファイルを書き込む場所を決定します。
- スキル出力。このハーネスに対して新しいスキルが書き込まれる場所。Claude Codeのデフォルト:
.claude/skills/<name>/SKILL.md。その他のハーネスの場合は、スキルの場所と形式を確認します。skill_output: {dir, format}として保存します。 - 優先順位。ランク付けされたリストの状態キー(デフォルト
priorities)と上限。デフォルトの上限は15。ハード上限は30:30を超える値は決して受け付けません。30を超えるリストはバックログであり、優先順位のセットではありません。 - エンティティカテゴリ。追跡するWARMカテゴリ(デフォルト
project、person、product)。ユーザーが追加または削除します。 - 追加キャプチャ。オプションで、保存が実行ごとに入力する追加の状態キーまたはエンティティカテゴリ(メトリクス状態ドキュメント、連絡先カテゴリなど)を指定します。これは拡張ポイントです。
- ドライランのデフォルト。
dry_run_defaultの切り替え(デフォルトはfalse)。 - 設定を書き込む
memory_set_state("sibyl_save:config", {...})を使用して。デルタマーカーには触れません。
設定の形状:examples/sibyl-save-config.example.json を参照。再実行すると設定をその場で編集します。
モード: run
フェーズ1: メモリ同期(プラグインDBへ)
ステップ0 - 設定+デルタの読み込み
memory_get_state("sibyl_save:config")。存在しない場合はセットアップに切り替えます。memory_get_state("sibyl_save:last_save") でデルタアンカー(前回の保存以降に変更されたもの)を取得します。dry_run_default がtrueでモードが指定されていない場合は、プレビューとして実行します。
ステップ1 - 現在の状態を読み取る
memory_get_state("session")とmemory_get_state(<優先順位キー>)- 追跡対象カテゴリの
memory_list(category, limit)、およびこのセッションで触れられたエンティティのmemory_recall/memory_search - 設定で指定された追加の状態キーまたはカテゴリ
ステップ1.5 - 優先順位のチェックと調整
優先順位状態ドキュメントを読み取り、その場で調整します(memory_set_state で書き戻します)。条件とそれぞれが必要とするアクション:
- 完了したアイテムがまだリストに残っている:削除します。
memory_record_event("priority_closed", {...})でクローズを記録します。 - ランクのずれ/重複ランク(ランクが1..Nの連続でない、またはランクが重複している):1..Nに番号を振り直します。
- 上限超過(アイテム数が上限を超えている):最も優先順位の低いアイテムをバックログ状態ドキュメントに移動し、上限以下になるまで繰り返します。
- 古くなったアイテム(14日以上触れられていない):ユーザーに通知します。
- 終了したエンティティ(参照先エンティティがアーカイブ/終了している):優先順位をクローズします。
- 壊れたエンティティ参照(実在するエンティティを指していない):実際の
category/nameに修正します。
すべての書き込みで上限を適用します(30を超えないこと)。
ステップ2 - セッションを分析する
デルタアンカー以降(または初回保存の場合はセッション開始以降)の会話を確認します。以下を抽出します:
- 触れられたエンティティ - 作成、読み取り、変更されたプロジェクト、人、製品
- 実行されたアクション - 識別子を伴って実際に起こった具体的なこと
- 行われた決定 - 戦略的な選択とその根拠
- フォワードアイテム - 次回セッションでのアクション、動詞から始まる("デプロイ..."、"フォローアップ..."、"確認...")
- 警告 - アクティブなリスク、ブロッカー、期限、ヒヤリハット
- 学んだ教訓 - 運用改善(これらはフェーズ2に供給される)
- 追加キャプチャ - 設定内の追加の状態キー/カテゴリのデータ
ステップ3 - プラグインDBに注入する
プレビューモードでは、変更を伴う呼び出しは一切行いません。計画された書き込みを報告し(ステップ4)、停止します。
- セッション状態 -
memory_set_state("session", { last_session, summary, forward, entities_touched, warnings })。フォワードアイテムはアクション参照のみで、残高スナップショットや古くなるものは含めません。 - ジャーナルイベント -
memory_record_event("session_save", { evaluated, acted, forward, extra })。保存ごとに1つのイベント(設計上、追加のみ)。 - 優先順位 -
memory_set_state(<優先順位キー>, { updated, cap, items })、上限あり。超過分はバックログ状態ドキュメントへ。 - エンティティ - 変更されたエンティティごとに
memory_remember(category, name, body)。新しいエンティティは単に新しいmemory_remember呼び出しです。プラグインがインデックスを作成するため、別途レジストリを管理する必要はありません。 - クローズ/終了 -
memory_forget(category, name, reason)。 - 追加キャプチャ - 設定された追加の状態キー/カテゴリをそれぞれ適用します。
- デルタマーカー -
memory_set_state("sibyl_save:last_save", { ts: <現在時刻> })。プレビューの場合はスキップします。
ステップ4 - レポート
簡潔なサマリー:書き込まれたエンティティ、更新された状態ドキュメント、ジャーナルイベントID、追加/クローズされた優先順位、追加キャプチャ、次回セッションのフォワードアイテム。プレビューモードでは各行に「would」を付け、何も書き込まれなかったことを確認します。
フェーズ2: スキル抽出(ハーネスネイティブ)
スキルはハーネスに関係なく同じ方法で提示されます:特定、提案、そして現在のハーネス向けのネイティブスキルファイルとして作成します。
ステップ5 - 再利用可能なパターンを特定する
セッション内で以下のいずれかの条件を満たす操作をスキャンします:反復(このセッションで複数回)、定期的(再度発生する可能性が高い)、複数ステップ(3つ以上の連続ステップ)、非自明(残す価値のある回避策)、エラーが発生しやすい(チェックリストが必要)。各候補について、名前(短い命令動詞句)、トリガー、パラメータ、複雑さ(危険なステップの有無)、頻度を評価します。
ステップ6 - 候補を提案する
各候補を名前、説明、推定頻度とともに1行で提示します。その後、「これらを作成しますか?それともスキップしますか?」と尋ねます。
ステップ7 - 承認されたスキルを作成する(ハーネスネイティブ)
設定から skill_output を読み取り、このハーネスがスキルを期待する場所と形式を確認します。デフォルト:
| ハーネス | スキルの場所 | 形式 |
|---|---|---|
| claude-code | .claude/skills/<name>/SKILL.md | YAMLフロントマター(name、description)+Markdown本文 |
| codex | ~/.codex/prompts/<name>.md(セットアップで確認) | Markdownプロンプト |
| cursor | .cursor/ コマンド/ルール(セットアップで確認) | Cursorの規則に従う |
| その他 | skill_output.dir から | skill_output.format から |
承認された各スキルについて、トリガーフレーズ、ステップバイステップの手順、パラメータの説明、危険なステップの安全確認、および呼び出し例を含めて、設定された場所にファイルを書き込みます。パスを報告します。
以下のスキルは作成しないでください: 既存のスキルを複製するもの(最初にスキルの場所を確認すること)、再発するにはセッション固有すぎるもの、単一の自明なコマンドをラップするもの、または保護された運用ルールが編集を禁止しているファイルを編集する必要があるもの(それらをユーザーに通知し、自分で編集しないこと)。
ルール(譲歩不可)
- ライブデータ(残高、価格、カウント)を永続的な事実として保存しないでください。参照をキャプチャし、スナップショットは取らないでください。
- セッションフォワードアイテムはアクション指向で動詞から始めてください。
- 保存ごとに1つのジャーナルイベント(追加のみ。履歴を書き換えないこと)。
- 優先順位には上限があります(デフォルト15、30を超えてはいけません)。超過分はバックログ状態ドキュメントに移動します。
- エンティティは
category+nameでアドレス指定します。プラグインをインデックスとして機能させてください。並行するレジストリは不要です。 - すべてのメモリ書き込みはプラグインインターフェースを経由します。
~/.sibyl-memory/のファイルに直接書き込んだりmemory.dbを直接開いたりしないでください。クライアントがロックと無料枠の上限を処理します。 - 既存のスキルは読み取り専用として扱ってください。明示的に依頼されない限り、新しいものを作成し、その場で編集しないでください。
ライセンスと出典
MIT(LICENSE 参照)。各Markdownファイルの先頭にある透かしコメントは帰属と出典を示すものであり、使用制限ではありません。node scripts/watermark.mjs verify でコピーを検証できます。詳細は WATERMARK.md を参照してください。