dsh-sync
Git sync for DeepSeek Harness settings and profile configuration.
Sync what should travel. Keep secrets, machine-local values, and executable changes under your control.
Install · Quick start · Features · Safety
Why choose dsh-sync
Keeping DeepSeek Harness configured across multiple machines should not mean copying your entire DSH home directory into Git.
dsh-sync gives you a safer workflow:
- Choose exactly what to sync — settings namespaces, profiles, patches, and your own presets.
- Keep secrets and local values local — credentials and configured machine-specific fields are excluded.
- Review before applying — inspect incoming changes and toggle individual added or removed lines.
- Separate settings from executable files — changes that can affect code or plugins require explicit confirmation.
- Handle conflicts clearly — keep your local value or take the remote value without manually editing Git internals.
- Recover from interrupted writes — backups and recovery actions help protect live configuration.
Installation
Install the plugin for the Web profile:
dsh plugin --profile web add dsh-sync
Restart dsh web, then open Settings → Git Sync.
To use /sync in a headless profile as well:
dsh plugin --profile headless add dsh-sync
Quick start
- Open Settings → Git Sync.
- Enter your Git remote URL and branch.
- Select the settings namespaces, profiles, patches, and presets you want to sync.
- Add any machine-specific settings paths to Keep local-only paths.
- Save the configuration and select Check.
- Review the incoming and outgoing changes.
- Apply settings, confirm executable changes, resolve conflicts, or push local changes.
Git authentication uses your existing Git environment. dsh-sync does not store Git credentials in its configuration.
Features
Selective configuration sync
Only the settings namespaces and files you explicitly select are included. Credentials, sessions, storage, generated files, dependencies, and system presets stay outside the sync payload.
Secret-aware settings
dsh-sync removes known secret fields and your configured local-only paths before settings are stored in Git. Those local values are preserved when remote settings are applied.
Per-line review
Each changed line can be toggled before applying:
- Disable an added line to skip it.
- Disable a removed line to keep the local line.
- Keep the rest of the file selected and apply only the changes you want.
Unselected changes remain available for the next review.
Executable-change confirmation
Profile patches, home patches, plugin manifests, and user presets can affect code execution. dsh-sync keeps these changes separate from ordinary settings and requires an explicit confirmation before applying them.
Conflict handling
When local and remote values both changed, dsh-sync shows the conflict and lets you choose Keep local or Take remote. Remote changes are checked again before anything is written.
Safe recovery
Live files are backed up before replacement. If an apply is interrupted or verification fails, the recovery action can restore the previous files.
Sidecar Git workflow
The sync repository is kept separate from live DSH files. Fetching remote changes does not overwrite your active configuration, and pushes remain fast-forward only.
Web UI and commands
The Web plugin adds Settings → Git Sync with status, planning, per-line review, conflict decisions, and recovery controls. The /sync command provides the same core workflow from a session.
What gets synced
| Configuration | Behavior |
|---|---|
| Selected settings namespaces | Applied directly after review |
| Web and headless profile manifests | Applied with restart guidance |
| Profile and home patches | Require executable-change confirmation |
| User-created agent presets | Require executable-change confirmation |
Never synchronized: credentials, sessions, storage, node_modules, generated profile files, .dsh-sync, .env*, system presets, symlinks, or gitlinks.
baseURL remains portable by default. Add it to local-only paths if an endpoint should stay on one machine.
Commands
/sync status
/sync check
/sync diff
/sync pull
/sync push
/sync doctor
/sync recover
The standalone command is also available:
dsh-sync status
dsh-sync check
dsh-sync doctor
dsh-sync recover
Safety and privacy
- Only selected configuration is eligible for synchronization.
- Secret and local-only settings are preserved locally.
- Executable changes are never applied automatically.
- Reviewed changes are rejected if the plan, remote branch, or local file changed afterward.
- File writes are backed up and verified.
- HTTPS remote URLs containing embedded credentials are refused.
- Secret scanning reports the affected path without displaying the secret value.
If a secret has already entered Git history, rotate it before continuing.
Find it in dsh-market
dsh-sync is listed in dsh-market and the awesome-dsh-plugin catalog.
Install it directly with:
dsh plugin --profile web add dsh-sync
Requirements
- DeepSeek Harness
- Node.js 22 or newer
- A Git remote you can read and write
No comments yet. Be the first to write one.