SPEC.mdpreviewSPEC.mdsource256 lines · 17.1 KB · raw

title: LIGHTNING IN A BOTTLE theme: jev status: made song: song.js measured: {"date":"2026-09-25","song":"9a02a6fdb1ff","total":{"loudnessDbfs":-21.8,"peakDbfs":-1.7},"parts":{"bass":{"loudnessDbfs":-29.1,"peakDbfs":-17.7},"chords":{"loudnessDbfs":-28.5,"peakDbfs":-9.7},"drums":{"loudnessDbfs":-28.9,"peakDbfs":-11},"other":{"loudnessDbfs":-41.2,"peakDbfs":-8.8},"riff":{"loudnessDbfs":-28.5,"peakDbfs":-15.1},"vocals":{"loudnessDbfs":-31,"peakDbfs":-8.1}},"sections":{"1-8":{"total":{"loudnessDbfs":-25.1,"peakDbfs":-6},"parts":{"bass":{"loudnessDbfs":-27.2,"peakDbfs":-17.7},"drums":{"loudnessDbfs":-40.1,"peakDbfs":-19},"vocals":{"loudnessDbfs":-29.8,"peakDbfs":-8.1}}},"9-16":{"total":{"loudnessDbfs":-25.4,"peakDbfs":-9.9},"parts":{"bass":{"loudnessDbfs":-69.6,"peakDbfs":-37.7},"drums":{"loudnessDbfs":-30.3,"peakDbfs":-11},"riff":{"loudnessDbfs":-27.1,"peakDbfs":-15.1},"vocals":{"loudnessDbfs":-209.5,"peakDbfs":-167.7}}},"17-24":{"total":{"loudnessDbfs":-21.5,"peakDbfs":-5.9},"parts":{"bass":{"loudnessDbfs":-28.2,"peakDbfs":-18},"drums":{"loudnessDbfs":-30.6,"peakDbfs":-16.9},"riff":{"loudnessDbfs":-27.1,"peakDbfs":-15.1},"vocals":{"loudnessDbfs":-25.7,"peakDbfs":-8.3}}},"25-32":{"total":{"loudnessDbfs":-19.2,"peakDbfs":-1.7},"parts":{"bass":{"loudnessDbfs":-28.2,"peakDbfs":-18},"chords":{"loudnessDbfs":-23.6,"peakDbfs":-9.7},"drums":{"loudnessDbfs":-28.7,"peakDbfs":-11},"riff":{"loudnessDbfs":-27.5,"peakDbfs":-15.8},"vocals":{"loudnessDbfs":-26.7,"peakDbfs":-8.3}}},"33-40":{"total":{"loudnessDbfs":-23.4,"peakDbfs":-8.1},"parts":{"bass":{"loudnessDbfs":-28.2,"peakDbfs":-18},"chords":{"loudnessDbfs":null,"peakDbfs":null},"drums":{"loudnessDbfs":-29.2,"peakDbfs":-12.2},"riff":{"loudnessDbfs":-27.4,"peakDbfs":-15.8},"vocals":{"loudnessDbfs":-89.8,"peakDbfs":-60.3}}},"41-48":{"total":{"loudnessDbfs":-19.6,"peakDbfs":-3.2},"parts":{"bass":{"loudnessDbfs":-28.3,"peakDbfs":-18},"chords":{"loudnessDbfs":-23.6,"peakDbfs":-9.7},"drums":{"loudnessDbfs":-25.3,"peakDbfs":-11.1},"riff":{"loudnessDbfs":-27.8,"peakDbfs":-16.9}}},"49-56":{"total":{"loudnessDbfs":-19.6,"peakDbfs":-3.2},"parts":{"bass":{"loudnessDbfs":-28.2,"peakDbfs":-18},"chords":{"loudnessDbfs":-23.8,"peakDbfs":-9.7},"drums":{"loudnessDbfs":-25.4,"peakDbfs":-11.2},"riff":{"loudnessDbfs":-27.7,"peakDbfs":-16.9},"vocals":{"loudnessDbfs":null,"peakDbfs":null}}},"57-64":{"total":{"loudnessDbfs":-24.3,"peakDbfs":-7.1},"parts":{"bass":{"loudnessDbfs":-31.2,"peakDbfs":-18.7},"drums":{"loudnessDbfs":-33.3,"peakDbfs":-15.4},"other":{"loudnessDbfs":-32,"peakDbfs":-8.8},"riff":{"loudnessDbfs":-30.1,"peakDbfs":-15.1},"vocals":{"loudnessDbfs":-31.5,"peakDbfs":-8.1}}}}} critic: date: 2026-09-25 model: jev-1.13.0 method: rubric-1 art: 0.65 artRuns: [0.65, 0.65, 0.64] criteria: hook: 3.5 development: 3.2 structure: 3.1 concept: 3.9 originality: 3.2 craft: 2.5 ideas:

  • date: 2026-09-24 model: claude-opus-5-5 harness: claude-code prompt: "Research Jev's real use cases; jab at people using Jev where deterministic code would do better, such as game bots." brief: "An earnest anthem about using Jev properly. The intro is a robot voice reading founder Diogo Almeida's line, "We have lightning in a bottle, and yet it is not useful". Layer Doom's E1M1 riff and shotgun sounds as a nod to TypeSafe's launch demo, where Jev played Doom. Vocoder chorus: "the code decides what code can decide, Jev takes the rest". It builds to one big drop and a clean ending." revisions:
  • rev: 1 date: 2026-09-24 model: claude-opus-5-5 harness: claude-code prompt: "An earnest anthem about using Jev properly. The intro is a robot voice reading founder Diogo Almeida's line, "We have lightning in a bottle, and yet it is not useful". Layer Doom's E1M1 riff and shotgun sounds as a nod to TypeSafe's launch demo, where Jev played Doom. Vocoder chorus: "the code decides what code can decide, Jev takes the rest". It builds to one big drop and a clean ending." output: null # overwritten by rev 2 art: 0.62 artRuns: [0.62, 0.62, 0.62]
  • rev: 2 date: 2026-09-24 model: claude-opus-5-5 harness: claude-code prompt: "Let Jev arrange the song as it plays. Split it into named parts, and at every 8-bar section have Jev pick the next section's move from a fixed menu (as written, no drums, a breakdown, riff and drums), called from the song's own code with .jev()." output: null # overwritten by rev 3 art: 0.64 artRuns: [0.64, 0.63, 0.64]
  • rev: 3 date: 2026-09-24 model: claude-opus-5-5 harness: claude-code prompt: "Let Jev decide the song's form and when it ends, not just its layers. Name each 8-bar section and the sections allowed to follow it; at each section Jev picks the next section, its move, and how intense it is, and ends the song by choosing the outro, with a hard cap of 16 sections. Tell Jev the tempo, key, chords, lyrics and everything played so far, and how the listener reacted. Without Jev it plays as written." output: null # overwritten by rev 4 art: 0.65 artRuns: [0.65, 0.65, 0.65]
  • rev: 4 date: 2026-09-25 model: claude-opus-5-5 harness: claude-code prompt: "Fix the mix and the form. The master must not clip, and the vocals must sit within about 3 dB of the drums. Make "Jev" read as Jev in every sung line. The quote, the outro hook line and the ending always play, outside Jev's levels, and the intro plays as written. The drop lifts through a sixteenth double-kick, the guitars opening up and crashes, not a kick 18 dB over the band; every crash is a real crash. Only one drop: no drop after drop2. The last bar of each section belongs to the transition, so written fills do not double it; the build rises across all 8 bars with a filter sweep, a noise riser and one snare-roll crescendo; the chorus gets a fuller beat and the octave riff; the intro pulse and bass get an audible harmonic; the ending is an E power chord that rings; a dropout gap is silent. Tell Jev only what plays: derive every part's and section's text from the masks." output: song.js art: 0.65 artRuns: [0.65, 0.65, 0.64]

