Skip to content
NewMy Claude Code sessions now say which project they are
Nov 5, 2026·4 MIN READ
Handoff notes between two Macs: the terminal tells me what the other one left

Handoff notes between two Macs: the terminal tells me what the other one left

Some work done on one Mac needs a step on the other. Now Claude leaves a note in git, and the next terminal on the other Mac shows it as a short checklist I can start with one command.

Yesterday afternoon on the M1 I finished the Bitwarden sync for MCP secrets. It worked, but the job was only half done. The M5 still had to pull, add a line to ~/.zshrc, check the Bitwarden CLI login, upload the Slack and bank values that only lived there, and install a watcher. Six steps on a machine I was not sitting at.

I used to keep that kind of list in my head, or in a chat message to myself that I never read again. This time I asked Claude to leave a note for the M5 instead.

One file in git, one line per note

The notes live in handoff.txt in the same repo that syncs my ~/.claude folder. Each line has four tab-separated fields: the target Mac, the Mac that wrote it, the date, and the text.

handoff.txt
m5  m1  2026-11-04 14:04    make -C ~/.claude pull, then make -C ~/.claude secrets, then /reload-plugins

A small ms-handoff skill decides what to write. The sync script does the rest: it commits only that file and pushes. On the other Mac the note shows up in three places.

flowchart LR
    A["Claude on M1<br/>/ms-handoff"] --> B["handoff.txt<br/>(git push)"]
    B --> C["hourly watcher<br/>on M5"]
    B --> D["new terminal<br/>on M5"]
    C --> E[macOS notification]
    D --> F["handoff go 1"]
    F --> G["Claude on M5<br/>works the note"]
WhereWhenWhat it does
macOS notificationevery hour, before any pulltells me there is something new
New terminalevery time I open oneprints the notes as a checklist
/ms-handoff in Claudewhen I asklists the notes and works through them

The first version was a wall of text

This morning on the M5 the note showed up exactly as planned. It was also hard to read: one numbered line, wrapped by the terminal, with six steps joined by "then" and a long URL in the middle. A second note with five unrelated tasks looked even worse.

So the script now formats a note before it prints it:

new terminal on the M5
Notes from the other Mac (1)                              handoff go <n>

  1  from m1  Wed 4 Nov, 14:04
     ◦ make -C ~/.claude pull
     ◦ add source ~/.claude/scripts/todo.zsh to ~/.zshrc
     ◦ bw status (must show the right account and server)
     ◦ make -C ~/.claude secrets
     ◦ make -C ~/.claude install-watcher
     ◦ /reload-plugins

A new step starts at every ", then " and at every sentence end, but never inside a code span. Commands print in cyan without the backticks, URLs are blue, and lines wrap with a hanging indent. When the output is not a terminal, for example inside Claude, it drops the colours so nobody sees raw escape codes.

The splitting rule also changed how notes get written. The skill now tells Claude to join steps with ", then ", so every note turns into a clean list on the other side.

From a note to a session in one command

Claude Code sessions are stored on the Mac that ran them, so there is no "continue on the other computer". The note is the bridge. To make the bridge short, handoff go 1 starts a new Claude session in the current folder with the full note as the prompt, plus one instruction: run handoff done 1 when everything is finished.

Run it in the repo the note is about, not in ~/.claude. Claude starts where you are, so the folder decides which project rules it loads.

One step still needs me. make secrets unlocks Bitwarden and asks for the master password, and the ! shell inside Claude can't take hidden input. The CLI crashed with a readline error. Commands that ask for a password go in a normal terminal tab.

What it took

About 100 lines of handoff code in the sync script, a five-line zsh file, a launchd job and a skill of under 50 lines. The format took two rounds, both on the real note: the first one wrapped badly, the second coloured the indent of a wrapped command. Next time I'd test the output with the longest note I have before I call it done, not with a one-line example.

Share
Mariusz Smenżyk
Written by

Mariusz Smenżyk

Builder for sport. Make. Test. Launch.

Related notes