RODEO

Field Operations

Physical operation coordination with conditional touches and signal-driven adjustment

Coordinate a 72-hour food processing run across 3 stations with environmental signals and conditional timing.

Channels

const envChannel = await rodeo.channels.create({
  name: "station-controls",
  type: "environmental",
  tone: { register: "technical", voice: "system", awareness: "full", deniability: "none" },
  provider: "mqtt",
  provider_config: { broker: "mqtt://signals.local", topic: "stations/+" },
  signal_capabilities: ["delivery", "behavior", "conversion"],
});

const signalChannel = await rodeo.channels.create({
  name: "alert-system",
  type: "signal",
  tone: { register: "technical", voice: "system", awareness: "full", deniability: "none" },
  provider: "webhook",
  provider_config: { url: "https://ops.example.com/alerts" },
});

Audience

const shiftCrew = await rodeo.audiences.create({
  type: "cohort",
  context: {
    role: "processing-crew",
    shift: "A",
    stations: ["cold-storage", "cutting", "packaging"],
  },
  bounds: { maxTouchesPerDay: 20, maxTouchesPerWeek: 100, cooldownMinutes: 5 },
});

Intention

const intention = await rodeo.intentions.create({
  type: "coordinate",
  description: "Execute 72-hour production run across 3 processing stations",
  success_condition: {
    unitsProcessed: 2400,
    qualityGrade: "A",
    downtimeMinutes: 0,
  },
  alignment: {
    audienceBenefit: "Clear protocols, predictable shifts, safety monitoring",
    mutuality: "Crew gets structured work, operation hits production targets",
  },
});

Conditional touches

Touches deliver when signal conditions are met, not on a fixed schedule:

.touch({
  sequence: 3,
  channel_id: envChannel.id,
  content: { action: "start_packaging_line", target_temp: 38 },
  tone: { warmth: "cool", urgency: "present", ask: "direct" },
  timing: {
    mode: "conditional",
    condition: {
      signal: "cold-storage-temp",
      metric: "temperature_f",
      operator: "lte",
      value: 40,
    },
  },
  signals_config: [
    { type: "behavior", metric: "temperature_f" },
    { type: "behavior", metric: "humidity_pct" },
  ],
})

Adjustment

.rule({
  condition: { type: "behavior", metric: "temperature_f", value: { gt: 45 } },
  action: "escalate",
  params: { to: "alert-system" },
})
.rule({
  condition: { type: "behavior", metric: "equipment_fault" },
  action: "terminate",
})

Batch signals

setInterval(async () => {
  const readings = await collectStationReadings();
  await rodeo.signals.reportBatch(
    readings.map((r) => ({
      signalId: r.stationId,
      touchId: currentTouchId,
      sceneId: sceneId,
      type: "behavior",
      metric: r.metric,
      value: r.value,
      confidence: r.calibrated ? 1.0 : 0.7,
    }))
  );
}, 30_000);