fix(composer,symphony): use \${CLAUDE_PLUGIN_ROOT} for plugin-internal paths

Per plugin-structure spec, plugin-internal references in component
files (commands, agents, skills) must use \${CLAUDE_PLUGIN_ROOT} so
they resolve correctly regardless of where the plugin is installed
(local repo, marketplace cache, npm-installed, etc.).

Updated:
- symphony/skills/symphony-init/SKILL.md: WORKFLOW.md template ref
- composer/skills/ui-system/SKILL.md: all six template refs in the
  Write phase
- composer/skills/composer/SKILL.md: added a Templates section that
  enumerates each phase's template path with \${CLAUDE_PLUGIN_ROOT},
  plus the ADR template ref in phase 8

Composer's CLAUDE.md gains a clarifying note that templates/design-
system/SKILL.md and templates/interaction-design/SKILL.md are template
skeletons, not actual plugin skills — they're copied into a consuming
project's .claude/skills/ at install-time of the design system. Per
the auto-discovery rule (scans skills/ only), they are not loaded as
plugin skills.

Removed empty composer/agents/ directory (composer has no agents;
workers are owned by symphony).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
movq
2026-04-29 22:02:03 -05:00
parent fe41d19c12
commit 0cdbb1b4a4
4 changed files with 45 additions and 8 deletions

View File

@@ -48,6 +48,19 @@ not a setting picked at the start. Stack choices made before the design
system, interaction model, and mocks lock you into shapes that don't fit system, interaction model, and mocks lock you into shapes that don't fit
the problem. the problem.
## Note on templates
`templates/design-system/SKILL.md` and `templates/interaction-design/SKILL.md`
are **templates**, not actual skills of this plugin. The plugin's auto-loaded
skills live in `skills/` (`composer`, `composer-mocks`, `ui-system`); the
templates under `templates/` are skeletons that the `ui-system` skill copies
into a *consuming project's* `.claude/skills/<slug>-design-system/` and
`.claude/skills/<slug>-interaction-design/` directories.
Per Claude Code's plugin auto-discovery, only `SKILL.md` files under `skills/`
are loaded as plugin skills — `templates/` is a regular subdirectory and is
ignored by discovery.
## Layout ## Layout
- `commands/composer.md` — main entry, state-aware. Continues from the first - `commands/composer.md` — main entry, state-aware. Continues from the first

View File

@@ -18,6 +18,30 @@ This skill has four modes, dispatched by which command invoked it:
- **review** (from `/composer-review`) — convene a council on an artifact. - **review** (from `/composer-review`) — convene a council on an artifact.
- **load** (from `/composer-load`) — push stories to the project's tracker. - **load** (from `/composer-load`) — push stories to the project's tracker.
## Templates
Each phase drafts its artifact from a skeleton template at
`${CLAUDE_PLUGIN_ROOT}/templates/`. Read the matching template before
writing the artifact; use it as the structural skeleton, fill in
content from interview answers, and substitute `<TBD: ...>` markers
for anything skipped or deferred.
| Phase | Template path |
|---|---|
| concept | `${CLAUDE_PLUGIN_ROOT}/templates/concept.md` |
| users | `${CLAUDE_PLUGIN_ROOT}/templates/users.md` |
| requirements | `${CLAUDE_PLUGIN_ROOT}/templates/requirements.md` |
| nfr | `${CLAUDE_PLUGIN_ROOT}/templates/nfr.md` |
| ia | `${CLAUDE_PLUGIN_ROOT}/templates/ia.md` |
| flows | `${CLAUDE_PLUGIN_ROOT}/templates/flows.md` |
| architecture | `${CLAUDE_PLUGIN_ROOT}/templates/architecture.md` |
| ADR (one per decision) | `${CLAUDE_PLUGIN_ROOT}/templates/adr/0000-template.md` |
| stories | `${CLAUDE_PLUGIN_ROOT}/templates/stories.md` |
| roadmap | `${CLAUDE_PLUGIN_ROOT}/templates/roadmap.md` |
(Phases 45 — design system and interaction design — are owned by the
`ui-system` skill, which has its own template references.)
## Phase order and artifacts ## Phase order and artifacts
| # | Phase | Artifact path | Skill | | # | Phase | Artifact path | Skill |
@@ -197,7 +221,7 @@ That points at: <stack hypothesis>. Convening a council to pressure-test:
``` ```
Run the council. Their synthesis informs ADRs. Draft each ADR (one per major Run the council. Their synthesis informs ADRs. Draft each ADR (one per major
decision) using `adr/0000-template.md`; user signs off; write to decision) using `${CLAUDE_PLUGIN_ROOT}/templates/adr/0000-template.md`; user signs off; write to
`adr/NNNN-<slug>.md`. Compose a summary `architecture.md` referencing the ADRs. `adr/NNNN-<slug>.md`. Compose a summary `architecture.md` referencing the ADRs.
### Phase 9 — Stories ### Phase 9 — Stories

