OpenCode 采用单文件关系型 SQLite(默认位于 ~/.local/share/opencode/opencode.db)存储会话,天生具备 ACID 事务与结构化索引优势。当你希望将包含私有代码或需要离线运行的任务交接给本地开源大模型(如通过 Ollama 或 vLLM 驱动的 OpenCode),或者在 OpenCode 完成阶段性排查后需要调用云端前沿模型(Claude/Codex)继续攻坚时,Watch 提供了双向转换通道。
与基于单一 JSONL 追加日志的工具不同,OpenCode 的会话由 sessions、messages 和 parts 等数据表构成。直接修改或手工插入易破坏外键约束与自增索引。Watch 通过内置的 OpenCode 适配器,将跨 Agent 的统一时间线(UnifiedTurn)映射为合法的 OpenCode SQLite 记录,并保持工作目录(cwd)与时间戳对齐。
步骤 1:确认来源会话 ID 与项目目录
在原终端或会话目录确认正在进行的会话 ID。Claude Code 会话保存在 ~/.claude/projects/ 中;Codex 保存在 ~/.codex/sessions/ 中;OpenCode 内部由全局唯一会话 ID 索引。检查当前项目目录(cwd)为绝对路径,确保工作空间上下文在目标端完全一致。
步骤 2:执行目标写入预检(Check)
在 Watch 终端使用 --check 参数探测目标数据库状态。Watch 会检查 ~/.local/share/opencode/opencode.db 的可写性与事务锁状态(如果配置了 WATCH_OPENCODE_DB 环境变量则优先检查自定义库),确保目标不存在并发写入冲突。
步骤 3:执行双向流转写入(Handoff)
在 Watch 桌面端选择来源会话卡片并点击 OpenCode,或在终端执行 open 命令。Watch 会原子提取增量回合,开启 SQLite 事务批量写入 sessions、messages 和 parts 记录,并生成目标会话 ID。
步骤 4:通过 OpenCode 原生命令恢复(Resume)
转换完成后,在原工作目录下运行 opencode -s <session-id>(或通过 Watch 桌面端一键唤醒终端)。OpenCode 将自动加载该会话历史与工作空间,无缝继续编写代码。
# 1. 预检:检查从 Claude Code 转入 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 Code 或 Codex
npm run watch -- open <opencode-session-id> --to claude --json1. 数据库隔离与备份:Watch 默认操作 ~/.local/share/opencode/opencode.db,支持通过 WATCH_OPENCODE_DB 环境变量切分测试库。写入前采用 SQLite 事务保证原子性,杜绝半写入坏库。 2. 工具调用映射:OpenCode 的 tool 记录在跨转时按 schema 映射,不支持的专有工具参数将降级为结构化文本展示。 3. 模型继续:Watch 保证会话历史与工作空间无损入库,但启动 OpenCode 后的多轮续写质量由你所配置的本地/云端 Provider 模型能力决定。