RODEO

Scenes Resource

Create, declare, and monitor scenes

const scenes = rodeo.scenes;

create(input)

Creates a scene with beats in draft status.

const result = await rodeo.scenes.create({
  intention_id: "uuid",
  audience_id: "uuid",
  arc_type: "approach",
  constraints: { maxBeats: 4, maxDuration: "2h", budget: 50 },
  beats: [
    {
      sequence: 1,
      channel_id: "uuid",
      content: { body: "Hello" },
      tone: { warmth: "warm", urgency: "none", ask: "implicit" },
      timing: { mode: "absolute", at: "2025-01-15T08:00:00Z" },
    },
  ],
});
// result.scene, result.beats

Accepts both snake_case and camelCase input fields.

get(id)

Returns scene with beats, sensor readings, and outcome.

const scene = await rodeo.scenes.get("uuid");
// scene.scene, scene.beats, scene.sensor_readings, scene.outcome

list(filters?)

const result = await rodeo.scenes.list({
  status: "live",
  arc_type: "surround",
  offset: 0,
  limit: 20,
});
// result.scenes, result.total, result.offset, result.limit

declare(id)

Moves scene from draft to live (or declared if copilot approval required).

const result = await rodeo.scenes.declare("uuid");
// result.scene, result.ledger_entry, result.action_card

abort(id)

const result = await rodeo.scenes.abort("uuid");
// result.scene (status: "aborted")

events(id, filters?)

const events = await rodeo.scenes.events("uuid", { type: "beat_fired" });

stream(id)

Returns AsyncIterable<SceneEvent>. See Streaming.

for await (const event of rodeo.scenes.stream("uuid")) {
  console.log(event.type, event.data);
}

build()

Returns a SceneBuilder. See Scene Builder.

const scene = await rodeo.scenes
  .build()
  .intention("uuid")
  .audience("uuid")
  .arc("approach")
  .constraints({ maxBeats: 4 })
  .beat({ ... })
  .create();