---
title: "live.agent-stream-step@1 · OpenVibe.Services"
canonical: "https://openvibe.services/docs/contracts/live.agent-stream-step"
updated: null
---

# live.agent-stream-step@1 · OpenVibe.Services

HTML: [live.agent-stream-step@1 · OpenVibe.Services](https://openvibe.services/docs/contracts/live.agent-stream-step)

# LiveAgentStreamStep `live.agent-stream-step@1`

Generated at 2026-11-13 06:25:48 UTC from [`openvibe-contracts v0.419.0`](https://github.com/OpenVibers/OpenVibe.Contracts/tree/v0.419.0) and [`openvibe-sdk v0.161.0`](https://github.com/OpenVibers/OpenVibe.SDK/tree/v0.161.0).

- Version: 1.0.0
- Owner: live
- Visibility: first-party
- Status: active
- Compatibility: backward
- Schema: [`https://openvibe.network/contracts/live/agent-stream-step.v1.json`](/docs/contracts/live.agent-stream-step.json)

live.agent-stream-step@1 (the Agent Streams plan, S2): one step of the work an agent is doing on an agent stream, as the agent posts it while it works. AT is when the step began, TITLE says what the step is (at most 120 characters), STATUS says how it stands (started, passed, failed or skipped), DETAIL is the optional longer line (at most 500 characters), TESTS says how many tests passed and failed when the agent reports them, and COST\_USD is what the step cost so far when the agent reports it. The step is plain text: the house text filters have already run over it. Live keeps the steps with the stream and with its recording, and the player's overlay draws them (the current step, a timeline of the last twelve, the tests and the cost).

## Fields

| Field | Type | Required | Description | Constraints |
| --- | --- | --- | --- | --- |
| `at` | string | yes | When the step began. | - `format date-time` |
| `title` | string | yes | What the step is. | - `minLength 1`<br>- `maxLength 120` |
| `status` | enum | yes | How the step stands. | - `one of "started", "passed", "failed", "skipped"` |
| `detail` | string |  | The optional longer line under the title. | - `maxLength 500` |
| `tests` | object |  | How many tests passed and failed, when the agent reports them. | - `no other fields` |
| `tests.passed` | integer | yes |  | - `minimum 0` |
| `tests.failed` | integer | yes |  | - `minimum 0` |
| `cost_usd` | number |  | What the step cost so far, when the agent reports it. | - `minimum 0` |

## Examples

From the contract's own test fixtures: valid ones validate, rejected ones must fail.

 Valid: failed

~~~~
{
  "at": "2026-11-06T10:01:30.000Z",
  "title": "Run the checkout tests",
  "status": "failed",
  "detail": "expected 1 charge, received 2",
  "tests": {
    "passed": 1,
    "failed": 1
  },
  "cost_usd": 0.42
}
~~~~

Valid: passed

~~~~
{
  "at": "2026-11-06T10:02:00.000Z",
  "title": "Run the checkout tests",
  "status": "passed",
  "tests": {
    "passed": 2,
    "failed": 0
  }
}
~~~~

Valid: skipped

~~~~
{
  "at": "2026-11-06T10:03:00.000Z",
  "title": "Run the browser tests",
  "status": "skipped"
}
~~~~

Valid: started

~~~~
{
  "at": "2026-11-06T10:00:00.000Z",
  "title": "Run the checkout tests",
  "status": "started"
}
~~~~

Rejected: detail-too-long

~~~~
{
  "at": "2026-11-06T10:00:00.000Z",
  "title": "Run the checkout tests",
  "status": "failed",
  "detail": "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
}
~~~~

Rejected: no-title

~~~~
{
  "at": "2026-11-06T10:00:00.000Z",
  "status": "started"
}
~~~~

Rejected: title-too-long

~~~~
{
  "at": "2026-11-06T10:00:00.000Z",
  "title": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "status": "started"
}
~~~~

Rejected: unknown-status

~~~~
{
  "at": "2026-11-06T10:00:00.000Z",
  "title": "Run the checkout tests",
  "status": "running"
}
~~~~

## Validate

~~~~
const contracts = require('openvibe-contracts');
contracts.validate('live.agent-stream-step@1', value);   // { valid, errors: [{ path, message }] }
~~~~
