opencode-memory について
OpenCode Memory Browserは、過去のセッション、計画、決定が必要なときにローカルのOpenCode履歴を調べる読み取り専用スキルです。対象を絞ったSQLiteクエリで検索し、履歴を既定で注入せず、関連情報を要約します。
主な機能
- 01OpenCode履歴への読み取り専用アクセス
- 02セッションとメッセージ本文の検索
- 03計画とプロンプト履歴の参照
- 04件数を絞ったSQLiteクエリ
- 05関連情報の要約
活用シーン
- 01過去のセッションでの決定を確認
- 02以前のプロジェクト文脈を踏まえて作業を再開
- 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 を使用してください。
コメント
Markdown 対応