OpenCode はセッション保存に単一のリレーショナル SQLite データベース(既定は ~/.local/share/opencode/opencode.db)を使い、ACID トランザクションの整合性と構造化されたクエリを提供します。機密性の高い作業をローカルで動かすオープンソースモデル(OpenCode の Ollama または vLLM)へ移す、あるいはフロンティアのクラウドモデル(Claude/Codex)へ戻すとき、Watch は検証済みの双方向の橋を提供します。
追記専用の JSONL ファイルだけに頼るツールと異なり、OpenCode は sessions、messages、parts を含む正規化されたリレーショナルテーブルにセッションを構成します。外部から直接変更すると外部キー制約が壊れることがあります。Watch は UnifiedTurn 抽象を OpenCode のリレーショナルスキーマへきれいに対応付け、正確なディレクトリコンテキスト(cwd)とタイムスタンプを保ちます。
手順 1: 元のセッション ID と作業ディレクトリを特定
アクティブなセッション ID を探します。Claude Code は ~/.claude/projects/ に、Codex は ~/.codex/sessions/ にファイルを置き、OpenCode はグローバルに一意な ID でセッションを索引します。プロジェクト境界を揃えるため、作業ディレクトリが絶対パスであることを確認してください。
手順 2: 対象データベースの status を事前確認する(Check)
対象の OpenCode データベースを調べるため、--check 付きで Watch CLI を実行します。Watch は同時書き込みの競合を防ぐため、~/.local/share/opencode/opencode.db(または WATCH_OPENCODE_DB で指定したカスタムパス)の書き込み権限とロックを検証します。
手順 3: 双方向の引き継ぎを実行する(Handoff)
Watch Desktop で元セッションを選び OpenCode を対象にするか、CLI の open コマンドを実行します。Watch は増分のターンを取り出し、sessions、messages、parts にまたがる原子的な SQLite トランザクションを実行し、宛先のセッション ID を発行します。
手順 4: OpenCode でネイティブにセッションを再開する(Resume)
変換後、ワークスペースのディレクトリで opencode -s <session-id> を実行するか、Watch Desktop の起動ボタンを押します。OpenCode はその作業ディレクトリで記録された会話を読み込みます。
# 1. 事前確認: 対象 OpenCode データベースの書き込み可否を検証
npm run watch -- open <claude-session-id> --to opencode --check --json
# 2. 引き継ぎ: セッションを OpenCode の SQLite データベースへ渡す
npm run watch -- open <claude-session-id> --to opencode --json
# 3. 逆方向の引き継ぎ: OpenCode から Claude または Codex へ戻す
npm run watch -- open <opencode-session-id> --to claude --json1. データベースの分離とバックアップ: Watch は既定で ~/.local/share/opencode/opencode.db を操作し、テスト環境では WATCH_OPENCODE_DB を使います。書き込みは一つの SQLite トランザクションで、失敗するとロールバックします。 2. ツール呼び出しの表現: ツール記録はスキーマ間で対応付けられ、未対応の独自パラメータは構造化テキストになります。 3. モデルによる続行: Watch は保存済みのセッション記録と作業ディレクトリを書き込みます。すべてのツールイベントが保持される保証はありません。その後の応答は、設定したモデルに依存します。