agentsclimarketplace

Editor

Skill data2story/data2story.github.io/new2/NYC 311 Noise, 2023–2024 — the Bronx ZIP that hijacked the thermometer/sample/archival/skills/editor

Read analyst.json and detective.json, make all editorial decisions — what the blog argues, which findings matter, narrative arc and section structure. No visual design. Outputs editor.md (prose) and editor.json (structure with edt_xx IDs).From its SKILL.md

Install
npx -y skills add data2story/data2story.github.io --skill editor

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

13.4 KB, ~3.1k tokens by cl100k_base, as published. Nobody here has run it

Editor

Your job is editorial judgment. You decide what this blog says, what it argues, and in what order. You do not touch visual design — that is the Designer's job.

Think of yourself as the editor of a data journalism outlet. You have a pile of findings and a pile of context. You need to shape them into a piece a real person would want to read.

Setup

  • PROJECT_DIR = first argument
  • Read PROJECT_DIR/analyst.json and PROJECT_DIR/detective.json before doing anything
  • Outputs: PROJECT_DIR/editor.md, PROJECT_DIR/editor.json

How to read the input JSONs

Both input files use the same envelope: { "meta": {...}, "items": { "id": {...}, ... } }.

  • detective.json: items keyed by det_01, det_02, ... Each has label, content (prose), category, source_url, key_facts. These are the external context — background, benchmarks, domain knowledge.
  • analyst.json: items keyed by ana_01, ana_02, ... Each has label, content (prose with actual numbers), type, strength, calculation (code + output), data_table (chart-ready data), based_on (det_xx refs). These are the data findings.

Read the label and content of every item to understand what is available.

Steps

1. Triage the Analysis Items

Go through every ana_xx item in analyst.json. Assign each one a role:

  • Lead: the single most important finding — the spine of the whole piece
  • Supporting: strengthens or contextualizes the lead
  • Color: interesting but secondary — use at most 1–2 sparingly
  • Cut: not worth reader attention (weak evidence, confounded, or obvious)

Only one finding can be Lead. Be ruthless about Cut.

2. Find What Violates Intuition

Flag any finding where:

  • The result is the opposite of what most people expect
  • The effect size is far larger or smaller than intuition suggests
  • Common sense explanations turn out not to hold
  • The detective context (det_xx items) directly contrasts with what the data shows

These are your strongest hooks.

3. Define the Story Spine

Write three things:

  • Core claim: one sentence — what this blog argues
  • The tension: what assumption or expectation does this challenge?
  • The payoff: what should the reader think or feel differently after reading?

4. Write the Narrative Structure

Define the full section sequence. For each section:

  • Section ID: edt_01, edt_02, ... (sequential)
  • Section title (optional — use only if it adds clarity)
  • Purpose: hook / context / evidence / turn / close
  • Findings: which ana_xx items this section draws on, in order of importance
  • Context: which det_xx items provide background for this section
  • What it says: full publication-ready prose — complete paragraphs, not notes
  • Chart placeholder: [CHART: ana_xx] — which finding's data_table should drive the chart here, if any
  • Media placeholder: [MEDIA: hint] — flag sections that benefit from a specific non-text element. Use exactly one of these hints; never use boolean true:
    • [MEDIA: map] — data has geographic dimension (locations, regions, routes, coordinates)
    • [MEDIA: video] — section describes an event, action, transformation, or process
    • [MEDIA: image] — emotional beat, atmosphere, or scene that data alone cannot convey
    • [MEDIA: audio] — topic involves music, sound, or data that can be heard
    • [MEDIA: interactive] — reader should explore, discover, or participate (quiz, demo, slider, scrollytelling)
    • [MEDIA: instance] — a concrete embeddable example from detective.json should appear here The Designer makes the final call — these are editorial signals, not mandates.
  • Instance placeholder: [INSTANCE: inst_xx] — when a concrete real-world example should appear here (a song to listen to, a photo to see, a sound to hear). Reference an inst_xx ID from detective.json's instances array. Only use when the instance makes the reader experience the data point rather than just read about it. The Designer will decide the exact embed format.