LIGHTNING IN A BOTTLE — spec

song.js is generated from this spec. Change the spec first, then the song.

Intent

The right way to use Jev. Facts:

  • The quote is TechCrunch's report of Diogo Almeida's motivation (~/brains/personal/technology/artificial-intelligence/jev/jev.md): "We have lightning in a bottle, and yet it is not useful."
  • TypeSafe's launch demo was Jev playing Doom from structured game state (ecosystem/jev-doom-agent.md).
  • The pattern the chorus sings is jev-axi (ecosystem/jev-axi.md): routine commands are decided locally with zero Jev calls; only ambiguous or risky ones go to Jev (44/44 on its own labeled safety set).
  • Almeida's assistance vs. automation split (assistance-vs-automation.md): automation's goal is to remove the human from the loop.

Style

  • Metal-tinged anthem, 150 bpm, E minor: Em – C – G – D, two bars per chord, so each vocoded line sits on one chord.
  • The E1M1 riff written as notes, in eighths over four bars, checked against the Ultimate-Guitar tab ("DOOM - E1M1 Hangar - At Doom's Gate", by Ophion): palm-muted E2 pairs answered by E3, D3, C3, A#2, then B2→C3; the second pass ends on a held A#2. Distorted sawtooth plus a square an octave up.
    • In the riff section (bars 9–16) it stays on its own E pedal.
    • Under the verse, chorus, build, drop and outro it is transposed to follow the chord root (Em 0, C −4, G +3, D −2).
    • The square an octave up joins in the chorus and stays through the build and the drop.
  • Power-chord stabs (root, fifth, octave) mark the chords in chorus and drop.
  • The intro's pulse and the bass are a sine sub on the root with an audible harmonic: a filtered triangle an octave up, so small speakers hear them.
  • Doom shotgun sample as an accent on section starts.
  • Builds steadily to one drop; toms and crashes; no pad.
  • The crash is Dirt-Samples hh27:1 (a real crash; cr is a ride), matched to the drums by level. cr plays only as the drop's ride.
  • Mix. The master peaks at or under −1 dBFS, measured (superdough has no limiter, so a master level sets it), and the vocals sit within about 3 dB of the drums as measured. measured: in the frontmatter records the mix as written.

