Features: plugin renamed fleet@fleetd, mount name fleet, ${FLEETD_MCP_URL}

Also records why this entry alone did not prevent a rebuild: wiki/ is a
submodule whose pointer is never advanced, so no session reads it by default.
A capability an agent must not re-derive needs a line in CLAUDE.md too.

Refs fleetd #362
Dai Ha
2026-09-05 12:42:26 +07:00
parent ac507a98a1
commit 26a7ea41f7
+29 -5
@@ -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 `<worktree>/.claude/agents/<role>.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