claude-code: register the agent's configuration at three scopes, served as the nox-mesh plugin (hq ADR 0216) #52

Merged
mesh-admin merged 3 commits from feat/nox-mesh-plugin into main 2026-10-05 12:30:10 +00:00
Contributor

Builds hq ADR 0216 / to-be 36 §8.

  • New config state: one key per registration, mesh.<kind>.<name>, node.<node>.<kind>.<name>, home.<node>.<kind>.<name>; item and files in one value, max 256 KiB. Every node watches it (like servers) and renders what applies.
  • Where things land: skills, agents, commands, hooks, output styles → plugin nox-mesh in /etc/claude-code/marketplace/ (written whole: staged, swapped in as root, only when it differs; written before the settings that enable it); settings → managed-settings.json (managed_settings setting < mesh < node, objects merged, lists joined, under the mesh's keys incl. extraKnownMarketplaces + enabledPlugins); instructions → sections after the mesh's CLAUDE.md text; home scope → ~/.claude/{skills,agents,commands,output-styles,rules}, recorded in home-placed.json, never touching a path the person made, leaving hand-changed files alone.
  • 27 new tools: claude_code_<kind>_list/register/unregister for skill, agent, command, hook, output_style, instructions; claude_code_settings_get/set/clear; claude_code_permission_add/remove; claude_code_config_list/show/status/import.

Tests: every row of ADR 0216's checks (each kind lands in its place; mesh/node/home scopes over two nodes; the mesh's keys cannot be set or replaced; settings layering and list joining; home ownership incl. a hand-changed file; size and shape refusals; import and stale detection), plus the manifest lists exactly the tools served and the tree comparison. go vet, gofmt clean; module check with the controller from current main: ok, 35 tools, state servers, holdings, config.

Rollout plan: g14 first, register one mesh skill, confirm a new session offers nox-mesh:<name>, then the other nodes.

Builds hq ADR 0216 / to-be 36 §8. - New `config` state: one key per registration, `mesh.<kind>.<name>`, `node.<node>.<kind>.<name>`, `home.<node>.<kind>.<name>`; item and files in one value, max 256 KiB. Every node watches it (like `servers`) and renders what applies. - Where things land: skills, agents, commands, hooks, output styles → plugin `nox-mesh` in `/etc/claude-code/marketplace/` (written whole: staged, swapped in as root, only when it differs; written before the settings that enable it); settings → managed-settings.json (`managed_settings` setting < mesh < node, objects merged, lists joined, under the mesh's keys incl. `extraKnownMarketplaces` + `enabledPlugins`); instructions → sections after the mesh's CLAUDE.md text; home scope → `~/.claude/{skills,agents,commands,output-styles,rules}`, recorded in `home-placed.json`, never touching a path the person made, leaving hand-changed files alone. - 27 new tools: `claude_code_<kind>_list/register/unregister` for skill, agent, command, hook, output_style, instructions; `claude_code_settings_get/set/clear`; `claude_code_permission_add/remove`; `claude_code_config_list/show/status/import`. Tests: every row of ADR 0216's checks (each kind lands in its place; mesh/node/home scopes over two nodes; the mesh's keys cannot be set or replaced; settings layering and list joining; home ownership incl. a hand-changed file; size and shape refusals; import and stale detection), plus the manifest lists exactly the tools served and the tree comparison. `go vet`, gofmt clean; `module check` with the controller from current main: ok, 35 tools, state servers, holdings, config. Rollout plan: g14 first, register one mesh skill, confirm a new session offers `nox-mesh:<name>`, then the other nodes.
mesh-admin added 1 commit 2026-10-05 09:57:47 +00:00
Skills, subagents, commands and hooks had no machine-wide place, so they were
copied into homes by hand and drifted. Each is now registered once through the
module's tools, kept in its config state, and written per node: the plugin in
the managed directory, settings and instructions in the managed files, or the
account's own directory, touching only what the module placed. hq ADR 0216.
jschoubben added 1 commit 2026-10-05 12:25:13 +00:00
Review of the nox-mesh plugin: a watch hands over what is there, not what
went, so the view is pruned to the state's keys before it starts; the
watches and the tools render one at a time, as the home's record is read
and written whole; the register answer names how an item is offered.
jschoubben added 1 commit 2026-10-05 12:29:56 +00:00
Refuse paths with empty, dot or parent segments and a file that is also a
directory; take an item only when its key says what it is; write the view
under its lock; expand nodes all and check node names; merge the plugin's
entries into the operator's own; render every file past one that fails;
in the home, never take over the person's file, never write through a
symbolic link, keep a deleted file deleted, keep the kind's directory; and
refuse settings that would deny the console or the marketplace.
mesh-admin merged commit 54ba97f901 into main 2026-10-05 12:30:10 +00:00
mesh-admin deleted branch feat/nox-mesh-plugin 2026-10-05 12:30:11 +00:00
Author
Contributor

Delivery novox/mesh-catalog@54ba97f9010e — held since 2026-10-06T23:05:28Z

Held for a person: merged without a passing check: only a person decides that it goes on — mesh-delivery.release with why lets it go on.

Delivery plan — builds claude-code → ace, g14, novox, shanks; no bus step

  • tier 0: claude-code
  • ace: receives claude-code
  • g14: receives claude-code
  • novox: receives claude-code
  • shanks: receives claude-code
  • claude-code keeps data (ADR 0233): what it holds is backed up before it moves

Transitions

  • 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#52 merged; its head was not heard by this owner, so it is made from the forge's word
  • 2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on

The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-catalog@54ba97f9010e` — **held** since 2026-10-06T23:05:28Z Held for a person: merged without a passing check: only a person decides that it goes on — `mesh-delivery.release` with why lets it go on. **Delivery plan** — builds claude-code → ace, g14, novox, shanks; no bus step - tier 0: claude-code - ace: receives claude-code - g14: receives claude-code - novox: receives claude-code - shanks: receives claude-code - claude-code keeps data (ADR 0233): what it holds is backed up before it moves **Transitions** - 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#52 merged; its head was not heard by this owner, so it is made from the forge's word - 2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-catalog#52