@neurodock/cli 0.2.0 → 0.6.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.
Files changed (86) hide show
  1. package/CHANGELOG.md +198 -1
  2. package/README.md +155 -27
  3. package/dist/assets/hooks/neurodock_daemon.py +506 -0
  4. package/dist/assets/hooks/proactive_guardrail.py +520 -0
  5. package/dist/clients/claude-code.d.ts.map +1 -1
  6. package/dist/clients/claude-code.js +3 -1
  7. package/dist/clients/claude-code.js.map +1 -1
  8. package/dist/clients/claude-desktop.d.ts.map +1 -1
  9. package/dist/clients/claude-desktop.js +3 -1
  10. package/dist/clients/claude-desktop.js.map +1 -1
  11. package/dist/clients/cursor.d.ts.map +1 -1
  12. package/dist/clients/cursor.js +3 -1
  13. package/dist/clients/cursor.js.map +1 -1
  14. package/dist/clients/index.d.ts.map +1 -1
  15. package/dist/clients/index.js.map +1 -1
  16. package/dist/commands/doctor.d.ts.map +1 -1
  17. package/dist/commands/doctor.js +59 -4
  18. package/dist/commands/doctor.js.map +1 -1
  19. package/dist/commands/examples.d.ts +28 -0
  20. package/dist/commands/examples.d.ts.map +1 -0
  21. package/dist/commands/examples.js +168 -0
  22. package/dist/commands/examples.js.map +1 -0
  23. package/dist/commands/host.d.ts.map +1 -1
  24. package/dist/commands/host.js +1 -1
  25. package/dist/commands/host.js.map +1 -1
  26. package/dist/commands/init.d.ts.map +1 -1
  27. package/dist/commands/init.js +14 -4
  28. package/dist/commands/init.js.map +1 -1
  29. package/dist/commands/install-all.d.ts +78 -0
  30. package/dist/commands/install-all.d.ts.map +1 -0
  31. package/dist/commands/install-all.js +283 -0
  32. package/dist/commands/install-all.js.map +1 -0
  33. package/dist/commands/install-hooks.d.ts +20 -0
  34. package/dist/commands/install-hooks.d.ts.map +1 -0
  35. package/dist/commands/install-hooks.js +356 -0
  36. package/dist/commands/install-hooks.js.map +1 -0
  37. package/dist/commands/plugin.d.ts +122 -0
  38. package/dist/commands/plugin.d.ts.map +1 -0
  39. package/dist/commands/plugin.js +545 -0
  40. package/dist/commands/plugin.js.map +1 -0
  41. package/dist/commands/profile.d.ts.map +1 -1
  42. package/dist/commands/profile.js +11 -2
  43. package/dist/commands/profile.js.map +1 -1
  44. package/dist/commands/sync.d.ts +24 -0
  45. package/dist/commands/sync.d.ts.map +1 -0
  46. package/dist/commands/sync.js +179 -0
  47. package/dist/commands/sync.js.map +1 -0
  48. package/dist/commands/uninstall.d.ts.map +1 -1
  49. package/dist/commands/uninstall.js +11 -3
  50. package/dist/commands/uninstall.js.map +1 -1
  51. package/dist/commands/update.d.ts +13 -22
  52. package/dist/commands/update.d.ts.map +1 -1
  53. package/dist/commands/update.js +11 -172
  54. package/dist/commands/update.js.map +1 -1
  55. package/dist/commands/validate.d.ts.map +1 -1
  56. package/dist/commands/validate.js +12 -3
  57. package/dist/commands/validate.js.map +1 -1
  58. package/dist/index.d.ts +1 -1
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +196 -8
  61. package/dist/index.js.map +1 -1
  62. package/dist/lib/json-patch.d.ts.map +1 -1
  63. package/dist/lib/json-patch.js +1 -1
  64. package/dist/lib/json-patch.js.map +1 -1
  65. package/dist/lib/mcp-entries.d.ts.map +1 -1
  66. package/dist/lib/mcp-entries.js +25 -3
  67. package/dist/lib/mcp-entries.js.map +1 -1
  68. package/dist/lib/paths.d.ts +10 -0
  69. package/dist/lib/paths.d.ts.map +1 -1
  70. package/dist/lib/paths.js +19 -2
  71. package/dist/lib/paths.js.map +1 -1
  72. package/dist/lib/plugin-schema.d.ts +12 -0
  73. package/dist/lib/plugin-schema.d.ts.map +1 -0
  74. package/dist/lib/plugin-schema.js +71 -0
  75. package/dist/lib/plugin-schema.js.map +1 -0
  76. package/dist/profile/defaults.d.ts.map +1 -1
  77. package/dist/profile/defaults.js +3 -1
  78. package/dist/profile/defaults.js.map +1 -1
  79. package/dist/profile/loader.d.ts.map +1 -1
  80. package/dist/profile/loader.js +3 -1
  81. package/dist/profile/loader.js.map +1 -1
  82. package/dist/profile/validator.d.ts.map +1 -1
  83. package/dist/profile/validator.js +5 -1
  84. package/dist/profile/validator.js.map +1 -1
  85. package/package.json +31 -14
  86. package/LICENSE +0 -11
