mcpField
M
mem-recall

mem-recall

github.com/mindfold-aiエージェントワークフロー9186 回インストール7 週間前に更新
リポジトリ

mem-recall について

mem-recallは、Trellis CLIを使って過去のAI会話を検索する、クロスプラットフォーム対応のスキルです。複数環境のローカルなセッション記録を整形して検索し、議論部分や実装部分を抽出できます。

主な機能

  1. 01複数プラットフォームのセッション検索
  2. 02プロンプト注入やツールノイズの除去
  3. 03プロジェクトと日付による絞り込み
  4. 04該当ターンと前後の会話を取得
  5. 05ブレインストーミングと実装部分の抽出

活用シーン

  1. 01特定テーマの過去の議論を検索
  2. 02設計理由やトレードオフの確認
  3. 03プロジェクトの最近のセッションを特定
  4. 04議論部分または実装部分だけを確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mindfold-ai/marketplace --skill mem-recall

インストール後、Claude Code で/mem-recallを入力して読み込まれたか確認します。

詳細

Mem Recall

Claude Code、Codex CLI、Devin CLI、Grok、OpenCode、Pi、ZCode に対応したクロスプラットフォームの会話メモリです。trellis mem コマンドは各プラットフォームのローカルセッションストレージを読み込み、対話をクリーンアップし(システムプロンプトやツールのノイズ、フックによる挿入を除去し、圧縮された要約も正しく処理します)、想起ワークフローに特化した 5 つのコマンドを備える CLI を提供します。Devin CLI は --platform devin で ~/.local/share/devin/cli/sessions.db を読み込みます。trellis init --devin(Desktop/Cascade)や Factory Droid ではありません。

前提条件

Trellis CLI 0.6.17 以降がグローバルにインストールされている必要があります。

npm install -g @mindfoldhq/trellis@latest
trellis --version

trellis mem は CLI に同梱されているため、追加のセットアップは不要です。0.6.17 では Cognition Devin CLI(--platform devin、~/.local/share/devin/cli/sessions.db)が追加されました。 これは trellis init --devin(Desktop/Cascade)や Factory Droid ではありません。 0.6.14 では Grok が追加され、圧縮前のターンが維持されるようになりました。0.6.16 では OpenCode が復元されました。

OpenCode は、依存関係ゼロの SQLite リーダーを使って 0.6.16 で復元されました。 --platform opencode は ~/.local/share/opencode/opencode.db を読み込みます。

このスキルを使うタイミング

ユーザーが次のいずれかを尋ねたら、積極的に使ってください。

  • 「我之前跟 Codex/Claude 讨论过 X,你了解下」
  • 「上次我们怎么解决 Y 的?」
  • 「翻一下历史看看」
  • 「我之前在 trellis 项目里聊过哪些 plugin 设计?」
  • 「メモリアーキテクチャについてのセッションを探して」
  • 「先週、別の AI にこの件について何を伝えたっけ」

設計の根拠に関する内容(こうした場合は --phase brainstorm を優先してください。詳細は下記を参照):

  • 「我们当时怎么决定 X 的?」
  • 「之前讨论过 X 的 trade-off」
  • 「为什么我们选了 X 而不是 Y」
  • 「Y に関する設計上の議論は何でしたか」
  • 「X を選んだ理由」
  • 「他の案より Z を選んだブレインストーミングを探して」

意図を深読みしないでください。「過去の会話をコンテキストとして使う」というユーザーの意図に応えるのが、このスキルの役割です。クロスプラットフォーム/クロスプロジェクトの想起に代わるツールはありません。git log で分かるのはコミットだけであり、別の CLI で話した内容はあなた自身の記憶にも残っていません。

想起ワークフロー(このパターンを覚えておいてください)

想起は単一のクエリではなく、2 段階で掘り下げます。ステップ 1 でセッションを絞り込み、ステップ 2 で実際の内容を取得します。

Step 1 (discover):  trellis mem search "<topic>" [--cwd <project>] [--since <date>]
Step 2 (drill):     trellis mem context <session-id> --grep <topic> --turns 3 --around 1

どのプロジェクトかユーザーの説明が曖昧な場合は、まず trellis mem projects を実行して、最近アクティブなプロジェクトの cwd を表示し、最も可能性の高いものを選んでください。

コマンド

trellis mem projects — アクティブなプロジェクトの cwd を一覧表示

ユーザーがどのプロジェクトかを指定せずに「そのプロジェクト」と言及した場合、最初に使います。すべてのプラットフォームにまたがる個別の cwd を、最終アクティブ時刻の降順で表示し、プラットフォームごとのセッション数も示します。AI のルーティングに使う入口です。

