AgentStepPayload common.agent-step@1
Generated at from
openvibe-contracts v0.419.0 and
openvibe-sdk v0.161.0.
- Version
- 1.0.0
- Owner
- contracts
- Visibility
- first-party
- Status
- active
- Compatibility
- backward
- Schema
https://openvibe.network/contracts/common/agent-step.v1.json
One step of the agent's work, as any mode publishes it (agent.step.started, agent.step.updated, agent.step.ended; design 2026-11-07 §2). The person it is for is the envelope's subject. The payload is the step's shape: what it is, where it ran, why, how it ended, what it cost, and where to see it. It never carries the step's content: no prompt, no diff, no page, no message, no file. The three events share this payload; what differs is the envelope's event_type. The agent.* namespace belongs to the network, so any first-party mode may publish into it (like provider.*); OpenVibe.Actor registers the family and keeps the timeline.
Fields
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
step_id | string | yes | The mode's own id for this step (a Codes task id, a Run job id, a stream id). |
|
mode | enum | yes | The mode the step belongs to. |
|
product | string | yes | The product that ran it (chat, codes, run, watch, live, surf, actor). |
|
ref | string | null | The product's own id for the thing this step is about. |
| |
title | string | yes | A short plain-text name for the step. What it was, never what it said. |
|
status | enum | yes |
| |
started_at | string | yes |
| |
ended_at | string | null |
| ||
placement | object | null | Where the step ran and why the agent put it there, in one line each. | ||
cost_usd | number | null |
| ||
link | string | null | The step's own page in its product. |
| |
reason | string | null | Why it failed or stopped, in one line a person can act on. |
| |
transition | string | null | The agent's sentence for the mode change this step announced. |
| |
approval | object | null | The approval this step waits on, and the mode that owns it. The person answers it in the mode. |
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: step
{
"step_id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPS",
"mode": "code",
"product": "codes",
"ref": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPS",
"title": "Running the checkout tests",
"status": "running",
"started_at": "2026-11-07T09:00:00.000Z",
"ended_at": null,
"placement": {
"where": "On your desktop",
"why": "it needs your files and your Claude sign-in, and it is free"
},
"cost_usd": null,
"link": "https://codes.openvibe.network/tasks/tsk_01JAB2C3D4E5F6G7H8J9K0MNPS",
"reason": null,
"transition": null,
"approval": null
}Rejected: with-prompt
{
"step_id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPS",
"mode": "code",
"product": "codes",
"ref": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPS",
"title": "Running the checkout tests",
"status": "running",
"started_at": "2026-11-07T09:00:00.000Z",
"ended_at": null,
"placement": {
"where": "On your desktop",
"why": "it needs your files and your Claude sign-in, and it is free"
},
"cost_usd": null,
"link": "https://codes.openvibe.network/tasks/tsk_01JAB2C3D4E5F6G7H8J9K0MNPS",
"reason": null,
"transition": null,
"approval": null,
"prompt": "the prompt"
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('common.agent-step@1', value); // { valid, errors: [{ path, message }] }