opencode のセッション履歴の保存場所
ここで対応する opencode の形式は、SQLite データベース ~/.local/share/opencode/opencode.db にセッションを保存します。設定時は $XDG_DATA_HOME/opencode/opencode.db を使います:
~/.local/share/opencode/opencode.dbXDG Base Directory 仕様に従うため、$XDG_DATA_HOME が設定されていれば $XDG_DATA_HOME/opencode/opencode.db が優先されます。多くのアプリが ~/Library/Application Support を使う macOS でも同じです。
この対応形式ではセッションは個別の JSONL ではなくデータベースの行です。再帰的なテキスト検索に頼らず SQLite で照会してください。古いファイル形式はこのアダプターの対象外です。
主要な 4 テーブル
project -- id (sha1)、worktree(プロジェクトディレクトリ)、vcs、time_*
session -- id("ses_…")、project_id、parent_id、slug、title、directory、
-- model (JSON)、tokens_* 5 列、cost、time_created、
-- time_updated、time_archived
message -- id("msg_…")、session_id、time_created、data(JSON エンベロープ)
part -- id("prt_…")、message_id、session_id、time_created、data(JSON 本文)データベースには他にもテーブル(workspace、todo、permission、event、credential、マイグレーション管理)がありますが、1 つの記録は session → message → part です。
message.data は JSON エンベロープで、role、modelID、providerID、tokens{input,output,reasoning,cache{read,write}}、cost、time{created,completed} を持ちます。part.data が本文で、type は text、reasoning、tool、file、step-start、step-finish などです。
サブエージェントのセッション
parent_id が非 NULL のセッションは、別のセッションから派生したサブエージェントの実行です。通常の履歴一覧では非表示ですが、統計には記録済みの作業を含めます。使用量とコストを持つ場合がある一方、ローカルモデル、料金設定、欠落フィールドで記録コストがゼロになることもあります。別途課金された API 呼び出しの証拠ではありません。
読み取り専用で開く
確認中に opencode の TUI が書き込んでいる可能性があります。意図しない変更を避けるため読み取り専用で開きます。使用中のデータベースでは、処理が落ち着いてから再試行が必要な場合もあります。次のコマンドは設定済みの XDG 保存先にも従います:
sqlite3 "file:${XDG_DATA_HOME:-$HOME/.local/share}/opencode/opencode.db?mode=ro" ".tables"opencode の記録を SQL で読む
プロジェクトとコスト付きで、新しい順にセッションを一覧:
SELECT s.id, p.worktree, s.title, s.cost,
datetime(s.time_created/1000, 'unixepoch') AS created
FROM session s
JOIN project p ON p.id = s.project_id
WHERE s.parent_id IS NULL
ORDER BY s.time_created DESC
LIMIT 20;1 つのセッションのテキストを順番に出力:
SELECT json_extract(m.data, '$.role') AS role,
json_extract(pt.data, '$.text') AS text
FROM message m
JOIN part pt ON pt.message_id = m.id
WHERE m.session_id = 'ses_...'
AND json_extract(pt.data, '$.type') = 'text'
ORDER BY m.time_created, pt.time_created;プロジェクト別の記録済みセッションコスト:
SELECT p.worktree, ROUND(SUM(s.cost), 2) AS usd, COUNT(*) AS sessions
FROM session s JOIN project p ON p.id = s.project_id
GROUP BY p.worktree ORDER BY usd DESC;最後のクエリはサブエージェント行を含めます。保存された session.cost の合計であり、プロバイダーの請求書ではありません。デスクトップ統計は assistant メッセージのコストを読み、欠落・不整合があると両者の合計は一致しない場合があります。
コストをデータベースから取る理由
opencode は各種プロバイダーやローカルモデルを使えます。モデル名だけの価格表が実際の設定と合うとは限りません。ビューアは assistant メッセージの modelID、tokens、cost を読み、アプリの価格表で再計算しません。数値コストがない場合は現在ゼロとして扱いますが、未測定であって無料の確認ではありません。記録コストは独立検証済みの請求書ではなく、財務判断ではプロバイダーの実際のレポートと照合してください。使用量とコストの制限を参照できます。
セッションを再開するには
opencode をインストールし、プロジェクトのディレクトリで opencode --session SESSION_ID を実行します。アプリはターミナルでの再開に対応し、opencode の内蔵チャットには対応していません。
opencode 履歴の閲覧と検索
Sessions Viewer をインストールし、opencode とプロジェクトを選ぶと対応 SQLite セッションを読めます。⌘⇧F(macOS)または Ctrl+Shift+F(Windows/Linux)で opencode のプロジェクトを横断し、タイトルとユーザープロンプトを検索できます。ID モードも利用できます。回答とツール出力は対象外です。検索範囲を確認してください。
機密内容を確認して Markdown、HTML、解析済みメッセージ JSON を保存できます。完全な保存には元データベースを残します。保存の制限には外部画像や読めない画像も含まれます。続行はインストール済み opencode CLI のターミナル再開であり、opencode のアプリ内チャットではありません。Sessions Viewer は独立したオープンソースプロジェクトで、opencode の公式製品ではありません。再開・共有前にプライバシーを確認してください。
根拠と制限
パス・記録コスト・操作説明は 2026-10-06 に 0.6.0 opencode アダプターと検索処理で確認しました。ソースと合成テストの範囲で、実際の CLI 動作認証ではありません。上流:opencode ドキュメント。
**対象範囲:**2026-10-05 に Sessions Viewer 0.6.0 のアダプター実装と照合しました。すべての CLI バージョンでの動作を保証するものではありません。シェル例は macOS/Linux のパスを使い、
jq(opencode はsqlite3)が必要です。プレースホルダーと保存先は自分の環境に合わせてください。テキスト抽出はツール、画像、セッションツリーの現在の分岐を完全には再現しません。コマンドの回帰テストにはダウンロード可能な合成データを使い、個人の会話は読みません。能力と検証表で範囲を確認できます。履歴の閲覧と再開・編集の違いはプライバシーとデータの扱いを参照してください。
SQL 例は上記スキーマを対象にし、旧ファイル形式は扱いません。読み取り専用の照会と、明示的なリネーム・ゴミ箱移動・復元による書き込みは別です。確認手順を参照してください。
アプリで開く
Sessions Viewer はこのデータベースを読み取り専用で参照し、一覧ではサブエージェントのセッションを隠しつつ統計には算入し、opencode の会話を JSONL ベースのエージェントと同じ画面に並べて表示します。Claude Code、Codex、Grok Build、Kimi Code、Pi、Antigravity CLI にも対応しています。
