diff --git a/11-Features.md b/11-Features.md index 3c59d79..525e42e 100644 --- a/11-Features.md +++ b/11-Features.md @@ -537,14 +537,14 @@ path — the endpoint you name is the endpoint it uses. ## Onboard a project with the plugin -**What.** A Claude Code plugin that makes any project bridge-ready: it mounts the `fleetd` MCP -gateway and ships a `/claude-bridge:setup` skill that runs preflight, applies standard project +**What.** A Claude Code plugin that makes any project fleet-ready: it mounts the `fleetd` MCP +gateway and ships a `/fleet:setup` skill that runs preflight, applies standard project settings, names the environment variables the operator must export, and verifies the session resolves as the primary. -**On.** `/plugin marketplace add ltms/claude-bridge` then `/plugin install -claude-bridge@claude-bridge`; run `/claude-bridge:setup` inside the project to onboard. Develop it -locally with `claude --plugin-dir ./plugin`. +**On.** `/plugin marketplace add https://git.ltms.dev/fleet/fleetd` then `/plugin install +fleet@fleetd`; export `FLEETD_MCP_URL` (usually `http://127.0.0.1:8765/mcp`); run `/fleet:setup` +inside the project to onboard. Develop it locally with `claude --plugin-dir ./plugin`. **Why.** The orchestration contract had no distributable form. Every consuming project had to hand-copy a block of `CLAUDE.md` and hand-write an `.mcp.json`, and we maintained a script purely to @@ -562,6 +562,30 @@ at the repo would collide with the very isolation CB-525 exists to enforce. --- + +**Renamed in 0.2.0 (fleetd #362) — this is a breaking change.** The plugin was `claude-bridge` and +mounted its server as `fleetd`; it is now `fleet@fleetd` and mounts `fleet`. The old name gave a +lead with both a project `.mcp.json` and the plugin **two mounts of one daemon** and a duplicated +`fleet_*` tool set, and it did not match `PeerLauncher.MCP_MOUNT_NAME`. A project that pre-allowed +`mcp__fleetd__fleet_whoami` in `.claude/settings.json` must be updated to `mcp__fleet__*`. The +`.mcp.json` URL is now `${FLEETD_MCP_URL}` rather than a hardcoded address, so one plugin can serve +hosts running the daemon on different ports — the variable is required, and the `setup` skill +checks for it in preflight. + +**The plugin is lead-side only, and cannot be otherwise.** It carries the mount, the `setup` skill +and the charter — never the worker playbook skills or the role agent definitions. Two structural +reasons, both measured: the launcher adds `--agent` only when `/.claude/agents/.md` +exists in the member's own tree (`ClaudeCodeLauncher.java:371,391`); and a member's +`CLAUDE_CONFIG_DIR` points at its profile's config directory (`ClaudeCodeLauncher.java:285`), so it +never reads the operator's plugin store. On this Mac every Claude profile sets `configDir`, and the +four `ccs` instances hold four separate copies of the plugin store — same md5, different inodes — +so a user-scope install lands in exactly one of them. Member-facing assets travel in the worktree. + +**This entry existed and still did not prevent a rebuild.** In September 2026 a session planned the +whole plugin from scratch, because `wiki/` is a submodule whose pointer is never advanced and no +session reads it by default. Documenting a feature *here* is necessary and not sufficient — a +capability an agent must not re-derive needs a line in `CLAUDE.md`, which is the only file every +session loads. ## Port a workspace to OpenCode **What.** A `port-to-opencode` skill that makes an OpenCode session a first-class participant in a