Skip to content
MrJev

jev-drone

Camera-only quadrotor in MuJoCo with Jev making judgment calls at about 2.5 Hz.

View on GitHub →

Hands-on review

A simulated drone where Jev makes the tactical calls and code keeps it flying. The README's headline comparison no longer reproduces at HEAD.

Good for

  • Seeing a control loop where the model advises and code holds safety
  • A readable example of turning camera output into a small symbolic state
  • Running the no-Jev baseline for free: the ablation needs no key

Watch out for

  • The documented install fails: it pins a version of the SDK that doesn't exist
  • We could not reproduce the README's baseline results at the current commit
  • No tests, six commits, and a replay path that unpickles files you're given

Tested Sep 20, 2026 at cbeb53ce4f17 · Python 3.11 and MuJoCo in Docker with software rendering; baseline runs with Jev disabled, no key needed

How we reviewed this: we built it in Docker on Python 3.11 with MuJoCo and software rendering, worked around the dependency pin, and ran the project’s own ablation with Jev disabled — three seeds, the same command the README documents. We didn’t run the Jev path, so nothing here judges its flying with the model engaged.

What it does

jev-drone, by Roman Slack, flies a simulated Skydio X2 through a pillar field in MuJoCo, chasing a ground rover using only its onboard camera. The layering is the interesting part, and the file header states it plainly:

500 Hz  geometric controller
 50 Hz  guidance + hard safety reflex   (always owns safety)
 15 Hz  onboard camera -> scene
 ~3 Hz  Jev tactical judgment            (advisory only)

Code turns the depth and segmentation buffers into a small symbolic scene — five forward sector distances, the gap straight ahead, the height of the obstacle’s top edge, the rover’s bearing, and how long it has been out of sight. Jev never sees pixels. One request asks three questions: a Choice over manoeuvres (hold course, gap left, gap right, climb, brake, reacquire), a Score for how tight things are, and a Noul asking whether the rover is genuinely lost rather than briefly occluded.

Code decides when to ask — only when something is within four metres, a sector is blocked, or the rover has been missing for a second — and dedupes repeated scenes. The tactician runs off the flight loop: a full queue drops the request rather than waiting, and there’s a per-episode call budget.

The documented install fails

requirements.txt pins typesafe-sdk>=1.0. The published SDK is 0.7.0:

ERROR: Could not find a version that satisfies the requirement typesafe-sdk>=1.0
       (from versions: 0.0.1a0, 0.5.7, 0.6.0, 0.7.0)

setup.sh runs with set -euo pipefail, so the failure stops the script before it clones the Skydio model or links the asset directory — you’re left with nothing usable. Dropping the pin fixes it, and 0.7.0’s API matches the code.

The README’s comparison doesn’t reproduce

The README’s case for the project is an ablation table. The baseline is described as “safe but stuck”: “it never crashes and it never gets past station 2”, with the furthest point reached at “17.7 / 17.7 / 17.7 m” and zero collisions across three seeds.

We ran exactly that baseline — --no-jev --fast --seconds 65 --seeds 0 1 2 — at the current commit:

seed furthest point crossed the barrier collisions
0 43.1 m yes 1
1 18.4 m no 1
2 18.2 m no 0

Seed 0 flew past the station the README says the baseline never reaches, with Jev switched off entirely, and two of the three seeds recorded a collision against the documented zero. Re-running seed 0 gave byte-identical output, so this isn’t run-to-run noise.

The most likely explanation is ordinary: the last commit changed the flight controller (“clamp desired vertical accel, lateral position loop”), and the table was measured before it. But as it stands, the comparison a reader uses to judge whether Jev helped is measured against a baseline that no longer exists, and the direction of the change removes part of the gap. We’ve reported it upstream. The honest version of the project’s claim — that a camera-only reflex heuristic is structurally incapable of deciding to climb over a barrier — is still visible in the numbers; the specific figures aren’t.

What it sends, and how it fails

  • Numbers only. The state is {mission, aircraft, observed}, where observed is the symbolic scene: sector distances, bearings, pixel counts. No images, no file paths, no environment. There is nothing here to redact, which is a pleasant change from most of what we review.
  • It degrades to code. We ran it with an unusable key and no network: 17 errors, zero successful calls, and the drone flew the full 65 seconds on the code path alone, never acting on a model answer. That is the right failure mode for a flight loop.
  • The call budget counts successes. Failed requests don’t increment it, so a persistent failure retries within the rate limit rather than stopping — and a failed call clears the previous good judgment without re-asking, because the scene fingerprint hasn’t changed. Neither matters much in a simulator; both would matter in a longer-running system.
  • replay.py unpickles. It loads a recorded tape with allow_pickle=True. Only replay tapes you made yourself.

Maintenance

Six commits, created and last touched on September 16, MIT licensed, no open issues, no tests, no CI. It reads like a weekend demo built by someone who knows control systems — the controller, the reflex layer and the camera pipeline are carefully written, and the documentation explains the layering better than most production repositories manage.

Verdict

As a demonstration of where a System One model fits in a control loop, this is the clearest example we’ve reviewed: the model advises at 3 Hz, code owns safety at 50 Hz, and the aircraft flies fine when the model is unavailable. The symbolic scene is a good piece of engineering in its own right.

As evidence that Jev helped, treat the README’s table as unverified: fix the dependency pin, run the ablation yourself, and expect different numbers from the ones printed.

For other simulated demos, see JevPilot and TypeSafe Mario in our roundup.

See how it compares with other tools in Best Jev tools, tested hands-on.

Review updated Sep 20, 2026. Numbers quoted from the project are its author's own; we don't publish our own measurements of Jev.

More in Games & Real-Time Demos

TypeSafe Mario

★ 458▲ 3

fhshaik/typesafe-mario

Jev picks NES controller inputs for Super Mario Bros. from emulator state, with no screenshots.

PythonReviewed

Jev experiments

★ 412▲ 3

dabit3/jev-experiments

Latency-focused demos from Nader Dabit, each app in its own directory with its own README. No licence file at the time of writing.

TypeScriptReviewed

JevPilot

★ 232▲ 3

standardagents/jevpilot

Three.js driving simulator with a Jev-powered autopilot.

JavaScriptReviewed

Get new Jev projects every week

New Jev releases, pricing changes, and the best new projects, once a week. No spam; unsubscribe anytime.

Powered by Buttondown. See our privacy policy.