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.
- package/CHANGELOG.md +55 -0
- package/README.md +50 -18
- package/dist/nomad.mjs +1702 -1422
- 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
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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`)
|
|
70
|
-
|
|
71
|
-
|
|
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
|
|
305
|
-
| ---- |
|
|
306
|
-
| 0 | Success
|
|
307
|
-
| 1 | Generic failure
|
|
308
|
-
| 2 | Usage
|
|
309
|
-
| 4 | Conflict
|
|
310
|
-
| 5 | Leak blocked
|
|
311
|
-
|
|
|
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
|