Properties2
| Type | Practice |
| Note created | Apr 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:
- Gathers git context (branch, recent commits, dirty state, tech stack)
- Asks for a task description (or uses one provided inline)
- Generates a
HANDOFF-YYYY-MM-DD-HH-mm.mdfile in the repo root - 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,.envfiles) - Triggers Clippy via
tmux send-keyswith a[Handover]prefix
- Creates a
- Files land in
~/handover-worktrees/<repo>-<timestamp>/on the remote
Receive Flow
On the remote, Clippy processes the [Handover] message:
- Acknowledge — sends a WhatsApp message confirming receipt
- Exploration subagent — checks dependencies, tools, secrets, builds. Writes an
EXPLORATION-REPORT.mdin the worktree - Report via WhatsApp — summarizes what’s ready, what’s missing, and any questions. Then waits for confirmation
- Worker subagent — after confirmation, executes the task in the worktree. Reports progress at three milestones: start, obstacle, completion
- Completion — writes
HANDOVER-COMPLETE.flagand 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 --applyThe 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 logbut notgit 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
| What | Where |
|---|---|
| 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 |