agentleFS
allthriveaiallthriveai/amplify/.claude/skills/draft-article/SKILL.md

draft-article

Skill0 starsChanged 2 months agoMITView on GitHub

Takes a crafted story and drafts a long-form blog post. Reads the vault, picks hook + structure from Amplify, writes the full article using the narrative arc, and saves an article.md to the story folder. Use when the user asks to write a blog post, article, or long-form piece from a story, or says "turn this into an article", "write the blog post", or "make this a long-form post".

2 other projects use a version of this.

Adopted by

Most recently taken up by

The file

Show its rules and text

We split this skill into the rules it gives an agent

28 rules. About 0 are common, 15 are distinctive, and 13 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈15

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 13

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    When the user runs /draft-article, optionally followed by a story slug:

    line 10
  2. Distinctive:

    Read the config and resolve the vault path.

    line 19
  3. Very specific:

    Read {vaultPath}/{paths.voice} (Voice.md) if it exists.

    line 21
  4. Very specific:

    Read {vaultPath}/{paths.brand}/Brand.md if it exists.

    line 23
  5. Very specific:

    If the user provided a slug (e.g., /draft-article why-we-rebuilt-onboarding), read directly from {stories}/{slug}/story.md and …

    line 27
  6. Very specific:

    If no slug, scan {vaultPath}/{paths.stories}/ for story folders.

    line 29
  7. Very specific:

    Read the chosen story.md and raw.md.

    line 31
  8. Very specific:

    Read all hook files from {vaultPath}/{paths.amplifyHooks}/

    line 45
  9. Very specific:

    Read all structure files from {vaultPath}/{paths.amplifyStructures}/

    line 46
  10. Very specific:

    Read the persuasion glossary from {vaultPath}/{paths.amplifyPersuasion}/Persuasion-Glossary.md

    line 47
  11. Very specific:

    Use buildAmplifyContext(config) if available, or read the files directly.

    line 49
  12. Distinctive:

    Ask: "Are there links, images, screenshots, or data visualizations to embed?

    line 75
  13. Distinctive:

    If yes, ask which should appear above the fold vs.

    line 77
  14. Distinctive:

    If no, move on.

    line 79
  15. Distinctive:

    Ask: "What do you want people to do after reading this?"

    line 83
  16. Distinctive:

    Leave a comment with their experience

    line 86
  17. Distinctive:

    Read a related piece you've written

    line 88
  18. Distinctive:

    Ask: "Where will this be published?" (Medium, Substack, LinkedIn article, personal blog, not sure)

    line 107
  19. Distinctive:

    Not sure: Default to 1200 words, clean structure that adapts to any platform.

    line 115
  20. Distinctive:

    Ask one or two questions at a time.

    line 121
  21. Distinctive:

    Use their words from raw.md and story.md.

    line 122
  22. Distinctive:

    If the user seems eager to see a draft, compress 3b-3e into one turn: "Before I write: any media to embed, what's the CTA, and where is …

    line 125
  23. Very specific:

    Write the full article prose, not just an outline.

    line 138
  24. Distinctive:

    Hook opens cold: No heading. First line grabs.

    line 142
  25. Distinctive:

    The article IS the story: Not a summary, not a listicle.

    line 146
  26. Very specific:

    Write {stories}/{slug}/article-{hook}-{slug}-{YYYY-MM-DD}.md (e.g., article-curiosity-gap-why-we-rebuilt-onboarding-2026-03-01.md) with …

    line 168
  27. Very specific:

    After saving, emit an article_created signal to {vaultPath}/{paths.signals}/signals.json:

    line 242
  28. Distinctive:

    Run a humanizer pass on all article prose.

    line 285

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Draft Article

Instructions

When the user runs /draft-article, optionally followed by a story slug:

Step 0: Load Context

Find the .amplifyrc config file. Check these locations in order:

  1. .amplifyrc in the current working directory
  2. .amplifyrc at the path specified by VAULT_PATH environment variable

Read the config and resolve the vault path.

Read {vaultPath}/{paths.voice} (Voice.md) if it exists. This shapes tone, phrasing, and the article's voice.

Read {vaultPath}/{paths.brand}/Brand.md if it exists. Use the brand visual style when suggesting header images, pull quotes, or visual callouts.

Step 1: Find the Story

If the user provided a slug (e.g., /draft-article why-we-rebuilt-onboarding), read directly from {stories}/{slug}/story.md and {stories}/{slug}/raw.md.

If no slug, scan {vaultPath}/{paths.stories}/ for story folders. List stories that have a story.md with craft-status: drafting or craft-status: workshopped or craft-status: told. Present the list and let the user pick.

Read the chosen story.md and raw.md. Extract:

  • transformation (before/after/change)
  • fiveSecondMoment
  • openingScene
  • theStakes
  • theTurns
  • theQuestion
  • theStory

