LiveAgentStreamSchedule live.agent-stream-schedule@1
Generated at from
openvibe-contracts v0.419.0 and
openvibe-sdk v0.161.0.
- Version
- 1.0.0
- Owner
- live
- Visibility
- public
- Status
- active
- Compatibility
- backward
- Schema
https://openvibe.network/contracts/live/agent-stream-schedule.v1.json
live.agent-stream-schedule@1 (Agent Streams S7): an owner's schedule for a public agent stream. A schedule names a time, the task template the desk will run and the mode; Live starts it when the owner's desk is online, and when the desk is not it says 'didn't start: the desk was offline' and runs nothing. A chatplays schedule never starts on its own: it waits for the owner's Go (the S6 rule). The schedule shows on the channel's Agents tab and in Today 24 hours before its time. The id is scd_<ULID>; the started stream (if any) is named by agent_stream_id.
Fields
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
id | string | yes | The schedule's id (ULID, Crockford base32). |
|
owner | string | yes | The person whose desk runs the scheduled task. |
|
channel | string | yes | The owner's Live channel username. |
|
title | string | yes |
| |
task | https://openvibe.network/contracts/live/agent-stream.v1.json#/$defs/task | yes | ||
mode | enum | yes | How the stream is played. Watch, Narrated and Co-pilot may start on schedule; chatplays waits for the owner's Go. |
|
visibility | enum | yes | Who may watch the stream the schedule starts. Today shows public schedules only. |
|
starts_at | string | yes |
| |
state | enum | yes | Where the schedule stands: scheduled, live (with agent_stream_id), ended, missed ('didn't start: the desk was offline') or cancelled by its owner. |
|
agent_stream_id | string | null | The stream the schedule started, once it did. |
| |
missed_reason | enum | Why a scheduled start did not happen. 'waits_for_go' is a chatplays schedule keeping its time until the owner presses Go; 'desk_offline' is the design's 'didn't start: the desk was offline'. |
| |
waits_for_go | boolean | True for a chatplays schedule: the time has come but nothing runs until the owner presses Go. | ||
started_at | string | null |
| ||
ended_at | string | null |
| ||
reminders | integer | How many followers opted in to a reminder; neighbours never see who they are. |
| |
reminded | boolean | For the caller's own view: whether this caller opted in to a reminder. Absent when there is no caller. | ||
page_url | string | The channel's Agents tab, where the schedule shows 24 hours before its time. |
| |
created_at | string | yes |
|
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: missed-desk-offline
{
"id": "scd_01JAB2C3D4E5F6G7H8J9K0MNPX",
"owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPT",
"channel": "mira",
"title": "Nightly dependency update",
"task": {
"source": "actor",
"ref": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPY",
"title": "Update the dependencies"
},
"mode": "watch",
"visibility": "public",
"starts_at": "2026-11-08T03:00:00.000Z",
"state": "missed",
"agent_stream_id": null,
"missed_reason": "desk_offline",
"waits_for_go": false,
"started_at": null,
"ended_at": null,
"reminders": 0,
"page_url": "https://openvibe.live/@mira/agents",
"created_at": "2026-11-07T03:00:00.000Z"
}Valid: scheduled
{
"id": "scd_01JAB2C3D4E5F6G7H8J9K0MNPS",
"owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPT",
"channel": "mira",
"title": "Fix the login page, on a schedule",
"task": {
"source": "codes",
"ref": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPW",
"title": "Fix the login page",
"url": "https://openvibe.codes/t/tsk_01JAB2C3D4E5F6G7H8J9K0MNPW"
},
"mode": "narrated",
"visibility": "public",
"starts_at": "2026-11-08T19:00:00.000Z",
"state": "scheduled",
"agent_stream_id": null,
"missed_reason": null,
"waits_for_go": false,
"started_at": null,
"ended_at": null,
"reminders": 3,
"reminded": true,
"page_url": "https://openvibe.live/@mira/agents",
"created_at": "2026-11-07T02:00:00.000Z"
}Valid: waits-for-go
{
"id": "scd_01JAB2C3D4E5F6G7H8J9K0MNPZ",
"owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPT",
"channel": "mira",
"title": "Chat plays: build a tiny game",
"task": {
"source": "codes",
"ref": "tsk_01JAB2C3D4E5F6G7H8J9K0MNQ1",
"title": "Build a tiny game"
},
"mode": "chatplays",
"visibility": "public",
"starts_at": "2026-11-08T20:00:00.000Z",
"state": "scheduled",
"agent_stream_id": null,
"missed_reason": "waits_for_go",
"waits_for_go": true,
"started_at": null,
"ended_at": null,
"reminders": 1,
"page_url": "https://openvibe.live/@mira/agents",
"created_at": "2026-11-07T04:00:00.000Z"
}Rejected: missing-task
{
"id": "scd_01JAB2C3D4E5F6G7H8J9K0MNP1",
"owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPT",
"channel": "mira",
"title": "No task",
"mode": "watch",
"visibility": "public",
"starts_at": "2026-11-08T19:00:00.000Z",
"state": "scheduled",
"created_at": "2026-11-07T02:00:00.000Z"
}Rejected: unknown-state
{
"id": "scd_01JAB2C3D4E5F6G7H8J9K0MNP2",
"owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPT",
"channel": "mira",
"title": "Confusing state",
"task": {
"source": "codes",
"ref": "tsk_01JAB2C3D4E5F6G7H8J9K0MNQ2",
"title": "A task"
},
"mode": "watch",
"visibility": "public",
"starts_at": "2026-11-08T19:00:00.000Z",
"state": "postponed",
"created_at": "2026-11-07T02:00:00.000Z"
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('live.agent-stream-schedule@1', value); // { valid, errors: [{ path, message }] }