AgentsInstall agents.install@1
Generated at from
openvibe-contracts v0.419.0 and
openvibe-sdk v0.161.0.
- Version
- 1.0.0
- Owner
- actor
- Visibility
- public
- Status
- active
- Compatibility
- backward
- Decision
- ADR-044
- Schema
https://openvibe.network/contracts/agents/install.v1.json
agents.install@1 (agent-blueprints.md, 2026-11-12): a person's own agent made from one blueprint version. AGENT is the agent it made (actor.agent@1's id), BLUEPRINT the version it runs, INPUTS what the person filled in, AGREED the asks the install screen showed and the person accepted (openvibe-sdk/agents/blueprint asks(), by key), PLACES the machines the person chose for the blueprint's places (their own, or shared with them by a grant), UPDATES whether a new version that asks for no more is taken without asking (a version that asks for more always waits for a yes). Keys and grants are the person's own and are never copied into an install.
Fields
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
agent | string | yes |
| |
owner | object | yes |
| |
owner.type | const | yes |
| |
owner.id | string | yes |
| |
blueprint | string | yes |
| |
inputs | object | |||
agreed | array of string | yes | The keys of the asks agreed to (hands:ov:live.chat.post, places:own, when:event:live.stream.started, …). |
|
places | object |
| ||
places.own | array of string | The person's own Link machines. |
| |
places.shared | array of string | Machines shared with the person; each use still needs that machine's grant. |
| |
updates | enum | yes |
| |
pending | string | null | A newer version that waits for the person's yes. |
| |
installed_at | string | yes |
| |
updated_at | string |
|
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: a-wider-version-waiting
{
"agent": "agt_01JD8C4QJ7Z3K9W2X5V6N1M0PJ",
"owner": {
"type": "user",
"id": "usr_01JD8C4QJ7Z3K9W2X5V6N1M0PK"
},
"blueprint": "bp_01JD8C4QJ7Z3K9W2X5V6N1M0PA@2",
"inputs": {
"channel": "maticus"
},
"agreed": [
"hands:ov:live.transcript.read",
"hands:ov:live.chat.read",
"hands:ov:media.clip.create",
"hands:ov:live.chat.post",
"when:event:live.stream.started",
"memory:person"
],
"places": {
"own": [],
"shared": []
},
"updates": "ask",
"pending": "bp_01JD8C4QJ7Z3K9W2X5V6N1M0PA@3",
"installed_at": "2026-11-12T21:00:00Z",
"updated_at": "2026-11-12T21:00:00Z"
}Valid: clip-finder-for-a-streamer
{
"agent": "agt_01JD8C4QJ7Z3K9W2X5V6N1M0PJ",
"owner": {
"type": "user",
"id": "usr_01JD8C4QJ7Z3K9W2X5V6N1M0PK"
},
"blueprint": "bp_01JD8C4QJ7Z3K9W2X5V6N1M0PA@3",
"inputs": {
"channel": "maticus"
},
"agreed": [
"hands:ov:live.transcript.read",
"hands:ov:live.chat.read",
"hands:ov:media.clip.create",
"hands:ov:live.chat.post",
"when:event:live.stream.started",
"memory:person"
],
"places": {
"own": [],
"shared": []
},
"updates": "same-or-less",
"pending": null,
"installed_at": "2026-11-12T21:00:00Z",
"updated_at": "2026-11-12T21:00:00Z"
}Rejected: a-blueprint-without-a-version
{
"agent": "agt_01JD8C4QJ7Z3K9W2X5V6N1M0PJ",
"owner": {
"type": "user",
"id": "usr_01JD8C4QJ7Z3K9W2X5V6N1M0PK"
},
"blueprint": "bp_01JD8C4QJ7Z3K9W2X5V6N1M0PA",
"inputs": {
"channel": "maticus"
},
"agreed": [
"hands:ov:live.transcript.read",
"hands:ov:live.chat.read",
"hands:ov:media.clip.create",
"hands:ov:live.chat.post",
"when:event:live.stream.started",
"memory:person"
],
"places": {
"own": [],
"shared": []
},
"updates": "same-or-less",
"pending": null,
"installed_at": "2026-11-12T21:00:00Z",
"updated_at": "2026-11-12T21:00:00Z"
}Rejected: keys-copied-in
{
"agent": "agt_01JD8C4QJ7Z3K9W2X5V6N1M0PJ",
"owner": {
"type": "user",
"id": "usr_01JD8C4QJ7Z3K9W2X5V6N1M0PK"
},
"blueprint": "bp_01JD8C4QJ7Z3K9W2X5V6N1M0PA@3",
"inputs": {
"channel": "maticus"
},
"agreed": [
"hands:ov:live.transcript.read",
"hands:ov:live.chat.read",
"hands:ov:media.clip.create",
"hands:ov:live.chat.post",
"when:event:live.stream.started",
"memory:person"
],
"places": {
"own": [],
"shared": []
},
"updates": "same-or-less",
"pending": null,
"installed_at": "2026-11-12T21:00:00Z",
"updated_at": "2026-11-12T21:00:00Z",
"keys": {
"gemini": "not-a-real-key"
}
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('agents.install@1', value); // { valid, errors: [{ path, message }] }