当当前 Agent 限额用完、上下文满了,或排查停滞想换一家时,已有的结论、失败的尝试和工具轨迹都留在原工具里。重述背景成本高,还容易漏掉关键约束。
Watch 只做一件事:把已保存的会话记录连同工作目录交到目标工具,让同一项工作继续。
操作说明在官网 实操指南:Claude Code 限额后转入 Codex、上下文满与账户限额、OpenCode 与 SQLite 隔离、Opus 5.5 与 5 小时限额。
它不提供模型、不绕过配额、不代替原生 Agent 聊天,也不默认搬迁权限、凭据或插件;接力的是已有记录,不是模型未记录的内部状态。当前实现以 CLI 会话与终端恢复为主,产品方向包含经过验证的桌面端入口,但官方支持互通不等于 Watch 已经集成。
下图为隔离环境中用合成会话生成的真实运行结果,不是原生验收证据。
需要可运行 node:sqlite 与 tsx 的 Node(≥ 22.13),以及实际使用的 Agent CLI。桌面端另需 Rust / Tauri 环境。
桌面端安装包:从 Releases 取当前平台的安装包。安装包在用户机器上依赖外部 Node。
从源码运行
npm install # 仓库根
npm --prefix desktop install # 桌面端依赖另装
npm run watch -- status --json # 直接使用 CLI
npm run desktop:dev # 本地运行桌面端(Vite 在 1420)
npm --prefix desktop run build # 桌面前端构建
cd desktop && npx tauri build # 打包当前平台更多约定(代码风格、测试隔离、提交规范)见 贡献指南。
- 从原生 Agent 取得会话 ID,粘贴到 Watch。
- 核对识别出的来源 Agent 和项目目录;识别失败时不要直接按其他工具恢复。
- 选择来源 Agent 继续原会话,或选择另一家执行接力。选择目标本身不会写入;目标可能是新会话,也可能复用匹配的既有会话并补充增量。
- 使用所选终端继续,或选择「仅复制命令」自行运行。终端打开失败时有复制回退。
常用命令(均支持 --json;成功与失败都向 stdout 输出单行 JSON,诊断走 stderr):
npm run watch -- status --json # 当前目录的会话、链尾与切换历史
npm run watch -- sessions --json # 该目录下各 Agent 的原生会话
npm run watch -- switch codex # 把链尾内容交接给 Codex,输出恢复命令
npm run watch -- adopt claude # 把已有 Claude 会话接入链
npm run watch -- new pi # 在链上新建另一侧会话(空链时直接起会话)
npm run watch -- open <session-id> --json # 反查 cwd 并输出可粘贴的打开命令
npm run watch -- open <session-id> --to codex # 直接把该会话内容转入 Codex 新会话全部 CLI 子命令
status [--cwd <path>] [--chain <id|name>] 会话、链尾与切换历史
sessions [--cwd <path>] [--chain <id|name>] 各 Agent 在该目录的原生会话
switch <provider> 链尾内容交接给目标 provider
adopt <provider> [--session <id>] 把已有原生会话接入链
new <provider> 在链上新建另一侧会话
chain list|new|rename|archive|use 链的增删改与切换
search <query> 本地全文检索(FTS5)
usage [--cwd <path>] [--chain <id|name>] 链上各会话的 token 用量
recent [--json] 近期会话反查记录
providers 各 Agent 的本机安装检测
open <session-id> [--from <id>] [--provider <name>] [--to <provider>]
import-codex prepare|confirm|status|project-prepare|project-confirm|project-status
桌面端提供会话接力 / 接力记录 / 支持路径 / 设置四个视图,支持亮色、暗色与跟随系统三种外观。浏览器预览不读取本地 Agent 记录;「载入演示」使用合成样本,不写入会话、不启动客户端、不调用模型。
YOLO 默认关闭。开启会在支持的 CLI 命令中加入免确认参数,从而放宽目标 Agent 的权限或沙箱;不应把它当成桌面端的权限设置。
Claude Code → Codex Desktop(官方单会话导入)
只有明确确认后才提交,导入成功后再单独打开目标线程。要进入桌面项目,必须先在 Codex Desktop 添加并保留该目录,再在准备阶段使用 --desktop-project。
npm run watch -- import-codex prepare <claude-id> --cwd /absolute/project --desktop-project --experimental --json
npm run watch -- import-codex confirm <plan-id> --experimental --json
npm run watch -- import-codex status <plan-id> --json旧 project-prepare / project-confirm / project-status 仍可查看或更新 app-server 的后端 projectId,但不能解除 Desktop 已持久化的 projectless 排除,因此不是项目列表修复方案。不要通过反复移除项目或重复导入来刷新——这会改变项目 ID,并可能让对象继续处于排除状态。
| 入口 | 当前状态 |
|---|---|
| Claude Code、Codex、Kimi、OpenCode、Pi、Grok CLI | 有查找、转换和恢复实现,桌面六张目标卡与适配器恢复命令逐字一致;OpenCode 支持 SQLite 存储会话恢复与路径隔离、原生 ID 修复,具体版本与方向仍需验收 |
| Grok CLI 桌面入口 | 已接入第六张目标卡(grok -r <id>,YOLO --always-approve);写入原生 ACP updates.jsonl 后,隔离验收通过 sessions list / export / ACP session/load;TUI 逐帧画面与模型继续未验证 |
| Codex 桌面端 | Claude Code 来源已接入项目先建的预览、确认、状态和独立打开流程;合成样本已通过真实 Watch Tauri 点击与两次同目标打开验收。当前本机 CodexPilot 的既有续写尝试仍记录为 503 |
| Claude Desktop Code | 官方 /desktop 流程已完成实现调查;它依赖当前 CLI 会话保存与 flush,尚未由 Watch 接入或原生验收 |
| OpenCode Web、TUI、IDE | Darwin arm64 / 1.18.29 的官方 JSON import/export、只读 server API、Web、独立 local TUI 与 attached TUI 历史可见已通过隔离原生验收;单次无工具继续请求因 provider 429 未生成回复,因此官方多客户端增强仍未接入。该结果不阻塞现有 OpenCode CLI 卡片;IDE 扩展复用集成终端 |
| Antigravity | 2.0 → CLI 的官方交互式 picker 已调研但未原生验收;没有跨 Agent 导入协议或 Watch 适配器 |
历史格式、附件和工具事件可能降级,结果提示仍需完善。文件替换有原子写和部分往返验证,但追加写入等路径的防护不等价;不承诺零损坏。Watch 不自动创建 Worktree,不迁移代码,也不保证不同模型行为一致。
官方路径使用目标目录 / 配置绑定和 Watch 导入锁,不因无关桌面应用运行而要求退出;原直接文件转换器保留旧保护,两条路径的限制不同。原生证据只覆盖 macOS arm64 / Codex CLI 0.153.4 的合成样本及空闲服务并存,P2 真实 Tauri 点击另绑定 ChatGPT Desktop 26.903.61454 —— 两者都不保证所有并发场景、其他版本或模型继续。
打开成功与会话可继续是两个状态:转入成功但客户端打开失败时,只重试打开,不重复转换。
- TypeScript 承载业务逻辑,Rust 只做 CLI 桥接与必须由 GUI 进程完成的系统操作。
- 每家 Agent 一个适配器(
src/providers/<id>/),统一时间线在适配器边界完成解析与写回。 - 写回安全三道防线:写前比对目标指纹(TOCTOU)、同目录原子写、rename 前用自家
parse反解对账。 - 两条官方路径各自隔离:Codex 官方导入与 OpenCode 官方增强使用执行日志与目标锁,不经上述转换器。
- 降级必须披露:任何「失败但继续」的分支都要记录在 warnings 或 findings 中,不静默丢弃内容。
细节与防护缺口见 架构与安全边界。
编程 Agent 各自维护自己的会话记录。换工具本该是常态,但每换一次都要重新交代背景,前面的结论、失败的尝试和已确认的约束都留在旧工具里——而这些恰恰是最难重述的部分。
所以 Watch 不做聚合、不做代理、也不做另一层聊天界面,只把「已有记录 + 工作目录」这一段交接做扎实:先查得到,再核对得清,写回时守得住,交付后能继续。
会话转译主要处理本地记录,但不等于全过程离线:Kimi 新建会话会调用其 CLI,部分 Codex 执行路径可能读取认证配置并调用模型,目标 Agent 继续时按其自身服务规则通信。
调用原生 Agent 的路径需要其正常认证。请先用专用测试会话验证,不要把真实凭据、聊天记录或 Agent 数据库提交到仓库。
| Agent | 本机位置 | 恢复 |
|---|---|---|
| Claude Code | ~/.claude/projects/<编码目录>/<会话 id>.jsonl |
claude --resume <id> |
| Codex | ~/.codex/sessions/年/月/日/rollout-*.jsonl |
codex resume <id> |
| OpenCode | ~/.local/share/opencode/opencode.db |
opencode -s <id> |
| Kimi CLI | ~/.kimi-code/sessions/ 与 session_index.jsonl |
kimi -r <id> |
| Pi | ~/.pi/agent/sessions/ |
pi --session <id> |
| Grok CLI | ~/.grok/sessions/ |
grok -r <id> |
路径以各 CLI 当前版本为准。Watch 按会话 ID 反查这些位置,并核对工作目录。限额和上下文的区别见 上下文满与账户限额;OpenCode 的库路径与事务见 OpenCode 与 SQLite 隔离。
- 产品需求与实施计划:当前范围与分阶段完成条件。
- 客户端兼容性证据:官方依据、实现状态和本机预检。
- 架构与安全边界:当前实现及缺口。
- Codex 官方导入说明:实验入口的完整流程与限制。
- 贡献指南:环境要求、代码风格、测试隔离与提交规范。
- 如果 Watch 对你有用,欢迎点一个 Star,或分享给同样在多个 Agent 之间来回切换的人。
- 遇到问题或想扩展某条路径,欢迎开 issue 或 PR;提出前请先读 贡献指南。
本仓库的代码与文档以 MIT 发布。
- 站点图标取自 Lucide(ISC)。
site/agents/与desktop/public/下的 Agent 图标为各品牌自有资产,仅用于识别。 - 桌面安装包会把
tsx与esbuild(均为 MIT)一并带入watch-core,运行时仍需用户自备 Node ≥ 22.13。 - 各 Agent CLI 受其自身许可与服务条款约束;Watch 不重新分发它们的模型或凭据。






