Watch / 值更Session Handoff

AGENTRELAY / LOCAL SESSION HANDOFF

WatchLocal session handoff for coding agents

Another coding tool. The same work.

Hit a Claude Code limit, a full context window or a stuck investigation? Carry the saved history and working directory into Codex, OpenCode, Kimi, Pi or Grok and keep going.

CLAUDE / CODEX / OPENCODE / KIMI / PI / GROKExplore session handoffMIT / v0.1.1
01 / SESSION CONTINUITY

Session Handoff

Read saved history, check the working directory, then choose a target agent.

SYNTHETIC DEMO / NO WRITES
01Source session
02Check context
03Target agent
04Delivery result

Source Session

01 / SOURCE
Claude CodeInteractive preview
/Users/dev/projects/example-api
Messages
24
Tool calls
8
Status
Source loaded

Context Excerpt

SNAPSHOT
USER

Check the API retry flow and retain earlier conclusions and failed attempts.

AGENT

Confirmed the working directory and retry boundary. Next: error-handling regressions.

TOOLSBashEditRead

Target Agent

02 / TARGET
Official desktop importDEMO

The desktop project must exist first. Tool calls and results may become text. Model continuation is outside the limited pass.

Delivery

Handoff Result

Awaiting preview

Synthetic source loaded. Awaiting preview.

Synthetic records only. No local reads, agent writes, client launches or model requests.

UNDER THE HOOD

Core Mechanisms

Protection is route-specific. A narrow check is not a universal safety guarantee. The desktop app has four views (session handoff, handoff history, supported routes, settings) with light, dark and system appearance.

01

Locate the source and cwd

Find stored records by native session ID and preserve the actual cwd. Existing worktrees are not silently replaced with the repository root.

02

Confirm official imports

The Codex route binds the target directory and configuration, with an execution journal and persistent lock. Uncertain outcomes are queried, not blindly resubmitted.

03

Expose format limitations

Transfer recorded messages and events into the target format. Preservation varies; an internal round-trip is not proof of native continuation.

04

Separate import from opening

If opening fails after import, retry opening only. A failed terminal launch falls back to copying the command without another transfer.

ROUTE-SCOPED VALIDATION

Supported Routes

Validate by source, direction, platform and version. CLI discovery is not compatibility evidence.

2026-09-10 / REPOSITORY
Handoff routeEntry pointEvidence and limitationsStatus
Claude Code → Codex DesktopOfficial importmacOS arm64 synthetic sample: project listing, prepare / confirm and two independent opens passed within scope. Tool records may become text; model continuation remains limited.Limited pass
Claude / Codex / OpenCode / Kimi / Pi / GrokBaseline CLI adaptersReading, conversion and resume entry points exist, and the six desktop target cards reuse each adapter resume command verbatim; Grok additionally passed isolated native replay via `sessions list`, `export` and ACP `session/load`. Native acceptance is not proven for every combination, platform, content sample or version.Per-route validation
OpenCode Web / TUI enhancementOfficial JSON experiment1.18.29 isolated history visibility and valid target model passed. One continuation request returned provider 429; not integrated as a new default entry.Not integrated
Antigravity 2.0 → Antigravity CLISame-product interactive pickerThe official /resume Antigravity tab imports after a second confirmation; --conversation only resumes existing CLI history. Watch has no adapter or native acceptance. This is not other-agent → Antigravity import.Not integrated
Claude Desktop Code / Other entry pointsOfficial entry researchNo complete Watch route acceptance; no new default targets. Grok moved out of this group into its own baseline card; see the supported routes table.Not integrated
ANSWERS FIRST

Guides

Each guide opens with an answer that can stand alone, then the steps. Watch does not bypass limits and does not rank models.

Continuing in Codex After Claude Code Reaches Usage Limit

When Claude Code reports a five-hour or weekly limit, /compact does not restore quota. Watch reads only the local ~/.claude/projects/<encoded-cwd>/<session>.jsonl, checks the working directory, and copies that record into Codex. The original file stays unchanged. Tool events may become text.

Read the guide
DEVELOPER WORKFLOW

Run From Source

Run the CLI from the repository or build the desktop app. Repository access is required. No global npm package is published.

Node ≥ 22.13 · Desktop builds also require Rust / Tauri
$git clone https://github.com/can4hou6joeng4/Watch.git
$cd Watch && npm install
$npm run watch -- status --json
$npm run watch -- import-codex prepare <claude-id> --cwd /abs/project --desktop-project --experimental --json

