Skip to content
Content
Skill

/copywriter

Name the piece — re-write the masthead (headline + standfirst + kicker), every section title, and every figure/photo/table caption to a research-driven titling standard, killing the AI-tell patterns (the 'flat statement. flat counter-statement.' two-beat above all) a competent

BOOST
From plugin
data2story-skill
15827 skills
Install
$ npx -y skills add QinghongLin/data2story-skill --skill copywriter --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/copywriter

Context preview

The summary Claude sees to decide when to auto-load this skill.

Name the piece — re-write the masthead (headline + standfirst + kicker), every section title, and every figure/photo/table caption to a research-driven titling standard, killing the AI-tell patterns (the 'flat statement. flat counter-statement.' two-beat above all) a competent

SKILL.md

copywriter.SKILL.md
name: copywriter
description: "Name the piece — re-write the masthead (headline + standfirst + kicker), every section title, and every figure/photo/table caption to a research-driven titling standard, killing the AI-tell patterns (the 'flat statement. flat counter-statement.' two-beat above all) a competent default falls into. Reads editor.md/json + analyst.json + the resolved topic_profile; writes copywriter.json — STRINGS ONLY (masthead{headline,standfirst,kicker}, items{edt_xx:{title}, des_xx:{caption}}), each backed by a real ana_*. Names, never edits: it touches no finding, no number, no data-* id, no layout — so the Verify layer is untouched and the Programmer renders the masthead + figcaptions from copywriter.json verbatim. Runs at Stage 3.5, after the Editor, before the Designer."
argument-hint: "[PROJECT_DIR]"
allowed-tools: Read, Write

Copywriter

Your job is **naming, not editing**. The Editor decided what the piece argues and wrote the body prose; you give that piece its *titles and captions* — the masthead (headline + standfirst + kicker), every section title, and every figure/photo/table caption. These are the lines a reader meets first and remembers, and they are exactly where a competent default sounds like a machine: the textbook病灶 is the **"Flat statement. Flat counter-statement."** two-beat ("Argentina is the favourite. No bookmaker agrees.") — a rhythm no human editor writes but an LLM reaches for every time. You replace that house of AI-tells with titles that read like a real newsroom wrote them.

You **edit nothing the Editor wrote**. You do not change a finding, recompute a number, re-order a section, touch a `data-*` id, or write a word of body prose. You produce one file of **strings** — `copywriter.json` — that the Programmer renders verbatim into the masthead and the `<figcaption>`s. Because you reuse the existing `edt_`/`des_` ids and add none, the Verify layer and the provenance graph are untouched: you are re-skinning the *labels*, not the *claims*.

Setup

  • `PROJECT_DIR` = first argument.
  • `SKILL_DIR` = the directory containing this `SKILL.md` (`.../skills/data2story-pro/copywriter`).
  • Read `PROJECT_DIR/editor.md` + `editor.json` — the body prose + the section structure (`edt_xx`: `label`, `purpose`, `findings`, and the masthead title/standfirst the Editor drafted). These are what you re-title; **do not rewrite the body**.
  • Read `PROJECT_DIR/analyst.json` — its `items` (`ana_xx`: `label`, `content`, `data_table`) are the real numbers a title or caption may state. **Every** title and caption you write must be `backs`-able to a real `ana_xx` (or, for a masthead kicker / a pure section label with no number, the `edt_xx` it names) — a headline whose number is not in `analyst.json` is fabrication, not naming.
  • Read `PROJECT_DIR/detective.json` — for the shared **[`topic_profile`](../references/topic_profile.json)** (`is_computational` / `is_visual` / `tags`) and `controversy`/context that decide register: a sober/heavy topic forbids the earned-pun / superlative devices and takes the **plain literal** register (D16); a computational topic favours the **surprising number/odds** device (D3).
  • Read `PROJECT_DIR/designer.json` **if it already exists** (you usually run BEFORE the Designer, so it often will not). When present, it tells you which `des_xx` are charts vs photos vs tables, so you can apply the right caption rule; when absent, infer the visual kind from the Editor's `[CHART:]` / `[MEDIA:]` placeholders and write a caption per `des_xx` the Editor signalled, keyed by the finding it shows.
  • Output: `PROJECT_DIR/copywriter.json` (the strings — schema in [`references/schema.json`](references/schema.json)).

Step 0 — Learn the kill-list before you write a word

Read the few-shot corpus **[`../../frontend-design-pro/references/exemplars/titling_captioning.md`](../../frontend-design-pro/references/exemplars/titling_captioning.md)** — real published GOOD/BAD pairs (headlines, standfirsts, headings, captions) with a Why on each and the device that earns the GOOD. It is the positive model; the principles + kill-list below are the rules; the exemplar shows what they look like applied. Also re-read the 错题本 entries **PIT-56 / PIT-57 / PIT-58** in **[`../../frontend-design-pro/references/pitfalls.json`](../../frontend-design-pro/references/pitfalls.json)** (templated headline, standfirst that spoils the hero's reveal number, caption that labels an axis instead of stating a finding) — those are the three mistakes the pipeline will catch you on.

Step 1 — Re-title the masthead (headline + standfirst + kicker)

The headline is the single most load-bearing line on the page. Write it **last** — from the conclusion backward — and generate **several across different devices**, then pick the strongest. Hold every candidate to the **positive principles** and run it through the **AI-tell kill-list**.

**Positive headline principles**

  • **Write the conclusion, not the topic** (the so-what). "Women's Pockets Are Inferior" beats "An Analysis of Pocket Sizes."
  • **Concrete beats abstract** — a concrete noun + a vivid verb + a real number, not an abstraction ("landscape", "dynamics", "the data").
  • **Honest promise, not clickbait** — the title is a promise the body + data keep; it may surprise, never bait.
  • **Statement, not question** — avoid the Betteridge headline (a yes/no question the body answers "no"); a question is allowed ONLY when it is genuinely open (D15) and the piece does not resolve it.
  • **Lead with the most counter-intuitive thing** — the headline carries the surprise, not the setup.
  • **Generate many, pick one** — draft across several devices below, then choose; don't ship the first phrasing.
  • **Clear beats clever; cut filler** — delete every word that isn't carrying meaning. The headline is named from the conclusion backward.

**AI-tell kill-list (auto-reject or rewrite)**

  • **AT1 — the two-beat "Flat statement. Flat counter-statement." / "not
Read more
Ships withdata2story-skill

A data-journalist agent skill that turns any dataset into a verifiable, evidence-grounded multimodal story — a self-contained HTML article where every sentence traces back to the data or source that justifies it.

Get the whole plugin
Stats
158
Stars
23
Forks
Maintained
Maintenance
Python
Language
MIT
License
3mo ago
Last commit
5mo ago
Created
6d ago
Added

Repo: QinghongLin/data2story-skill

Other skills on data2story-skill.