narration
Skill8 starsChanged 7 months agoMITView on GitHub
Produce time-aligned natural-language narration for a Mobius simulation, explaining the physics happening at each visible moment in clear prose. Generates the narration.segments[] sub-tree of SimSpec from physics, primitives, and execution telemetry. Run after primitive-generator and (typically) after simulation execution.
3 other projects use a version of this.
Adopted by
Most recently taken up by
- TimeCraker/vibe-studiotheir own version, first seen Oct 23, 2026
- bmohan111/claude-skillstheir own version, first seen Aug 11, 2026
- dtran320/coderegon-trailtheir own version, first seen Apr 9, 2026
Other versions3 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 3
- dtran320/coderegon-trail★ 1same name
- bmohan111/claude-skills★ 0same name
- TimeCraker/vibe-studio★ 0same name
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 repository9 other files it gives its agents.
- claim-extractorSkill
- paper-diffSkill
- paper-parserSkill
- physics-interpreterSkill
- primitive-generatorSkill
- science-integritySkill
- simspec-authorSkill
- shader-devSkill
- viz-mapperSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
15 rules. About 0 are common, 8 are distinctive, and 7 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈8
Distinctive · estimate
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 49
Forward direction: Every paper.numerical_claims[i].id MUST appear either in claims_referenced[] OR be acknowledged inline by its numerical …
- Very specific: line 50
Reverse direction: Every numerical value or symbol mentioned inline in what, why, or try_it MUST resolve to either a …
- Very specific: line 64
When eligibility.tier == "ineligible" (see science-integrity/SKILL.md), this skill does not run.
- Very specific: line 104
If the SimSpec is eligibility.tier == "ineligible", this skill MUST NOT run.
- Distinctive: line 111
If the bijection check (Phase 3 review) fails on a fabricated noun, replace the body with the safe fallback:
- Distinctive: line 126
DO NOT emit prose, headings, or follow-up questions after the closing fence — they break the orchestrator's downstream consumption and get …
- Distinctive: line 183
Every example below is structured the same way:
- Distinctive: line 252
Never mention a concept absent from the SimSpec.
- Distinctive: line 254
Never editorialize ("remarkably", "as expected", "elegant").
- Distinctive: line 256
Never use exclamation marks or emoji.
- Distinctive: line 258
Never address the user in second person imperative ("notice", "look at").
- Very specific: line 260
Never name the platform, the model, or the LLM.
- Very specific: line 262
Never invent numerical values.
- Very specific: line 264
Never overlap segments in time.
- Distinctive: line 266
Never produce more than 8 segments per simulation.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
narration
1. Purpose and scope
This skill writes the narration.segments[] array of the SimSpec. Each segment carries t_start, t_end, a markdown body, and a cue from intro | equation | observation | insight | outro. Segments cover simulation.time.t0 to tmax without gaps or overlaps, per Rule 10 of simspec-author.
Two consumers. On-screen captions during simulator playback render below the canvas in IBM Plex Sans, fading under the project's quintic smoothstep easing. The same array doubles as voiceover script (ElevenLabs synthesis for the demo video or a human read-through).
What this skill does NOT do. It does not interpret physics (physics-interpreter), does not invent equations (cites physics.governing_equations[]), does not produce audio (downstream), and does not editorialize.
2. Input
The populated SimSpec. Two modes.
Wet mode: telemetry available. The skill anchors segments to observed events (first reflection, Tc crossing, packet transmission), passed as simulation.events[].
Dry mode: telemetry unavailable. The skill walks the SimSpec (regime, equations, primitives, time bounds) and writes against predicted beats. Dry mode uses predictive tense ("we will see five fringes"); wet mode uses present indicative.
Optional orchestrator arguments: language (v1 English); per-segment word target (~30); segment-count cap (3-6 default, never above 8).
3. Output — the 3-paragraph contract (R5)
The skill writes the entire narration.* subtree of the SimSpec, conforming to simspec.schema.json#/$defs/narration. It has two co-equal outputs:
- The structured 3-paragraph card — three short bodies of prose (
what,why,try_it) plus aclaims_referenced[]bijection anchor and an optionalcaveats[]list. This is the editorial readout shown alongside the simulator. Static, paper-anchored, written once. - The time-aligned
segments[]array — same content as before (intro / equation / observation / insight / outro), gap-free coverage fromt0totmax. This is the voiceover/caption track that plays during simulation. Adjacent endpoints touch (segment[i].t_end == segment[i+1].t_start).
The two outputs are NOT redundant — the card is the editorial frame the user sees first, the segments are what they hear/read while the simulator runs. The card MUST be consistent with the segments (same equations, same approximations, same numerical anchors).
3.1 The three paragraphs
narration.what — 1–2 sentences, 30–400 chars, plain English. What is on screen. Names at least one primitives[].id (the user-facing label) or one paper.figures[].id. No inline LaTeX. No marketing. Answers: "what am I looking at?".
narration.why — 2–3 sentences, 60–800 chars, with inline KaTeX between $...$ for at least one physics.governing_equations[] entry. Why this picture. Enumerates the active approximations from physics.approximations[] (e.g. paraxial, scalar, monochromatic, Born-Oppenheimer, weakly-nonlinear) AND surfaces the tacit defaults (BK7 → n = 1.5, ℏ = m = 1, T/J = 2.3, etc.) that turn the equation into a number. Answers: "why does this picture come out the way it does?".
narration.try_it — 1–2 sentences, 40–400 chars. Which slider tests which claim. References at least one viz.sliders[].label AND at least one paper.numerical_claims[i] value (citing the paper figure or section). Answers: "what should I move, and what should I expect?".
3.2 Bidirectional binding (R5 critical)
narration.claims_referenced[] lists the claim ids (each paper.numerical_claims[i].id) that this narration cites. The bijection contract is enforced by science-integrity/scripts/check_narration_bijection.py:
- Forward direction. Every
paper.numerical_claims[i].idMUST appear either inclaims_referenced[]OR be acknowledged inline by its numerical value (within 5% tolerance) inwhyortry_it. No orphan claims. - Reverse direction. Every numerical value or symbol mentioned inline in
what,why, ortry_itMUST resolve to either apaper.numerical_claims[i]entry, aphysics.constants[]entry (withsourcein{paper, standard}), or aviz.sliders[].default. No ungrounded numbers.
Failure of either direction emits an integrity.checks[] entry with type: "narration-bijection", status: "fail" (forward-orphan) or status: "warn" (reverse-ungrounded).
3.3 Segments — same as v0.1, plus claims_referenced consistency
Each markdown body is plain prose with optional inline LaTeX between $...$. No headings, lists, tables. Backslashes JSON-escaped. KaTeX out of scope; the renderer treats $...$ as KaTeX when available else raw text.
The cue drives visual treatment: intro / outro fade with --c0; equation spawns an inline equation strip; observation / insight use body styling.
Numerical anchors used inside any segment.markdown are subject to the same reverse-bijection rule as the card: every value must resolve to paper.numerical_claims[], physics.constants[], or viz.sliders[].default. Phase 3 review (§5) runs the lexicon check on segments AND on the card.
3.4 Ineligible papers
When eligibility.tier == "ineligible" (see science-integrity/SKILL.md), this skill does not run. The orchestrator routes the paper to viz.scene_archetype = "explainer" (see viz-mapper/templates/explainer.html), which renders the eligibility report card directly from eligibility.reasons[]. No narration is written for these papers.
When eligibility.tier == "best_effort", this skill runs normally but MUST populate narration.caveats[] with one entry per failed gate AND each affected claim in claims_referenced[] MUST also appear in paper.numerical_claims[i].verification with status in {"partially-verified", "unverified"}. Whenever an unverified claim is cited inline, the literal phrase not independently verified MUST appear in the same paragraph (enforced by the bijection script).
3.5 Output format (mandatory)
You MUST emit your final output as a single fenced json block at the END
of your reply, with NO prose after the closing fence. The orchestrator parses
that block by regex (`/(?:json)?\s*\n([\s\S]?)\n\s```/`) and ignores
everything else in your text content.
The canonical artifact for narration (the 3-paragraph card of §3.1 plus the
time-aligned segments of §3.3, plus a flattened narration_md rendition for
the orchestrator's Phase F consumer):
{
"what": "1-2 sentences plain English: what is plotted, what the user sees.",
"why": "2-3 sentences citing the governing equation and the active approximations.",
"try_it": "1-2 sentences: which slider tests which claim, with the predicted value.",
"claims_referenced": ["lambda", "d", "delta_x"],
"caveats": [],
"segments": [
{ "t_start": 0.0, "t_end": 0.5, "cue": "intro", "markdown": "..." },
{ "t_start": 0.5, "t_end": 1.0, "cue": "outro", "markdown": "..." }
],
"narration_md": "# What\n\n...\n\n# Why\n\n...\n\n# Try it\n\n...\n"
}Required keys: what, why, try_it (the 3-paragraph card per simspec.schema.json#/$defs/narration), claims_referenced[] (R5 bijection
anchor), caveats[] (REQUIRED non-empty when eligibility.tier ==
"best_effort"; [] otherwise), segments[] (gap-free coverage from
simulation.time.t0 to tmax), and narration_md (the same content
rendered as a single Markdown string the orchestrator's Phase F consumer
reads via pickArtifact<{ narration_md: string }>).
segments[] must have cue ∈ {intro, equation, observation, insight, outro}
and adjacent endpoints must touch (segment[i].t_end == segment[i+1].t_start).
If the SimSpec is eligibility.tier == "ineligible", this skill MUST NOT
run. If the orchestrator dispatches it anyway, emit:
{ "error": "eligibility.tier == ineligible; refusing to narrate per SKILL.md §3.4" }If the bijection check (Phase 3 review) fails on a fabricated noun, replace the body with the safe fallback:
{
"what": "(narration unavailable for this paper)",
"why": "(narration unavailable for this paper)",
"try_it": "(narration unavailable for this paper)",
"claims_referenced": [],
"caveats": ["narration_audit fail: fabricated noun detected in Phase 3 lexicon check"],
"segments": [{ "t_start": 0, "t_end": 1, "cue": "intro", "markdown": "(narration unavailable for this paper)" }],
"narration_md": "(narration unavailable for this paper)"
}DO NOT emit prose, headings, or follow-up questions after the closing fence — they break the orchestrator's downstream consumption and get silently dropped.
4. Persona and voice rules
Audience: an undergraduate physics student or curious non-physicist. The voice must work for the judge panel (Boris, Cat, Thariq, Lydia, Ado, Jason; not all are physicists).
Tone: clear, slightly conversational, never condescending, never marketing. Active voice, short sentences. Concepts named by their proper terms once introduced. No exclamation marks, no emoji, no "amazingly" or "fascinatingly", no cheerleading.
Length: one to three sentences per segment, ~30 words target, 50 hard ceiling.
Honesty floor: every concept named must appear somewhere in the SimSpec - in physics.governing_equations[].variables, physics.constants[], physics.approximations[], primitives[].name, or a paper claim.
Marketing floor: segments do not pitch Mobius, do not mention the platform or AI. They describe the physics.
5. Segment-generation algorithm
Three phases.
Phase 1: outline. Walk the SimSpec and produce (t_start, t_end, cue, anchor) tuples from a closed beat set: a start beat at [t0, t0 + 0.05 dT] always tagged intro; an equation beat anchored to one physics.governing_equations[] entry; transition beats at regime changes (first reflection, transmission, phase change), read from simulation.events[] or predicted from time scales; one climax beat at the visually load-bearing moment; an outro at [tmax - 0.1 dT, tmax]. Drop lowest-priority transitions if more than 8; add a midpoint observation if fewer than 3.
Phase 2: content. For each beat, call Opus 4.7 (claude-opus-4-7, temperature 0.3, max_tokens 200) with the Section 7 system prompt plus the anchor and SimSpec subtree. equation cues include the anchored equation as inline $...$. observation cues describe what is visible using primitives[].name. insight cues explain why, anchored to the regime or approximations.
Phase 3: review. The full array is re-read in one Opus 4.7 call (temperature 0) for redundancy, contradictions, pacing, and gap-free coverage. The reviewer trims, reorders, or merges; it cannot introduce new claims. Honesty-floor violators are rewritten or dropped. Gaps extend the earlier segment's t_end.
6. Cue types
intro. First segment. Sets scene: what the user looks at, what equation governs, what regime. No motion yet.
equation. The moment an equation becomes visible or active. Always includes inline LaTeX from physics.governing_equations[].
observation. Describes a phenomenon visible on screen. Pure description. Anchored to a primitive name or event.
insight. Explains why. Causal. Anchored to regime, approximations, or a constant. Always follows an observation.
outro. Final segment. Connects to broader meaning, suggests a next experiment, or pins the result to a paper claim.
7. LLM prompt (verbatim)
The exact system prompt used in Phase 2:
You are a science narrator for a physics simulation, in the register of Bartosz Ciechanowski's interactive essays: clear, calm, slightly conversational, never marketing. Audience: an undergraduate physics student or a curious non-physicist. You write in English. Short sentences, active verbs. Name concepts by their proper terms.
You receive a JSON SimSpec describing the simulation, plus one beat anchor with a cue type and a time interval. Write the markdown body for exactly that beat. One to three sentences, target around thirty words, hard ceiling fifty. Plain prose only: no headings, no lists, no tables. Inline LaTeX between dollar signs is allowed when the cue is
equationor when an explicit symbol from the SimSpec helps.Honesty floor: every physical concept you name must already appear in the SimSpec - in physics.governing_equations.variables, physics.constants, physics.approximations, primitives.name, or a paper claim. If a concept is not there, you cannot use it.
Forbidden: exclamation marks, emoji, the words
amazing,fascinating,beautiful,cool,incredible,simply,just. Forbidden: pitching the platform, mentioning AI or the simulator. Forbidden: speculation beyond what the SimSpec asserts. Forbidden: rhetorical questions. Forbidden: imperative direct address ("notice", "observe" - use passive or third-person).Output: only the markdown body. No JSON wrapper, no preamble, no postscript.
The user message carries the cue, the time interval, the relevant physics.governing_equations[i], the primitive ids active in the window, and the paper-claim subset for that window.
8. Worked examples — the 3-paragraph card pattern
Three narrations across canonical paper classes. Each one is a TEMPLATE: it shows how the contract is satisfied for the named regime, NOT a one-off lifted from runs/golden-*/. The actual runs/golden-*/narration.md predates this contract and will be re-emitted by narration v0.2 against this spec.
Every example below is structured the same way:
whatnames a primitive id and what is on screen.whycites at least onephysics.governing_equations[i]inline AND lists the active approximations AND surfaces the tacit defaults.try_itnames at least one slider label AND at least onenumerical_claims[i].id.claims_referenced[]enumerates the claim ids that appear in the inline text.
8.1 Wave-optics archetype — Young's double-slit
Source: runs/golden-young/{simspec,claims,figures}.json. Regime linear, equations $I(\theta) = I_0 \cos^2(\pi d \sin\theta/\lambda)\,\mathrm{sinc}^2(\pi a \sin\theta/\lambda)$ and $\nabla^2 U + k^2 U = 0$. Approximations: paraxial, Fraunhofer, scalar-field, monochromatic. Tacit defaults: $\lambda$ derived from SPDC degenerate pair.
{
"what": "A monochromatic plane wave passes through the double-slit-aperture and lands on the screen-intensity detector as a regular pattern of bright and dark vertical bands inside a slowly-decaying envelope (paper Fig. 3).",
"why": "Far-field intensity $I(\\theta) = I_0 \\cos^2(\\pi d \\sin\\theta / \\lambda)\\,\\mathrm{sinc}^2(\\pi a \\sin\\theta / \\lambda)$ holds in the paraxial, Fraunhofer, scalar, monochromatic regime. Tacit defaults: the source is a heralded SPDC photon at $\\lambda = 810\\,\\mathrm{nm}$, the screen sits at $L = 1.5\\,\\mathrm{m}$, the slits have width $a$ and separation $d$ measured by the paper's reticle.",
"try_it": "Drag d and watch the fringe spacing scale as $\\Delta y = \\lambda L / d$, predicted at 1.96 mm for the paper's parameters and measured at 2.0 mm in Fig. 3 (within 5 %). Push a wider and the sinc-squared envelope shrinks, killing the outer fringes.",
"claims_referenced": ["lambda", "d", "b", "L", "delta_x", "V"],
"caveats": []
}Bijection check: every paper.numerical_claims[i].id (lambda, d, b, L, delta_x, V) appears in claims_referenced[]. Every inline number resolves: 810 nm → lambda; 1.5 m → L; 1.96 mm → derived from lambda, L, d; 2.0 mm → delta_x. The slider labels d, a resolve to viz.sliders[] entries. Forward and reverse pass.
8.2 Chaos-and-ODE archetype — Lorenz attractor
Source: runs/golden-lorenz/{simspec,claims,figures}.json. Regime strongly-nonlinear, equations $\dot x = \sigma(y - x)$, $\dot y = x(\rho - z) - y$, $\dot z = xy - \beta z$. Approximations: Galerkin-3-mode-truncation, Boussinesq. Tacit defaults: dimensionless time, $a = 1$ → $\beta = 8/3$, integration step $\Delta t = 0.01$.
{
"what": "A point released at $(1, 1, 1)$ flows under three coupled ODEs and traces the lorenz-trajectory primitive: a folded ribbon looping around two ghost fixed points $C_\\pm$, never closing, never repeating (paper Figs. 1 and 2).",
"why": "The equations $\\dot x = \\sigma(y-x)$, $\\dot y = x(\\rho-z)-y$, $\\dot z = xy - \\beta z$ are a 3-mode Galerkin truncation of the Boussinesq Rayleigh-Bénard equations. Tacit defaults: dimensionless time, aspect ratio $a = 1$ giving $\\beta = 8/3$, integration $\\Delta t = 0.01$. Above the Hopf threshold $\\rho_H = \\sigma(\\sigma+\\beta+3)/(\\sigma-\\beta-1) = 470/19 \\approx 24.74$ the fixed points lose stability and the strange attractor emerges.",
"try_it": "Drag rho across $\\rho_H \\approx 24.74$ and watch the spiral-around-$C_+$ collapse into the two-lobe butterfly. The largest Lyapunov exponent reaches $\\lambda_1 \\approx 0.9056$ at the canonical $(\\sigma, \\rho, \\beta) = (10, 28, 8/3)$ — two trajectories a millionth of a unit apart end up on opposite wings within $1/\\lambda_1 \\approx 1.1$ time units.",
"claims_referenced": ["sigma", "rho", "beta", "rho_H", "lambda_1", "D_H", "div_F", "dt"],
"caveats": []
}Bijection check: all eight paper.numerical_claims[i].id (sigma, rho, beta, rho_H, lambda_1, D_H, div_F, dt) appear. Every inline number (24.74, 0.9056, (10, 28, 8/3)) resolves. The rho slider label is in viz.sliders[]. Pass.
8.3 Quantum archetype — 1D wave-packet tunneling
Source: runs/golden-tunneling/{simspec,claims,figures}.json. Regime quantum-coherent, equation $i\hbar\partial_t\psi = -(\hbar^2/2m)\partial_x^2\psi + V(x)\psi$. Approximations: non-relativistic, 1D, closed-grid-Crank-Nicolson, atomic-units. Tacit defaults: $\hbar = m = 1$, packet width $\sigma = 2$, barrier half-width $a = 1$.
{
"what": "A Gaussian wave packet (gaussian-wavepacket primitive) centred at $x_0 = -10$ glides rightward toward a rectangular barrier of height $V_0$ and half-width $a = 1$ astride the origin, then splits into a transmitted and a reflected lobe at the barrier (paper Fig. 1; Goldberg 1967 Fig. 4).",
"why": "The packet evolves under $i\\hbar\\,\\partial_t\\psi = -(\\hbar^2/2m)\\,\\partial_x^2\\psi + V(x)\\psi$ in the non-relativistic, 1D, closed-grid regime. Tacit defaults: atomic units $\\hbar = m = 1$, mean momentum $k_0 = 4$ giving $E = k_0^2/2 = 8$. The Crank-Nicolson scheme is exactly unitary so the integral $\\int|\\psi|^2 dx = 1$ holds at every step within $10^{-3}$ numerical drift.",
"try_it": "Drag V0 across $E = 8$ and watch the transmission collapse from the above-barrier oscillating regime ($T \\approx 0.799$ from the plane-wave formula) toward the deep-tunneling exponential. At the marginal case $E = V_0$ the closed form predicts $T = 1/(1 + V_0(2a)^2/2) = 1/11 \\approx 0.0909$; the simulator reads it directly off the post-barrier integral.",
"claims_referenced": ["hbar", "m", "V0", "a", "x0", "k0", "T_at_E_eq_V0", "T_default_planewave", "norm"],
"caveats": []
}Bijection check: all nine claim ids appear; inline numbers (-10, 1, 0, 4, 8, 0.799, 0.0909, 1/11, 10^-3) resolve to claim values or to defaults derivable from claims. The V0 slider label is in viz.sliders[]. Pass.
8.4 Adversarial counter-example (a forward-bijection failure)
A SimSpec with paper.numerical_claims[i].id = "g_2_zero" (an unmentioned claim) AND a card that says "the simulator shows a coherent g²(0) ≈ 1.0 at large detunings" would emit:
- forward-orphan failure on
g_2_zeroif it is not inclaims_referenced[]. - reverse-ungrounded warning on the inline value
1.0if no claim, constant, or slider default carries that number.
check_narration_bijection.py reports both as separate integrity.checks[] entries.
9. Multilingual hint
v1 ships English only. Adding French (v2, for ENS / Institut d'Optique audiences) requires: a second system prompt tonally calibrated for French academic register; a language orchestrator argument defaulting to "en"; a locale-aware number formatter (comma decimal in French). Phase 3 review must run in the target language; do not generate French and review in English. The honesty floor and marketing floor apply identically in any language. The skill explicitly does not auto-detect: language is a deliberate orchestrator choice.
10. Red flags
Never mention a concept absent from the SimSpec. The honesty floor is hard.
Never editorialize ("remarkably", "as expected", "elegant"). Description, not appreciation.
Never use exclamation marks or emoji. Phase 3 review enforces this.
Never address the user in second person imperative ("notice", "look at"). Use passive or third-person ("fringes appear", "the wavepacket transmits").
Never name the platform, the model, or the LLM. Mobius is invisible from inside the narration.
Never invent numerical values. Values come from physics.constants[] or paper claims; approximations are written with "around" or a range.
Never overlap segments in time. Never leave a gap; Phase 3 review extends t_end if necessary.
Never produce more than 8 segments per simulation.
11. Adversarial failure mode and guardrail
The honesty floor depends on "every named concept appears in the SimSpec". For canonical papers this holds because physics-interpreter knows the standard equation set. For exotic papers (quantum gravity, fringe condensed-matter Hamiltonians, papers introducing a new effective field via a one-letter Greek symbol), physics-interpreter may emit an incomplete spec; narration then names concepts the SimSpec does not assert. Failure is silent: Phase 3 reads only the SimSpec, not the paper, so a plausible-sounding fabrication passes.
Guardrail one. Phase 3 runs a string-level lexicon check: every noun in every segment is matched against the union of variable names, primitive names, approximations, domain hints, and paper-claim quoted nouns. Unmatched nouns emit a narration_audit entry: warn below 20%, fail above. On fail, narration is replaced by a single intro "(narration unavailable for this paper)" plus a fail-level integrity entry.
Guardrail two. On exotic SimSpecs (regime not canonical, or equation symbols absent from any worked-example lexicon), max_tokens drops to 100 per segment and inline LaTeX is forbidden. Shorter segments expose less surface for fabrication.
12. Interaction with other skills
simspec-author may emit a "(narration pending)" placeholder under Rule 10; this skill replaces it.
physics-interpreter provides equations and approximations anchoring equation and insight cues. Missing regime emits a fail-level narration_audit rather than guess.
primitive-generator provides the user-facing primitive names anchoring observation cues.
paper-diff provides summary_md quotable verbatim in an observation. Single-quoted, no rewording.
viz-mapper renders segments as on-screen captions; cue drives visual treatment.
science-integrity aggregates narration_audit entries into simspec.integrity.checks[] and computes overall.
No scripts/ directory in v1; the pipeline runs as inline Opus 4.7 calls from the orchestrator. v2 may extract Phase 1 into a Python helper if pacing tuning becomes a bottleneck.
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.

