Agent and CI workflows

Agents and continuous integration can use the same files and commands as Studio. Keep discovery, authoring, validation, and export as separate steps so failures are attributable.

Discover before editing

Start by listing the project's videos and reading available documentation:

pnpm odori list --json
pnpm odori graph --json
pnpm odori docs search "scene"
pnpm odori catalog components --json

list describes local compositions. catalog describes installable resources. An agent should read the relevant component contract and implementation before writing props against it.

Review before export

A repeatable loop for one video is:

  1. Edit the entry and the smallest relevant components.
  2. Inspect the timeline and verify input values.
  3. Render representative frames and examine them.
  4. Run checks, fix failures, and review changed scenes again.
  5. Export the approved composition.

Use JSON output where the command supports it:

pnpm odori inspect launch --json
pnpm odori frame launch --at 2s --output out/review.png
pnpm odori test launch --json
pnpm odori export launch --output out/launch.mp4

A PNG file is evidence to inspect, not an automatic quality score. Ask the agent to compare layout, content, and timing against the brief.

Run in continuous integration

Install dependencies with the repository's lockfile, then prepare the rendering environment and run validation. For a pnpm project:

pnpm install --frozen-lockfile
pnpm odori install
pnpm odori doctor
pnpm odori test --json
pnpm odori export launch --output out/launch.mp4

The runner needs Node.js 20 or newer, React 19 or newer in the project, and the operating-system dependencies required by Chrome. Managed binary installation downloads Chrome and FFmpeg; it does not install missing Linux system libraries.

Keep API keys in the CI provider's secret store. Only supply generation-provider credentials when the workflow actually generates assets.

Retain useful artifacts

Upload rendered files from out/, review PNGs, and the relevant records under .odori/builds/. A failed job record helps distinguish preparation, capture, and encoding failures.

Commit source, the package lockfile, odori.lock.json, and assets needed by the composition. Treat .odori/ as generated state rather than source code. If you preserve it to retry a job, retain its referenced inputs and assets as well.

Keep automation reproducible

Pin project dependencies through the package lockfile. Avoid fetching changing content during React render. Use preparation for external data and validated inputs for variants.

For tool-based agent access, see MCP. For local instructions and reusable workflows, see skills.

On this page