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단계: 대상 데이터베이스 상태 사전 점검 (Check)
Watch CLI를 --check와 함께 실행해 대상 OpenCode 데이터베이스를 점검합니다. 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는 저장된 세션 기록과 작업 디렉터리를 씁니다. 모든 도구 이벤트가 보존된다고 보장하지 않습니다. 이후 응답은 구성한 모델에 달렸습니다.