Missing tsx? Run npm install first. A node:sqlite error requires checking the Node version.

REAL OUTPUT / SYNTHETIC SESSIONS

Real program output

Generated from synthetic sessions in an isolated environment: the animation replays real CLI output with its original timing; the screenshot is the desktop browser preview in synthetic demo mode. They show real behaviour, not native acceptance evidence.

CLI: Claude Code → OpenCode
CLI: Claude Code → OpenCodestatus → sessions → switch opencode → status; paths rewritten to ~ for readability; writes go to a temporary OpenCode store.
Desktop: Claude Code → Codex Desktop official import
Desktop: Claude Code → Codex Desktop official importLoad demo → preview plan → simulated confirmation; the DEMO badge is rendered by the app. Light theme shown; dark theme in assets.
VERIFIABLE RECORDS

Validation Records

Historical repository validation, not new native-client acceptance from this redesign.

  1. Official import: native read and resume

    Codex CLI 0.153.4 / macOS arm64. Tool records became text; no desktop UI or model continuation.

    01
  2. Project-first import and Desktop listing

    ChatGPT Desktop 26.901.51231. Synthetic sample visible in the project list; no model continuation.

    02
  3. Watch Tauri: preview, confirm and independent open

    ChatGPT Desktop 26.903.61454. Two opens reached the same synthetic target with one import plan. Model continuation remains outside the pass.

    03
QUESTIONS & BOUNDARIES

Questions

Claude Code hit its limit mid-task. How do I continue?

Enter the source session ID in Watch, check the detected working directory and pick a target agent. Claude → Codex shows the official project-first import preview and writes only after you confirm, then opens the target separately; other targets use the existing CLI adapters. Watch does not bypass usage limits and does not move code; it transfers the saved session record.

How do I switch from Claude Code to Codex and resume the same session?

Two entry points: in the desktop app select the source session and click the OpenAI Codex card (official single-session import: prepare → confirm → open), or run watch import-codex prepare <claude-id> --cwd <project> --desktop-project --experimental followed by confirm. The project must already exist in Codex Desktop. Tool records may become text on the Codex side and model continuation is outside the validated scope.

My Claude Code context window is full. Does Watch compact it?

No. Compacting or clearing context is Claude Code's own /compact and /clear. Watch moves the saved session record as a whole into another agent; the target session starts from that record and the original session is untouched. Whether it fits depends on the target tool's context window.

Where are Claude Code, Codex and OpenCode session files, and how do I resume a previous conversation?

Claude Code: ~/.claude/projects/<encoded-cwd>/<session-id>.jsonl, resume with claude --resume <id>. Codex: ~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl, resume with codex resume <id>. OpenCode: ~/.local/share/opencode/opencode.db, resume with opencode -s <id>. Watch looks these up by session ID, shows the owning working directory, and lists chained handoffs for that directory under Handoff History.

I use both Claude Code and Codex. How do I move between them without losing context?

Watch does not rank the two. With both installed and authenticated, hand sessions across: Claude → Codex uses the official import preview, Codex → Claude uses the CLI adapter conversion; both keep the working directory. Some events may be degraded between formats, and the result lists what was degraded.

Does history pass through a Watch cloud server?

Watch has no relay server of its own. Some native session creation routes invoke the target CLI and may access its network services. Model continuation also follows that service’s privacy and model rules. Local conversion does not mean an entirely offline workflow.

Is conversion lossless or risk-free?

No. New files and whole-file replacements have atomic writes and parse-back checks, while some append paths have different protections. Official Codex imports use their own journal, target lock and read-back verification. See the architecture for exact boundaries.

OFFICIAL ENTRY / NOT INTEGRATED

Antigravity CLI: same-product resume and import

Official entry points reviewed; not integrated into Watch. These are Antigravity operations, not Watch conversion commands.

Officially documented / Not Watch-validated

01

Resume a specific CLI conversation

agy --conversation <conversation-id>

Resumes an existing Antigravity CLI conversation ID. It is not an importer for Claude, Codex or desktop conversations.

02

Continue the latest workspace conversation

agy -c

Looks up the latest conversation for the current working directory. Missing or deleted history can start a new conversation, so this is not a side-effect-free status check.

03

Import from Antigravity 2.0

/resume

Switch to the Antigravity tab in the CLI session picker, select a desktop conversation and confirm the import. Official documentation describes cloned history, context and tool trajectories. Watch has not natively validated it and has no external-agent import contract.