View File

@@ -377,12 +377,12 @@ and reflect them back as a posture sentence rather than picking presets.
After the interview ends, write all six files in one batch: After the interview ends, write all six files in one batch:
1. `.claude/skills/<slug>-design-system/SKILL.md` from `templates/design-system/SKILL.md` — substitute slug, project name, and all interview answers. 1. `.claude/skills/<slug>-design-system/SKILL.md` from `${CLAUDE_PLUGIN_ROOT}/templates/design-system/SKILL.md` — substitute slug, project name, and all interview answers.
2. `.claude/skills/<slug>-design-system/tokens.ts` from `templates/design-system/tokens.ts` — fill in all values; `<TBD>` for skipped phases. 2. `.claude/skills/<slug>-design-system/tokens.ts` from `${CLAUDE_PLUGIN_ROOT}/templates/design-system/tokens.ts` — fill in all values; `<TBD>` for skipped phases.
3. `.claude/skills/<slug>-design-system/components.md` from `templates/design-system/components.md` — vocabulary matched to `ia.md`. 3. `.claude/skills/<slug>-design-system/components.md` from `${CLAUDE_PLUGIN_ROOT}/templates/design-system/components.md` — vocabulary matched to `ia.md`.
4. `.claude/skills/<slug>-interaction-design/SKILL.md` from `templates/interaction-design/SKILL.md` — fill in all interview answers. 4. `.claude/skills/<slug>-interaction-design/SKILL.md` from `${CLAUDE_PLUGIN_ROOT}/templates/interaction-design/SKILL.md` — fill in all interview answers.
5. `docs/planning/design-system.md` from `templates/planning-pointers/design-system.md`. 5. `docs/planning/design-system.md` from `${CLAUDE_PLUGIN_ROOT}/templates/planning-pointers/design-system.md`.
6. `docs/planning/interaction-design.md` from `templates/planning-pointers/interaction-design.md`. 6. `docs/planning/interaction-design.md` from `${CLAUDE_PLUGIN_ROOT}/templates/planning-pointers/interaction-design.md`.
Then tell the user: Then tell the user:

View File

@@ -89,7 +89,7 @@ Keep the interview short. Anything that has a sensible default should default.
If the project's CLAUDE.md doesn't exist yet, create it with just this section. If the project's CLAUDE.md doesn't exist yet, create it with just this section.
Do not invent other content. Do not invent other content.
2. **`./WORKFLOW.md`** — copy from the plugin's `templates/WORKFLOW.md`, with 2. **`./WORKFLOW.md`** — copy from `${CLAUDE_PLUGIN_ROOT}/templates/WORKFLOW.md`, with
detected values substituted (tracker.kind, active_states, terminal_states, detected values substituted (tracker.kind, active_states, terminal_states,
concurrency cap, hook commands appropriate to the project's build system). concurrency cap, hook commands appropriate to the project's build system).
If a `WORKFLOW.md` already exists, show the diff and ask before overwriting. If a `WORKFLOW.md` already exists, show the diff and ask before overwriting.