trellis mem projects --since 2026-04-20 --limit 10

出力:

2026-05-04 03:42  sessions= 1 (claude:1)  ~/workspace/nb_project/mem-poc
2026-05-04 01:00  sessions=114 (claude:51 codex:63)  ~/workspace/.../Trellis
...
trellis mem search <keyword> — 候補となるセッションを検索

クリーンアップ済みの対話を対象に、複数トークンの AND 検索を行います。一致ごとにチャンクの抜粋を添えて、セッションを順位付けして返します。デフォルトでは現在の作業ディレクトリを検索します。すべてのプロジェクトを検索するには --global を指定してください。

trellis mem search "trellis memory" --cwd ~/workspace/.../Trellis --since 2026-04-13

セッションごとの出力:

[claude  ] 2026-04-20 11:39  4cda3c7f-8f9  ~/.../Trellis  score=6.027  hits=169 (u=27,a=142)  turns=37
    [user] 是我们的用户想要搞类似记忆系统的东西…
    [assistant] ## Memory plugin 调研结论…

スコアの読み方:(3 × user_hits + asst_hits) / total_turns。数値が高いほど、そのトピックが集中しており、かつユーザー自身が話題に出したことを示します。ユーザーの発言におけるヒットは ×3 の重み付けです。ユーザーの言い回しが最も強いトピックの手がかりであるためです。AI の説明では同じ単語が繰り返され、生の出現数が膨らむことがあります。

抜粋は段落に沿ったチャンクであり、文字数単位のウィンドウではありません。Markdown やコードブロックの境界を尊重し、クエリのすべてのトークンを目に見える形で含むチャンクを優先します。長いターン内で複数のクエリトークンが離れている場合は、最も珍しいトークンを基準にしたチャンクにフォールバックします(他との識別力が高いためです)。

trellis mem context <session-id> — セッションを掘り下げる

search で候補を選んだ後に使うと、一致した特定のターンとその前後のコンテキストを取得できます。AI が直接利用できるよう、トークン予算に合わせて調整されます。

trellis mem context 4cda3c7f --grep memory --turns 3 --around 1
# top-3 hit turns + 1 turn before/after each, ≤6000 chars total

trellis mem context 4cda3c7f --turns 5 --around 0
# no grep: returns the first 5 turns (lets you see how the session opens)

デフォルトの予算は 6000 文字(約 1500 トークン)で、1 ターンあたりの上限はその半分です。調整するには --max-chars N を使います。

trellis mem extract <session-id> — クリーンアップ済みの対話をダンプ

プラットフォーム固有のクリーンアップ後の会話全体をダンプします。トークン予算に制約のある想起ではなく、長文の確認に使ってください。

trellis mem extract 4cda3c7f --grep memory   # filter to turns matching keyword
trellis mem extract 4cda3c7f --json          # structured output
trellis mem extract --phase brainstorm — 議論部分を切り出す

Trellis セッションは、ブレインストーミング(ユーザーが考えを声に出し、AI が選択肢を提案し、代替案が却下され、決定が行われる)で始まり、ユーザーが task.py start を実行すると実装作業に移ることがよくあります。--phase フラグを使うと、この境界に沿ってクリーンアップ済みの対話を切り分け、実装によるノイズを含まない議論を取り出せます。逆に、実装部分だけを取り出すこともできます。

境界:ブレインストーミングのウィンドウは、同じセッション内で task.py create ... の Bash 呼び出しから、それに対応する task.py start ... の Bash 呼び出しまでの範囲です。複数タスクのセッションでは、複数のウィンドウが生成されます。

3 つの値:

--phase取得できる内容
all(デフォルト)クリーンアップ済みの対話全体。以前のフラグなしの動作と同じです
brainstorm[create, start) のウィンドウのみ — 議論/決定
implementすべてのブレインストーミングウィンドウの外側にある内容 — 実装作業そのもの

--phase brainstorm を優先する場面:設計の根拠に関する質問(「そのとき、なぜ X を選んだのか」、「Y に関するトレードオフの議論」、「どの代替案を却下したか」など)は、セッション全体よりもブレインストーミングウィンドウ内のほうが、関連情報の密度がはるかに高くなります。context --grep ではなく、extract --phase brainstorm を直接使いましょう。context --grep では、話題が決定された箇所ではなく、単に言及されているだけの実装フェーズの途中に行き着くことがあります。

例:

# Single session, brainstorm only
trellis mem extract 4cda3c7f --phase brainstorm

