Watch / 值更
WATCH 기술 가이드 / 세션 핸드오프

OpenCode, Claude, Codex 양방향 세션 핸드오프 가이드

OpenCode는 세션을 ~/.local/share/opencode/opencode.db에 둡니다. WATCH_OPENCODE_DB는 Watch를 다른 파일로 가리킵니다. Watch는 sessions, messages, parts를 하나의 SQLite 트랜잭션으로 쓰고, 실패하면 롤백합니다. 지원하지 않는 도구 필드는 텍스트가 됩니다. 이후 응답은 구성한 모델에 달렸습니다.

상용 클라우드 에이전트에서 OpenCode의 로컬 오픈소스 모델로 바꾸거나(또는 다시 클라우드 에이전트로 넘길 때), 이 가이드는 SQLite 트랜잭션 데이터 격리로 Watch를 사용해 양방향 핸드오프하는 방법을 설명합니다.

게시: 2026-09-21 수정: 2026-09-23 적용 버전: Watch v0.1.1
핵심 운영 경계

OpenCode는 세션 저장에 단일 관계형 SQLite 데이터베이스(기본값 ~/.local/share/opencode/opencode.db)를 사용해 ACID 트랜잭션 무결성과 구조화된 쿼리를 제공합니다. 민감한 작업을 로컬 호스팅 오픈소스 모델(OpenCode의 Ollama 또는 vLLM)로 옮기거나 최전선 클라우드 모델(Claude/Codex)로 다시 넘기려면, Watch가 검증된 양방향 다리를 제공합니다.

추가 전용 JSONL 파일에만 의존하는 도구와 달리, OpenCode는 sessions, messages, parts를 포함한 정규화된 관계형 테이블에 세션을 구성합니다. 외부에서 직접 건드리면 외래 키 제약이 깨질 수 있습니다. Watch는 UnifiedTurn 추상화를 OpenCode의 관계형 스키마에 깔끔히 대응하고, 정확한 디렉터리 컨텍스트(cwd)와 타임스탬프를 유지합니다.

  1. 1단계: 소스 세션 ID와 작업 디렉터리 식별

    활성 세션 ID를 찾습니다. Claude Code는 ~/.claude/projects/에, Codex는 ~/.codex/sessions/에 파일을 두고, OpenCode는 전역 고유 ID로 세션을 색인합니다. 프로젝트 경계가 맞도록 작업 디렉터리가 절대 경로인지 확인하세요.

  2. 2단계: 대상 데이터베이스 상태 사전 점검 (Check)

    Watch CLI를 --check와 함께 실행해 대상 OpenCode 데이터베이스를 점검합니다. Watch는 ~/.local/share/opencode/opencode.db(또는 WATCH_OPENCODE_DB가 지정한 사용자 경로)의 쓰기 권한과 잠금을 검증해 동시 쓰기 경합을 막습니다.

  3. 3단계: 양방향 핸드오프 실행 (Handoff)

    Watch Desktop에서 소스 세션을 선택하고 OpenCode를 대상으로 하거나, CLI open 명령을 실행합니다. Watch는 증분 턴을 추출하고, sessions, messages, parts에 걸쳐 원자적 SQLite 트랜잭션을 실행한 뒤 대상 세션 ID를 발급합니다.

  4. 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 --json
안전 제약 및 고지

1. 데이터베이스 격리와 백업: Watch는 기본적으로 ~/.local/share/opencode/opencode.db를 다루고, 테스트 환경에서는 WATCH_OPENCODE_DB를 사용합니다. 쓰기는 하나의 SQLite 트랜잭션이며 실패하면 롤백합니다. 2. 도구 호출 표현: 도구 기록은 스키마 간에 대응되며, 지원하지 않는 독점 매개변수는 구조화된 텍스트가 됩니다. 3. 모델 이어가기: Watch는 저장된 세션 기록과 작업 디렉터리를 씁니다. 모든 도구 이벤트가 보존된다고 보장하지 않습니다. 이후 응답은 구성한 모델에 달렸습니다.

자주 묻는 질문

JSONL에 비해 OpenCode의 SQLite 저장소는 어떤 장점이 있나요?

SQLite는 ACID 트랜잭션과 견고한 색인을 제공해, 예기치 않은 종료 중 줄이 잘리거나 파일이 손상될 위험을 없앱니다. WATCH_OPENCODE_DB 재정의는 격리된 테스트 환경도 돕습니다.

OpenCode에서 넘길 때 사용자 모델의 추론 생각은 유지되나요?

Watch는 대응할 수 있는 사용자 지시, 어시스턴트 본문, 사고 흔적, 도구 출력을 복사합니다. 지원하지 않는 도구 필드는 텍스트가 되므로 OpenCode 원본 행의 완전한 복제본은 아닙니다.

Watch는 작업 디렉터리 불일치를 어떻게 막나요?

Watch는 소스 세션의 절대 cwd를 OpenCode 세션 항목에 엄격히 묶습니다. opencode -s <session-id>로 이어가면 OpenCode가 그 작업 공간에 고정되어, 잘못된 디렉터리에서 실수로 편집하는 일을 막습니다.

공식 출처와 검증 기록

Watch 홈으로 Watch 데스크톱 받기