Properties2
TypePractice
Note createdApr 7, 2026

This note documents the handover workflow between a local Claude Code session on the Mac and Clippy, the remote personal assistant running on dvicente-claw (GCE). It allows offloading an in-progress task to Clippy and tracking progress via WhatsApp.

See also: Clippy on Claude Code for the full Clippy setup.

Overview

The system has two skills that work in concert:

  • /handover (local) — packages the working directory with git history, generates a structured handoff document, transfers everything to the remote, and triggers Clippy.
  • /handover-receive (remote, on Clippy) — reads the handoff, explores the environment, reports gaps via WhatsApp, waits for confirmation, then spawns a worker subagent.

Push Flow

From the local Mac, running /handover in a repo:

  1. Gathers git context (branch, recent commits, dirty state, tech stack)
  2. Asks for a task description (or uses one provided inline)
  3. Generates a HANDOFF-YYYY-MM-DD-HH-mm.md file in the repo root
  4. Runs handover-push.sh, which:
    • Creates a git bundle --all (full history, compact single file)
    • Transfers the bundle via gcloud compute scp
    • Clones from the bundle on the remote (no git remotes configured — Clippy can explore history but cannot push)
    • Rsyncs the dirty working tree on top (excludes .git, node_modules, build artifacts, .env files)
    • Triggers Clippy via tmux send-keys with a [Handover] prefix
  5. Files land in ~/handover-worktrees/<repo>-<timestamp>/ on the remote

Receive Flow

On the remote, Clippy processes the [Handover] message:

  1. Acknowledge — sends a WhatsApp message confirming receipt
  2. Exploration subagent — checks dependencies, tools, secrets, builds. Writes an EXPLORATION-REPORT.md in the worktree
  3. Report via WhatsApp — summarizes what’s ready, what’s missing, and any questions. Then waits for confirmation
  4. Worker subagent — after confirmation, executes the task in the worktree. Reports progress at three milestones: start, obstacle, completion
  5. Completion — writes HANDOVER-COMPLETE.flag and sends a final WhatsApp summary

Pull Flow

When back at the laptop, bring changes back with handover-pull.sh:

# Dry-run first (default) — shows what files would change
handover-pull.sh ~/handover-worktrees/<name> /path/to/local/repo
 
# Apply after reviewing
handover-pull.sh ~/handover-worktrees/<name> /path/to/local/repo --apply

The pull syncs only working tree files (excludes .git). Local git history stays untouched — review with git diff and commit manually.

Key Design Decisions

  • Git bundle for history transfer — compact, and the cloned repo has no remotes (Clippy can git log but not git push)
  • rsync for working tree — enables dry-run previews on both push and pull
  • Exploration before execution — catches missing deps and ambiguities before burning tokens on a worker that would fail
  • Non-blocking subagents — Clippy’s main session stays free for other tasks while the worker runs
  • WhatsApp for all communication — natural, async, works from the phone

File Locations

WhatWhere
Local skill~/.claude/skills/handover/
Remote skill~/anthropic-clippy/.claude/skills/handover-receive/ on dvicente-claw
Landing zone~/handover-worktrees/ on dvicente-claw
Push script~/.claude/skills/handover/scripts/handover-push.sh
Pull script~/.claude/skills/handover/scripts/handover-pull.sh
Handoff template~/.claude/skills/handover/handoff-template.md