Data Storyline Miner
The corpus is the content engine. This internal marketing skill sweeps the
market-intelligence surface across verticals, deal types, and recency windows
looking for contrasts a reader would stop scrolling for — "Beauty deal volume
is up but median value is down", "Affiliate is eating flat-fee in Fitness" —
and drafts publishable newsletter and LinkedIn copy from them, every claim
shipping with its provenance line so the post is defensible the moment it goes
out. It is top-of-funnel sourced from our own data; the artifact is a ranked
shortlist of candidate stories plus ready-to-paste drafts. For a single
vertical's leadership memo use vertical-briefing; for movement-over-time use
vertical-forecast-brief.
Read first: ${CLAUDE_PLUGIN_ROOT}/shared/conventions.md (tool schemas, credit
prices, the conventions). This skill honors thrifty/thorough credit modes
(${CLAUDE_PLUGIN_ROOT}/shared/credit-modes.md) and Refusal Recovery
(${CLAUDE_PLUGIN_ROOT}/shared/refusal-recovery.md). No creator lists are
produced, so the Freshness Gate does not fire; recency comes from the
market-intel responses themselves.
The "trend" constraint (read this before drafting)
There is no historical time-series tool. A genuine "up / down / rising"
story therefore needs two measured points. This skill gets them one of two ways
only:
- Cross-sectional contrast (default, no persistence needed): the contrast
is between two slices measured in the SAME run — vertical A vs vertical B,
deal type X vs deal type Y, or a recency window vs the all-time slice of the
same vertical. This is an honest "as of now" comparison, never a claim about
change over time.
- Snapshot delta (only if a prior snapshot exists): if the workspace holds
a prior storyline snapshot for the same slice, a true over-time delta can be
computed and stated as such. With no prior snapshot, over-time language is
banned — the story is framed cross-sectionally or not at all.
Never write "up since last quarter / trending / on the rise" unless a stored
prior snapshot backs it. A within-run contrast is phrased as a contrast
("Beauty's median sits below Fitness's", "this window is quieter than the
vertical's all-time rate"), not as motion.
Inputs to collect
- Verticals to sweep (default: a standard set of the densest corpus
verticals, e.g. Beauty, Fitness, Fashion, Food, Tech/Gaming — confirm once).
More verticals = more calls; warn on cost in thorough mode.
- Angle (optional) — "pricing", "deal-type mix", "where's the momentum".
Shapes which cuts to pull; default is a broad sweep across all three.
- Channel (default: both) —
newsletter, linkedin, or both. Sets draft
length and voice, not the data.
- Snapshot store location (optional) — workspace path where storyline
snapshots live (default
storyline-snapshots/<slice>.json). Only needed if
the user wants over-time deltas; absent it, the skill runs cross-sectional.
- Mode — default
thorough; thrifty on request.
If this is a recurring content run, reuse prior inputs without re-asking and
offer to schedule it via the harness's scheduling facility if one exists.
Flow
All market-intel calls are wrapped in Refusal Recovery (market floor
5 brands / 25 deals; rate floor 10 brands / 50 deals). 5 credits each,
including each ladder retry. A thin slice that refuses is itself a finding
("we don't yet have floor-clearing volume in ") — it never becomes a
fabricated number, and a refused slice is simply not eligible to anchor a story.
Per-vertical landscape — for each vertical in the sweep:
query_market_intelligence { mode: "market", vertical: <v> }
-> deal counts, deal-type mix, company-type spread.
Per-vertical pricing — for each vertical:
{ mode: "rate", vertical: <v> } -> p25 / median / p75 band. Optionally add
creator_tier (emerging <1k / nano 1k-10k / micro 10k-100k / mid 100k-500k / macro 500k-1M / mega 1M+) to mine
a tier-specific contrast (e.g. "micro Beauty median up, macro flat"); omit
it (the default) for the vertical-wide band, and never diff a tiered band
against a vertical-wide one in the same story.
Recency slice (thorough) — for each vertical:
{ mode: "market", vertical: <v>, active_since: "<recent window start>" }
-> how active the vertical has been lately, for "where's the momentum"
angles. Ladder by widening the window if it refuses; label the section with
the window that actually cleared.
Snapshot I/O (only if over-time deltas requested) — read any prior
snapshot for each slice before drafting; write this run's aggregates +
clearance levels + run date after. Free (workspace I/O, 0 credits). A metric
that cleared at a different level than last run is not comparable — flag
it, don't diff across scopes.
Mine contrasts (no tool calls) — scan the assembled aggregates for the
sharpest legitimate contrasts: volume vs value divergence, deal-type shift,
one vertical against another, a recency window against the all-time slice.
Rank candidate stories by how surprising AND how floor-clean they are.
Draft (no tool calls) — write the top stories into channel-appropriate
copy with provenance attached.
Pre-run estimate fires before step 1 when the sweep's planned calls exceed
~30 credits (e.g. 5 verticals x 3 calls x 5 = 75 credits -> say so first).
Thrifty: steps 1 + 2 only, fewer verticals, no recency slice, max 2 ladder
rungs anywhere — cross-sectional stories only.
Deliverable
# Data storylines — <date>
*Source: Creatorland deal corpus · sweep: <verticals / cuts covered>*
## Ranked story candidates
1. **<headline contrast>** — <one line: the two slices and the gap>.
Strength: <surprising + floor-clean>. Framing: <cross-sectional / over-time>.
2. ...
<Each candidate names the exact slices compared and whether it is a within-run
contrast or a snapshot-backed delta.>
## Drafts
### Newsletter — "<working title>"
<2-4 short paragraphs. Every stat inline-cited: stat + the provenance line the
tool returned + the recency window. No over-time verb unless snapshot-backed.>
### LinkedIn — "<hook>"
<Hook line + 3-5 short lines + soft CTA. Same citation discipline; provenance
can sit in a closing "source" line rather than inline, but never omitted.>
---
**Benchmark basis:** <clearance level per slice used; floor-disclosure note
where any query was broadened — "a privacy feature of the data source, not
missing data">. Slices that refused are listed here as "below floor — not used
as a story anchor".
**Provenance:** <provenance lines from each response used, verbatim>
· recency windows as noted.
**Framing note:** <if any draft uses over-time language, the prior-snapshot date
that backs it; otherwise "all contrasts are point-in-time / cross-sectional">.
Credits used this run: ~N (breakdown: <calls>x5)
Honesty rules
- Contrast, not motion, by default. With no prior snapshot the story is a
within-run comparison; never dress a cross-sectional gap as a trend. "Up /
rising / since last quarter" requires a stored prior snapshot and says which.
- Refused slices are findings, never anchors. A slice below the privacy
floor is reportable as such; it cannot anchor a story and is never padded to
a number. Disclose it in the benchmark basis.
- Bands are vertical-level market bands (convention 2) — never attached to
a creator, and never implied to be one creator's rate even in a punchy hook.
- Provenance ships with the post. The whole point is defensible content:
every published stat carries its citation, even in LinkedIn copy. Never strip
it for polish (convention 1).
- Clearance level is part of the claim. If a contrast only holds at vertical
level (not sub-category), the copy says so rather than implying sub-category
precision (convention 2).
- No contact info anywhere in drafts (convention 7).
- Interpretation is labeled. A "what this might mean" line is opinion and is
marked as such; the data carries the headline, the read carries the asterisk.
Credit footprint
thorough: ~45-75 credits for a 5-vertical sweep (3 calls/vertical x 5; ladder
retries add 5 each) — pre-run estimate fires · thrifty: ~20 credits (2 calls x
fewer verticals, capped ladder). Snapshot read/write is free (0 credits).
1---2name: data-storyline-miner3description: Internal content skill — sweep query_market_intelligence across verticals and deal types for headline-worthy contrasts ("Beauty deal volume up, median value down"), then draft newsletter and LinkedIn posts with provenance baked in. Use when the user says "find a data story", "mine the corpus for content", "storyline miner", "what's a LinkedIn post from our data", or wants top-of-funnel content sourced from the corpus itself. Deliverable is a ranked story list plus ready-to-publish drafts, each carrying its citation. For a single vertical's leadership memo use vertical-briefing; for tracked deltas use vertical-forecast-brief.4---56# Data Storyline Miner78The corpus is the content engine. This internal marketing skill sweeps the9market-intelligence surface across verticals, deal types, and recency windows10looking for contrasts a reader would stop scrolling for — "Beauty deal volume11is up but median value is down", "Affiliate is eating flat-fee in Fitness" —12and drafts publishable newsletter and LinkedIn copy from them, every claim13shipping with its provenance line so the post is defensible the moment it goes14out. It is top-of-funnel sourced from our own data; the artifact is a ranked15shortlist of candidate stories plus ready-to-paste drafts. For a single16vertical's leadership memo use `vertical-briefing`; for movement-over-time use17`vertical-forecast-brief`.1819Read first: ${CLAUDE_PLUGIN_ROOT}/shared/conventions.md (tool schemas, credit20prices, the conventions). This skill honors thrifty/thorough credit modes21(${CLAUDE_PLUGIN_ROOT}/shared/credit-modes.md) and Refusal Recovery22(${CLAUDE_PLUGIN_ROOT}/shared/refusal-recovery.md). No creator lists are23produced, so the Freshness Gate does not fire; recency comes from the24market-intel responses themselves.2526## The "trend" constraint (read this before drafting)2728There is **no historical time-series tool**. A genuine "up / down / rising"29story therefore needs two measured points. This skill gets them one of two ways30only:3132- **Cross-sectional contrast** (default, no persistence needed): the contrast33 is between two slices measured in the SAME run — vertical A vs vertical B,34 deal type X vs deal type Y, or a recency window vs the all-time slice of the35 same vertical. This is an honest "as of now" comparison, never a claim about36 change over time.37- **Snapshot delta** (only if a prior snapshot exists): if the workspace holds38 a prior storyline snapshot for the same slice, a true over-time delta can be39 computed and stated as such. With no prior snapshot, over-time language is40 banned — the story is framed cross-sectionally or not at all.4142Never write "up since last quarter / trending / on the rise" unless a stored43prior snapshot backs it. A within-run contrast is phrased as a contrast44("Beauty's median sits below Fitness's", "this window is quieter than the45vertical's all-time rate"), not as motion.4647## Inputs to collect4849- **Verticals to sweep** (default: a standard set of the densest corpus50 verticals, e.g. Beauty, Fitness, Fashion, Food, Tech/Gaming — confirm once).51 More verticals = more calls; warn on cost in thorough mode.52- **Angle** (optional) — "pricing", "deal-type mix", "where's the momentum".53 Shapes which cuts to pull; default is a broad sweep across all three.54- **Channel** (default: both) — `newsletter`, `linkedin`, or both. Sets draft55 length and voice, not the data.56- **Snapshot store location** (optional) — workspace path where storyline57 snapshots live (default `storyline-snapshots/<slice>.json`). Only needed if58 the user wants over-time deltas; absent it, the skill runs cross-sectional.59- **Mode** — default `thorough`; `thrifty` on request.6061If this is a recurring content run, reuse prior inputs without re-asking and62offer to schedule it via the harness's scheduling facility if one exists.6364## Flow6566All market-intel calls are **wrapped in Refusal Recovery** (market floor675 brands / 25 deals; rate floor 10 brands / 50 deals). 5 credits each,68including each ladder retry. A thin slice that refuses is itself a finding69("we don't yet have floor-clearing volume in <slice>") — it never becomes a70fabricated number, and a refused slice is simply not eligible to anchor a story.71721. **Per-vertical landscape** — for each vertical in the sweep:73 `query_market_intelligence` `{ mode: "market", vertical: <v> }`74 -> deal counts, deal-type mix, company-type spread.75762. **Per-vertical pricing** — for each vertical:77 `{ mode: "rate", vertical: <v> }` -> p25 / median / p75 band. Optionally add78 `creator_tier` (emerging <1k / nano 1k-10k / micro 10k-100k / mid 100k-500k / macro 500k-1M / mega 1M+) to mine79 a tier-specific contrast (e.g. "micro Beauty median up, macro flat"); omit80 it (the default) for the vertical-wide band, and never diff a tiered band81 against a vertical-wide one in the same story.82833. **Recency slice (thorough)** — for each vertical:84 `{ mode: "market", vertical: <v>, active_since: "<recent window start>" }`85 -> how active the vertical has been lately, for "where's the momentum"86 angles. Ladder by widening the window if it refuses; label the section with87 the window that actually cleared.88894. **Snapshot I/O (only if over-time deltas requested)** — read any prior90 snapshot for each slice before drafting; write this run's aggregates +91 clearance levels + run date after. Free (workspace I/O, 0 credits). A metric92 that cleared at a different level than last run is **not comparable** — flag93 it, don't diff across scopes.94955. **Mine contrasts** (no tool calls) — scan the assembled aggregates for the96 sharpest legitimate contrasts: volume vs value divergence, deal-type shift,97 one vertical against another, a recency window against the all-time slice.98 Rank candidate stories by how surprising AND how floor-clean they are.991006. **Draft** (no tool calls) — write the top stories into channel-appropriate101 copy with provenance attached.102103Pre-run estimate fires before step 1 when the sweep's planned calls exceed104~30 credits (e.g. 5 verticals x 3 calls x 5 = 75 credits -> say so first).105106Thrifty: steps 1 + 2 only, fewer verticals, no recency slice, max 2 ladder107rungs anywhere — cross-sectional stories only.108109## Deliverable110111```markdown112# Data storylines — <date>113*Source: Creatorland deal corpus · sweep: <verticals / cuts covered>*114115## Ranked story candidates1161. **<headline contrast>** — <one line: the two slices and the gap>.117 Strength: <surprising + floor-clean>. Framing: <cross-sectional / over-time>.1182. ...119<Each candidate names the exact slices compared and whether it is a within-run120contrast or a snapshot-backed delta.>121122## Drafts123124### Newsletter — "<working title>"125<2-4 short paragraphs. Every stat inline-cited: stat + the provenance line the126tool returned + the recency window. No over-time verb unless snapshot-backed.>127128### LinkedIn — "<hook>"129<Hook line + 3-5 short lines + soft CTA. Same citation discipline; provenance130can sit in a closing "source" line rather than inline, but never omitted.>131132---133**Benchmark basis:** <clearance level per slice used; floor-disclosure note134where any query was broadened — "a privacy feature of the data source, not135missing data">. Slices that refused are listed here as "below floor — not used136as a story anchor".137**Provenance:** <provenance lines from each response used, verbatim>138· recency windows as noted.139**Framing note:** <if any draft uses over-time language, the prior-snapshot date140that backs it; otherwise "all contrasts are point-in-time / cross-sectional">.141Credits used this run: ~N (breakdown: <calls>x5)142```143144## Honesty rules145146- **Contrast, not motion, by default.** With no prior snapshot the story is a147 within-run comparison; never dress a cross-sectional gap as a trend. "Up /148 rising / since last quarter" requires a stored prior snapshot and says which.149- **Refused slices are findings, never anchors.** A slice below the privacy150 floor is reportable as such; it cannot anchor a story and is never padded to151 a number. Disclose it in the benchmark basis.152- **Bands are vertical-level market bands** (convention 2) — never attached to153 a creator, and never implied to be one creator's rate even in a punchy hook.154- **Provenance ships with the post.** The whole point is defensible content:155 every published stat carries its citation, even in LinkedIn copy. Never strip156 it for polish (convention 1).157- **Clearance level is part of the claim.** If a contrast only holds at vertical158 level (not sub-category), the copy says so rather than implying sub-category159 precision (convention 2).160- **No contact info** anywhere in drafts (convention 7).161- **Interpretation is labeled.** A "what this might mean" line is opinion and is162 marked as such; the data carries the headline, the read carries the asterisk.163164## Credit footprint165166thorough: ~45-75 credits for a 5-vertical sweep (3 calls/vertical x 5; ladder167retries add 5 each) — pre-run estimate fires · thrifty: ~20 credits (2 calls x168fewer verticals, capped ladder). Snapshot read/write is free (0 credits).