---
title: "agents.run.updated@1 · OpenVibe.Services"
canonical: "https://openvibe.services/docs/contracts/agents.run.updated"
updated: null
---

# agents.run.updated@1 · OpenVibe.Services

HTML: [agents.run.updated@1 · OpenVibe.Services](https://openvibe.services/docs/contracts/agents.run.updated)

# AgentsRunUpdatedPayload `agents.run.updated@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: actor
- Visibility: first-party
- Status: active
- Compatibility: backward
- Decision: [ADR-044](/docs/adr/ADR-044)
- Schema: [`https://openvibe.network/contracts/events/payloads/agents.run.updated.v1.json`](/docs/contracts/agents.run.updated.json)

agents.run.updated v1 (agent-engine.md, 2026-11-12). A run changed in a way a list shows: it started, its status, title, doing, waiting or preview changed, or it ended. The payload is the run's agents.run@1 snapshot, whole. OpenVibe.Events carries it with the run's owner as the subject, the product that stores it as the source and visibility subject, so the person's run list anywhere stays current without polling. A step is agents.step.appended; this event is not sent for every step, only when the snapshot a list draws changed (at most about once a second per run).

## Fields

This schema has no named fields.

## Examples

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

 Valid: a-chat-waiting

~~~~
{
  "id": "c_8f3k2m",
  "ref": "chat:c_8f3k2m",
  "kind": "chat",
  "title": "Keyboard Scout",
  "owner": {
    "type": "user",
    "id": "usr_01K9R2V6M8Q4T0B7C3D5E9F2GH"
  },
  "agent": {
    "id": "vibe",
    "name": "Keyboard Scout",
    "product": "chat",
    "glyph": "search",
    "hue": 212,
    "harness": "openvibe"
  },
  "status": "waiting",
  "waiting": {
    "for": "message",
    "since": "2026-11-12T10:02:00Z"
  },
  "preview": {
    "text": "Three picks under $90, with sources.",
    "from": "agent",
    "at": "2026-11-12T10:02:00Z"
  },
  "model": {
    "id": "openvibe/auto",
    "source": "openvibe",
    "name": "Auto"
  },
  "where": {
    "kind": "openvibe"
  },
  "context": {
    "site": "deals",
    "url": "https://openvibe.deals/",
    "title": "Deals"
  },
  "url": "https://openvibe.chat/vibe/c_8f3k2m",
  "counts": {
    "steps": 6,
    "unread": 1
  },
  "visibility": "private",
  "created_at": "2026-11-12T10:00:00Z",
  "updated_at": "2026-11-12T10:02:00Z"
}
~~~~

Rejected: no-status

~~~~
{
  "id": "c_8f3k2m",
  "ref": "chat:c_8f3k2m",
  "kind": "chat",
  "title": "Keyboard Scout",
  "owner": {
    "type": "user",
    "id": "usr_01K9R2V6M8Q4T0B7C3D5E9F2GH"
  },
  "agent": {
    "id": "vibe",
    "name": "Keyboard Scout",
    "product": "chat",
    "glyph": "search",
    "hue": 212,
    "harness": "openvibe"
  },
  "waiting": {
    "for": "message",
    "since": "2026-11-12T10:02:00Z"
  },
  "preview": {
    "text": "Three picks under $90, with sources.",
    "from": "agent",
    "at": "2026-11-12T10:02:00Z"
  },
  "model": {
    "id": "openvibe/auto",
    "source": "openvibe",
    "name": "Auto"
  },
  "where": {
    "kind": "openvibe"
  },
  "context": {
    "site": "deals",
    "url": "https://openvibe.deals/",
    "title": "Deals"
  },
  "url": "https://openvibe.chat/vibe/c_8f3k2m",
  "counts": {
    "steps": 6,
    "unread": 1
  },
  "visibility": "private",
  "created_at": "2026-11-12T10:00:00Z",
  "updated_at": "2026-11-12T10:02:00Z"
}
~~~~

## Validate

~~~~
const contracts = require('openvibe-contracts');
contracts.validate('agents.run.updated@1', value);   // { valid, errors: [{ path, message }] }
~~~~
