Jev Conductor composition
Jev Conductor shows a live scrolling score: Jev (TypeSafe's System One model) picks the next bar's
chord, bass note, lead phrase, mood and energy on a bar clock, and the pane performs it with Web
Audio. The agent curates piece.json — the musical constraints Jev improvises within.
The loop
- Update
piece.json. The viewer watches it and reshapes Jev's playing live — no restart, no second server. node "$JEV_DSH/toolchain/check.mjs"verifies the workspace'spiece.jsonis valid and range-checked, and reports the current verdict. Run it before you call a piece done.- Listen (or reason about the design): a narrow consonant scale + small harmonic palette yields coherent improv; a wide or chromatic scale yields chaos. Name the moods you want to hear.
Reading Jev
The viewer colors each bar by mood and shows Jev's choices (chord, bass, lead, mood, energy).
Because Jev's choice questions return a probability distribution, jev.mjs's mock and the real
model both pick a choice — but what matters musically is the constraint design: a strong tonic,
a small consonant scale, vivid mood labels. Design those well and any path Jev walks sounds like
music.
Verifying a piece
node "$JEV_DSH/toolchain/check.mjs" returns non-zero when piece.json is invalid (bad notes, out
of range, empty palettes). It does not replace judging the music. The real test is coherence: with
a tonic-centered chord list and a consonant scale, Jev's random walks resolve; with a giant
chromatic scale they won't.
Driving Jev yourself
toolchain/jev.mjs exports a small client. Example (from the workspace) — audition a chord palette
before you commit to it:
node --input-type=module -e '
import { evaluate, jev } from "$JEV_DSH/toolchain/jev.mjs";
const res = await evaluate({
state: "You are scoring mood music. Palette A resolves to the tonic; palette B is all tension.",
questions: {
electric: jev.score({0:"flat",1:"alive",2:"electric"}, "How electric is this palette to improvise in?"),
cohesive: jev.noul("Will random walks through this palette sound cohesive?"),
},
});
console.log(JSON.stringify(res.answers, null, 2));
'
Without TYPESAFE_API_KEY this uses the deterministic mock; set the key to hit live Jev.