What problem does it solve? Designing a slalom course that produces a readable, well-tuned run for the Jev racer requires iterating on course parameters and validating them, which is tedious to do by hand without a structured loop. ## Core Features & Use Cases - Course Authoring: Edit slalom.json fields (title, speed, gates, valleyWidth, gateGap, and a style line describing Jev's line strategy) while the viewer watches the file and Jev adapts live with no restart. - Course Validation: Run node "$JEV_DSH/toolchain/check.mjs" to verify slalom.json is valid, catching missing titles, non-positive speeds, and out-of-range gates, valleyWidth, gateGap, or tickMs values. - Steering Evaluation: Use the toolchain/jev.mjs client to ask Jev which way to steer (LEFT_FAST through RIGHT_FAST) for a given gate state, with a deterministic mock when TYPESAFE_API_KEY is unset. - Use Case: Tune a course by raising the speed value until Jev's aim wobbles and it clips a gate, confirming the difficulty dial works as expected. ## Quick Start Ask the agent to update slalom.json with a new speed and gate count, run the check script to validate it, and watch Jev thread the gates in the viewer.