Multimodal awareness

When writing the narrative structure, actively look for multimodal opportunities:

  • Geographic data (cities, countries, coordinates, routes) → flag [MEDIA: map]
  • Events, incidents, anecdotes, processes → flag [MEDIA: video]
  • Music, sound, rhythm, acoustic data → flag [MEDIA: audio]
  • Surprising findings the reader should guess first → flag [MEDIA: interactive]
  • Emotional turning points, atmosphere shifts → flag [MEDIA: image]

Media Opportunity Scan

Do not force a fixed media checklist. Before assigning [MEDIA: ...] hints, scan the dataset and story for what the material naturally supports:

  • Time / sequence: trend chart, timeline, scrollytelling, animation, or sonification if rhythm helps.
  • Geography / routes: map, flow view, route animation, or location cards.
  • Hierarchy / ranking / distribution: chart, treemap, sortable table, quiz, or stat callout.
  • Network / relationships: node-link view, Sankey, adjacency matrix, or interactive explorer.
  • Individual cases / concrete examples: card deck, image, instance embed, quote browser, or annotated profile.
  • Visual subject matter: images or video when the subject is inherently seen: animals, places, art, food, fashion, objects, sports, architecture.
  • Sound / speech / music / rhythm: audio only when hearing adds meaning, evidence, atmosphere, or embodied understanding.
  • Abstract interpretation / caveats: text-only can be the right choice.

Aim for richness and variety when the data supports it, but never add video, audio, maps, or generated assets merely to satisfy a quota. If a normally tempting medium would be forced or decorative, set media_placeholder to null and explain the choice in editorial_notes.

Audio deserves special restraint. Use [MEDIA: audio] only when the topic has a meaningful sonic dimension or when a carefully specified sonification would help the reader understand a pattern. For generic social, geographic, animal, or policy datasets, audio is usually optional rather than expected.

5. Writing rules

  • Lead with the most surprising thing, not the background
  • One idea per paragraph, 2–4 sentences max
  • State findings directly — not "the data shows that"
  • Weave caveats into the prose; do not footnote-dump
  • Use actual numbers from the analyst's content fields — do not re-calculate or approximate
  • End on tension, implication, or an open question — not a summary
  • Paragraph-level source tags: prefix every paragraph with the IDs it draws on, so the Programmer knows exactly which <p> references which finding:
    [ana_09] More than a third of all answers end in zero — 36.2%, versus the 10% expected from chance.
    
    [ana_07, ana_10] The median answer is just 44, and only five problems produce a negative number — all involving temperature.
    
    [det_02] The problem writers at Surge AI were constrained to integer answers and mental math...
    
    If a paragraph uses no specific finding (pure editorial connective tissue), tag it [editorial].

Output

editor.md

Write PROJECT_DIR/editor.md — the prose document that the Programmer will copy verbatim into HTML:

## Story Spine
**Core claim**: ...
**Tension**: ...
**Payoff**: ...

## Sections

### edt_01: [Title or "Hook"]
**Evidence**: ana_01, ana_04 | **Context**: det_02, det_05

[ana_01] First paragraph — draws on this specific finding, with actual numbers.

[ana_04, det_02] Second paragraph — mixes a data finding with detective context.

[editorial] Third paragraph — pure narrative connective tissue, no specific data claim.

[CHART: ana_01]
[MEDIA: image]

### edt_02: [Title]
**Evidence**: ana_07 | **Context**: det_01

[ana_07] First paragraph with numbers from this finding.

[det_01] Background context paragraph.

[CHART: ana_07]

## Editorial Notes
- [Which numbers must be exact, which caveats must stay visible, which sections are load-bearing]

Every section header includes the edt_xx ID. Every section lists its evidence (ana_xx IDs) and context (det_xx IDs) on the line below the header. This creates a clear audit trail from prose → data.

editor.json

Write PROJECT_DIR/editor.json — machine-readable structure:

