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);