Validate the story has at minimum: transformation, 5-second moment, and turns. If missing, tell the user: "This story needs more development. Run /craft-content first to fill in the missing pieces."

Step 2: Read Amplify Toolkit

Load the Amplify context from the vault:

  • Read all hook files from {vaultPath}/{paths.amplifyHooks}/
  • Read all structure files from {vaultPath}/{paths.amplifyStructures}/
  • Read the persuasion glossary from {vaultPath}/{paths.amplifyPersuasion}/Persuasion-Glossary.md

Use buildAmplifyContext(config) if available, or read the files directly.

Step 3: Creative Brief

A multi-turn conversation that builds the creative direction before you write a word. Ask one or two questions at a time. Never dump all sub-steps in a single message.

Step 3a: Hook Exploration

Present all 8 hooks as a numbered menu. For each hook, write 1-2 example opening lines tailored to THIS story (use its transformation, 5-second moment, protagonist). Include one sentence per hook explaining WHY it works, naming the persuasion principle at play.

Example format:

1. **Curiosity Gap** — "Every team tracks velocity. Almost none track whether it mattered."
   Opens a gap the reader needs closed. (Information-gap theory: withholding the answer creates pull.)

2. **Bold Claim** — "Your agent's safety benchmarks are measuring the wrong thing."
   Stakes a position that demands proof. (Commitment bias: a strong claim earns the chance to back it up.)

3. ...

End with: "Which pulls you in? You can pick one, combine ideas from two, or give me a direction and I'll draft something new."

Step 3b: Media & Visual Assets

Ask: "Are there links, images, screenshots, or data visualizations to embed? Blog posts with 2-3 visual breaks hold attention longer."

If yes, ask which should appear above the fold vs. further down.

If no, move on.

Step 3c: Call to Action

Ask: "What do you want people to do after reading this?"

Present 4-5 concrete examples:

  • Leave a comment with their experience
  • Subscribe to your newsletter
  • Read a related piece you've written
  • Try something specific based on the article
  • Share it with someone who needs to read it

Reference the story's natural question from theQuestion and ask if they want to use it or something more specific.

Step 3d: Structure Recommendation

NOW recommend 2-3 structures. This comes after hook, media, and CTA are decided so reasoning can reference all three. For each structure:

  • How it organizes the story beats (reference specific story elements)
  • Why it fits the chosen hook (the transition from hook to body)
  • Which persuasion principles it activates (by name, one sentence why)
  • What it does well and what it sacrifices

Label one as Recommended, one as Alternative, optionally a third as Dark horse. Ask which feels right.

Step 3e: Platform Guidance

Ask: "Where will this be published?" (Medium, Substack, LinkedIn article, personal blog, not sure)

Give platform-specific guidance:

  • Medium: 1000-1500 words. Strong opening line (no heading). Subheadings every 200-300 words. Lists and pull quotes break up text. Kicker line at the end.
  • Substack: 1200-2000 words. More personal, more room to breathe. Readers expect depth. Opening can be slower. Footnotes and asides work well.
  • LinkedIn article: 800-1200 words. Professional but not corporate. Short paragraphs (2-3 sentences). Bold key phrases. End with a question to drive comments.
  • Personal blog: Flexible length. Match existing blog voice and structure. Ask about typical post length if unknown.
  • Not sure: Default to 1200 words, clean structure that adapts to any platform.

Creative Brief Tone

  • Have opinions. Say which hook you'd pick and why. Let the user override.
  • Build on answers. Reference what they said in 3a when asking 3b.
  • Ask one or two questions at a time. Never all 5 sub-steps at once.
  • Use their words from raw.md and story.md.
  • Be direct about trade-offs.
  • Skip steps when the user already answered.
  • If the user seems eager to see a draft, compress 3b-3e into one turn: "Before I write: any media to embed, what's the CTA, and where is this going?"

Step 4: Build the Article

Map story elements to sections:

  • Hook line from selected hook type -> section 1 (no heading, cold open). First line grabs.
  • transformation.before + openingScene -> section 2 (setup). The "before" world.
  • Turns from story -> sections 3-4 (tension, building). Each turn earns its own section.
  • fiveSecondMoment -> section near the climax (no heading, let the moment land without introduction).
  • transformation.after -> section on the shift. What changed and why.
  • Key insight -> takeaway section. What this means beyond the story.
  • theQuestion -> CTA (closing question, no heading). End with a genuine question.

Write the full article prose, not just an outline. Use Voice.md to match the user's style. Pull language from raw.md and story.md.

