mem-recall について
mem-recallは、Trellis CLIを使って過去のAI会話を検索する、クロスプラットフォーム対応のスキルです。複数環境のローカルなセッション記録を整形して検索し、議論部分や実装部分を抽出できます。
主な機能
- 01複数プラットフォームのセッション検索
- 02プロンプト注入やツールノイズの除去
- 03プロジェクトと日付による絞り込み
- 04該当ターンと前後の会話を取得
- 05ブレインストーミングと実装部分の抽出
活用シーン
- 01特定テーマの過去の議論を検索
- 02設計理由やトレードオフの確認
- 03プロジェクトの最近のセッションを特定
- 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.db | Cognition Devin CLI(WAL SQLite)。--platform devin を指定します。trellis init --devin(Desktop/Cascade)および Factory Droid とは異なります |
| Grok | ~/.grok/sessions/<url-encoded-cwd>/<session-id>/chat_history.jsonl | cwd はディレクトリ名に 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.db | SQLite の 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 に最終出力が記録されます。サブエージェント内部のターンは記録されません | プロンプト+最終結果のみ |
| Codex | codex exec の起動ごとに新しい rollout JSONL が作成され、parent_id フィールドはありません | 独立したセッションとして扱われます |
| Devin | sessions.db のフォレスト(message_nodes)。main_chain_id/parent_node_id をたどります。フォークとリバートは削除されます | アクティブなメインチェーン |
| Pi | セッションごとに単一の JSONL。破棄されたブランチはアクティブブランチから削除されますが、各破棄ブランチの branch_summary エントリは要約ターンとして保持されます | アクティブブランチ+破棄ブランチの要約 |
| OpenCode | session.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を指定して検索対象を絞ることをおすすめします