Mandatory pre-flight. Response Filter
Before emitting any image, metaphor, sensory prompt, or rewrite, run §7 Image filter (object
writing + metaphor) of response-filter
(add §2 Line-writing when producing lines). NAME each box's pass / fail / skip-with-reason
(aloud or in reasoning); correct before emission. Skips are valid; silent skips are not. Abstract
telling and cliche imagery are the defaults this filter catches.
Purpose
Sense-bound raw material: object writing, cliche repair, and point of view. This is the "showing,
not telling" engine, the source of concrete detail the other skills shape. Metaphor is its own
discipline and its own skill (/songwriting:metaphor); this skill feeds it.
Method content is Pat Pattison's, under the plugin-root ../../context/pat-pattison/; a future
author's method plugs in at context/<author>/ without changing this skill, the author seam per
the plugin-root ../../README.md "Method content and the author seam".
Action Router
/songwriting:object-writing <action> [args]. Parse $ARGUMENTS: first token = action when it matches a listed action, remainder = args; otherwise treat all of $ARGUMENTS as payload for the default.
No action → issue one usable timed object-writing prompt immediately (do not assign a curriculum).
| Action |
Use when the user asks for |
Load |
object-writing (default) |
sensory writing, showing instead of telling, raw material |
object-writing, templates/object-writing-prompt |
generate |
YOU do the object writing. "you write it", "do the object writing", "I don't want to write it", or any request for raw sensory material the writer is not going to produce |
dispatch the object-writer agent. See below |
cliche |
cliche phrase, cliche image, stale metaphor, cliche rhyme |
cliche, worksheets, metaphor |
pov |
first/second/third person, direct address, dialogue, pronoun consistency, camera distance |
point-of-view |
worksheet |
broader sense-bound worksheets (not rhyme worksheets) |
worksheets |
Handlers
- Pre-flight ALWAYS: run response-filter §7 (+ §2 when producing lines) before output.
- If the user asks for a prompt, generate one usable timed exercise immediately (default
90 seconds). Do not assign the full curriculum unless asked. That is
/songwriting:practice.
- Keep object-writing sense-bound and personal; its job is to reveal specific, sensory detail, not
to produce finished lines.
- A metaphor request routes to
/songwriting:metaphor, invoked via the Skill tool. Sensory material mined here is that skill's
input. Hand over the material, do not generate the metaphor here.
generate. Dispatch, never write it inline
Who writes matters more than what is loaded. Reading this skill's files and then writing a
dive in the main thread reliably produces a static scene description, because the discipline was
read rather than carried. Dispatch the object-writer agent, whose system prompt IS the
discipline.
Dispatch rules:
One agent per seed, all in a single message so they run concurrently. Two agents on the same
seed is a valid and useful play. Same board, different dives.
Give each agent nothing but the seed, the timer, the category, and its own output path. Not
the song, not the title, not the draft, not the diagnosis, not the other agents' seeds. The
isolation is the mechanism; briefing an agent on the song destroys the divergence it exists to
produce. This is a hard boundary, not a default.
Each agent writes to its own file under the song's ideation/ (per
artifact-persistence). It returns
only three things: the path, the seven channels each graded strong / thin / absent, and
one sentence on where the pivot chain landed. The write itself and the phrase-quoting sense
inventory live in the file, never ask an agent to return either in a message.
Grade coverage on return, then mine. Read each file, honor thin-channel reports rather than
overruling them, and pull individual images forward. Mining stays here because you hold the song
context the writers deliberately lack.
For rounds: name what made the strongest write of a round work, then carry that as the
standard into the next round's dispatch. The bar escalates; rounds are not independent repeats.
Set the model explicitly on every agent call, never let the fleet inherit the session's. The
object-writer agent's frontmatter is model: inherit, so a dispatch that leaves the model unset
runs the whole fleet on whatever the session happens to run on, a tier picked for the
orchestrator's work, not the writers'. Unset is not a default; it is the bug. A global
CLAUDE_CODE_SUBAGENT_MODEL override outranks every per-call model argument and agent
frontmatter when set to anything but inherit. Keep it unset for fleet dispatches, and stop to
ask if the consumer's settings export a tier above the fleet default before spawning.
The fleet default is the tier whose writing has cleared the writer's bar, not a fixed model
name, which goes stale at the next release. Resolve it from the consuming project's own
configuration for creative fan-out; where the project states none, ask before spawning rather
than inheriting. Reserve any tier priced above that default for a judge or verifier stage,
where one call reads many writes. When a new tier appears it becomes eligible by clearing the
same bar, not by being newer.
Never run a fleet on a tier priced above the fleet default. Premium tiers cost a multiple per
token in both directions, and a fan-out multiplies that by the agent count. A tier above the
default belongs at a judge or verifier stage at most, where one call reads many writes.
Reach for effort before reaching for a cheaper tier. Effort scales the tokens one agent
spends; tier scales the price of every token AND changes which model wrote the lines. Across a
fleet both multiply, but only one of them changes the writing. Lever availability differs by
surface: a bare agent spawn takes a model and has no effort parameter, so a fan-out that needs
the effort lever belongs in a workflow, whose per-agent call takes both.
A tier step-down is a per-stage decision, never a fleet default. Mechanical legs, meaning rhyme-field enumeration, word-pool merge, syllable counting, and dedup, are reading-heavy and
low-reasoning, and a cheaper tier is correct there. Object-writing is neither. Dropping the
writing fleet's own tier to save cost is the writer's call, not the plugin's: ask, and never
record the answer as his without a source that says so.
Model tier is not what makes the fleet diverge. Rule 2 above names isolation as that mechanism.
Any creative fan-out this plugin adds later inherits this rule.
Never transcribe a write into lines. The whole page is ore. Pat's discipline is to pull one
image out of it. Moving a dive wholesale into a section is the failure this action exists to
prevent, not its purpose. What replaces transcription is the three-step gate in
/songwriting:co-write. Mine → adapt → say it aloud: the mined image is rewritten in plain sung
English before it enters a slot, and then said out loud. Rule 4's "then mine" ends at the mining;
the adapting and the saying belong to the emitting skill.
Nothing else in this skill dispatches agents. Metaphor generation is
/songwriting:metaphor; line-writing is not this skill's job at all (see boundaries below).
Persistence and template overrides
Write generated files to the paths in
artifact-persistence
"Where generated work persists", and honor a consuming project's own songwriting layout when it
defines one. Before loading any bundled templates/<name>.md, check
${CLAUDE_PROJECT_DIR}/songwriting/templates/pat-pattison/<name>.md first: a project-level
override wins over the bundled skill default, first match, per that file's "Template override".
Boundary. What this skill must NOT emit
This skill produces raw sensory material and figurative language. It does not produce finished
lyric lines, and being mid-conversation about a song does not authorize it to.
| If you are about to emit |
STOP and route to |
| A finished verse, chorus, or bridge line |
/songwriting:co-write line-brainstorm |
| A rhyme partner or rhyme list |
/songwriting:rhyme |
| A section rewrite, or a judgement about where a section's material belongs |
/songwriting:song-form |
| A scansion or stress-map claim |
/songwriting:meter-prosody |
Routing means invoking that skill, not summarizing what you believe it would say. Emitting a lyric
line from here is the specific failure the boundary exists to catch: the generative discipline
lives in the skill that owns it, and material that arrives without passing through that skill
arrives as an LLM default wearing the vocabulary.
Related skills
- Metaphor generation and diagnosis →
/songwriting:metaphor
- Rhyme choice and rhyme cliche →
/songwriting:rhyme
- Daily practice curriculum and numbered exercises →
/songwriting:practice
- Whole-draft diagnosis (where images fail in context) →
/songwriting:diagnose
1---2name: object-writing3description: Generate raw sensory material with Pat Pattison's methods. Object writing (sense-bound, timed dives, the pivot chain, the seven-channel sense inventory, Rusty's-collar/Kami-kazi), an agent that performs the write itself, cliche taxonomy + redemption, and point of view (camera distance, pronoun consistency). Use when: 'object writing', 'you do the object writing', 'make this less abstract', 'show don't tell', '90-second writing prompt', 'this line sounds cliched', 'who is speaking in this lyric'. For metaphor use /songwriting:metaphor; for rhyme use /songwriting:rhyme; for daily curriculum use /songwriting:practice.4---56## Mandatory pre-flight. Response Filter78Before emitting any image, metaphor, sensory prompt, or rewrite, run **§7 Image filter (object9writing + metaphor)** of [response-filter](../../context/pat-pattison/research/response-filter.md)10(add **§2 Line-writing** when producing lines). NAME each box's pass / fail / skip-with-reason11(aloud or in reasoning); correct before emission. Skips are valid; silent skips are not. Abstract12telling and cliche imagery are the defaults this filter catches.1314## Purpose1516Sense-bound raw material: object writing, cliche repair, and point of view. This is the "showing,17not telling" engine, the source of concrete detail the other skills shape. Metaphor is its own18discipline and its own skill (`/songwriting:metaphor`); this skill feeds it.1920Method content is Pat Pattison's, under the plugin-root `../../context/pat-pattison/`; a future21author's method plugs in at `context/<author>/` without changing this skill, the author seam per22the plugin-root `../../README.md` "Method content and the author seam".2324## Action Router2526`/songwriting:object-writing <action> [args]`. Parse `$ARGUMENTS`: first token = action when it matches a listed action, remainder = args; otherwise treat all of `$ARGUMENTS` as payload for the default.27No action → issue one usable timed object-writing prompt immediately (do not assign a curriculum).2829| Action | Use when the user asks for | Load |30| --- | --- | --- |31| `object-writing` (default) | sensory writing, showing instead of telling, raw material | [object-writing](../../context/pat-pattison/research/object-writing.md), [templates/object-writing-prompt](../../context/pat-pattison/templates/object-writing-prompt.md) |32| `generate` | **YOU** do the object writing. "you write it", "do the object writing", "I don't want to write it", or any request for raw sensory material the writer is not going to produce | dispatch the `object-writer` agent. See below |33| `cliche` | cliche phrase, cliche image, stale metaphor, cliche rhyme | [cliche](../../context/pat-pattison/research/cliche.md), [worksheets](../../context/pat-pattison/research/worksheets.md), [metaphor](../../context/pat-pattison/research/metaphor.md) |34| `pov` | first/second/third person, direct address, dialogue, pronoun consistency, camera distance | [point-of-view](../../context/pat-pattison/research/point-of-view.md) |35| `worksheet` | broader sense-bound worksheets (not rhyme worksheets) | [worksheets](../../context/pat-pattison/research/worksheets.md) |3637## Handlers3839- **Pre-flight ALWAYS:** run response-filter §7 (+ §2 when producing lines) before output.40- If the user asks for a prompt, generate one usable timed exercise immediately (default41 90 seconds). Do not assign the full curriculum unless asked. That is `/songwriting:practice`.42- Keep object-writing sense-bound and personal; its job is to reveal specific, sensory detail, not43 to produce finished lines.44- A metaphor request routes to `/songwriting:metaphor`, invoked via the Skill tool. Sensory material mined here is that skill's45 input. Hand over the material, do not generate the metaphor here.4647## `generate`. Dispatch, never write it inline4849**Who writes matters more than what is loaded.** Reading this skill's files and then writing a50dive in the main thread reliably produces a static scene description, because the discipline was51read rather than carried. Dispatch the `object-writer` agent, whose system prompt IS the52discipline.5354Dispatch rules:55561. **One agent per seed**, all in a single message so they run concurrently. Two agents on the same57 seed is a valid and useful play. Same board, different dives.582. **Give each agent nothing but the seed, the timer, the category, and its own output path.** Not59 the song, not the title, not the draft, not the diagnosis, not the other agents' seeds. The60 isolation is the mechanism; briefing an agent on the song destroys the divergence it exists to61 produce. This is a hard boundary, not a default.623. **Each agent writes to its own file** under the song's `ideation/` (per63 [artifact-persistence](../../context/pat-pattison/research/artifact-persistence.md)). It returns64 only three things: the path, the seven channels each graded `strong` / `thin` / `absent`, and65 one sentence on where the pivot chain landed. The write itself and the phrase-quoting sense66 inventory live in the file, never ask an agent to return either in a message.674. **Grade coverage on return**, then mine. Read each file, honor thin-channel reports rather than68 overruling them, and pull individual images forward. Mining stays here because you hold the song69 context the writers deliberately lack.705. **For rounds:** name what made the strongest write of a round work, then carry that as the71 standard into the next round's dispatch. The bar escalates; rounds are not independent repeats.726. **Set the model explicitly on every agent call, never let the fleet inherit the session's.** The73 `object-writer` agent's frontmatter is `model: inherit`, so a dispatch that leaves the model unset74 runs the whole fleet on whatever the session happens to run on, a tier picked for the75 orchestrator's work, not the writers'. Unset is not a default; it is the bug. A global76 `CLAUDE_CODE_SUBAGENT_MODEL` override outranks every per-call `model` argument and agent77 frontmatter when set to anything but `inherit`. Keep it unset for fleet dispatches, and stop to78 ask if the consumer's settings export a tier above the fleet default before spawning.7980 **The fleet default is the tier whose writing has cleared the writer's bar**, not a fixed model81 name, which goes stale at the next release. Resolve it from the consuming project's own82 configuration for creative fan-out; where the project states none, ask before spawning rather83 than inheriting. Reserve any tier priced above that default for a judge or verifier stage,84 where one call reads many writes. When a new tier appears it becomes eligible by clearing the85 same bar, not by being newer.8687 **Never run a fleet on a tier priced above the fleet default.** Premium tiers cost a multiple per88 token in both directions, and a fan-out multiplies that by the agent count. A tier above the89 default belongs at a judge or verifier stage at most, where one call reads many writes.9091 **Reach for effort before reaching for a cheaper tier.** Effort scales the tokens one agent92 spends; tier scales the price of every token AND changes which model wrote the lines. Across a93 fleet both multiply, but only one of them changes the writing. Lever availability differs by94 surface: a bare agent spawn takes a model and has no effort parameter, so a fan-out that needs95 the effort lever belongs in a workflow, whose per-agent call takes both.9697 **A tier step-down is a per-stage decision, never a fleet default.** Mechanical legs, meaning rhyme-field enumeration, word-pool merge, syllable counting, and dedup, are reading-heavy and98 low-reasoning, and a cheaper tier is correct there. Object-writing is neither. Dropping the99 writing fleet's own tier to save cost is the writer's call, not the plugin's: ask, and never100 record the answer as his without a source that says so.101102 Model tier is not what makes the fleet diverge. Rule 2 above names isolation as that mechanism.103 Any creative fan-out this plugin adds later inherits this rule.104105**Never transcribe a write into lines.** The whole page is ore. Pat's discipline is to pull one106image out of it. Moving a dive wholesale into a section is the failure this action exists to107prevent, not its purpose. What replaces transcription is the three-step gate in108`/songwriting:co-write`. Mine → adapt → say it aloud: the mined image is rewritten in plain sung109English before it enters a slot, and then said out loud. Rule 4's "then mine" ends at the mining;110the adapting and the saying belong to the emitting skill.111112Nothing else in this skill dispatches agents. Metaphor generation is113`/songwriting:metaphor`; line-writing is not this skill's job at all (see boundaries below).114115## Persistence and template overrides116117Write generated files to the paths in118[artifact-persistence](../../context/pat-pattison/research/artifact-persistence.md)119"Where generated work persists", and honor a consuming project's own songwriting layout when it120defines one. Before loading any bundled `templates/<name>.md`, check121`${CLAUDE_PROJECT_DIR}/songwriting/templates/pat-pattison/<name>.md` first: a project-level122override wins over the bundled skill default, first match, per that file's "Template override".123124## Boundary. What this skill must NOT emit125126This skill produces raw sensory material and figurative language. It does **not** produce finished127lyric lines, and being mid-conversation about a song does not authorize it to.128129| If you are about to emit | STOP and route to |130| --- | --- |131| A finished verse, chorus, or bridge line | `/songwriting:co-write` line-brainstorm |132| A rhyme partner or rhyme list | `/songwriting:rhyme` |133| A section rewrite, or a judgement about where a section's material belongs | `/songwriting:song-form` |134| A scansion or stress-map claim | `/songwriting:meter-prosody` |135136Routing means invoking that skill, not summarizing what you believe it would say. Emitting a lyric137line from here is the specific failure the boundary exists to catch: the generative discipline138lives in the skill that owns it, and material that arrives without passing through that skill139arrives as an LLM default wearing the vocabulary.140141## Related skills142143- Metaphor generation and diagnosis → `/songwriting:metaphor`144- Rhyme choice and rhyme cliche → `/songwriting:rhyme`145- Daily practice curriculum and numbered exercises → `/songwriting:practice`146- Whole-draft diagnosis (where images fail in context) → `/songwriting:diagnose`