perrylink/dsh-session-sync

Cross-device session synchronization: dedicated git mirror + append-only conflict resolution for both parties (local retention, remote retention of fork files, never silent overwriting), /sync command and sync_status/sync_pull/sync_push tool, automatic push and pull configurable; 49 tests + real git e2e all green, rc.6 --patch loading test passed

Cross-device session sync for DSH: mirrors your session store into a dedicated git worktree and syncs it to a remote you control — no cloud service, no third-party storage. It exposes a /sync command (status, diff, log, pull, push, help) and the sync_status / sync_pull / sync_push tools for the model, resolves conflicts append-only (on divergence it keeps BOTH sides — the local version plus the remote version preserved as fork files — and never silently overwrites, with session-level forking for diverged sessions), and offers configurable auto modes (pull on start, push after every closed turn, periodic pull).

Coding & Development ★ 1 updated 2026-09-21 — untested
View on GitHub ↗

Install

dsh plugin --profile web add dsh-session-sync

README npm channel (dsh plugin --profile web add dsh-session-sync for published releases). The git channel installs latest main: dsh plugin --profile web add "github:PerryLink/dsh-session-sync#main" (equivalent to installing from git+https://github.com/PerryLink/dsh-session-sync.git; no build step — index.mjs and lib/ are the shipped artifacts); a tarball channel is also documented. Then set the remote in your profile patch (a private repository is the baseline) and verify the row with dsh --profile web --dump-config | grep -A2 'id: session-sync'. npm package dsh-session-sync 0.2.13 (registry-verified 2026-09-10; registry repository field -> github.com/PerryLink/dsh-session-sync).

Compatibility

Verified against DeepSeek Harness dsh-v0.1.5-rc.1 (GitHub tag verified 2026-09-10: full gate chain + profile install smoke; npm dependency line 0.1.5-rc.1; peers >=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0). Node ^22.19.0 || >=24.0.0. Works anywhere git and DSH run (git-based mirror, no platform-specific code); text-only models are fully supported. Confirmation-gated writes: pull/push ask first through userQuestions or approval, read-only surfaces never ask, and with no answerer the operation fails closed.

Details

Recent updates

README documents the mirror topology (device A session store → local mirror commit → push → remote git repo → pull → keep-both merge + fork on device B) and the configuration keys, including backend (git plaintext mirror or encrypted age-encrypted mirror content), sessionRoot, repoDir, remote, branch and the git/age binary paths; an id-targeted override replaces the whole row.

FAQ

How do I install dsh-session-sync?
Run: dsh plugin --profile web add dsh-session-sync (or the git channel dsh plugin --profile web add "github:PerryLink/dsh-session-sync#main"), then set remote in your profile patch and verify with dsh --profile web --dump-config | grep -A2 'id: session-sync'.
What happens when both devices changed the same session?
Divergence is resolved append-only: the plugin keeps BOTH sides — your local version plus the remote version preserved as fork files — and never silently overwrites; diverged sessions can also fork at the session level.
Can sync be encrypted?
Yes — set backend: encrypted for age-encrypted mirror content (the age binary is probed; if missing it degrades to plaintext). A private remote repository remains the documented baseline.

More plugins in Coding & Development

Browse more in Coding & Development

Guides for Coding & Development plugins