package/CHANGELOG.md CHANGED
@@ -1,6 +1,203 @@
1
1
  # @neurodock/cli changelog
2
2
 
3
- ## 0.2.0 (unreleased)
3
+ ## 0.6.0
4
+
5
+ ### Added — `neurodock install-hooks` (proactive guardrails Phases 1 + 3)
6
+
7
+ One command wires NeuroDock's proactive-guardrail layer into a fresh
8
+ install. Bundled self-contained Python scripts ship with the npm
9
+ package — no extra `pip install` step.
10
+
11
+ ```sh
12
+ neurodock install-hooks --self-test
13
+ neurodock install-hooks --install-daemon --self-test
14
+ neurodock install-hooks --uninstall
15
+ neurodock install-hooks --dry-run
16
+ ```
17
+
18
+ The command:
19
+
20
+ 1. Copies `proactive_guardrail.py` to `~/.neurodock/hooks/` (Phase 1
21
+ Claude Code hook; auto-fires chronometric / rumination /
22
+ sycophancy checks on every Nth tool use, banners on stderr).
23
+ 2. Copies `neurodock_daemon.py` to the same dir (Phase 3 host-agnostic
24
+ poller; same heuristics, native OS notifications).
25
+ 3. Idempotently merges 4 entries into `~/.claude/settings.json`
26
+ (`SessionStart`, `PreToolUse`, `PostToolUse`, `Stop`), preserving
27
+ any existing hooks from other tools.
28
+ 4. With `--install-daemon`, registers the daemon at user-login
29
+ autostart: HKCU Run on Windows, LaunchAgent on macOS, systemd
30
+ `--user` unit on Linux.
31
+ 5. With `--self-test`, runs both scripts' built-in smoke test to
32
+ verify Python is on PATH and the heuristics fire.
33
+
34
+ **Opt-out:**
35
+
36
+ ```sh
37
+ neurodock install-hooks --uninstall # removes hook + daemon entries
38
+ export NEURODOCK_GUARDRAILS=off # disables without removing
39
+ ```
40
+
41
+ ### Fixed — Windows path-escape lockout (regression-pinned)
42
+
43
+ Pre-0.6.0 the hook command written into `settings.json` used
44
+ backslashes on Windows. Bash-style shells (Git Bash / MinGW — what
45
+ Claude Code uses for hooks on Windows) interpret `\U`, `\h`, `\p`
46
+ etc. as escape sequences and strip them, mangling the path to
47
+ `pythonscript.py` and causing every PreToolUse hook to fail, which
48
+ **blocks every tool call** until the user manually edits
49
+ `settings.json`. The 0.0.22 install command hit this. Twice.
50
+
51
+ 0.6.0 always normalises the script path to forward slashes (Python
52
+ accepts them on Windows) and always wraps it in double quotes. The
53
+ new install summary also echoes the exact hook command string so the
54
+ bug class can't recur silently.
55
+
56
+ Regression test: `packages/cli/tests/install-hooks.test.ts` pins the
57
+ contract — the test fails if any hook entry contains a backslash in
58
+ its script-path portion.
59
+
60
+ ### Internals
61
+
62
+ - New build step `scripts/copy-assets.mjs` copies `src/assets/` into
63
+ `dist/assets/` after `tsc`, so the published npm tarball contains
64
+ the bundled Python scripts.
65
+ - `package.json` `files` array already includes `dist/`, so no
66
+ manifest change needed.
67
+
68
+ ## 0.5.0
69
+
70
+ ### Changed (breaking)
71
+
72
+ - `neurodock update` now upgrades NeuroDock to the latest version
73
+ (re-installs the six MCP servers via `pip install --upgrade` or
74
+ `uv tool install` and re-wires clients). Previously, `update` only
75
+ re-shaped client config JSON without touching package versions —
76
+ which confused users who expected `update` to behave like every
77
+ other CLI's `update` verb.
78
+ - The previous behavior moved to a new verb: `neurodock sync`. Same
79
+ flags (`--client`, `--dry-run`), same code path, same semantics.
80
+ - The new `update` command accepts the same flags as `install-all`
81
+ (`--client`, `--profile`, `--installer`, `--skip-install`, `--yes`,
82
+ `--dry-run`, `--no-native-host`).
83
+
84
+ ### Added
85
+
86
+ - README now has a dedicated `## Update` section documenting the
87
+ one-liner: `npx --yes @neurodock/cli update`.
88
+
89
+ ### Migration
90
+
91
+ If you scripted against `neurodock update --client X --dry-run` to
92
+ reconcile client configs, rename the call to `neurodock sync` — the
93
+ old flags still work there. If you wanted package upgrades, the new
94
+ `neurodock update` is what you were looking for.
95
+
96
+ ## 0.4.3
97
+
98
+ ### Changed
99
+
100
+ - `homepage` in `package.json` now points at https://neurodock.org/
101
+ (was the GitHub README anchor). Repository link unchanged. Adds
102
+ `bugs`, `keywords`, and richer `description` for the npm listing.
103
+ - README rewritten to lead with the new slogan ("A cognitive substrate
104
+ that remembers, paces, and refuses"), reference NeuroDock by brand
105
+ rather than as an internal monorepo, and add a Links section with
106
+ the canonical home / docs / repo / issues / changelog URLs.
107
+
108
+ No behaviour change. Same surface as 0.4.2.
109
+
110
+ ## 0.4.2
111
+
112
+ ### Fixed
113
+
114
+ - `neurodock init` now wires all FIVE MCP servers into the MCP-aware
115
+ client config, not just three. Previously chronometric +
116
+ cognitive-graph + task-fractionator got registered but translation
117
+ - guardrail were skipped — so users saw 3/5 servers in Claude even
118
+ after a clean `install-all` + restart. The pip install registered
119
+ the entrypoints; the CLI just wasn't pointing the client at them.
120
+ `mcp-entries.ts` `NEURODOCK_SERVERS` list extended with the missing
121
+ two. `examples` and `install-all` already iterated all five, so no
122
+ changes there.
123
+
124
+ ## 0.4.1
125
+
126
+ ### Changed
127
+
128
+ - `neurodock install-all` now also registers the optional native-messaging
129
+ host at the end of the run (previously a separate `neurodock host install`
130
+ step). Brings first-time install to truly one command: pip-install the
131
+ six MCP servers, wire the MCP-aware clients, and register the host the
132
+ browser extension uses to read `~/.neurodock/profile.yaml`.
133
+ - New `--no-native-host` flag on `install-all` for users who don't want the
134
+ browser-extension bridge wired (e.g. headless / server installs).
135
+ - Host-install failure is non-fatal: the whole command stays exit 0, prints
136
+ a `[warn]` line, and tells the user they can re-run `neurodock host install`
137
+ later. Rationale: the host is only useful if the user also installs the
138
+ browser extension, so failing the entire first-time install over it is
139
+ worse UX than warning.
140
+ - Added a "What this just did" three-bullet recap at the end of `install-all`
141
+ so the user can see what was wired without re-reading the full log.
142
+ - New tests in `tests/install-all.test.ts`: happy-path host install,
143
+ `--no-native-host` skip, host-failure warn-but-don't-fail.
144
+
145
+ ## 0.4.0
146
+
147
+ ### Added
148
+
149
+ - `neurodock plugin` command group for managing plugins under
150
+ `~/.neurodock/plugins/` per ADR 0007. Six subcommands:
151
+ - `plugin add <source>` — install a plugin from a local directory.
152
+ Validates `plugin.yaml` against `plugin.schema.json` before copying
153
+ into `~/.neurodock/plugins/<name>/`. Flags: `--yes`, `--dry-run`,
154
+ `--force`. Exit codes: 0 ok, 1 source invalid, 2 already-installed
155
+ without `--force`, 3 schema validation failure.
156
+ - `plugin remove <name>` (alias: `uninstall`) — remove an installed
157
+ plugin. Flags: `--yes`, `--dry-run`.
158
+ - `plugin list` — list installed plugins with their enabled state.
159
+ `--json` for machine-readable output.
160
+ - `plugin enable <name>` — activate an installed plugin by writing a
161
+ `.enabled` marker file into the plugin directory. The substrate's
162
+ filesystem walk (per ADR 0007) treats marker presence as the
163
+ single source of truth for activation; no central registry file
164
+ is maintained.
165
+ - `plugin disable <name>` — remove the `.enabled` marker without
166
+ deleting the plugin files.
167
+ - `plugin validate <source>` — schema-validate a plugin manifest
168
+ without installing. `--json` flag for scripting. Exit codes: 0
169
+ valid, 1 invalid, 2 `plugin.yaml` missing.
170
+ - New tests: `tests/plugin-add.test.ts`, `tests/plugin-remove.test.ts`,
171
+ `tests/plugin-list.test.ts`, `tests/plugin-enable.test.ts`,
172
+ `tests/plugin-disable.test.ts`, `tests/plugin-validate.test.ts`.
173
+ - `pluginsDir(env)` helper in `lib/paths.ts` resolves to
174
+ `<profileDir>/plugins/` so tests that set `NEURODOCK_PROFILE_PATH`
175
+ get an isolated plugin tree for free.
176
+
177
+ ## 0.3.0
178
+
179
+ ### Added
180
+
181
+ - `neurodock install-all` — single-command first-time install. Detects
182
+ whether `uv` is on PATH (preferred) and falls back to `python -m pip`,
183
+ then installs the six Python MCP servers (`neurodock-mcp-chronometric`,
184
+ `neurodock-mcp-cognitive-graph`, `neurodock-mcp-task-fractionator`,
185
+ `neurodock-mcp-translation`, `neurodock-mcp-guardrail`,
186
+ `neurodock-evals`), verifies each entrypoint is on PATH with
187
+ `<command> --help`, and runs `neurodock init` to wire MCP clients —
188
+ collapsing six `pip install` lines plus an `init` into one command.
189
+ Flags: `--client`, `--profile`, `--installer <uv|pip|auto>`,
190
+ `--skip-install`, `--yes`, `--dry-run`. Exit codes: 0 on success,
191
+ 1 if any entrypoint is missing from PATH, 2 if init fails.
192
+ - `neurodock examples` — copy-pasteable prompt cheat-sheet that exercises
193
+ every wired NeuroDock MCP tool. Detects which servers are wired across
194
+ all detected client configs and prints 2–3 example prompts per server,
195
+ each annotated with the underlying tool name. Flags: `--server <name>`
196
+ to filter, `--json` for scripting. Honors `NO_COLOR` / `FORCE_COLOR`
197
+ via the existing `colorEnabled()` helper.
198
+ - New tests: `tests/install-all.test.ts`, `tests/examples.test.ts`.
199
+
200
+ ## 0.2.0
4
201
 
5
202
  ### Added
6
203
 
package/README.md CHANGED
@@ -1,14 +1,17 @@
1
1
  # @neurodock/cli
2
2
 
3
- The `neurodock` installer and diagnostic CLI.
3
+ The `neurodock` installer and diagnostic CLI for [NeuroDock](https://neurodock.org/) — a local-first cognitive substrate for neurodivergent professionals.
4
4
 
5
- Status: Phase 1 (v0.1 developer preview).
5
+ Status: **v0.6.0**.
6
6
 
7
7
  ## Quickstart
8
8
 
9
9
  ```bash
10
- # From a published package once it lands on npm:
11
- npx neurodock init
10
+ # From a published package:
11
+ npx --yes @neurodock/cli@latest install-all
12
+
13
+ # Or step-by-step, also from npm:
14
+ npx --yes @neurodock/cli@latest init
12
15
 
13
16
  # From a fresh clone of the monorepo:
14
17
  pnpm install
@@ -16,24 +19,56 @@ pnpm --filter @neurodock/cli build
16
19
  node packages/cli/dist/index.js init
17
20
  ```
18
21
 
19
- `neurodock init` wires three Python MCP servers (chronometric, cognitive-graph,
20
- task-fractionator) into every MCP-aware client it can detect.
22
+ `neurodock init` wires five Python MCP servers (chronometric,
23
+ cognitive-graph, task-fractionator, translation, guardrail) into every
24
+ MCP-aware client it can detect. A sixth, the optional native messaging
25
+ host, is wired separately via `neurodock host install`.
21
26
 
22
- **Prerequisite:** the CLI does not install Python deps for you. From a clone
23
- run `uv sync` (or `pip install -e packages/mcp-chronometric` etc.) so the
24
- `neurodock-mcp-*` console entry points are on `$PATH` for `uv run`. From a
25
- published install this matures into `uv tool install neurodock-mcp-*`.
27
+ **Prerequisite:** the CLI does not install Python deps for you unless you
28
+ use `install-all`. From a clone run `uv sync` (or
29
+ `pip install -e packages/mcp-chronometric` etc.) so the
30
+ `neurodock-mcp-*` console entry points are on `$PATH`. From a published
31
+ install, `install-all` runs the `pip install` step automatically.
26
32
 
27
33
  ## Commands
28
34
 
29
- | Command | What it does |
30
- |---|---|
31
- | `neurodock init` | Install MCP servers into Claude Desktop / Claude Code / Cursor. |
32
- | `neurodock doctor` | Diagnose your install profile validity, client wiring, tool availability. |
33
- | `neurodock profile validate` | Validate `~/.neurodock/profile.yaml` against the v0.1 schema. |
34
- | `neurodock profile show` | Print the resolved profile with loader defaults applied. |
35
- | `neurodock host install` | Register the optional native messaging host so the browser extension can read `~/.neurodock/profile.yaml` directly. |
36
- | `neurodock host uninstall` | Remove all NeuroDock native-host manifests and registry pointers. |
35
+ | Command | What it does |
36
+ | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
37
+ | `neurodock install-all` | One-command first-time install: pip-install the six servers, wire every detected client, copy the starter profile. |
38
+ | `neurodock init` | Install MCP servers into Claude Desktop / Claude Code / Cursor (the wiring half of `install-all`). |
39
+ | `neurodock doctor` | Diagnose your install — profile validity, client wiring, tool availability. |
40
+ | `neurodock validate` | Schema-validate a profile file (`~/.neurodock/profile.yaml` by default). |
41
+ | `neurodock update` | Upgrade NeuroDock to the latest version re-installs the six MCP servers via pip/uv and re-wires client configs. |
42
+ | `neurodock sync` | Re-shape stale NeuroDock MCP entries in existing client configs. No package upgrade. Non-NeuroDock entries are preserved. |
43
+ | `neurodock uninstall` | Reverse `init` — remove NeuroDock MCP entries from each client config. Optionally purge `~/.neurodock/`. |
44
+ | `neurodock examples` | Print a copy-pasteable prompt cheat-sheet that exercises every wired NeuroDock MCP tool. |
45
+ | `neurodock host install` | Register the optional Chrome Native Messaging host so the browser extension can read `~/.neurodock/profile.yaml` directly. |
46
+ | `neurodock host uninstall` | Remove all NeuroDock native-host manifests and registry pointers. |
47
+ | `neurodock profile show` | Print the resolved profile with loader defaults applied. |
48
+ | `neurodock profile validate` | Validate `~/.neurodock/profile.yaml` against the v0.1 schema. |
49
+ | `neurodock plugin add` | Install a plugin from a local directory into `~/.neurodock/plugins/`. |
50
+ | `neurodock plugin remove` | Uninstall a plugin (alias: `plugin uninstall`). |
51
+ | `neurodock plugin list` | List installed plugins and their enabled state. `--json` for scripting. |
52
+ | `neurodock plugin enable` | Activate an installed plugin (writes a `.enabled` marker file). |
53
+ | `neurodock plugin disable` | Deactivate an installed plugin without deleting its files. |
54
+ | `neurodock plugin validate` | Schema-validate a plugin manifest without installing. |
55
+
56
+ ### `neurodock install-all`
57
+
58
+ ```
59
+ neurodock install-all [--client=claude-desktop|claude-code|cursor|all] \
60
+ [--profile=minimal|example] \
61
+ [--installer=uv|pip|auto] \
62
+ [--skip-install] [--yes] [--dry-run]
63
+ ```
64
+
65
+ Single-command first-time install. Prefers `uv` if it is on PATH; falls
66
+ back to `python -m pip`. After install, verifies each server entrypoint
67
+ is on PATH with `<command> --help`, then delegates to `init` to wire
68
+ clients.
69
+
70
+ Exit codes: `0` ok, `1` an entrypoint is missing from PATH after
71
+ install, `2` init failed.
37
72
 
38
73
  ### `neurodock init`
39
74
 
@@ -52,21 +87,74 @@ What `init` does, in order:
52
87
 
53
88
  1. Detects supported clients per platform (see "Detection locations" below).
54
89
  2. Copies `profile.example.yaml` or `profile.minimal.yaml` to `~/.neurodock/profile.yaml` if it does not already exist. Sets `identity.display_name` from `$USER` / `%USERNAME%`.
55
- 3. Adds three `mcpServers` entries (`neurodock-chronometric`, `neurodock-cognitive-graph`, `neurodock-task-fractionator`) to each detected client's config.
90
+ 3. Adds `mcpServers` entries for each NeuroDock server to each detected client's config.
56
91
  4. Preserves all unrelated keys, comments, and unknown server entries already in those configs.
57
92
 
58
93
  Idempotent. Re-running with no changes is a no-op. Collisions on a previous
59
94
  key are skipped unless `--yes` is supplied.
60
95
 
96
+ ### `neurodock update`
97
+
98
+ ```
99
+ neurodock update [--client=claude-desktop|claude-code|cursor|all] \
100
+ [--profile=minimal|example] \
101
+ [--installer=uv|pip|auto] \
102
+ [--skip-install] [--yes] [--dry-run] [--no-native-host]
103
+ ```
104
+
105
+ One-command upgrade. Same code path as `install-all` — re-runs
106
+ `pip install --upgrade` (or `uv tool install`) for every NeuroDock MCP
107
+ server, re-wires the detected MCP clients, and re-registers the
108
+ optional native-messaging host. Exit codes match `install-all`:
109
+ `0` ok, `1` an entrypoint is missing from PATH, `2` init failed.
110
+
111
+ ### `neurodock sync`
112
+
113
+ ```
114
+ neurodock sync [--client <id>] [--dry-run]
115
+ ```
116
+
117
+ Re-shape stale NeuroDock MCP entries in existing client configs
118
+ (version drift, command/args/cwd changes) without upgrading any
119
+ packages. Non-NeuroDock entries round-trip untouched. Useful when the
120
+ desired wiring shape changed but you don't need a package upgrade.
121
+
122
+ Before 0.5.0 this lived under `neurodock update`. The verb moved
123
+ because users typed `neurodock update` expecting a version upgrade.
124
+
125
+ ### `neurodock validate` / `uninstall`
126
+
127
+ ```
128
+ neurodock validate [--file <path>] [--strict]
129
+ neurodock uninstall [--client <id>] [--yes] [--purge] [--dry-run]
130
+ ```
131
+
132
+ `validate` runs Ajv against `profile.schema.json` and reports field-path
133
+ violations. `uninstall` removes NeuroDock entries from every detected
134
+ client config; asks (interactively) whether to delete
135
+ `~/.neurodock/profile.yaml` and `~/.neurodock/cognitive-graph.sqlite`
136
+ (default: no). `--purge` deletes those without prompting.
137
+
138
+ ### `neurodock examples`
139
+
140
+ ```
141
+ neurodock examples [--server <name>] [--json]
142
+ ```
143
+
144
+ Detects which NeuroDock servers are wired across all detected client
145
+ configs and prints 2–3 example prompts per server, each annotated with
146
+ the underlying tool name. `--server` filters to one server; `--json`
147
+ emits machine-readable output. Honors `NO_COLOR` / `FORCE_COLOR`.
148
+
61
149
  ### Detection locations
62
150
 
63
- | Client | Platform | Path |
64
- |---|---|---|
65
- | Claude Desktop | macOS | `~/Library/Application Support/Claude/claude_desktop_config.json` |
66
- | Claude Desktop | Windows | `%APPDATA%\Claude\claude_desktop_config.json` |
67
- | Claude Desktop | Linux | `~/.config/Claude/claude_desktop_config.json` |
68
- | Claude Code | All | `./.claude/settings.json` (project, preferred) then `~/.claude/settings.json` (user) |
69
- | Cursor | All | `./.cursor/mcp.json` (project, preferred) then `~/.cursor/mcp.json` (user) |
151
+ | Client | Platform | Path |
152
+ | -------------- | -------- | ------------------------------------------------------------------------------------ |
153
+ | Claude Desktop | macOS | `~/Library/Application Support/Claude/claude_desktop_config.json` |
154
+ | Claude Desktop | Windows | `%APPDATA%\Claude\claude_desktop_config.json` |
155
+ | Claude Desktop | Linux | `~/.config/Claude/claude_desktop_config.json` |
156
+ | Claude Code | All | `./.claude/settings.json` (project, preferred) then `~/.claude/settings.json` (user) |
157
+ | Cursor | All | `./.cursor/mcp.json` (project, preferred) then `~/.cursor/mcp.json` (user) |
70
158
 
71
159
  ### `neurodock host install` / `uninstall`
72
160
 
@@ -88,6 +176,36 @@ is a placeholder.
88
176
  The host is OPTIONAL. The extension keeps working without it — the
89
177
  popup just shows `Profile sync: extension-local`.
90
178
 
179
+ ### `neurodock profile show` / `validate`
180
+
181
+ ```
182
+ neurodock profile show
183
+ neurodock profile validate [--file <path>]
184
+ ```
185
+
186
+ `show` prints the resolved profile with loader defaults applied (per
187
+ ADR 0004 §15). `validate` runs Ajv against the profile schema.
188
+
189
+ ### `neurodock plugin` group
190
+
191
+ ```
192
+ neurodock plugin add <source> [--yes] [--dry-run] [--force]
193
+ neurodock plugin remove <name> [--yes] [--dry-run]
194
+ neurodock plugin list [--json]
195
+ neurodock plugin enable <name>
196
+ neurodock plugin disable <name>
197
+ neurodock plugin validate <source> [--json]
198
+ ```
199
+
200
+ `add` validates `plugin.yaml` against `plugin.schema.json` before copying
201
+ into `~/.neurodock/plugins/<name>/`. Enablement is tracked via a
202
+ `.enabled` marker file inside each plugin directory — the substrate's
203
+ filesystem walk treats marker presence as the single source of truth
204
+ (per ADR 0007).
205
+
206
+ Exit codes for `add`: `0` ok, `1` source invalid, `2` already installed
207
+ without `--force`, `3` schema validation failure.
208
+
91
209
  ### Profile precedence
92
210
 
93
211
  Loader precedence (highest first):
@@ -116,7 +234,17 @@ node dist/index.js --help
116
234
  - All loader defaults live in `src/profile/defaults.ts` and mirror
117
235
  `profile.schema.json` — JSON Schema validation does not apply defaults
118
236
  itself, so the loader does.
119
- - No telemetry, no remote calls, no auto-install of Python packages.
237
+ - No telemetry, no remote calls. `install-all` is the only command that
238
+ shells out to a package manager, and it does so only when invoked.
239
+
240
+ ## Links
241
+
242
+ - **Home:** [neurodock.org](https://neurodock.org/)
243
+ - **Documentation:** [docs.neurodock.org](https://docs.neurodock.org/)
244
+ - **Repository:** [github.com/tlennon-ie/neurodock](https://github.com/tlennon-ie/neurodock) (monorepo; this package lives at `packages/cli/`)
245
+ - **Issues:** [github.com/tlennon-ie/neurodock/issues](https://github.com/tlennon-ie/neurodock/issues)
246
+ - **Changelog:** [`packages/cli/CHANGELOG.md`](https://github.com/tlennon-ie/neurodock/blob/main/packages/cli/CHANGELOG.md)
247
+ - **Manifesto + ethics:** [`MANIFESTO.md`](https://github.com/tlennon-ie/neurodock/blob/main/MANIFESTO.md), [`ETHICS.md`](https://github.com/tlennon-ie/neurodock/blob/main/ETHICS.md)
120
248
 
121
249
  ## License
122
250