Skip to content
can4hou6joeng4Public

About

Watch(值更 · AgentRelay):跨 CLI 编程 Agent 本地会话接力工具。Claude Code 额度用完时把会话接力到 Codex、OpenCode、Kimi、Pi,保留工作目录,不经云端中继;含 macOS 桌面端,支持亮色 / 暗色 / 跟随系统外观。

Topics

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

Watch 应用图标

Watch · 值更

Relieving the watch. The voyage never stalls.

Stars Version License Node
English · 官网 relay.bobochang.cn · 相关项目 Homeport

为什么

当当前 Agent 限额用完、上下文满了,或排查停滞想换一家时,已有的结论、失败的尝试和工具轨迹都留在原工具里。重述背景成本高,还容易漏掉关键约束。

Watch 只做一件事:把已保存的会话记录连同工作目录交到目标工具,让同一项工作继续。

操作说明在官网 实操指南:Claude Code 限额后转入 Codex、上下文满与账户限额、OpenCode 与 SQLite 隔离、Opus 5.5 与 5 小时限额。

它不提供模型、不绕过配额、不代替原生 Agent 聊天,也不默认搬迁权限、凭据或插件;接力的是已有记录,不是模型未记录的内部状态。当前实现以 CLI 会话与终端恢复为主,产品方向包含经过验证的桌面端入口,但官方支持互通不等于 Watch 已经集成。

演示

下图为隔离环境中用合成会话生成的真实运行结果,不是原生验收证据。

CLI:Claude Code → OpenCode 会话接力
CLI 接力 · Claude Code → OpenCode
status → sessions → switch opencode → status,按真实时序回放
桌面端:来源会话与上下文
来源会话 · 反查 cwd 与上下文
会话 ID、工作目录、用量与工具痕迹
桌面端:官方导入预览
导入预览 · 确认前只读
桌面项目、工作目录、CLI 版本与计划 ID
桌面端:导入完成与独立打开
导入完成 · 再独立打开
目标线程保留,打开失败只重试打开
桌面端:接力记录(空态)
接力记录 · 空态与口径说明
这是工作目录的链式接力历史,不是导入执行日志
桌面端:支持路径
支持路径 · 逐方向证据边界
限定验收 / 逐方向验收 / 未接入
桌面端:暗色外观
暗色外观 · 亮色 / 暗色 / 跟随系统
偏好保存在本地

安装

需要可运行 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                # 打包当前平台

更多约定(代码风格、测试隔离、提交规范)见 贡献指南。

使用

  1. 从原生 Agent 取得会话 ID,粘贴到 Watch。
  2. 核对识别出的来源 Agent 和项目目录;识别失败时不要直接按其他工具恢复。
  3. 选择来源 Agent 继续原会话,或选择另一家执行接力。选择目标本身不会写入;目标可能是新会话,也可能复用匹配的既有会话并补充增量。
  4. 使用所选终端继续,或选择「仅复制命令」自行运行。终端打开失败时有复制回退。

常用命令(均支持 --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 隔离。

文档

支持

许可

本仓库的代码与文档以 MIT 发布。

  • 站点图标取自 Lucide(ISC)。site/agents/ 与 desktop/public/ 下的 Agent 图标为各品牌自有资产,仅用于识别。
  • 桌面安装包会把 tsx 与 esbuild(均为 MIT)一并带入 watch-core,运行时仍需用户自备 Node ≥ 22.13。
  • 各 Agent CLI 受其自身许可与服务条款约束;Watch 不重新分发它们的模型或凭据。

相关项目

  • 🧭 Homeport —— 个人主页
  • 🐋 Sonar —— 封面取色驱动的 iOS 音乐播放器
  • 🚩 Semaphore —— 浏览器本地 ASCII 艺术转换
  • 🛟 Buoy —— AnyRouter 多账号签到工具
  • 🗼 Beacon —— PDF 证件有效期审计

About

Watch(值更 · AgentRelay):跨 CLI 编程 Agent 本地会话接力工具。Claude Code 额度用完时把会话接力到 Codex、OpenCode、Kimi、Pi,保留工作目录,不经云端中继;含 macOS 桌面端,支持亮色 / 暗色 / 跟随系统外观。

Topics

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages