diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index edb723a..250d482 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -44,7 +44,7 @@ "name": "ghost", "source": "./ghost", "description": "Write, revise, and push blog posts to a Ghost site from Claude Code — a Ghost Admin API MCP plus a plan→draft→revise→push skill set.", - "version": "0.1.4" + "version": "0.1.5" } ] } diff --git a/ghost/.claude-plugin/plugin.json b/ghost/.claude-plugin/plugin.json index 4fe8b48..5ea4665 100644 --- a/ghost/.claude-plugin/plugin.json +++ b/ghost/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "ghost", - "version": "0.1.4", + "version": "0.1.5", "description": "Write, revise, and push blog posts to a Ghost site from Claude Code — a Ghost Admin API MCP plus a plan→draft→revise→push skill set.", "author": { "name": "Court Schuett" diff --git a/ghost/skills/build-style-guide/SKILL.md b/ghost/skills/build-style-guide/SKILL.md index 0adb6a6..2cb2c9f 100644 --- a/ghost/skills/build-style-guide/SKILL.md +++ b/ghost/skills/build-style-guide/SKILL.md @@ -141,6 +141,15 @@ Combine two sources: - Cute closers: "Happy coding!", "Until next time!", "Stay curious!", "Hope this helps!" - Code-fence width: code blocks without a language tag, or lines exceeding ~70 columns (Ghost renders narrow) +**Also include the reading-pass tells — the ones a grep cannot catch.** These are rhythm and framing rather than fixed strings, so the guide must flag them for a *read* (with the read-aloud test: "if you wouldn't say it, it's a tell"). Carry each with a concrete before/after so the drafting and revising skills can match against real examples: +- **Choppy rhythm** — plain is not short; a run of short declaratives reads as mechanical. Connect them into substantive sentences that carry cause and effect; vary length. +- **Cleft / focus-frame** — "X is what Y", "the X is that"; lead with the subject. +- **Manufactured contrast** — "X is easy; Y is the hard part"; describe what actually happened. +- **Em-dash reveal** — "[claim] — and that turned out to be [payoff]"; end on the fact. +- **Retcon** — a fix framed as intentional design; describe what the thing does and why, not a story of having meant it all along. +- **Overselling** — "I set one rule at the start", "the part I lean on"; understate. +- **Negative-first** — lead with the reason, not the absence. + List each anti-pattern as a short bullet with a concrete example of what to avoid. If no corpus and no interview: write the house defaults list above as baseline anti-patterns. diff --git a/ghost/skills/draft-post/SKILL.md b/ghost/skills/draft-post/SKILL.md index fb1bf42..a8e30c3 100644 --- a/ghost/skills/draft-post/SKILL.md +++ b/ghost/skills/draft-post/SKILL.md @@ -222,6 +222,28 @@ If no issues were found, say so — "All patterns clean." --- +## Phase 5b: Reading pass — the tells a grep can't catch + +The greps in Phase 5 catch fixed strings. The tells that make writing read as AI are mostly **not** fixed strings — they are rhythm and framing, and they only surface on a read. A clean grep is not a clean draft. Read the whole draft once more, section by section, and fix each of the following before you show anything. When unsure, read the sentence out loud: **if you wouldn't actually say it, it's a tell.** + +- **Choppy rhythm.** Plain does not mean short. A run of short declaratives reads as mechanical; substantive sentences that connect cause and effect are the voice. Rewrite staccato runs into connected sentences and vary length. + - _Choppy:_ "Publishing runs in CI. There's no separate step. Shipping is tagging a release." + - _Connected:_ "Publishing happens in CI on a pushed tag, so releasing is nothing more than tagging a clean version." +- **Cleft / focus-frame.** "X is what Y", "the X is that", "what X is is Y" — lead with the subject. + - _Before:_ "The server is what the skills reach Ghost through." → _After:_ "The skills reach Ghost through the server." +- **Manufactured contrast.** "X is easy; Y is the hard part" is a tidy setup that reads as AI. Describe what actually happened instead. +- **Em-dash reveal.** "[claim] — and that turned out to be [payoff]." Drop the reveal; end on the fact. +- **Retcon.** Do not dress a fix up as intentional design. Describe what the thing does and why, not a story of having meant it all along. + - _Before:_ "That's deliberate: the server stays up so…" → _After:_ "The server stays up rather than exiting, because exiting surfaces only an opaque error." +- **Overselling.** "I set one rule at the start", "the part I lean on". Understate — it's a goal or a handy feature, not a manifesto. +- **Negative-first.** Lead with the reason, not the absence. + - _Before:_ "Pages don't get their own tools." → _After:_ "Because a page is the same object as a post, the tools take a `type` argument." +- **Slip-narration.** Present the working config, not a blow-by-blow of what broke and how it got fixed. + +Fix these in the file. Only then continue to the hand-off. + +--- + ## Phase 6: Confirm and hand off After the audit, confirm the draft is ready for review: diff --git a/ghost/skills/revise-post/SKILL.md b/ghost/skills/revise-post/SKILL.md index 42fd4f7..0129ab5 100644 --- a/ghost/skills/revise-post/SKILL.md +++ b/ghost/skills/revise-post/SKILL.md @@ -166,6 +166,15 @@ If the style guide is available, also check: - Sentence and paragraph rhythm matches Observed patterns. - Vocabulary register is consistent with the style guide. +**Then read the section — don't just grep it.** The patterns above are fixed strings; the tells below are rhythm and framing, and they only surface on a read. Read the section out loud: if you wouldn't actually say a sentence, it's a tell. Fix each in place. +- **Choppy rhythm** — plain is not short; a run of short declaratives reads as mechanical. Connect them into substantive sentences that carry cause and effect, and vary length. +- **Cleft / focus-frame** — "X is what Y", "the X is that"; lead with the subject ("The skills reach Ghost through the server," not "the server is what the skills reach Ghost through"). +- **Manufactured contrast** — "X is easy; Y is the hard part"; describe what actually happened instead. +- **Em-dash reveal** — "[claim] — and that turned out to be [payoff]"; drop the reveal and end on the fact. +- **Retcon** — a fix dressed up as intentional design; describe what the thing does and why, not a story of having meant it all along. +- **Overselling** — "I set one rule at the start", "the part I lean on"; understate. +- **Negative-first** — lead with the reason, not the absence ("Because a page is the same object as a post…," not "Pages don't get their own tools"). + #### Axis 3 — Content and accuracy Verify every factual claim in the section: