Purpose
Thin check-centric setup per the uniform setup contract (docs/PLUGIN-PHILOSOPHY.md
"Setup is explicit and repeatable" in the marketplace repository): check inventories the consuming
repo's tracked prompt-template overrides and reports the effective artifact layout; apply scaffolds
an override from a bundled default (or removes a byte-identical one). The override seam and the output
layout are the plugin's only extension points. It carries no userConfig. Both surfaces are described
once in
${CLAUDE_PLUGIN_ROOT}/context/pat-pattison/research/artifact-persistence.md.
Action routing: no argument or check runs the inventory; apply scaffold <name>... copies the named
bundled defaults into overrides; apply remove <name>... deletes the named overrides. apply runs
check first. apply is non-interactive for the safe paths (scaffolding a not-yet-overridden template,
removing a byte-identical one); the single deliberate exception is a destructive-collision guard: overwriting an already-diverged override or removing a customized one would lose the consumer's edits,
so those confirm first rather than clobber.
The two surfaces
- Template overrides (the only thing this skill writes). A file at
${CLAUDE_PROJECT_DIR}/songwriting/templates/pat-pattison/<name>.md in the consuming repo wins over
the bundled default ${CLAUDE_PLUGIN_ROOT}/context/pat-pattison/templates/<name>.md (first match).
These overrides are tracked, team-shared config. They belong in the consumer's repo, not in
machine-local state or the plugin directory.
- Artifact layout (read/confirm only, never written by this skill). Craft skills persist work under
${CLAUDE_PROJECT_DIR}/songwriting/ by default; if the consuming project's own CLAUDE.md or rules
declare a different songwriting layout, that layout wins. That declaration is the consumer's own
instruction surface. Setup surfaces it and reports the effective layout, but does not edit the
consumer's CLAUDE.md.
The override cost. Scaffold only what you intend to customize
An override freezes that template: once songwriting/templates/pat-pattison/<name>.md exists, the
craft skills load it instead of the bundled default forever, so later plugin improvements to that
template stop reaching this repo. Scaffold an override only for a template the consumer actually
wants to change. Copying every default verbatim is an anti-pattern: a full set of files that opt out
of updates while customizing nothing.
check (read-only)
Inventory without writing anything. Apply the convention-resolution ladder. Override present → it wins;
no override → the bundled default stays in force (the safe default).
- Overrides present. List what exists under
${CLAUDE_PROJECT_DIR}/songwriting/templates/pat-pattison/, and list the bundled defaults in
${CLAUDE_PLUGIN_ROOT}/context/pat-pattison/templates/ (each <name>.md is loaded by the craft
skill that references it, e.g. co-write-session-opener by /songwriting:co-write,
metaphor-recipe-prompt by /songwriting:metaphor). Report: templates available to override,
templates already overridden, and, for each existing override, whether it is byte-identical to the
current bundled default (INFO: a byte-identical override customizes nothing and only opts the repo
out of future improvements; apply remove <name> clears it).
- Artifact layout. Read the consuming project's
CLAUDE.md and .claude/rules for a declared
songwriting layout. Report the effective layout, the declared one if present, else the default
songwriting/ layout from the artifact-persistence contract.
apply (idempotent)
Run check, then act on the named arguments only, never scaffold or remove a template the consumer
did not name.
apply scaffold <name>.... Create the
${CLAUDE_PROJECT_DIR}/songwriting/templates/pat-pattison/ directory if absent, then copy each named
bundled default verbatim to <name>.md as the starting point for the consumer to edit. If an override
already exists, show the difference and do not overwrite it without explicit confirmation in this
conversation. Confirm the scaffolded files are tracked, not gitignored, via the pair:
git check-ignore -v reports no match (a match is a finding with the pattern) AND
git ls-files --error-unmatch exits 0 (non-zero right after a fresh scaffold means "written but
untracked: commit it to share with the team", never success).
apply remove <name>.... Delete the named override(s). Offer this for any override check found
byte-identical to its bundled default; for a diverged override, show what would be lost and confirm
first.
- Custom artifact layout. If the consumer wants a non-default layout, show them the one-line
convention to add to their own
CLAUDE.md or rules; do not write it for them (that surface is
consumer-owned).
After any change, re-run the check inventory and report the resulting override set. Re-running apply
with no scaffold/remove argument changes nothing and reports the current inventory.
What this skill does NOT do
- Run a craft skill. That is
/songwriting:workflow and the concern skills it routes to.
- Write machine-local state. Overrides live in the consumer's tracked repo, never in the plugin
directory or the plugin data directory.
- Write the plugin cache, Claude Code user settings, or
pluginConfigs.
- Edit the consumer's
CLAUDE.md or rules, the artifact-layout convention is the consumer's own
instruction surface; setup reads and reports it, it does not author it.
- Scaffold templates the consumer did not name, a bundled default left in place keeps receiving plugin
improvements.
1---2name: setup-273description: Configure the songwriting plugin for this repository: inventory or scaffold the project-level prompt-template overrides under songwriting/templates/pat-pattison/, and confirm where craft artifacts land. Use when: 'set up songwriting', 'configure songwriting', 'songwriting setup', 'customize a songwriting template', 'override the co-write prompt', or a craft skill reports you want to tune its bundled prompt. Actions: check (read-only inventory, default) | apply (scaffold or remove overrides). Re-runnable and safe.4---56## Purpose78Thin check-centric setup per the uniform setup contract (`docs/PLUGIN-PHILOSOPHY.md`9"Setup is explicit and repeatable" in the marketplace repository): `check` inventories the consuming10repo's tracked prompt-template overrides and reports the effective artifact layout; `apply` scaffolds11an override from a bundled default (or removes a byte-identical one). The override seam and the output12layout are the plugin's only extension points. It carries no `userConfig`. Both surfaces are described13once in14[`${CLAUDE_PLUGIN_ROOT}/context/pat-pattison/research/artifact-persistence.md`](../../context/pat-pattison/research/artifact-persistence.md).1516Action routing: no argument or `check` runs the inventory; `apply scaffold <name>...` copies the named17bundled defaults into overrides; `apply remove <name>...` deletes the named overrides. `apply` runs18`check` first. `apply` is non-interactive for the safe paths (scaffolding a not-yet-overridden template,19removing a byte-identical one); the single deliberate exception is a destructive-collision guard: overwriting an already-diverged override or removing a customized one would lose the consumer's edits,20so those confirm first rather than clobber.2122## The two surfaces2324- **Template overrides (the only thing this skill writes).** A file at25 `${CLAUDE_PROJECT_DIR}/songwriting/templates/pat-pattison/<name>.md` in the consuming repo wins over26 the bundled default `${CLAUDE_PLUGIN_ROOT}/context/pat-pattison/templates/<name>.md` (first match).27 These overrides are **tracked, team-shared config**. They belong in the consumer's repo, not in28 machine-local state or the plugin directory.29- **Artifact layout (read/confirm only, never written by this skill).** Craft skills persist work under30 `${CLAUDE_PROJECT_DIR}/songwriting/` by default; if the consuming project's own `CLAUDE.md` or rules31 declare a different songwriting layout, that layout wins. That declaration is the consumer's own32 instruction surface. Setup surfaces it and reports the effective layout, but does not edit the33 consumer's `CLAUDE.md`.3435## The override cost. Scaffold only what you intend to customize3637An override **freezes** that template: once `songwriting/templates/pat-pattison/<name>.md` exists, the38craft skills load it instead of the bundled default forever, so later plugin improvements to that39template stop reaching this repo. Scaffold an override **only** for a template the consumer actually40wants to change. Copying every default verbatim is an anti-pattern: a full set of files that opt out41of updates while customizing nothing.4243## `check` (read-only)4445Inventory without writing anything. Apply the convention-resolution ladder. Override present → it wins;46no override → the bundled default stays in force (the safe default).47481. **Overrides present.** List what exists under49 `${CLAUDE_PROJECT_DIR}/songwriting/templates/pat-pattison/`, and list the bundled defaults in50 `${CLAUDE_PLUGIN_ROOT}/context/pat-pattison/templates/` (each `<name>.md` is loaded by the craft51 skill that references it, e.g. `co-write-session-opener` by `/songwriting:co-write`,52 `metaphor-recipe-prompt` by `/songwriting:metaphor`). Report: templates available to override,53 templates already overridden, and, for each existing override, whether it is byte-identical to the54 current bundled default (INFO: a byte-identical override customizes nothing and only opts the repo55 out of future improvements; `apply remove <name>` clears it).562. **Artifact layout.** Read the consuming project's `CLAUDE.md` and `.claude/rules` for a declared57 songwriting layout. Report the effective layout, the declared one if present, else the default58 `songwriting/` layout from the artifact-persistence contract.5960## `apply` (idempotent)6162Run `check`, then act on the named arguments only, never scaffold or remove a template the consumer63did not name.6465- **`apply scaffold <name>...`**. Create the66 `${CLAUDE_PROJECT_DIR}/songwriting/templates/pat-pattison/` directory if absent, then copy each named67 bundled default verbatim to `<name>.md` as the starting point for the consumer to edit. If an override68 already exists, show the difference and do not overwrite it without explicit confirmation in this69 conversation. Confirm the scaffolded files are tracked, not gitignored, via the pair:70 `git check-ignore -v` reports no match (a match is a finding with the pattern) AND71 `git ls-files --error-unmatch` exits 0 (non-zero right after a fresh scaffold means "written but72 untracked: commit it to share with the team", never success).73- **`apply remove <name>...`**. Delete the named override(s). Offer this for any override `check` found74 byte-identical to its bundled default; for a diverged override, show what would be lost and confirm75 first.76- **Custom artifact layout.** If the consumer wants a non-default layout, show them the one-line77 convention to add to their **own** `CLAUDE.md` or rules; do not write it for them (that surface is78 consumer-owned).7980After any change, re-run the `check` inventory and report the resulting override set. Re-running `apply`81with no scaffold/remove argument changes nothing and reports the current inventory.8283## What this skill does NOT do8485- Run a craft skill. That is `/songwriting:workflow` and the concern skills it routes to.86- Write machine-local state. Overrides live in the consumer's tracked repo, never in the plugin87 directory or the plugin data directory.88- Write the plugin cache, Claude Code user settings, or `pluginConfigs`.89- Edit the consumer's `CLAUDE.md` or rules, the artifact-layout convention is the consumer's own90 instruction surface; setup reads and reports it, it does not author it.91- Scaffold templates the consumer did not name, a bundled default left in place keeps receiving plugin92 improvements.