Section Rules

  • Hook opens cold. No heading. First line grabs. The hook type determines the opening move.
  • Headings are optional. Some beats land harder without a heading (hook, 5-second moment, CTA). Use heading: "" to indicate no heading.
  • Word targets guide pacing. Setup needs room (150-250 words). The 5-second moment should be short and sharp (80-150 words). CTA is brief (50-100 words).
  • Total word count: 800-2000 words depending on story complexity. Default ~1200.
  • The article IS the story. Not a summary, not a listicle. It uses the narrative arc from craft-content, adapted to long-form.
  • Use the user's words. Pull language from raw.md and story.md. The article should sound like them, not like a content mill.
  • Subheadings create breathing room. But don't over-section. 4-6 headings for a 1200-word piece.
  • No thesis statement up front. The reader discovers the point through the story.
  • Apply humanizer rules to all prose.

Step 5: Present and Edit

Show the full article with frontmatter. Then ask: "Read through it. What do you want to change?"

Options the user can request:

  • Edit specific sections
  • Rewrite a section from scratch
  • Rethink the structure
  • Change the hook
  • Tighten or expand word count
  • Approve as-is

Loop until the user approves.

Step 6: Save Article

Write {stories}/{slug}/article-{hook}-{slug}-{YYYY-MM-DD}.md (e.g., article-curiosity-gap-why-we-rebuilt-onboarding-2026-03-01.md) with this format:

---
title: "Why Your AI Agent Needs Character, Not Just Guardrails"
type: article
status: draft
source: "[[Amplify/Stories/slug/story.md]]"
hook: curiosity-gap
structure: i-used-to-believe
persuasion: [contrast-principle, narrative-transportation]
platform: blog
wordCount: 1200
creativeBrief:
  hookExplored: true
  mediaAssets: []
  cta: "What character traits would you want in your agent?"
  platformTarget: "medium"
sections:
  - id: 1
    beat: hook
    heading: ""
    wordTarget: 80
  - id: 2
    beat: setup
    heading: "The Agent That Passed Every Test"
    wordTarget: 200
  - id: 3
    beat: tension
    heading: "Then Someone Asked the Wrong Question"
    wordTarget: 250
  - id: 4
    beat: five-second-moment
    heading: ""
    wordTarget: 150
  - id: 5
    beat: transformation
    heading: "Character vs Compliance"
    wordTarget: 200
  - id: 6
    beat: takeaway
    heading: "What This Means for Anyone Building Agents"
    wordTarget: 200
  - id: 7
    beat: cta
    heading: ""
    wordTarget: 100
---

Every team tracks velocity. Almost none track whether it mattered. That gap cost us two quarters.

## The Sprint That Hit Every Target

Two quarters ago we shipped every ticket on the board...

## Then Someone Asked the Wrong Question

...

It didn't refuse. It didn't deflect. It said: "I don't think that's who I want to be."

...

## Character vs Compliance

...

## What This Means for Anyone Building Agents

...

What character traits would you want in your agent? I'm genuinely asking.

After saving, emit an article_created signal to {vaultPath}/{paths.signals}/signals.json:

{
  "id": "sig-[timestamp]-[random6hex]",
  "type": "article_created",
  "timestamp": "[ISO timestamp]",
  "data": {
    "slug": "[story-slug]",
    "storySource": "[[Amplify/Stories/slug/story.md]]",
    "hook": "[hook-type]",
    "structure": "[structure-name]",
    "platform": "blog",
    "wordCount": 1200
  }
}

Log to session memory at {vaultPath}/{paths.memory}/sessions/YYYY-MM-DD.md:

- **HH:MM** — article_created: Wrote [N]-word article for "[title]" (blog)

Step 7: Hand Off

Report what was saved:

Article saved: {stories}/{slug}/article-{hook}-{slug}-{date}.md
  Sections: {N} ({headingCount} with headings, {noHeadingCount} cold)
  Word count: ~{wordCount}
  Platform: blog

Where to publish:
- Medium: paste as-is, add a cover image
- Substack: paste as-is, the headings translate well
- LinkedIn article: paste the body, use the title as headline
- Personal blog: drop the markdown file directly

Humanizer

Run a humanizer pass on all article prose. No AI vocabulary (delve, landscape, crucial, leverage, robust, innovative). No filler phrases. Vary sentence length. Be specific. Preserve the user's voice from Voice.md.

The article should sound written by a person with opinions, not assembled by a system. Read each paragraph. If it sounds like a blog post template, rewrite it.

Story Folder Structure

{stories}/{slug}/
  raw.md                                    <- free write + interview (craft-content)
  story.md                                  <- pure narrative (craft-content)
  video-{hook}-{slug}-{date}.md             <- video timeline (draft-video)
  carousel-{hook}-{slug}-{date}.md          <- carousel cards (draft-carousel)
  article-{hook}-{slug}-{date}.md           <- blog post (draft-article)

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.