ReportSession report.session@1
Generated at from
openvibe-contracts v0.419.0 and
openvibe-sdk v0.161.0.
- Version
- 1.0.0
- Owner
- report
- Visibility
- public
- Status
- active
- Compatibility
- backward
- Schema
https://openvibe.network/contracts/report/session.v1.json
report.session@1 (the Agent Streams plan, S3): the report of one agent session, whatever ran it - a Codes task, an Actor task, a desk session or a session on a person's own machine. OWNER is the person it belongs to, SOURCE where the work ran and TASK the task it is about, with a link back to it. TIMELINE holds the steps as they happened (the same shape as live.agent-stream-step@1). OUTPUTS are what came out (a pull request, files, pages, a deploy, a clip, the VOD). PROOF is Codes' finished-task proof: the tests, the screenshots and the review. COST_USD and MODELS say what it cost and which models ran. HIGHLIGHTS are up to five one-line moments. STREAM is the agent stream it streamed on, when it did. VISIBILITY is who may see it: private (the default), unlisted (anyone with the link) or public. NEVER IN A REPORT: the raw transcript (the source service keeps it for the owner, privately), secrets (the house redactor runs over every text field before anything is stored) and code or diffs (a link to the pull request is fine; its content shows only when the repository is public).
Fields
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
id | string | yes | The report's id (ULID, Crockford base32). |
|
owner | string | yes | The person the session was theirs. |
|
source | enum | yes | Where the session ran. |
|
task | https://openvibe.network/contracts/report/session.v1.json#/$defs/task | yes | ||
started_at | string | yes |
| |
ended_at | string | yes |
| |
worked_seconds | integer | yes | How long the agent worked (the page's 'worked 42 min'). |
|
outcome | enum | yes | How the session ended. A session that did not finish says why in stopped_because. |
|
stopped_because | string | Why it stopped, in plain words. Present when the outcome is not done. |
| |
summary | string | yes | What was asked and what happened, in plain words. |
|
timeline | https://openvibe.network/contracts/report/session.v1.json#/$defs/step | yes | The steps, in the order they happened. | |
outputs | https://openvibe.network/contracts/report/session.v1.json#/$defs/output | yes | ||
proof | https://openvibe.network/contracts/report/session.v1.json#/$defs/proof | yes | ||
cost_usd | number | null | yes | What the session cost, in dollars. |
|
models | array of string | yes | Which models ran. |
|
highlights | array of string | yes | Up to five one-line moments. |
|
stream | object | null | yes | The agent stream the session streamed on, when it did. | |
visibility | enum | yes |
|
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: session
{
"id": "rps_01JAN2C3D4E5F6G7H8J9K0MNPS",
"owner": "usr_01JAN2C3D4E5F6G7H8J9K0MNPS",
"source": "codes",
"task": {
"title": "Ship the checkout page",
"ref": "tsk_01JAN2C3D4E5F6G7H8J9K0MNPS",
"url": "https://openvibe.codes/t/tsk_01JAN2C3D4E5F6G7H8J9K0MNPS"
},
"started_at": "2026-11-06T18:00:00.000Z",
"ended_at": "2026-11-06T18:42:00.000Z",
"worked_seconds": 2520,
"outcome": "done",
"summary": "Asked for a checkout page; the agent built it, ran the tests and opened a pull request.",
"timeline": [
{
"at": "2026-11-06T18:01:00.000Z",
"title": "Read the checkout code",
"status": "passed"
},
{
"at": "2026-11-06T18:20:00.000Z",
"title": "Run the checkout tests",
"status": "passed",
"tests": {
"passed": 12,
"failed": 0
}
}
],
"outputs": [
{
"kind": "pr",
"url": "https://forgejo.example/openvibe/site/pulls/7",
"title": "Checkout page",
"state": "open"
}
],
"proof": {
"tests": {
"passed": 12,
"failed": 0
},
"screenshots": [
"med_01JAN2C3D4E5F6G7H8J9K0MNPS"
],
"review": {
"verdict": "Looks good",
"notes": "The mobile layout needs a wider gutter."
}
},
"cost_usd": 0.31,
"models": [
"claude-sonnet-4"
],
"highlights": [
"Found the coupon bug on the first read"
],
"stream": {
"ags_id": "ags_01JAN2C3D4E5F6G7H8J9K0MNPS",
"vod_id": "vod_01JAN2C3D4E5F6G7H8J9K0MNPS"
},
"visibility": "unlisted"
}Rejected: id-not-rps
{
"id": "session_01JAN2C3D4E5F6G7H8J9K0MNPS",
"owner": "usr_01JAN2C3D4E5F6G7H8J9K0MNPS",
"source": "codes",
"task": {
"title": "Ship the checkout page",
"ref": "tsk_1"
},
"started_at": "2026-11-06T18:00:00.000Z",
"ended_at": "2026-11-06T18:42:00.000Z",
"worked_seconds": 2520,
"outcome": "done",
"summary": "Asked for a checkout page.",
"timeline": [],
"outputs": [],
"proof": {
"tests": {
"passed": 1,
"failed": 0
},
"screenshots": [],
"review": null
},
"cost_usd": 0.31,
"models": [],
"highlights": [],
"stream": null,
"visibility": "unlisted"
}Rejected: outcome-unknown
{
"id": "rps_01JAN2C3D4E5F6G7H8J9K0MNPS",
"owner": "usr_01JAN2C3D4E5F6G7H8J9K0MNPS",
"source": "codes",
"task": {
"title": "Ship the checkout page",
"ref": "tsk_1"
},
"started_at": "2026-11-06T18:00:00.000Z",
"ended_at": "2026-11-06T18:42:00.000Z",
"worked_seconds": 2520,
"outcome": "finished",
"summary": "Asked for a checkout page.",
"timeline": [],
"outputs": [],
"proof": {
"tests": {
"passed": 1,
"failed": 0
},
"screenshots": [],
"review": null
},
"cost_usd": 0.31,
"models": [],
"highlights": [],
"stream": null,
"visibility": "unlisted"
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('report.session@1', value); // { valid, errors: [{ path, message }] }