claude-nomad 0.53.3 → 0.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -0
- package/README.md +72 -11
- package/dist/nomad.mjs +694 -397
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,35 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.55.0](https://github.com/funkadelic/claude-nomad/compare/v0.54.0...v0.55.0) (2026-06-28)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Added
|
|
7
|
+
|
|
8
|
+
* **doctor:** warn on misaligned host key when NOMAD_HOST is unset ([#356](https://github.com/funkadelic/claude-nomad/issues/356)) ([a13e833](https://github.com/funkadelic/claude-nomad/commit/a13e833a09636f98f1e9c51e9c41f01a4323dea2))
|
|
9
|
+
* **init:** offer to snapshot an existing ~/.claude on init ([#357](https://github.com/funkadelic/claude-nomad/issues/357)) ([92e90b1](https://github.com/funkadelic/claude-nomad/commit/92e90b1977fff51d565fa5d11b3c640790ee1b57))
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
* make sync warning messages user-friendly ([#345](https://github.com/funkadelic/claude-nomad/issues/345)) ([002f57d](https://github.com/funkadelic/claude-nomad/commit/002f57de240dfb1349742fa4c2b4ac5e51b5f7ba))
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Documentation
|
|
18
|
+
|
|
19
|
+
* clarify onboarding (two-dir model, session sync, push order) ([#355](https://github.com/funkadelic/claude-nomad/issues/355)) ([396fbb8](https://github.com/funkadelic/claude-nomad/commit/396fbb875b4331800ee74834944da17decbcad92))
|
|
20
|
+
|
|
21
|
+
## [0.54.0](https://github.com/funkadelic/claude-nomad/compare/v0.53.3...v0.54.0) (2026-06-27)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
|
|
26
|
+
* **doctor:** add preflight hardening checks ([#344](https://github.com/funkadelic/claude-nomad/issues/344)) ([551ab16](https://github.com/funkadelic/claude-nomad/commit/551ab16a6c0c6bdf88a51c5dbf5a76f3cd4a7f22))
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
### Fixed
|
|
30
|
+
|
|
31
|
+
* **update:** silence npm output on successful self-update ([#342](https://github.com/funkadelic/claude-nomad/issues/342)) ([b7171b9](https://github.com/funkadelic/claude-nomad/commit/b7171b933c6bb9b4578b7e109bb334baa0f147b8))
|
|
32
|
+
|
|
3
33
|
## [0.53.3](https://github.com/funkadelic/claude-nomad/compare/v0.53.2...v0.53.3) (2026-06-26)
|
|
4
34
|
|
|
5
35
|
|
package/README.md
CHANGED
|
@@ -39,19 +39,26 @@ survives different file paths and your secrets never ride along.
|
|
|
39
39
|
live settings syncs normally via `nomad capture-settings`.
|
|
40
40
|
- **Every push is secret-scanned.** Only an explicit allow-list of paths ever leaves the machine,
|
|
41
41
|
credentials never sync, and gitleaks scans the exact files about to be published. The push aborts
|
|
42
|
-
on any hit, with an interactive menu to redact, allow, or drop the finding.
|
|
42
|
+
on any hit, with an interactive menu to redact, allow, or drop the finding. Always publish through
|
|
43
|
+
`nomad push`: the sync repo is an ordinary Git repo, so a manual `git push` from it skips the scan
|
|
44
|
+
entirely and can leak a secret that `nomad push` would have caught.
|
|
43
45
|
- **Preview before you trust it.** `nomad diff` shows offline what a pull would change (gsd-owned
|
|
44
46
|
hook churn is filtered the same as on pull, so the preview matches what a real pull writes), and
|
|
45
47
|
`--dry-run` on pull and push prints the plan without writing anything.
|
|
46
48
|
- **One command tells you what is wrong.** `nomad doctor` is a read-only health check: wedged sync
|
|
47
49
|
repo, broken hook references, hooks that would crash on session start because of a missing
|
|
48
|
-
`--preserve-symlinks-main` flag, version drift, oversized backup cache,
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
50
|
+
`--preserve-symlinks-main` flag, version drift, oversized backup cache, missing git committer
|
|
51
|
+
identity in the sync repo (a push fails at commit time without one), path-map entries whose local
|
|
52
|
+
project folder no longer exists on this machine, a multi-host repo where this machine's
|
|
53
|
+
hostname-derived key matches no `hosts/<HOST>.json` or path-map entry (a sign `NOMAD_HOST` is
|
|
54
|
+
unset here, so per-host settings and session sync will not line up with the other hosts), synced
|
|
55
|
+
skills with local edits that differ from the shared copy, and settings drift in both directions:
|
|
56
|
+
keys present in the repo merge but absent from your live `settings.json` (behind; the next
|
|
57
|
+
`nomad pull` will restore them, fix: `nomad pull`) and keys present locally but not yet in the
|
|
58
|
+
repo (ahead; local-only additions, fix: `nomad capture-settings`). Each issue includes a fix hint.
|
|
59
|
+
By default the report is compact: it shows only checks that need action plus a one-line verdict.
|
|
60
|
+
Add `--verbose` (or `--all` / `-v`) to see the full per-check tree, including everything that
|
|
61
|
+
passed.
|
|
55
62
|
- **Self-healing sync.** Every overwrite is backed up first, and `nomad pull --force-remote`
|
|
56
63
|
recovers two kinds of stuck sync repo: a repo stuck mid-rebase or mid-merge (aborts the operation,
|
|
57
64
|
parks stranded work on a branch, refuses if shared config is at risk), and a repo where the rebase
|
|
@@ -66,15 +73,27 @@ opt-in per-project sync, transcript redaction, backup pruning, and more.
|
|
|
66
73
|
|
|
67
74
|
## Quickstart
|
|
68
75
|
|
|
76
|
+
nomad works with two directories, and the difference is the one thing worth learning up front:
|
|
77
|
+
|
|
78
|
+
- **`~/claude-nomad/`** is your private sync repo. This is the one you edit.
|
|
79
|
+
- **`~/.claude/`** is Claude Code's live config. nomad regenerates it on every `pull`.
|
|
80
|
+
|
|
81
|
+
Edit the repo, never the live config. In particular, never hand-edit `~/.claude/settings.json`: it
|
|
82
|
+
is rebuilt from the repo on every pull and your changes are lost. Change `shared/settings.base.json`
|
|
83
|
+
(or `hosts/<HOST>.json`) in the repo instead, or run `nomad capture-settings` to pull local changes
|
|
84
|
+
back into the repo (see [Changing settings](#changing-settings)).
|
|
85
|
+
|
|
69
86
|
**First host** (once, ever):
|
|
70
87
|
|
|
71
88
|
```bash
|
|
72
89
|
# 1. Install the CLI.
|
|
73
90
|
$ npm i -g claude-nomad
|
|
74
91
|
|
|
75
|
-
# 2. Create your private sync repo and scaffold it.
|
|
92
|
+
# 2. Create your private sync repo and scaffold it. If you already have a
|
|
93
|
+
# ~/.claude/ worth keeping, init offers to seed the repo from it.
|
|
76
94
|
$ nomad init # prompts for a repo name (default: claude-nomad-config)
|
|
77
|
-
$ nomad init --repo my-config #
|
|
95
|
+
$ nomad init --repo my-config # set the repo name without the prompt
|
|
96
|
+
$ nomad init --snapshot # seed from existing ~/.claude/ without being asked
|
|
78
97
|
|
|
79
98
|
# 3. Add a stable host label to ~/.zshrc or ~/.bashrc, then reload.
|
|
80
99
|
export NOMAD_HOST=<your-host-label>
|
|
@@ -100,6 +119,45 @@ $ nomad pull # apply config to ~/.claude/
|
|
|
100
119
|
$ nomad push # publish local changes (sessions, settings)
|
|
101
120
|
```
|
|
102
121
|
|
|
122
|
+
Pull before you push whenever both machines may have changed. Sync is last-write-wins, so pushing
|
|
123
|
+
stale local state over newer remote state silently overwrites it. The
|
|
124
|
+
[FAQ](https://funkadelic.github.io/claude-nomad/faq/) covers the full push/pull order when both
|
|
125
|
+
sides have changed.
|
|
126
|
+
|
|
127
|
+
### Make your sessions follow you
|
|
128
|
+
|
|
129
|
+
Session history only syncs for projects you list in `path-map.json`, and a fresh `init` starts with
|
|
130
|
+
none, so no sessions sync until you add a mapping. Each entry maps a logical project name to the
|
|
131
|
+
absolute path it lives at on each host:
|
|
132
|
+
|
|
133
|
+
```json
|
|
134
|
+
{
|
|
135
|
+
"projects": {
|
|
136
|
+
"my-app": {
|
|
137
|
+
"laptop": "/Users/you/code/my-app",
|
|
138
|
+
"desktop": "/home/you/projects/my-app"
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
The host keys (`laptop`, `desktop`) are the same labels you set in `NOMAD_HOST` on each machine.
|
|
145
|
+
After editing `path-map.json`, `nomad push` publishes the matching sessions and `nomad pull` on
|
|
146
|
+
another host copies them into place, rewriting the embedded file paths so `claude --resume` finds
|
|
147
|
+
them at that host's path.
|
|
148
|
+
|
|
149
|
+
### Changing settings
|
|
150
|
+
|
|
151
|
+
There are two ways a settings change reaches the repo, and the right one depends on where you made
|
|
152
|
+
it:
|
|
153
|
+
|
|
154
|
+
- **You are deciding the change:** edit `shared/settings.base.json` (shared by every host) or
|
|
155
|
+
`hosts/<HOST>.json` (one machine only) in the repo, then `nomad push`.
|
|
156
|
+
- **Something else already wrote it** (Claude Code or a tool added keys to your live
|
|
157
|
+
`~/.claude/settings.json`): run `nomad capture-settings` to promote those keys into the repo
|
|
158
|
+
before the next `nomad pull` overwrites them. Add `--host` to land machine-specific values (such
|
|
159
|
+
as absolute paths) in `hosts/<HOST>.json` instead of the shared base.
|
|
160
|
+
|
|
103
161
|
During `nomad push` and `nomad pull`, long-running steps (rebase, secret scan, git push, session
|
|
104
162
|
sync) show an animated progress indicator on an interactive terminal so the CLI does not look hung.
|
|
105
163
|
In CI and when output is piped, only plain text lines are printed, with no ANSI control codes, so
|
|
@@ -166,7 +224,10 @@ but requires nomad `>= 0.35.0` because it calls recent subcommands (`nomad diff`
|
|
|
166
224
|
- `gh` ([GitHub CLI](https://cli.github.com/)), required by `nomad init`
|
|
167
225
|
|
|
168
226
|
**Optional:** [curl](https://curl.se/) or [wget](https://www.gnu.org/software/wget/) for the
|
|
169
|
-
version-staleness check and `nomad doctor --check-schema`. The CLI works without them.
|
|
227
|
+
version-staleness check and `nomad doctor --check-schema`. The CLI works without them. The opt-in
|
|
228
|
+
`nomad doctor --check-remote` flag reads the locally-cached `origin/main` remote-tracking ref (no
|
|
229
|
+
curl or wget needed) and verifies that `shared/` and a valid `path-map.json` are present there; it
|
|
230
|
+
skips with a `⚠︎` when the ref is unavailable, and is non-fatal in all cases.
|
|
170
231
|
|
|
171
232
|
## Learn more
|
|
172
233
|
|