# Multi-task session — output is split with separators:
#   --- task: my-feature ---
#   ## Human ...
#   --- task: another-task ---
#   ## Human ...
trellis mem extract 4cda3c7f --phase brainstorm

# Filter inside the brainstorm window only (--phase runs first, then --grep)
trellis mem extract 4cda3c7f --phase brainstorm --grep "trade-off"

# Structured output: get window metadata for downstream scripts / AI
trellis mem extract 4cda3c7f --phase brainstorm --json
# JSON adds:
#   "phase": "brainstorm"
#   "windows": [{ "label": "my-feature", "startTurn": 1, "endTurn": 14 }, ...]
#   "groups":  [{ "label": "my-feature", "turns": [...] }, ...]
#   "turns":   [...]   // flat concatenation, legacy-compatible

# The inverse: just the implementation work
trellis mem extract 4cda3c7f --phase implement

プラットフォームのサポート:

プラットフォーム--phase brainstorm / implement
Claudeネイティブ対応 — 生の JSONL tool_use Bash ブロックから境界を検出
Codexネイティブ対応 — function_call(exec_command)イベントから境界を検出
Devinネイティブ対応 — main_chain_id をたどり、exec の tool_calls から境界を検出
Piネイティブ対応 — アクティブブランチのセッションエントリから境界を検出
OpenCode機能が制限されます — 対話全体を返し、opencode-phase-unsupported 警告を表示

適切に処理されるエッジケース:

  • create は見つかったが、後続の start がない(タスクをまだ作業中)→ ウィンドウはセッション終了まで開いたままです。
  • start は見つかったが、先行する create がない(タスクは以前のセッションで作成された)→ ブレインストーミングウィンドウは [0, start) です。
  • どちらも見つからない → 対話全体を返し、stderr に警告を出力します。
trellis mem list — セッションを一覧表示する

主に閲覧やデバッグに使用します。デフォルトではプロジェクト単位です。範囲を広げるには --global を指定します。

trellis mem list --since 2026-04-27

OpenCode の子セッションには、↳ child of <parent-id> という注釈が表示されます。

フラグリファレンス

--platform claude|codex|devin|grok|opencode|pi|zcode|all   default all
--since YYYY-MM-DD                     inclusive lower bound
--until YYYY-MM-DD                     inclusive upper bound
--global                               include all projects (default: cwd-scoped)
--cwd <path>                           override the project cwd
--limit N                              cap output (default 50)
--grep KW                              extract / context: filter turns by keyword
--turns N                              context: top-N hit turns (default 3)
--around N                             context: surrounding turns per hit (default 1)
--max-chars N                          context: char budget (default 6000)
--phase brainstorm|implement|all       extract: slice by [task.py create, start) (default all; Claude, Codex, Devin & Pi)
--include-children                     search / context: merge OpenCode sub-agent sessions into parent
--json                                 emit JSON
--help, -h                             show help

正式なフラグリファレンスを確認するには、trellis mem help を実行してください。

データの取得元(プラットフォーム別)

このツールは以下の場所を直接読み取ります。デーモン、インデックス、アップロードはありません。

