AgentTimelineEntry agent.timeline-entry@1
Generated at from
openvibe-contracts v0.419.0 and
openvibe-sdk v0.161.0.
- Version
- 1.0.0
- Owner
- actor
- Visibility
- first-party
- Status
- active
- Compatibility
- backward
- Schema
https://openvibe.network/contracts/agent/timeline-entry.v1.json
One entry of the agent's timeline (design 2026-11-07 §2): one step of the agent's work, in one mode, for one person. The Dock shows it: the mode's icon and word, the title, where it ran and why, the outcome, the time and the cost. Only a title, an outcome and a link: never a prompt, a diff or a page. A person sees their own entries; another person's entry is a 404. The audience is 'private' (Only me) unless the person shared the entry through the one Share sheet.
Fields
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
id | string | yes |
| |
subject | string | yes | The person the step was for. |
|
mode | enum | yes |
| |
product | string | yes |
| |
ref | string | null |
| ||
title | string | yes |
| |
started_at | string | yes |
| |
ended_at | string | null |
| ||
status | enum | yes |
| |
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 |
| ||
reason | string | null |
| ||
transition | string | null |
| ||
computer | https://openvibe.network/contracts/platform/task.v1.json#/$defs/computer | |||
approval | object | null | The approval this step waits on, and the mode that owns it. The person answers it in the mode. | ||
audience | enum | yes | Who may see it. 'private' is Only me, the default; the other three come from the one Share sheet. |
|
shared | boolean | null | Whether the person shared this entry (the share row itself lives in the sharing system). |
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: entry
{
"id": "tl_01JAB2C3D4E5F6G7H8J9K0MNPS",
"subject": "usr_01JAB2C3D4E5F6G7H8J9K0MNPS",
"mode": "code",
"product": "codes",
"ref": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPS",
"title": "Running the checkout tests",
"started_at": "2026-11-07T09:00:00.000Z",
"ended_at": "2026-11-07T09:04:00.000Z",
"status": "done",
"placement": {
"where": "On your desktop",
"why": "it needs your files and your Claude sign-in, and it is free"
},
"cost_usd": 0.42,
"link": "https://codes.openvibe.network/tasks/tsk_01JAB2C3D4E5F6G7H8J9K0MNPS",
"reason": null,
"transition": null,
"approval": null,
"audience": "private",
"shared": false
}Valid: with-computer
{
"id": "tl_01JAB2C3D4E5F6G7H8J9K0MNPT",
"subject": "usr_01JAB2C3D4E5F6G7H8J9K0MNPS",
"mode": "browse",
"product": "surf",
"ref": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPT",
"title": "Surfing the web for you",
"started_at": "2026-11-07T09:00:00.000Z",
"ended_at": null,
"status": "running",
"placement": {
"where": "a shared desk host",
"why": "it browses for you, never with your accounts"
},
"cost_usd": null,
"link": "https://openvibe.surf/web/t/tsk_01JAB2C3D4E5F6G7H8J9K0MNPT",
"computer": {
"session_id": "ses_01JD2C3D4E5F6G7H8J9K0MNPQS",
"machine": "a shared desk host",
"where": "network",
"cost_hint": "an OpenVibe desk host, metered by the minute"
},
"reason": null,
"transition": null,
"approval": null,
"audience": "private",
"shared": false
}Rejected: with-prompt
{
"id": "tl_01JAB2C3D4E5F6G7H8J9K0MNPS",
"subject": "usr_01JAB2C3D4E5F6G7H8J9K0MNPS",
"mode": "code",
"product": "codes",
"ref": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPS",
"title": "Running the checkout tests",
"started_at": "2026-11-07T09:00:00.000Z",
"ended_at": "2026-11-07T09:04:00.000Z",
"status": "done",
"placement": {
"where": "On your desktop",
"why": "it needs your files and your Claude sign-in, and it is free"
},
"cost_usd": 0.42,
"link": "https://codes.openvibe.network/tasks/tsk_01JAB2C3D4E5F6G7H8J9K0MNPS",
"reason": null,
"transition": null,
"approval": null,
"audience": "private",
"shared": false,
"prompt": "the prompt the person typed"
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('agent.timeline-entry@1', value); // { valid, errors: [{ path, message }] }