mcpField
O
opencode-memory

opencode-memory

github.com/carson2222エージェントワークフロー112413 回インストール17 週間前に更新
リポジトリ

opencode-memory について

OpenCode Memory Browserは、過去のセッション、計画、決定が必要なときにローカルのOpenCode履歴を調べる読み取り専用スキルです。対象を絞ったSQLiteクエリで検索し、履歴を既定で注入せず、関連情報を要約します。

主な機能

  1. 01OpenCode履歴への読み取り専用アクセス
  2. 02セッションとメッセージ本文の検索
  3. 03計画とプロンプト履歴の参照
  4. 04件数を絞ったSQLiteクエリ
  5. 05関連情報の要約

活用シーン

  1. 01過去のセッションでの決定を確認
  2. 02以前のプロジェクト文脈を踏まえて作業を再開
  3. 03同じ問題が以前に起きたか確認

インストール

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

$npx skills add https://github.com/carson2222/skills --skill opencode-memory

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

同梱ファイルreferences/storage-format.md

詳細

OpenCode メモリブラウザー

ローカルの OpenCode 履歴を読み取り専用で検索します。過去のセッション、 計画、または決定が役立つ場合にのみ使用してください。履歴をデフォルトで 注入しないでください。

使用する場合

  • ユーザーが履歴、過去のセッション、前回、計画、想起、またはメモリについて尋ねた場合。
  • 過去の OpenCode コンテキストが関係する可能性のあるプロジェクトを再開する場合。
  • 以前にも発生した可能性のある問題を繰り返しデバッグする場合。

リポジトリのファイルや git で質問に答えられる場合や、タスクが新しい場合は使用しないでください。

ルール

  • 読み取り専用です。OpenCode の DB やファイルを変更しないでください。
  • 読み取り専用 URI を指定して sqlite3 を使用してください。ファイル読み取りツールで DB を読み取らないでください。
  • LIMIT と対象を絞った LIKE を使用して、結果を少量に抑えてください。
  • 関連する調査結果を要約し、生の履歴をそのまま出力しないでください。
  • 認証/プロバイダーテーブル(account、credential、control_account、account_state)は避けてください。

セットアップ

まず bash で実行してください。

DATA_ROOT="${XDG_DATA_HOME:-$HOME/.local/share}/opencode"
STATE_ROOT="${XDG_STATE_HOME:-$HOME/.local/state}/opencode"
DB="$(opencode db path 2>/dev/null || true)"
[ -n "$DB" ] || DB="${OPENCODE_DB:-$DATA_ROOT/opencode.db}"
case "$DB" in :memory:|/*) ;; *) DB="$DATA_ROOT/$DB" ;; esac
if [ ! -f "$DB" ]; then
  for candidate in "$DATA_ROOT"/opencode*.db; do
    [ -f "$candidate" ] && DB="$candidate" && break
  done
fi
DB_URI="file:${DB}?mode=ro"

便利なファイル:

  • 計画:$DATA_ROOT/plans/*.md
  • プロンプト履歴:$STATE_ROOT/prompt-history.jsonl
  • セッション差分:$DATA_ROOT/storage/session_diff/<session-id>.json

クエリ

概要
sqlite3 "$DB_URI" "
  SELECT 'projects', COUNT(*) FROM project
  UNION ALL SELECT 'main sessions', COUNT(*) FROM session WHERE parent_id IS NULL
  UNION ALL SELECT 'messages', COUNT(*) FROM message
  UNION ALL SELECT 'parts', COUNT(*) FROM part
  UNION ALL SELECT 'todos', COUNT(*) FROM todo;
"
最近のセッション
sqlite3 "$DB_URI" "
  SELECT s.id, COALESCE(s.title, 'untitled') AS title,
    COALESCE(p.name, p.worktree, '') AS project,
    datetime(s.time_updated/1000, 'unixepoch', 'localtime') AS updated,
    (SELECT COUNT(*) FROM message m WHERE m.session_id = s.id) AS messages
  FROM session s
  LEFT JOIN project p ON p.id = s.project_id
  WHERE s.parent_id IS NULL
  ORDER BY s.time_updated DESC
  LIMIT 10;
"
テキストを検索

最初に SEARCH_TERM を置き換えてください。

sqlite3 "$DB_URI" "
  SELECT s.id, COALESCE(s.title, 'untitled') AS title,
    json_extract(m.data, '$.role') AS role,
    datetime(m.time_created/1000, 'unixepoch', 'localtime') AS time,
    substr(json_extract(p.data, '$.text'), 1, 200) AS snippet
  FROM part p
  JOIN message m ON m.id = p.message_id
  JOIN session s ON s.id = m.session_id
  WHERE s.parent_id IS NULL
    AND json_extract(p.data, '$.type') = 'text'
    AND json_extract(p.data, '$.text') LIKE '%SEARCH_TERM%'
  ORDER BY m.time_created DESC
  LIMIT 10;
"
セッションのテキストを読む

最初に SESSION_ID_HERE を置き換えてください。テキスト部分のみを対象とします。ツール、 パッチ、ファイル、推論、または V2 内部構造については、リファレンスを使用してください。

sqlite3 "$DB_URI" "
  SELECT json_extract(m.data, '$.role') AS role,
    datetime(m.time_created/1000, 'unixepoch', 'localtime') AS time,
    GROUP_CONCAT(json_extract(p.data, '$.text'), char(10)) AS text
  FROM message m
  LEFT JOIN part p ON p.message_id = m.id
    AND json_extract(p.data, '$.type') = 'text'
  WHERE m.session_id = 'SESSION_ID_HERE'
  GROUP BY m.id
  ORDER BY m.time_created ASC
  LIMIT 50;
"

計画とプロンプト履歴

ls -lt "$DATA_ROOT"/plans/*.md 2>/dev/null | head -20
tail -20 "$STATE_ROOT"/prompt-history.jsonl 2>/dev/null

現在、プロンプト履歴のエントリでは input、mode、parts[] を使用しています。ルートの text があるとは想定しないでください。

詳細リファレンス

テーブルの詳細、パート/ツールの形式、レガシー JSON パス、またはデバッグ用クエリが 必要な場合にのみ、references/storage-format.md を使用してください。

コメント