Give an LLM a language, and it can wield the world that language describes.
▶ Live demo — run all three in your browser · Launch kit · Contract
Language is a lossy compression of reality. An LLM is a language engine. So the way to hand an LLM a new ability is not to retrain it — it's to give it a small language for a domain, plus a deterministic engine that turns that language into effect, plus a way to tell good output from bad.
Prometheus is the framework that makes every such capability the same shape, so one critic loop and one skill format drive any medium. Reuse the world's best materials as the backend — three.js for 3D, D3 for charts, Tone.js for music — and give the LLM the language on top.
| Slot | What it is | Reused backend |
|---|---|---|
| Grammar | the DSL the LLM writes (dsl/GRAMMAR.md) |
— |
| Executor | turns the DSL into effect (engine/) |
three.js · D3 · … |
| Critic | an objective score() + a rubric |
— |
| Seed | worked examples | — |
The twist that makes this new: in classic language-oriented programming a human writes the DSL. Here the LLM writes it and a critic grades it — so the languages are designed as the output of a probabilistic generator and the input of a deterministic verifier. And the LLM is the director, never the pixel/geometry engine. That split is the only "infinitely extensible LLM" that actually runs.
Everything shared lives in CONTRACT.md: the window.PROM
runtime interface and the universal critic loop. Because the loop only speaks
apply / settle / seek / score + screenshots, the same procedure authored a
drone show and a chart.
🔥 PYRE — photo → drone-show point cloud (backend: three.js)
Drop a photo; it shatters into thousands of glowing embers that assemble into the
image, then breathe and swirl. The LLM authors a choreography DSL; a critic
scores legibility. legibility 0.908 → 0.972 in a live loop run.
FORM mode — beyond flat photos, the LLM describes a subject as 3D primitives
(spline tubes, spheres, a smooth-union blend that melts parts into one
surface); the engine fills that surface with points → a real rotatable volume.
three.js is just the canvas; the authored language carries the 3D.
▶ run the form · grammar
🔺 PRISM — data → animated chart (backend: D3)
Numbers + a vibe → an animated bar chart. The critic gate is encoding fidelity (Pearson corr of bar height vs value) — a chart that lies about the data fails the gate. Proves the contract generalizes past 3D.
🎵 LYRA — text → music (backend: Tone.js)
A musical intent → a short playable piece with a piano roll. The critic gate is
in-key ratio — a melody that wanders out of its declared key fails the gate.
Takes the contract to a non-visual medium (audio). Live loop caught an off-key
note (inKey 0.8 → 1.0).
🏀 PHALANX — text → a basketball play (backend: a possession simulator)
Describe a situation ("need a 3 vs drop coverage"); the LLM authors a set play —
five routes, a screen, a shot — and a possession simulator runs it against a
reactive man defense. The critic gate is expected points: a play that doesn't
get an open look (or that throws a pass through a defender) fails. The defense is
the verifier. This is the razor — hard to generate (5 bodies in space-time, which
natural language can't hold), cheap to verify (simulate the possession). Live loop:
a contested EV 0.65 pull-up → (an illegal too-fast route, caught) → a legal
wide-open 3, EV 1.12.
bin/prometheus-new lyra music # stamps skills/lyra/ from template/
Fill the four slots (the TODOs), and the universal loop already drives it. Next flames: motion, SVG scenes, shaders, poetry with meter…
Easiest: the live demo. Or locally:
python3 -m http.server 8778 --directory .
open http://localhost:8778/skills/pyre/engine/index.html # drag a photo on
open http://localhost:8778/skills/prism/engine/index.html
open http://localhost:8778/skills/lyra/engine/index.html # press ▶ for sound





