Fernando Ramos← All skills09 of 09
← All skills

/relay

Continue · Bounded session handoff and mnemosyne memory

Writes an immutable JSON checkpoint (≤8 KiB) and generated HANDOFF.md, syncs accepted/rejected decisions to mnemosyne, and transfers ownership via offer.json and ack.json.

npx skills@latest add luci-efe/skills -s relay

  • ContinueStage
  • 04 Context continues · 02 Not a clipboardMethod
  • .ramos/runs/<run-id>/<pane>/checkpoints/<seq>/handoff.json + HANDOFF.mdProduced artifact / output

Use when

A session must hand work to a fresh session, another agent, or another machine, or when starting work a previous session handed off.

Support & adapters

  • Instructions usable across harnesses
  • Hooks tested: Claude Code
1. Sender (pane A)handoff.json (≤8 KiB)+ HANDOFF.md + mnemosyne2. Phase: offeredtransfer_id + sha256Receiver checks sha2563A. Verified ack (ack.json)sha256 matches → ownership transfers to receiver≤400 tokens · STALE if code moved3B. Not acknowledged / rejectedNo ack.json or sha256 mismatch → sender keeps ownershipno silent drop
  1. 1. Sender (pane A)

    handoff.json (≤8 KiB) + HANDOFF.md + mnemosyne

  2. 2. Phase: offered

    transfer_id + sha256 · Receiver checks the checkpoint sha256

  3. 3A. Verified ack (ack.json)

    sha256 matches → ack.json, ownership transfers to receiver · SessionStart ≤ 400 tokens, flagged STALE if the code changed since the checkpoint

  4. 3B. Not acknowledged / rejected

    No ack.json or sha256 mismatch → sender keeps ownership · no silent drop

Fig. 2. Ownership transfers only after the receiver verifies the checkpoint sha256 and writes ack.json. Unacknowledged or rejected handoffs stay with the sender. If the code moved since the checkpoint, the ack records stale: true and the next session shows STALE.

Decision tree

  1. 01

    Checkpoint & generated view

    Write draft JSON (strings ≤240 chars) and run relay.mjs checkpoint to create immutable handoff.json (≤8 KiB) + HANDOFF.md

    → handoff.json + HANDOFF.md
  2. 02

    Sync decisions to mnemosyne

    Run relay.mjs sync <handoff.json> to persist accepted/rejected decisions; if mnemosyne is missing, keep checkpoint and report blocked

    → memory-sync.json
  3. 03

    Offer & receiver ack

    Sender runs relay.mjs offer --to <pane>; receiver reads the checkpoint and runs relay.mjs ack --receiver <pane>; ack rejects a changed checkpoint, records stale: true if the code moved, and SessionStart then shows STALE

    → offer.json → ack.json

Prerequisites & install recipes

  • noderequired · default & herdr-launch branchesnode
    brew install node
  • mnemosynerequired · default & herdr-launch branchesmnemosyne
    uv tool install --python 3.12 mnemosyne-memoryneeds uv (brew install uv) · required for transfer and decision memory sync
  • herdroptional · herdr-launch branchherdr
    brew install herdrOptional · required only when launching a fresh Herdr pane

Completion criteria

  • Each pane writes only to its own lane path (.ramos/runs/<run>/<pane>/checkpoints/<n>/) and checkpoints are immutable.
  • If mnemosyne is missing, writes the recovery checkpoint first, prints uv tool install --python 3.12 mnemosyne-memory (needs uv), and reports blocked without offering.
  • Receiver may write only after relay.mjs ack verifies the offer and writes ack.json.

View skill source on GitHub

Want something like this built for your company?

Book a callMessage me on LinkedInSee Agentic Engineering
← All skills