editor
Skill155 starsChanged 4 months agoMITView on GitHub
Read analyst.json and detective.json, make all editorial decisions — what the blog argues, which findings matter, narrative arc and section structure. Runs after the Analyst/Imagineer, before the Designer. No visual design. Outputs editor.md (prose) and editor.json (structure with edt_xx IDs).
13 other projects use a version of this.
Adopted by
Most recently taken up by
- philoserf/claude-code-configtheir own version, first seen Nov 7, 2026
- MakeMyClip/editortheir own version, first seen Nov 7, 2026
- vzhukovs/podman-desktop-kittheir own version, first seen Nov 1, 2026
- taecontrol/skillstheir own version, first seen Nov 1, 2026
- xiongxianfei/skillsmiththeir own version, first seen Nov 1, 2026
- papito/skills-pay-the-billstheir own version, first seen Oct 13, 2026
Used with
Projects with it also use doctor.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
MicrosoftSkilldoctor
Diagnose an Amplifier CLI environment through the CLI doctor agent. USE WHEN a user requests CLI runtime, settings or missing-capability inspection. DO NOT USE for project bugs or other hosts.
Also in 3 projects that use this
Other versions13 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 13
- diffusionstudio/skills★ 146same name
- philoserf/claude-code-config★ 14same name
- flowing-abyss/obsidian-vault-skills★ 9same name
- MakeMyClip/editor★ 7same name
- zakame/brooks-agent-team★ 4same name
- xiongxianfei/skillsmith★ 2same name
- taecontrol/skills★ 1same name
- aylee/agent-os★ 0same name
- karim-bhalwani/agentic-harness★ 0same name
- lonlydwolf/skills★ 0same name
3 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository28 other files it gives its agents.
- analystSkill
- auditorSkill
- designerSkill
- detectiveSkill
- editorSkill
- inspectorSkill
- analystSkill
- auditorSkill
- cinematographerSkill
- copywriterSkill
- criticSkill
- designerSkill
- detectiveSkill
- programmerSkill
- heroSkill
- ideationSkill
- imagineerSkill
- inspectorSkill
- interactionSkill
- programmerSkill
- scoutSkill
- data2story-proSkill
- data2storySkill
- dataviz-craftSkill
- find-dataSkill
- frontend-design-proSkill
- frontend-designSkill
- sparring-partnerSkill
The file
We split this skill into the rules it gives an agent
7 rules. 0 are common, 2 are distinctive, and 5 are very specific to this project.
0
Common
Most of the 12 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 17
Read PROJECT_DIR/analyst.json, PROJECT_DIR/detective.json, and PROJECT_DIR/scout.json (if present) before doing anything
- Very specific: line 30
Read the label and content of every item to understand what is available.
- Distinctive: line 41
Cut: not worth reader attention (weak evidence, confounded, or obvious)
- Distinctive: line 43
Only one finding can be Lead.
- Very specific: line 64
Keep the per-section [MEDIA: interactive] hints below as editorial signals — they mark where a playground belongs.
- Very specific: line 92
Use actual numbers from the analyst's content fields — do not re-calculate or approximate
- Very specific: line 127
When analyst.json contains paper structure or review analysis, additional narrative angles ("The Verdict Explained", "The Reviewers' War", …
“Common” is measured: kept by at least 6 in 10 of the 12 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
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,PROJECT_DIR/detective.json, andPROJECT_DIR/scout.json(if present) before doing anything - Read
PROJECT_DIR/imagineer.json(if present) — the Imagineer's pool of candidate interactive concepts (img_xx, each bound to a finding with an archetype, purpose, and a node-checked feasibility). You curate this pool in Step 3 into the hero + supporting set.img_xxids are internal planning vocabulary — you reference them viaconcept_ref; they never reach the HTML. - 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 bydet_01, ... —label,content(prose),category,sources. The external context.scout.json(if present): items keyed bysct_01, ... — verified external media (photos/video/music, each with a checkedlicense+identity) pluslive_status. Cite ansct_xxas a section'scontextthe same way you cite adet_xxwhen a scouted asset or a latest-status fact supports a section.analyst.json: items keyed byana_01, ... —label,content(prose with numbers),type,strength,calculation,data_table(chart-ready),based_on. The data findings.imagineer.json(if present): items keyed byimg_01, ... — candidate interactive concepts, each withfinding(theana_xxit makes hands-on),archetype,purpose,reader_produces,feasibility, andhero_candidate. A deliberately over-generated pool you curate (Step 3).img_xxids are internal — reference them viaconcept_ref, never on the page.
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/smaller than intuition suggests, common-sense explanations don't hold, or the detective context (det_xx) 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?
- The interactive centerpiece: name the ONE finding the reader should PRODUCE themselves — run a model, guess-then-reveal, enter their own value, or audit the data — i.e. the contestable claim made hands-on. Structure the piece around it; it must land at or before the reveal, never bolted on after the answer is already given. (See
../../frontend-design-pro/references/interaction_playbook.json→craft_principles+centerpiece_doctrine.) Flag it ineditor.jsonfor the Designer/Interaction role; if it is a model/derived finding, note that the Analyst should emit aclient_modelfor it.
Then curate the interactive set (writes editor.json.interactives). The prose hero nomination above stays — it names the spine. Now turn the Imagineer's candidate pool (imagineer.json, if present) into the curated set the Interaction Engineer builds:
hero— the ONE centerpiece, the same finding you nominated above. Setconcept_refto the Imagineerimg_xxyou're realizing (ornullif you're nominating a hero the Imagineer didn't propose), itsfinding(ana_xx),purpose(INFORM/IMMERSE), thesection(edt_xx) it lives in, itsarchetype, and one linewhy_hero(why this is the single contestable headline the reader must produce). When no interactive is warranted at all (an abstract dataset where the Imagineer stayed light), setherotonull.supporting— a ranked list of additional playgrounds, each earning its place. The cap is qualitative, never numeric. On a visual OR computational topic (topic_profile.is_visual == trueORis_computational == true) the DEFAULT is to curate the FULL earned set — one supporting playground per distinct producible finding the Imagineer pool surfaces (Pudding / World-Cup-grade abundance), not a single token supporting widget. Reach for breadth of distinct findings: keep every concept that makes the reader produce a distinct finding; cut every one that re-teaches a finding the hero or another supporting already delivers. The distinct-finding rule is the only thing that caps the set. Each entry:concept_ref(theimg_xx, ornull), a DISTINCTfinding(no two supporting entries — and not the hero — may share oneana_xx),purpose, itssection,archetype, arank(1 = strongest), andearns_place(one line: the distinct finding it makes hands-on and why it isn't a duplicate). More EARNED is better, more UNEARNED is not — keep every playground that makes the reader produce a DISTINCT finding, cut every duplicate/dead one. Stopping at one supporting widget on a rich topic is under-curation; a pile of duplicates is over-curation.
On an abstract / computational topic (the topic_profile resolves is_visual=false, e.g. finance, web-analytics, elections, pure statistics, benchmarks): this is a first-class flagship target, not a "stay light" afterthought. Read ../../frontend-design-pro/references/abstract_excellence.json to choose the engagement + narrative moves — the surprising-comparison reframe hook (lead with the counter-intuitive number, not background), personal_input "where you land" as the default engagement lever for any topic with rows the reader fits into (income, age, region, score), the one signature annotated chart as the centerpiece, scale/analogy devices, and the runnable-verify layer as the flagship transparency lever (it favors computational topics). Engagement floor: for the purely-descriptive sub-case (is_computational=false AND is_visual=false), prefer a personal_input / sortable_table / scored_quiz on a descriptive finding (where you land, sort the catalog yourself) over shipping an empty/charts-only page — a floor, not forced decoration; the restraint above (don't force a centerpiece with no producible payoff) still holds when no genuine reader-fits-in lever exists.
Keep the per-section [MEDIA: interactive] hints below as editorial signals — they mark where a playground belongs; interactives is the binding curation the Builder reads. The full field rules are in references/field_rules.json.
4. Write the Narrative Structure
Define the full section sequence. For each section, decide:
- Section ID:
edt_01,edt_02, ... (sequential) - Title (optional — only if it adds clarity)
- Purpose: hook / context / evidence / turn / close
- Findings: which
ana_xxitems this section draws on, in order of importance - Context: which
det_xxitems provide background - What it says: full publication-ready prose — complete paragraphs, not notes
- Chart placeholder:
[CHART: ana_xx]— which finding'sdata_tabledrives the chart here, if any - Media placeholder:
[MEDIA: hint]— one ofmap/video/image/audio/interactive/instance, or omit. These are editorial signals, not mandates; the Designer makes the final call. - Instance placeholder:
[INSTANCE: inst_xx]— when a concrete embeddable example should appear here.
Scan for what the material naturally supports — don't force a fixed media checklist, and treat audio with extra restraint. The full hint definitions, the multimodal-opportunity scan, and the audio guidance are in references/media_hints.json.
5. Writing rules
- Lead with the most surprising thing, not the background
- Standfirst primes, never pre-spoils: when the piece has an interactive centerpiece whose payoff the reader is meant to PRODUCE (run the model, guess-then-reveal, enter a value, audit the data), the standfirst/dek should set up the question and the stakes — it must not state the reveal the reader is supposed to reach. Don't hand away the number the centerpiece exists to deliver. (The Designer/Scout work-stream owns the rendering half of this.)
- Live/latest status is a compact dated note, not a headline: when you cite
live_status[](scout) in prose, present it as a short, display-only "since the snapshot, as of<date>" summary, not a prominent list of many specific (and possibly forward-dated, confusing) results. It is dated context, never the lead, and never fed to a model. - 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
- Earn the trust: when the piece rests on a derived/modelled/predictive claim, give its validation a beat of its own — a short "why believe this" passage (the backtest / baseline comparison / sanity check, stated honestly with what it does not prove). Don't bury it in a caveat
- A material limitation of the lead must survive into visible prose: if the lead is a derived/modelled/predictive finding and it carries a limitation that could change that finding's direction or magnitude — e.g. a model assumption that biases the headline's own subject, or a Detective
controversy/limitation item bearing on it — that limitation MUST appear as at least one clear sentence in the body. Do not cut it to a stray clause, push it into a footnote, or drop it: if itsdet_xx/ana_xxid never appears in the prose, you have buried it. (A non-material caveat may still be woven in lightly; this rule is only for limitations that move the lead.) - Use actual numbers from the analyst's
contentfields — 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 (e.g.
[ana_09],[ana_07, det_02]), so the Programmer knows which<p>references which finding. Pure connective prose is tagged[editorial].
Output
PROJECT_DIR/editor.md— the prose document the Programmer copies verbatim. Section headers carry theedt_xxID and list evidence + context. Full format and example inreferences/editor_md_template.json.PROJECT_DIR/editor.json— machine-readable section structure. Structure inreferences/schema.json; field-by-field semantics inreferences/field_rules.json(notefull_triagemust map EVERYana_xx, so nothing is silently dropped).
Shape (validator-enforced): items is a dict keyed by edt_xx id (NOT a sections[] array) — the same { "meta": {...}, "items": { "id": {...} } } envelope as the input JSONs. validate.py/verify.py read editor.items as {id: {...}}:
{
"meta": {...},
"items": {
"edt_01": { "label": "...", "purpose": "hook",
"findings": ["ana_01"], "context": ["det_01"] }
},
"full_triage": { "ana_01": "lead" },
"interactives": {
"hero": { "concept_ref": "img_01", "finding": "ana_01", "purpose": "INFORM",
"section": "edt_03", "archetype": "explorable_recompute",
"why_hero": "the single contestable headline number" },
"supporting": [
{ "concept_ref": "img_02", "finding": "ana_05", "purpose": "IMMERSE", "section": "edt_05",
"archetype": "guess_then_reveal", "rank": 1, "earns_place": "distinct finding; not a dup of the hero" }
]
}
}The top-level interactives block (hero + ranked supporting[]) is the curation the Interaction Engineer builds from. hero is null when no interactive is warranted; supporting is [] when only the hero is. Full rules in references/field_rules.json.
Scientific Paper Mode
When analyst.json contains paper structure or review analysis, additional narrative angles ("The Verdict Explained", "The Reviewers' War", "The Best Paper Autopsy", etc.) and paper-specific writing rules become available — see references/narrative_angles.json. Choose the angle that creates the most tension.
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.
Team coordination — Editor team
You are the lead of the Editor team. Your member is the Copywriter (titling + captioning). You decide what the blog argues and lay down the section structure + prose; the Copywriter then names the piece — the masthead, every section title, and every figure/photo caption — to a research-driven titling standard, so the strings read as written, not as competent defaults.
- Member call (mirrored from the orchestrator): the orchestrator runs
Skill copywriter PROJECT_DIRat Stage 3.5, after youreditor.md/editor.jsonare complete (and before the Designer). The Copywriter reads youreditor.md,editor.json, andanalyst.json, so finish and save them first. - Naming, not editing. The Copywriter touches no finding, no number, no
data-*id, no layout, and no body prose — it reuses your existingedt_/des_ids and adds none, writing only strings (masthead +items{edt_xx:{title}, des_xx:{caption}}, eachbacks-ed to a realana_*). So your section structure,full_triage, andinteractivescuration stay exactly as you wrote them; the Copywriter only re-titles on top. - Don't pre-spoil what the Copywriter must title around. Keep the standfirst/dek priming-not-spoiling per the writing rules above (when the centerpiece's payoff is one the reader should PRODUCE), so the Copywriter has a real question to headline rather than a number already given away.
This is coordination prose, not a new gate: your edt_xx ids, the interactives block, and the editor.md/editor.json shapes are unchanged.
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
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.