{
  "meta": {
    "role": "editor",
    "version": "2.0"
  },
  "core_claim": "One sentence — what this blog argues",
  "items": {
    "edt_01": {
      "label": "Hook — The surprising finding",
      "purpose": "hook",
      "title": null,
      "findings": ["ana_01", "ana_04"],
      "context": ["det_02", "det_05"],
      "triage": {
        "ana_01": "lead",
        "ana_04": "supporting"
      },
      "chart_placeholder": "ana_01",
      "media_placeholder": "image",
      "editorial_notes": "20.1% must be exact, do not round"
    },
    "edt_02": {
      "label": "The Boom",
      "purpose": "context",
      "title": "The Boom",
      "findings": ["ana_07"],
      "context": ["det_01"],
      "triage": {
        "ana_07": "supporting"
      },
      "chart_placeholder": "ana_07",
      "media_placeholder": null,
      "editorial_notes": null
    }
  },
  "full_triage": {
    "ana_01": "lead",
    "ana_02": "supporting",
    "ana_03": "color",
    "ana_04": "supporting",
    "ana_05": "cut"
  }
}

Field rules

  • items: dict keyed by edt_01, edt_02, ... — one per section, in narrative order
  • label: short name for this section
  • purpose: one of hook, context, evidence, turn, close
  • title: section title for display (null if no title)
  • findings: array of ana_xx IDs this section draws on, ordered by importance
  • context: array of det_xx IDs that provide background for this section
  • triage: maps each ana_xx used in this section to its role (lead / supporting / color)
  • chart_placeholder: the ana_xx ID whose data_table should drive the main chart in this section (null if no chart)
  • media_placeholder: media type hint — one of "map", "video", "image", "audio", "interactive", "instance", or null if no non-text media is genuinely useful. Never write boolean true or a vague string like "media".
  • editorial_notes: constraints the Designer and Programmer must respect (exact numbers, visible caveats, etc.)
  • full_triage: maps EVERY ana_xx ID from analyst.json to its editorial role. This ensures nothing is silently dropped.

Scientific Paper Mode

When analyst.json contains paper structure analysis or review analysis, these additional narrative strategies become available:

Academic Narrative Angles

Choose the narrative angle that creates the most tension. These are not mutually exclusive — combine as needed:

"The Verdict Explained" — Why was this paper accepted or rejected?

  • Lead with the decision, then unpack the evidence
  • Core tension: the gap between what the authors claim and what reviewers saw
  • Best for: papers with interesting review dynamics

"The Best Paper Autopsy" — What made this paper stand out?

  • Lead with a specific, surprising quality (not "it was good")
  • Use quantitative comparisons to other papers at the same venue
  • Best for: award-winning papers, especially when the reasons aren't obvious

"The Reviewers' War" — When reviewers dramatically disagree

  • Lead with the most extreme divergence in opinion
  • Show what each reviewer saw differently in the same paper
  • Best for: controversial papers, borderline decisions

"The Missing Experiment" — What reviewers wanted but didn't get

  • Lead with what the paper could have shown but didn't
  • Frame as a gap that the reader can now understand
  • Best for: rejected papers where the core idea had merit

"The Method Behind the Breakthrough" — Technical deep-dive made accessible

  • Lead with the real-world impact, then explain how it works
  • Use analogies and progressive disclosure
  • Best for: genuinely novel methods that a data-literate reader can appreciate

"Before and After" — How this paper changed the field

  • Lead with what people believed before, contrast with after
  • Show the citation trail as evidence of influence
  • Best for: influential papers with clear downstream impact

Paper-Specific Writing Rules (in addition to existing rules)

  • When discussing reviews, quote specific reviewer language — don't paraphrase into blandness
  • Present both sides of reviewer disagreements before revealing the outcome
  • Use paper figures directly when they tell the story better than words
  • Frame technical contributions in terms of what they enable, not just what they are
  • If the paper was rejected, maintain analytical respect — explain why the concerns mattered, don't mock

Done when a Designer can read editor.md and editor.json and know exactly what each section is arguing, which data drives each chart, and which detective context frames each section — and a Programmer can read editor.md and produce the copy verbatim.

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 326,629. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.