Structure

64 bars as written (~1:42); Jev plays 7–16 sections (1:30–3:25), and the cap narrows its choices from section 12. The last bar of every section belongs to the transition into the next one (see "Into the next section").

BarsSectionContents
1–8IntroSub pulse on E with an audible harmonic; the robot voice reads the quote from bar 3; a tom fill in bar 8 (when the move into the next section is a cut)
9–16RiffE1M1 riff enters on its E pedal with a rock beat; shotgun and crash on bar 9
17–24VerseRiff follows the chords; vocoder lines 1–4, one per chord
25–32ChorusPower chords, the riff an octave up, and a fuller beat: a busier kick and a crash on every chord (the one on bar 25 about 3 dB lower, under the sung "Th-"); "The code decides what code can decide" on Em, then on C; "Jev takes the rest" on G, then on D
33–40BuildRises across all 8 bars: the riff's filter opens from dull to bright, a noise riser over bars 37–40, one snare-roll crescendo over bars 39–40 (when the move into the drop is a cut or a dropout); shotgun on bar 33
41–56DropInstrumental: a sixteenth double-kick, a ride on the quarters, the guitars opening up (the riff's filter wide open, the octave square louder), power chords, a crash on every chord's downbeat; shotgun on bar 41
57–64Outro"The code decides…" once on Em; the riff plays bars 57–60; the ending: a final E power chord (E, B, E), a crash and a shotgun on bar 61, left to ring to the end

The sections already align with the 8-bar chord cycle: verse, chorus and outro start on bars 17, 25 and 57, each the first bar of an Em.

Vocals

  • Robot voice (plain speak): "We have lightning in a bottle, and yet it is not useful."
  • Vocoder verse: "Remove the human from the loop" — Em; "Routine calls never leave the machine" — C; "Only the residue goes to Jev" — G; "Forty-four out of forty-four" — D.
  • Vocoder chorus: "The code decides what code can decide" — Em – C; "Jev takes the rest" — G – D. Each line is sung twice, once on each chord of its pair, so there are two renders of each.
  • Meme: Doom shotgun (fire + pump).
  • Rendering "Jev". A line with the name is rendered at speech rate −4 with a stop or comma after the name, then vocode --dry 1.5 --seed 1 on its chord; the name is typed "Jevv" (typed "Jev" or "Jehv", small.en heard "Jeff"). The pause after the name is cut to 0.25 s so the line fits its two bars. If the name still reads as "Jeff", spell it out.
  • Every vocoded line's row in samples/README.md records how small.en and medium.en read it back, its length, loudness (LUFS) and true peak (dBTP).

Jev in the booth

Jev arranges the song as it plays, as two jevs declared at the top in TypeSafe's own shape (jev({ state, questions }), website/src/jev/), both given the song as state (subject, tempo, key, chords, lyrics):

  • formJev asks one choice: which section plays next, among the song's eight 8-bar sections.
  • djJev asks, once that is decided, a level per part (riff, power chords, bass, drums, vocals: out, back or full in this section), how the song moves into it (a choice) and a score for the section's energy. Questions in one request cannot see each other's answers, so it is a second request, told the section just chosen (after: { section }).

Both are asked every 8 bars (.every(8, …)), and the answers are composed in ordinary Strudel at the bottom: walk holds the form's rules, each part plays at its level, the transition plays over the last bar before the section, and energy.score scales the parts' velocity.

What is not Jev's. The brief makes the quote the intro, so bars 1–8 always play as written: every part at its written level, at full energy, whatever the opening answers say. The story is outside Jev too, and always plays where the structure table puts it: the quote, the outro's hook line and the ending (the final E power chord, crash and shotgun). No level, no energy and no dropout touches them.

The form. A section may be followed only by these:

SectionBars as writtenMay be followed by
intro1–8riff
riff9–16verse, chorus
verse17–24chorus, riff
chorus25–32build, verse; after the first drop, verse or outro
build33–40drop
drop41–48drop2
drop249–56verse, chorus, outro
outro57–64(the end)

The brief asks for one big drop, so drop2 never leads straight back into the drop, and after the drop has played the chorus no longer leads to the build. walk()'s next is a fixed list, so the history half of the chorus rule waits on a hook in walk (a shared change to jevCore); until it lands, the chorus's next stays build or verse at every visit.

These rules are code (walk), not Jev: each request offers Jev only the sections allowed next. The written order is always allowed, and it is what plays when Jev can't be reached. The song ends when Jev picks the outro, whose ending always rings out; at 16 sections (about 3½ minutes) the outro is forced. A section plays its own bars, so a repeated chorus is the chorus.

The parts. Jev sets each part out (silent for the section), back (quieter than written) or full (at its written level): the riff alone before the band returns, the vocals pulled back in the build, the chords out for a bare verse. The level is a Score, so it is Jev's probability-weighted answer: under 0.5 the part is silent, and above it the part plays at its nearest step: back at half velocity, full as written. A part that plays keeps its own masks, so vocals still appear only where the structure table puts them. Each part plays on its own orbit named for its question (riff, chords, bass, drums, vocals), so the browser's meter hears each one alone; the riser has its own (riser). When Jev can't be reached, every part plays full.

What Jev is told is derived from the masks. Each part's question names the sections it plays in, and each section's option lists the parts that play in it, both computed from the same mask constants the parts play from, so the text cannot say a part plays where it does not.

Into the next section. Jev also picks how the song moves into the section it is deciding, and it plays over the last bar of the section before it: cut (straight in), fill (down the toms, ending on a snare double on the last eighth), riser (white noise in sixteenths, its high-pass and level sweeping up) or dropout (every part stops for the last beat, a gap before the section hits; reverb already ringing rings into the gap, but no held note does). The last bar belongs to the transition: the intro's written fill plays only on a cut, and the build's snare roll only on a cut or a dropout. The build already rises into the drop, so the move into the drop is never a riser. The outro has no section after it, so its last beat always plays. When Jev can't be reached, it is a cut.

A little chance. The section is sampled from Jev's probabilities at temperature 0.7 (sample), so two plays of the song can take different paths; the strip shows Jev's top pick beside the one sampled. A close call between sections is where sampling matters most, so there is no confidence threshold: an unsure Jev still picks, and the written order plays only when Jev can't be reached.

Energy is a four-step ladder, from held back to all out. It scales every part's velocity together (0.55 to 1), so the mix keeps its balance; the intro is always at 1, and the story and the ending are never scaled.

  • Each call tells Jev the song's subject, tempo, key and chords, every section's contents and lyrics, everything played so far, how loud each finished section measured in the browser, the sections left before the cap, and the 🔥/😴 reactions from the listener's tab.
  • This relaxes the constraints below that the song plays once in a fixed order and never varies by chance: the arrangement varies with Jev's choices, which are judgments, with a little sampled chance in the form.

Constraints

  • Plays once from bar 1 and ends; never loops. Sections are absolute-cycle masks, so playback starts from stopped.
  • Structured: patterns vary by section, never by chance. (Random chopping read as noise on the first song.)
  • No sustained background pad; harmony comes from rhythmic parts.
  • Vocals only where the structure table puts them; drops are instrumental.
  • Meme clips are the real audio (myinstants, or YouTube via yt-dlp), cut at word timings measured with whisper.cpp. Vocoder lines are made with speak + vocode on the chord they land on, and checked by transcribing the result with whisper.cpp. Everything lands in samples/<sound>/ with a provenance row in samples/README.md.
  • Samples load from samples('jev-samples/strudel.json'); drums from github:tidalcycles/dirt-samples.