claude-nomad 0.69.1 → 0.69.3

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.
Files changed (4) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +50 -18
  3. package/dist/nomad.mjs +1702 -1422
  4. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,60 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.69.3](https://github.com/funkadelic/claude-nomad/compare/v0.69.2...v0.69.3) (2026-09-19)
4
+
5
+
6
+ ### What's new
7
+
8
+ A quick follow-up to 0.69.2 for a recent change in Claude Code.
9
+
10
+ * Claude Code 2.1.275 and later copy the skills enabled on your claude.ai account into `~/.claude/skills/synced/`, and can also create `skills/.trash/` and `skills/.staging/` next to it. nomad now leaves all three folders alone: `nomad push` no longer copies them into your sync repo and removes any copy an earlier push left there, `nomad pull` never touches them, and `nomad doctor` stops listing their files as out of sync.
11
+ * To stop Claude Code syncing those skills at all, set `"syncClaudeAiSkills": false` in `~/.claude/settings.json` (on a synced machine, put it in your base or host settings file in the sync repo instead).
12
+
13
+
14
+ ### Fixed
15
+
16
+ * **skills:** also skip Claude Code's skills .trash and .staging folders ([#618](https://github.com/funkadelic/claude-nomad/issues/618)) ([fbb9eb1](https://github.com/funkadelic/claude-nomad/commit/fbb9eb173842598f6aaf1be387bc73fffc1cb43f))
17
+ * **skills:** stop syncing Claude Code's skills/synced folder ([#616](https://github.com/funkadelic/claude-nomad/issues/616)) ([59618dc](https://github.com/funkadelic/claude-nomad/commit/59618dcc25333b4bed2a7a1da73167d1be5dd660))
18
+
19
+ ## [0.69.2](https://github.com/funkadelic/claude-nomad/compare/v0.69.1...v0.69.2) (2026-09-19)
20
+
21
+
22
+ ### What's new
23
+
24
+ **On native Windows (PowerShell, cmd, or Git Bash).** WSL2 behaves like Linux, so these do not apply to it.
25
+
26
+ * `nomad allow`, and choosing Allow when `nomad push` finds a possible secret, no longer add a duplicate line to a `.gitleaksignore` saved with Windows line endings.
27
+ * The cleanup commands `nomad eject` prints now use forward slashes, so you can paste them into Git Bash as they are.
28
+
29
+ **On every platform**
30
+
31
+ * `nomad pull` no longer overwrites a setting you changed on this machine but haven't saved to your sync repo. It stops, names each one, and tells you to save it with `nomad capture-settings` or delete it. `nomad sync` and `nomad pull --dry-run` flag the same settings.
32
+ * When a setting is removed from your sync repo, whether you removed it or another machine did, a pull removes it here too, but only if you haven't edited it on this machine. The pull names each setting it removes, `nomad doctor` warns about them beforehand, and the settings file from before the pull is kept in `~/.cache/claude-nomad/backup/`.
33
+ * Settings that can hold a secret, such as `env` or `apiKeyHelper`, are never printed, so a pull can't list them. When it replaces some that your sync repo doesn't track, it now tells you how many. Keep values like these in `~/.claude/settings.local.json`, which nomad never touches.
34
+ * `nomad eject` now also deletes the records nomad keeps about this machine, so setting nomad up here again starts fresh.
35
+
36
+
37
+ ### Fixed
38
+
39
+ * **eject:** forget this machine's sync records ([#615](https://github.com/funkadelic/claude-nomad/issues/615)) ([899abd8](https://github.com/funkadelic/claude-nomad/commit/899abd82b2ffd1acd3f6faf36d8e1d26402eb6c7))
40
+ * **pull:** keep a setting you changed when the repo drops it ([#614](https://github.com/funkadelic/claude-nomad/issues/614)) ([f60cc98](https://github.com/funkadelic/claude-nomad/commit/f60cc98989296938f560db58cd05950280f335c7))
41
+ * **pull:** name the settings a pull removes ([#613](https://github.com/funkadelic/claude-nomad/issues/613)) ([8266fc9](https://github.com/funkadelic/claude-nomad/commit/8266fc90a19e3119782354751c8e1ee9c225e6b2))
42
+ * **pull:** stop overwriting settings you have not saved to the repo ([#606](https://github.com/funkadelic/claude-nomad/issues/606)) ([160abba](https://github.com/funkadelic/claude-nomad/commit/160abbaa10766786b58f3a73906fd2feb6c6e097))
43
+ * **pull:** stop refusing a setting you removed from the repo ([#612](https://github.com/funkadelic/claude-nomad/issues/612)) ([d7d620c](https://github.com/funkadelic/claude-nomad/commit/d7d620cf25534aa0d4d65afe0fcbd834d35b7c50))
44
+ * **pull:** warn before replacing a credential setting not in the repo ([#610](https://github.com/funkadelic/claude-nomad/issues/610)) ([db739f5](https://github.com/funkadelic/claude-nomad/commit/db739f510ac7a8fde6c7139f0ea00a22cf3c4aec))
45
+ * **redact:** stop adding duplicate lines to a Windows-style .gitleaksignore ([#609](https://github.com/funkadelic/claude-nomad/issues/609)) ([07152de](https://github.com/funkadelic/claude-nomad/commit/07152de8c26b31ee2ce93a45b1c5ef948e83b558))
46
+ * **redact:** stop re-appending a fingerprint to a CRLF .gitleaksignore ([07152de](https://github.com/funkadelic/claude-nomad/commit/07152de8c26b31ee2ce93a45b1c5ef948e83b558))
47
+
48
+
49
+ ### Changed
50
+
51
+ * split four oversized source files ([#608](https://github.com/funkadelic/claude-nomad/issues/608)) ([8a08ba7](https://github.com/funkadelic/claude-nomad/commit/8a08ba7d27cfb0dab9a7d9c89b69872c13d200c9))
52
+
53
+
54
+ ### Dependencies
55
+
56
+ * bump devalue from 5.8.1 to 5.9.2 in /docs-site ([#611](https://github.com/funkadelic/claude-nomad/issues/611)) ([ad47cbc](https://github.com/funkadelic/claude-nomad/commit/ad47cbcf98ee7cf85628e741b834487ce806cf37))
57
+
3
58
  ## [0.69.1](https://github.com/funkadelic/claude-nomad/compare/v0.69.0...v0.69.1) (2026-09-15)
4
59
 
5
60
 
package/README.md CHANGED
@@ -32,13 +32,15 @@ session history survives different file paths and your secrets never ride along.
32
32
  - **One shared setup, per-machine exceptions.** Your own skills, slash commands, rules, and your
33
33
  `CLAUDE.md` live in one place and follow you everywhere. `hooks/` and `agents/` are installed
34
34
  per-host by `@opengsd/gsd-core` via npm and are not synced (syncing them caused version-skew
35
- churn). Skills sync as a filtered copy: your own skills travel, `gsd-*` skills are excluded (see
36
- `SHARED_LINKS` in `src/core/config.ts` and `src/sync/skills-sync.ts`). Settings merge a shared
37
- base with a per-host override, so one machine can run a different model or MCP URL without forking
38
- the rest. GSD-owned hook entries (scripts whose basename starts with `gsd-`) are filtered out of
39
- the generated `~/.claude/settings.json` during pull and stripped from `shared/settings.base.json`
40
- on the next push; GSD reinstalls the correct per-host hook set itself. A non-gsd hook you add to
41
- your live settings syncs normally via `nomad capture-settings`.
35
+ churn). Skills sync as a filtered copy: your own skills travel, while `gsd-*` skills and Claude
36
+ Code's own account-skills folders (`skills/synced/`, `skills/.trash/`, `skills/.staging/`) stay
37
+ behind (see `SHARED_LINKS` in `src/core/config.ts` and `src/sync/skills-sync.ts`). Claude Code
38
+ keeps its copy of the skills enabled on your claude.ai account there. Settings merge a shared base
39
+ with a per-host override, so one machine can run a different model or MCP URL without forking the
40
+ rest. GSD-owned hook entries (scripts whose basename starts with `gsd-`) are filtered out of the
41
+ generated `~/.claude/settings.json` during pull and stripped from `shared/settings.base.json` on
42
+ the next push; GSD reinstalls the correct per-host hook set itself. A non-gsd hook you add to your
43
+ live settings syncs normally via `nomad capture-settings`.
42
44
  - **Every push is secret-scanned.** Only an explicit allow-list of paths ever leaves the machine,
43
45
  credentials never sync, and gitleaks scans the exact files about to be published. The push aborts
44
46
  on any hit, with an interactive menu to redact, allow, or drop the finding. Always publish through
@@ -66,9 +68,10 @@ session history survives different file paths and your secrets never ride along.
66
68
  warning, not a failure), and settings drift in both directions: keys present in the repo merge but
67
69
  absent from your live `settings.json` (behind; the next `nomad pull` will restore them, fix:
68
70
  `nomad pull`) and keys present locally but not yet in the repo (ahead; local-only additions, fix:
69
- `nomad capture-settings`). Each issue includes a fix hint. By default the report is compact: it
70
- shows only checks that need action plus a one-line verdict. Add `--verbose` (or `--all` / `-v`) to
71
- see the full per-check tree, including everything that passed.
71
+ `nomad capture-settings`), plus a warning for a local setting the next pull will remove because
72
+ the repo dropped it. Each issue includes a fix hint. By default the report is compact: it shows
73
+ only checks that need action plus a one-line verdict. Add `--verbose` (or `--all` / `-v`) to see
74
+ the full per-check tree, including everything that passed.
72
75
  - **Self-healing sync.** Every overwrite is backed up first, and `nomad pull --force-remote`
73
76
  recovers two kinds of stuck sync repo: a repo stuck mid-rebase or mid-merge (aborts the operation,
74
77
  parks stranded work on a branch, refuses if shared config is at risk), and a repo where the rebase
@@ -217,6 +220,34 @@ it:
217
220
  before the next `nomad pull` overwrites them. Add `--host` to land machine-specific values (such
218
221
  as absolute paths) in `hosts/<HOST>.json` instead of the shared base.
219
222
 
223
+ If `nomad pull` finds settings on this machine that your sync repo does not track, it leaves
224
+ `~/.claude/settings.json` as it is, so those settings are not lost. It lists the settings by name
225
+ and suggests two fixes: run `nomad capture-settings` to save them to the repo (add `--host` for
226
+ values that belong to this machine only), or delete them from `~/.claude/settings.json` if you no
227
+ longer want them. Your shared files, skills, sessions, and project extras still update, and the
228
+ command exits with a non-zero status so a scripted or cron-driven pull does not report success. Once
229
+ you have saved or deleted the settings, the next pull proceeds normally.
230
+
231
+ Credential settings are the one exception. Keys that can hold a secret (`env`, `apiKeyHelper`,
232
+ `awsAuthRefresh`, `awsCredentialExport`, `otelHeadersHelper`) are never printed, so pull cannot list
233
+ them and will not stop for them. When it finds some your repo does not track, it writes
234
+ `settings.json` as usual and tells you how many it replaced. Keep values like these in
235
+ `~/.claude/settings.local.json`, which nomad never touches.
236
+
237
+ A setting that another machine removed from the repo is removed here too. Each time nomad writes
238
+ your settings, on a pull or a `nomad capture-settings`, it records which settings it wrote on this
239
+ machine, with a fingerprint of each value. A setting in that record that the repo no longer carries,
240
+ and that still has the value nomad wrote, is one nomad put there, so the next pull removes it. The
241
+ pull names each setting it removes (so does `nomad pull --dry-run`), and the file from before the
242
+ pull stays in `~/.cache/claude-nomad/backup/`. A setting missing from the record is one you added,
243
+ and one you changed since is yours now, so either is kept and listed as above. A removal is handled
244
+ the same whether it arrives with this pull or reached your repo earlier through an edit you made, a
245
+ `nomad push`, or a `nomad pull --dry-run`.
246
+
247
+ A machine that has not finished a pull yet, or whose cache folder was cleared, has nothing recorded.
248
+ There a removal that reached the repo earlier is still listed as a setting you added. Save it or
249
+ delete it as above and pull again.
250
+
220
251
  During `nomad push` and `nomad pull`, long-running steps (rebase, secret scan, git push, session
221
252
  sync) show an animated progress indicator on an interactive terminal so the CLI does not look hung.
222
253
  In CI and when output is piped, only plain text lines are printed, with no ANSI control codes, so
@@ -301,14 +332,15 @@ skips with a `⚠︎` when the ref is unavailable, and is non-fatal in all cases
301
332
  Every `nomad` subcommand exits with one of a small set of codes, so a script or cron wrapper can
302
333
  branch on `$?` without parsing stderr text.
303
334
 
304
- | Code | Name | Meaning |
305
- | ---- | --------------- | ------------------------------------------------------------------------------------ |
306
- | 0 | Success | Completed successfully. |
307
- | 1 | Generic failure | Unclassified failure; the default for any error not covered below. |
308
- | 2 | Usage | Bad argv: an unknown subcommand, an unknown flag, or a malformed flag value. |
309
- | 4 | Conflict | The sync repo is wedged (e.g. an unresolved rebase) and needs manual git resolution. |
310
- | 5 | Leak blocked | gitleaks confirmed a secret in the staged tree and the push was aborted. |
311
- | 130 | Interrupted | You pressed Ctrl+C at an interactive prompt, so nomad stopped without finishing. |
335
+ | Code | Name | Meaning |
336
+ | ---- | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
337
+ | 0 | Success | Completed successfully. |
338
+ | 1 | Generic failure | Unclassified failure; the default for any error not covered below. |
339
+ | 2 | Usage | Bad argv: an unknown subcommand, an unknown flag, or a malformed flag value. |
340
+ | 4 | Conflict | The sync repo is wedged (e.g. an unresolved rebase) and needs manual git resolution. |
341
+ | 5 | Leak blocked | gitleaks confirmed a secret in the staged tree and the push was aborted. |
342
+ | 6 | Settings blocked | Pull (or the pull half of `nomad sync`) found settings on this machine that are not in the sync repo, so it did not write your settings file. |
343
+ | 130 | Interrupted | You pressed Ctrl+C at an interactive prompt, so nomad stopped without finishing. |
312
344
 
313
345
  A run skipped because another nomad process already holds the lock also exits 0: this is an
314
346
  intentional no-op skip, not a failure, so a backgrounded shell-rc or cron invocation never raises a