From newsroom-os
The campaign DESIGN engine of an installed newsroom — it takes a campaign the Managing Editor has already WARRANTED and designs it completely in ONE pass, forcing every dimension up front (shape, track structure & depth, per-piece audience job-to-be-done, source grounding, channel strategy, asset ladder, cadence, first-wave commission scaffold) instead of discovering missing dimensions one turn at a time. It emits a PROPOSED campaign master (Brief + Plan, source-grounded track backlog inline) at the not-yet-greenlit lifecycle state plus first-wave commission stubs, for the ME to review and the human to greenlight. It reads the running newsroom's OWN schema + reference docs and matches them — campaign shape, channels, and lifecycle vocabulary are never hardcoded. A Detection mode scans the corpus to SURFACE candidates for the ME's warrant test. Use when the user says "design the X campaign", "build out this campaign", "plan the <theme> program", "turn this cluster into a campaign", "scope the tracks/backlog for <campaign>", "campaign strategist", or (Detection) "scan for campaign candidates", "any campaign-shaped moments brewing?". Negative triggers: it does NOT decide the warrant (ME + human own that), write final commissions (stubs only), produce channel-native drafts (marketing handoff), or write per-article CCF briefs (content-strategist does, from the stubs), and NEVER sets active/greenlit/published or commits canonical state — it proposes, the ME commits.
How this skill is triggered — by the user, by Claude, or both
Slash command
/newsroom-os:newsroom-campaign-strategistThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
The **campaign design engine** of the newsroom. Given a campaign the Managing
README.mdreferences/boundaries-and-handoff.mdreferences/corpus-aggregation.mdreferences/craft-lenses.mdreferences/design-framework.mdreferences/design-self-check.mdreferences/plan-schemas.mdreferences/visualization-handoff.mdtemplates/campaign-brief-plan.mdtemplates/commission-stub.mdtemplates/plan-report.mdThe campaign design engine of the newsroom. Given a campaign the Managing Editor (ME) has warranted, it runs one forced design pass over nine dimensions and emits a proposed campaign master (Brief + Plan, with the source-grounded track backlog inline) plus first-wave commission stubs — ready for the ME to review and the human to greenlight.
It exists because designing the first real campaign — the AI-Fluency 4D program — took four iterative passes, each surfacing a dimension the previous one missed (4 articles → 4 tracks → genuinely multi-channel → downloadable capstone). This skill collapses that to one pass by forcing every dimension up front.
It is a skill, not a CLI: all intelligence is the agent reading the newsroom's corpus and reference docs and making editorial judgments. There are no scripts and no scoring algorithm. Like the ME, its name is load-bearing — it is a strategist, not a commissioner or publisher: it designs and proposes; the ME reviews and commits, the human greenlights.
This skill operates inside an installed newsroom directory. The ME or the user tells it what to do. If the directive or the newsroom's own references are missing or ambiguous, it asks — "what am I supposed to do?" / "where is your campaign schema?" / "is this candidate warranted?" — rather than guessing a default or inventing canon (this is one behaviour, not a contract system).
It supposes:
This skill hard-codes no paths and no field names. It serves two materialised newsrooms with different conventions, and it bridges them the way a freelancer matches one example you hand them — read this install's own references, then conform to them.
Before designing, locate and read the running newsroom's:
Two known conventions you will encounter (read which one THIS install uses — do not assume):
Live evonomics-newsletter vault (original) | Portable newsroom-os install (R61-clean) | |
|---|---|---|
| Campaign path | Campaigns/<id>.md | newsroom/campaigns/<slug>.md |
| Campaign lifecycle field | status: carries planned|active|… | campaign_state: carries it; status: is RESERVED |
| Arc lifecycle field | status: | arc_state:; status: RESERVED |
| Commission path | Processing/Commissions/<id>.md | newsroom/commissions/<id>.md |
| Reference home | Concept/References/campaigns/ | bundled substrate schemas / install refs |
The one hard schema rule on top of "match the local refs": in an R61-clean install, never write a campaign-lifecycle value into the reserved
status:field — lifecycle goes tocampaign_state:(arcs →arc_state:). Follow the install's schema; do not re-purpose the reserved enum on your own initiative. In the pre-R61 live vault, the install's own schema usesstatus:for lifecycle and you follow that. The template stubs (templates/campaign-brief-plan.md,templates/commission-stub.md) carry both conventions side by side — pick the one the install uses.
If the newsroom carries a MANIFEST.md (or its install-specific index, e.g. the
live vault's Meta/campaign-index), read it first to discover which
dossiers, arcs, campaigns, and editions exist and where they live — then open the
zone folders only to resolve the concrete files it points at. Globbing a zone to
learn what exists is the refused anti-pattern. If the install has no manifest,
follow the explicit links from the candidate and the dossiers it names.
| Mode | Name | When | Output | Writes canonical state? |
|---|---|---|---|---|
| 1 | Design (core) | ME/human invokes after a candidate is warranted | Proposed campaign master + first-wave commission stubs (+ optional arc proposals / plan-report) | No — proposal only |
| 0 | Detection | scheduled / ad-hoc scan request | A surfaced list of campaign candidates for the ME's warrant test | No — surfaces only |
Re-plan, status/coverage/orphan, and retrospective reporting are a later phase — not built in this version. If asked for one, say so and offer the Design or Detection mode instead.
Walk all nine dimensions, in order. For each, record an explicit decision on the proposed master. An explicit "n/a / single-piece" is a valid decision — the point is that no dimension is ever silently skipped. A dimension you genuinely cannot answer from the corpus becomes a stated open question on the artifact, not an omission.
The per-dimension fork-tests and worked detail live in references/design-framework.md — read it before designing. Optional craft lenses — named mental models that sharpen each dimension's hard decisions — live in references/craft-lenses.md; reach for them when a dimension is genuinely hard, never as an extra checklist. In summary:
Supporting reasoning — corpus aggregation. Gather the linked dossiers / arcs / wire (one hop, never crawl) → dedupe (same source = one cluster) → theme-cluster → scope-from-source (a weak cluster can't justify a part; if it ALL supports one artifact → recommend a single commission, not a campaign). This is AI judgment over the corpus, not an algorithm. Full pipeline: references/corpus-aggregation.md.
Campaigns/<id>.md (or the install's
equivalent path) — born at the not-yet-greenlit lifecycle state
(status: planned in the live vault; campaign_state: planned with a reserved
status: in an R61 install). Stable filename — NO -proposed suffix (the
Warrant doc forbids renaming on approval; the lifecycle field carries the state).
Body: Brief (Strategic intent; Audience; Key messages as 3–5 claims;
Success criteria) + Plan (optional Hero / Supporting deliverables; required
Calendar, Dependencies, Reserved material), with all nine
dimensions resolved and the source-grounded track backlog inline in the
Plan. Template: templates/campaign-brief-plan.md.<stem>.calendar.csv, <stem>.backlog.csv) for marketing-manager import. A
richer visual (timeline, channel matrix, asset ladder) is rendered by the
data-visualization presenter as a co-located HTML sibling — the strategist
emits render-ready artifacts; the orchestrator invokes the presenter; this skill
never renders HTML itself (composable, R63). See
references/visualization-handoff.md.After emitting, run the advisory self-check
(references/design-self-check.md) and surface
its read to the ME — then hand back and pause. Do not advance the pipeline,
do not set any lifecycle beyond planned, do not write cache fields.
On a scheduled or ad-hoc scan request, walk the dossier corpus + recent wire activity (following the install's own consideration triggers — theme convergence, an approaching external event, a multi-part dossier, a strategic quarter-theme) and surface candidate moments for the ME to run the warrant test on. Detection surfaces; it never warrants and never auto-advances to design. It follows the install's own conventions like everything else — read its Warrant doc for the consideration triggers; do not hardcode "3 wires in 7 days" or any numeric rule.
A surfaced candidate names: the theme, the dossiers it would draw from, the forcing signals (with wire refs), and why it might clear the warrant — explicitly flagged as "for the ME's warrant test," not "warranted."
This skill classifies and assesses by AI reasoning over the newsroom's references as a rubric — there is no Python/JS validator, no scoring function, no PASS/FAIL gate. The design self-check (references/design-self-check.md) is an advisory checklist the agent reasons through and surfaces to the ME, never a linter that exits on a finding. The optional craft lenses (references/craft-lenses.md) are bound by this same rule — named mental models you reason through, never scores, sums, or gates; the source books' "rate it 0–10" instruments are deliberately stripped out.
If you label evidence strength on a backlog item (evidence_strength: strong | adequate | weak), it is an R68 interpreted instrument shipped with
a written interpretation — it explains why a cluster is weak and what would
strengthen it; it is never an auto-reject and never composes into a gate. Shape
selection, track-depth, the warrant, and "campaign vs single commission" are
editorial judgments the human arbitrates, not thresholds the skill enforces.
This is the front edge of the human checkpoint. Full boundary + handoff edge: references/boundaries-and-handoff.md. The catastrophic invariants:
planned). It
NEVER sets active / greenlit / published, NEVER drops a filename suffix,
NEVER commits the planned → active transition (the ME does, on the human's
greenlight).commissions, the arc-side
reservation.*, is_archive_ready, archive_blockers. It may flag suspected
drift, never hand-edit a cache.content-strategist writes the per-article CCF brief from the
stub; this skill works one level up, at campaign granularity.ME warrant test (PASS) → ME/orchestrator invokes the strategist (Mode 1)
→ strategist runs the nine-dimension pass; drafts the PROPOSED campaign master
at status/campaign_state: planned + first-wave commission stubs (+ optional
arc proposals / plan-report); runs the advisory self-check
→ hands back to ME (sets no lifecycle beyond planned; writes no cache fields)
→ ME reviews (editorial fit + relevance lens) → human greenlights
→ ME commits the planned → active transition + decision_history.
The proposal is surfaced, not enacted. Present the proposed master + the self-check read + the open questions, then pause for the ME/human. Do not push back beyond presenting the design once.
| Condition | Action |
|---|---|
| Directive unclear / no warranted candidate named | ASK the ME what to design; do not guess a theme |
| Newsroom references missing or ambiguous (no campaign schema / Warrant doc found) | ASK "where is your campaign schema / Warrant doc?"; do not invent canon |
| Warrant unmet (no dossier anchor / not bounded / single-commission) | STOP; route back to the ME with the specific gap; do NOT draft a campaign |
| No mature dossier under the moment | Fail closed; recommend opening/maturing a dossier first (unless the human overrides with a recorded reason) |
| Corpus all supports ONE publishable artifact | Recommend a single commission, not a campaign (scope-from-source) |
| Too much source material | Cluster, dedupe, rank — do NOT create one piece per source |
| A track has no real depth (one job, one cluster) | Keep it a single piece in the line; do not manufacture a track |
| A planned channel has no production path | Keep it in the asset ladder as a future-build item; flag it; do not put it in the Calendar as live |
| Lead magnet / downloadable with no grounding or production path | Keep it as a capstone future-build item; never the first brick, never an unsupported Calendar row |
Suspected cache-field drift (commissions, arc reservation) | Flag it for the ME / graph-audit; never hand-edit the cache |
-proposed suffix).status: field in an R61
install (lifecycle → campaign_state:).active/greenlit/published, never finalizes commissions, never
produces channel drafts, never creates dossiers, never hand-edits a cache field;
always pauses for the ME/human (P8 / R25).references/plan-schemas.md layout + two co-located CSV
sidecars (<stem>.calendar.csv, <stem>.backlog.csv); the richer visual is the
data-visualization presenter's co-located HTML sibling, never rendered by this
skill (composable; R63). Schema columns are layout, not scoring (R32); the plan
tables are editorial communication, not marketing assets (R52).Human-facing output language is config-driven, never hardcoded — write the proposed master, the commission stubs, the arc proposals, and the plan-report in the install's declared output language (the company-context language declaration). Respond to the user in the conversation's language unless asked otherwise.
output_language; translate
internal section headings naturally — do not force English headings into a
non-English campaign master.campaign_state, shape,
target_channels, part_state, evidence_strength) regardless of content
language.A standard run ends normally: the proposed campaign master + first-wave commission stubs (+ any arc proposals / plan-report), the advisory self-check read, and the open questions surfaced for the ME/human — then a pause. Do not fire a generic "anything to add?" prompt.
When a deviation specific to campaign design occurred during the run, surface
it and ask whether to fold the change back into SKILL.md or the bundled
references (the design framework, the craft lenses, the plan schemas, the
visualization handoff, the corpus-aggregation workflow, the design self-check,
the boundaries doc, or the templates) before going idle.
Campaign-design-specific triggers:
Name the concrete artifact and the reference doc the fix would touch. If nothing deviated, end without the prompt.
npx claudepluginhub cmgramse/skill-development --plugin newsroom-osGenerates brand assets: logos (55+ styles, Gemini AI), CIP mockups, HTML slides (Chart.js), banners (22 styles), SVG icons (15 styles), and social media photos. Routes to sub-skills for design tokens and UI styling.