プラットフォームストレージ備考
Claude Code~/.claude/projects/<sanitized-cwd>/*.jsonlセッションごとに JSONL が 1 つあります。cwd のパスはディレクトリ名にエンコードされます(/ と _ → -)
Codex~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonlセッションごとに JSONL が 1 つあります。cwd は最初のイベントの session_meta ペイロードに格納されています
Devin CLI~/.local/share/devin/cli/sessions.dbCognition Devin CLI(WAL SQLite)。--platform devin を指定します。trellis init --devin(Desktop/Cascade)および Factory Droid とは異なります
Grok~/.grok/sessions/<url-encoded-cwd>/<session-id>/chat_history.jsonlcwd はディレクトリ名に URL エンコードされています。session_search.sqlite はインデックスにすぎず、読み取られません
Piデフォルトは ~/.pi/agent/sessions/。環境変数で上書きできます。グローバル設定は ~/.pi/agent/settings.json、プロジェクトスコープの設定は .pi/settings.json ですセッションごとに JSONL が 1 つあります。相対パスの sessionDir 値は、設定ファイルのディレクトリを基準に解決されます。プロジェクトローカルの設定は、現在の cwd または --cwd に対して検出されます。制限のない --global スキャンでは検出されません。アクティブな id/parentId ブランチのみが抽出されます
OpenCode~/.local/share/opencode/opencode.dbSQLite の session/message/part テーブル(0.6.16 以降)

クリーニングルール(生データから取り除かれるもの)

このツールは、人間と AI の実際の対話のみを抽出し、次の内容を取り除きます。

  • システム/プロンプトインジェクション:<system-reminder>、<workflow-state>、<INSTRUCTIONS>、<environment_context>、<permissions instructions>、<collaboration_mode> など(大文字と小文字を区別しません)
  • ブートストラップターン:Codex は AGENTS.md の前文を最初のユーザーメッセージとして挿入します。このターン全体を削除し、タグだけを取り除くことはありません
  • ツール呼び出しとその結果:text ブロックのみを保持します 圧縮前のターンは保持され、圧縮が行われた箇所を示すマーカーが付きます(0.6.14 以降。以前のバージョンでは削除されていました)。プラットフォームが読み取り可能な形式で保存しない内容は、黙って省略せずに報告されます。Codex はエージェント間のメッセージを暗号化し、Grok は圧縮前のターンを <session>/compaction/ のレンダリング済み Markdown として保持します。

つまり、検索結果は「キーワードが何らかのフック挿入に含まれていた」ではなく、「実際の会話でこの内容が話題になった」という信頼できる手がかりになります。

プラットフォーム間のサブエージェントの動作

プラットフォームサブエージェントの保存方法復元可能か
Claude同じ JSONL。メインエージェントの Agent/Task tool_use にプロンプトが記録され、tool_result に最終出力が記録されます。サブエージェント内部のターンは記録されませんプロンプト+最終結果のみ
Codexcodex exec の起動ごとに新しい rollout JSONL が作成され、parent_id フィールドはありません独立したセッションとして扱われます
Devinsessions.db のフォレスト(message_nodes)。main_chain_id/parent_node_id をたどります。フォークとリバートは削除されますアクティブなメインチェーン
Piセッションごとに単一の JSONL。破棄されたブランチはアクティブブランチから削除されますが、各破棄ブランチの branch_summary エントリは要約ターンとして保持されますアクティブブランチ+破棄ブランチの要約
OpenCodesession.parent_id がサブエージェントのチェーンを関連付けます--include-children で子孫を親に統合します

--include-children によって動作が実質的に変わるのは、OpenCode の検索のみです。他のプラットフォームには、統合に使用できるネイティブな parent_id がありません。

使用例:「先週、Trellis のメモリーについて何を話しましたか?」

# 1. Confirm the project name (skip if user already named it explicitly)
trellis mem projects --since 2026-04-27
# → finds "~/workspace/.../Trellis" with 114 sessions

# 2. Find candidate sessions
trellis mem search "memory" \
  --cwd ~/workspace/.../Trellis \
  --since 2026-04-27

# → top: codex 019dcc75 (score 2.43, Codex memory subagent + Trellis hook)
#   then: claude 12d26622 (user interview about "项目记忆 4 形态")

# 3. Drill into the most relevant
trellis mem context 12d26622 --grep memory --turns 3 --around 1
# → returns the actual interview question block listing 4 memory archetypes

# 4. Now answer the user with concrete content recovered from past sessions

ユーザーがセッション全体を明示的に求めていない限り、想起のために extract を実行しないでください。トークンの予算を大きく消費するうえ、必要になることはほとんどありません。

想起した内容の引用

復元した内容をユーザーに提示するときは、セッション ID と、実際に引用する行を示してください。根拠を示さずに「X について話したことを覚えています」と言わないでください。ユーザーは内容を確認できず、別の会話を指していた可能性もあります。

形式:

From session 12d26622 (claude, 2026-04-20):
> 是我们的用户想要搞类似记忆系统的东西…

You proposed four memory archetypes that day: …

このスキルを使わない場合

  • ユーザーがコードを検索したい場合(Grep/Read を使用)
  • ユーザーがコミット履歴を確認したい場合(git log/gh を使用)
  • ユーザーが現在のプロジェクト内のドキュメント/ファイルを検索したい場合(Read/Glob を使用)

このスキルは、ファイルの内容ではなく、過去の AI との会話内容を復元することに特化しています。

パフォーマンスに関する注意

  • プロジェクトを対象にした 3 週間分の検索:約 0.85 秒(一般的な Mac の場合)
  • 期間を指定しないグローバル検索:約 3 秒(マシン全体のセッションコーパスをスキャン)
  • 呼び出しごとに状態はリセットされます。キャッシュもデーモンもありません。macOS/Linux のページキャッシュがファイル読み込みを吸収するため、コールド実行とウォーム実行のパフォーマンスはほぼ同じです
  • 対話的に使う場合は、--cwd と --since を指定して検索対象を絞ることをおすすめします

コメント