diff --git a/CLAUDE.md b/CLAUDE.md index f0fec5b7..fa717f58 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -334,10 +334,17 @@ must obey belongs in the charter, not here. (#362). **Read `plugin/` before designing anything about onboarding a project.** Two limits are structural, not bugs: a plugin cannot carry the role agent files, because `ClaudeCodeLauncher.java:371` requires `/.claude/agents/.md` in the member's own - worktree; and a plugin cannot deliver anything to members at all, because - `ClaudeCodeLauncher.java:285` exports `CLAUDE_CONFIG_DIR` and every Claude profile here sets it, - so a member never reads the operator's plugin store. **The plugin is the lead-side surface; - member-facing assets travel in the worktree.** + worktree; and a plugin reaches a member only through `CLAUDE_CONFIG_DIR`, which + `ClaudeCodeLauncher.java:286` exports with `putIfPresent` — so only for a profile that sets + `configDir`. **Measured 2026-10-04: that is not all of them.** `GET /profiles` reports 8 live + profiles and `fleetd.yaml` carries 4 `configDir` lines, two of which point at the operator's own + `~/.ccs/instances/ltms`. So "a member never reads the operator's plugin store" is false as a + blanket claim, and which store a member on a `configDir`-less profile ends up reading is **not + measured** — the pane's login shell may set the variable itself. Re-measure with + `curl -s 127.0.0.1:8765/profiles` against `grep -c 'configDir:' fleetd/fleetd.yaml`; delete this + note once every live profile sets one. **Treat the plugin as the lead-side surface and put + member-facing assets in the worktree** — that conclusion still holds, because it does not depend + on the count. - **Never commit** `.mcp.json` (the primary's local copy, flagged `--skip-worktree`) or `wiki/` (a submodule with its own remote). - **A provisioned worktree neutralizes `.mcp.json`, `opencode.json` and `.autoenv`** — the repo's