A lightweight agent-paired video editor — storyboard + timeline cockpit, distilled from hundreds of hours of real human+agent editing.
One folder. Copy it in, hand it to your agent.
apps/mini-nle ├── README.md ├── app │ └── mini-nle.html ├── app.json └── assets

A lightweight agent-paired video editor — storyboard + timeline cockpit, distilled from hundreds of hours of real human+agent editing.
A video editor you share with an agent. You steer from the storyboard — scenes, beats, takes — and the agent assembles, retimes, and renders. Click any word in the script and the playhead cuts there. Lock what's finished; when every slot is locked, the film is done.
This would've been a whole project to build. Here, it's a folder in a bundle.
vanilla HTML + JS, no build).
That is the whole package: one surface plus this manifest, README, and a screenshot. **No server ships here** — see below.
`app/mini-nle.html` is a **generated build artifact** (stitched by `stitch-nle.py` from the content-strategy chunks over `timeline-viewer.html`) and is **never hand-edited**. This package pins a specific Studio Box source commit and ships that generated artifact byte-identical; the source commit and the generated-artifact hash live in the review evidence, never in a manifest field.
This package **is the canonical reviewed source** of the Mini-NLE surface. The **runtime is the box's shared `export-server`** — the same timeline and media services the Cutdown and Media Manager surfaces use. It serves this surface and answers its API verbs (`/api/patch`, `/api/project-assets`, `/api/timelines`, `/api/project-info`, `/api/media`, …). This package therefore **declares no server of its own and never ships or copies `export-server`**: the box already provides it. The install destination `~/studio/apps/mini-nle` is the **installed canonical source on disk**, not the path the shared server reads the project bundle from at runtime.
The box's served surface and this registry snapshot can diverge because box deploys move continuously. Install is a judgment call for the box lead agent, under a **no-rollback drift rule**:
1. **Compare** the canonical installed source (`~/studio/apps/mini-nle`) against the box's served surface. 2. **Missing / provably broken / provably older** than the canonical source → **repair**: copy the canonical source in, then verify the shared route and API answer. 3. **Newer (forward drift)** → **leave it untouched and report**. The box surface may legitimately be ahead of this snapshot; never overwrite it. 4. **Ambiguous** relative age or health → **leave it untouched and report** to the box lead agent, and take no destructive action.
The rule is asymmetric on purpose: only ever move the box **forward** to the canonical source when it is behind or broken — never roll a live box **backward** to an older snapshot.
Read: `GET /api/patch`, `GET /api/note`, `GET /api/receivers`, `GET /api/templates`, `GET /api/slot-history`, `GET /api/health`, `GET /api/project-assets`, `GET /api/timelines`, `GET /api/project-info`, `GET /api/media`, `GET /api/history-since`, `GET /api/probe-duration`, `GET /api/thumb`, `GET /api/library`, `GET /api/library/media`, `GET /api/tags`, `GET /api/export-status/<id>`, `GET /api/validate-export`, `GET /api/validate-audio`. Write: `POST /api/patch`, `POST /api/patch/validate`, `POST /api/patch/apply`, `POST /api/patch/discard`, `POST /api/note`, `POST /api/note/flush`, `POST /api/note/done`, `POST /api/approve`, `POST /api/annotation`, `POST /api/reconform`, `POST /api/timeline/select`, `POST /api/project-assets/rebuild`, `POST /api/reveal-file`, `POST /api/library/route`, `POST /api/tags`, `POST /api/focus`, `POST /api/export-review`, `POST /api/export-final`. These are answered by the box's shared `export-server`, not by this package.
/api/patch — Read the current timeline patch/diff draft state/api/note — List saved feedback notes (drafts and dispatched)/api/receivers — List the known note receivers/api/templates — List the section and card templates/api/slot-history — Read a slot's take and version history/api/health — Read cut-health (per-slot fill and coverage) for the timeline/api/project-assets — List the project's indexed media assets/api/timelines — List the timeline-shaped JSON files in the slice root/api/project-info — Read project doctrine, current-export pointer, and filing health/api/media — Serve or download a project media file/api/history-since — Read history events since a marker/api/probe-duration — Probe a media file's real duration/api/thumb — Serve a thumbnail for a media asset/api/library — List the shared media library/api/library/media — Serve a file from the shared library/api/tags — List tags and their asset bindings/api/export-status/<id> — Poll an export job's status by id/api/validate-export — Validate the timeline for export (mode via ?mode=)/api/validate-audio — Validate the audio plan (mode via ?mode=)/api/patch — Save the working edit patch as a draft/api/patch/validate — Validate a patch against the timeline (probe)/api/patch/apply — Apply the draft patch (guarded, backup first)/api/patch/discard — Discard the draft patch/api/note — Save or dispatch a feedback note/api/note/flush — Flush pending notes for dispatch/api/note/done — Mark a note done/api/approve — Approve a slot or cut decision/api/annotation — Save a frame annotation/api/reconform — Re-conform scratch VO and rebuild the playable board/api/timeline/select — Switch the active timeline in the slice root/api/project-assets/rebuild — Rebuild the project asset index/api/reveal-file — Reveal an indexed asset in the OS file manager/api/library/route — Route a library asset into the project bundle/api/tags — Add or remove a tag on assets/api/focus — Report what the human is looking at (selection and view)/api/export-review — Start a review-quality export job/api/export-final — Start a final-quality export job (validates first)~/studio/apps/mini-nlePaste this into your box's lead agent — it installs the app on your box.
Install request — Mini-NLE
App id: mini-nle
Registry repo: mvschwarz/rigs-to-apps
Manifest path: apps/mini-nle/app.json
Please install this mini-app onto my studio box:
1. Retrieve mini-nle's app.json from the registry repo (mvschwarz/rigs-to-apps) at apps/mini-nle/app.json,
then resolve and record its current commit SHA for provenance.
2. Apply judgment: check for name and port collisions with what's already
installed, and place it in a sensible sidebar group (category default: create).
3. Install the app directory to ~/studio/apps/mini-nle.
4. Register its surfaces door: route /mini-nle.html with the
▦ glyph, grouped under the create default group.
5. No server — this is a pure static surface.
6. Then verify:
- The box's shared export-server (the runtime provider — not shipped in this package) serves this surface at /mini-nle.html and it renders the brass (Obsidian) skin
- GET /api/patch, /api/project-assets, /api/timelines, and /api/project-info answer via the shared provider
- Compare the canonical installed source at ~/studio/apps/mini-nle against the box's served surface: repair (copy the canonical source in) ONLY if the box surface is missing, provably broken, or provably older than the canonical source; if the box surface is newer (forward drift) leave it untouched and report; if relative age or health is ambiguous, leave it untouched and report to the box lead agent — take no destructive action
Verbs this app exposes (for reference, method omitted):
/api/patch — Read the current timeline patch/diff draft state
/api/note — List saved feedback notes (drafts and dispatched)
/api/receivers — List the known note receivers
/api/templates — List the section and card templates
/api/slot-history — Read a slot's take and version history
/api/health — Read cut-health (per-slot fill and coverage) for the timeline
/api/project-assets — List the project's indexed media assets
/api/timelines — List the timeline-shaped JSON files in the slice root
/api/project-info — Read project doctrine, current-export pointer, and filing health
/api/media — Serve or download a project media file
/api/history-since — Read history events since a marker
/api/probe-duration — Probe a media file's real duration
/api/thumb — Serve a thumbnail for a media asset
/api/library — List the shared media library
/api/library/media — Serve a file from the shared library
/api/tags — List tags and their asset bindings
/api/export-status/<id> — Poll an export job's status by id
/api/validate-export — Validate the timeline for export (mode via ?mode=)
/api/validate-audio — Validate the audio plan (mode via ?mode=)
/api/patch — Save the working edit patch as a draft
/api/patch/validate — Validate a patch against the timeline (probe)
/api/patch/apply — Apply the draft patch (guarded, backup first)
/api/patch/discard — Discard the draft patch
/api/note — Save or dispatch a feedback note
/api/note/flush — Flush pending notes for dispatch
/api/note/done — Mark a note done
/api/approve — Approve a slot or cut decision
/api/annotation — Save a frame annotation
/api/reconform — Re-conform scratch VO and rebuild the playable board
/api/timeline/select — Switch the active timeline in the slice root
/api/project-assets/rebuild — Rebuild the project asset index
/api/reveal-file — Reveal an indexed asset in the OS file manager
/api/library/route — Route a library asset into the project bundle
/api/tags — Add or remove a tag on assets
/api/focus — Report what the human is looking at (selection and view)
/api/export-review — Start a review-quality export job
/api/export-final — Start a final-quality export job (validates first)
(You are my trusted box lead agent; act inside the box. Nothing here calls out.)