AgentsSource agents.source@1
Generated at from
openvibe-contracts v0.419.0 and
openvibe-sdk v0.161.0.
- Version
- 1.0.0
- Owner
- network
- Visibility
- public
- Status
- active
- Compatibility
- backward
- Decision
- ADR-044
- Schema
https://openvibe.network/contracts/agents/source.v1.json
agents.source@1 (agent-engine.md §5, 2026-11-12): one place where asks are taken in without opening an agent app, and how. KIND is the place (the feed, chat rooms and DMs, comments, git.openvibe.codes, a composer, notifications, mail, a schedule or a goal, a webhook, a machine's events); ON turns it on; WHO says whose words may start work there (only its owner, a list of people, their followers, or anyone); RULE says in words what counts as an ask; CREATES is the run an accepted ask becomes (its kind, target, agent and play); BUDGET is each such run's hard limit; ANSWER is how the run speaks back on the thread (a reply, a card that follows the run, a notice, or nothing). Intake stores the ask first and acts after, with backoff; an inferred ask confirms before it acts (agents.run@1's MANDATE.STRENGTH).
Fields
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
id | string | yes |
| |
kind | enum | yes |
| |
name | string |
| ||
owner | object | yes |
| |
owner.type | enum | yes |
| |
owner.id | string | yes |
| |
on | boolean | yes | ||
where | object | Which one of that kind: a room, a repository, a feed, a machine. |
| |
where.service | string | yes |
| |
where.kind | string |
| ||
where.id | string |
| ||
where.url | string |
| ||
who | object | yes |
| |
who.may | enum | yes |
| |
who.list | array of string |
| ||
rule | string | What counts as an ask here, in words (a post that asks for a feature or reports a bug; a message that names @Vibe). |
| |
creates | object | yes |
| |
creates.kind | enum | yes |
| |
creates.target | one of | What a code run works on. new: a new project in the person's own space. openvibe: OpenVibe itself; the orchestrator finds the repositories and opens pull requests, never merges. An object names one repository. | ||
creates.agent | string |
| ||
creates.play | string | The play (agents.play@1's ID) this run's tree follows: solo, advisor, plan-execute, fan-out, team, grader-loop, research-build, issue-to-pr, watch, or a person's own. On a child run it is its parent's. |
| |
budget | object |
| ||
budget.usd | number |
| ||
budget.tokens | integer |
| ||
budget.seconds | number |
| ||
budget.steps | integer |
| ||
answer | enum |
| ||
created_at | string |
| ||
updated_at | string |
|
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: the-owners-feed
{
"id": "src_01K9R5ABCDEF",
"kind": "feed",
"name": "Asks on my feed",
"owner": {
"type": "user",
"id": "usr_01K9R2V6M8Q4T0B7C3D5E9F2GH"
},
"on": true,
"where": {
"service": "community",
"kind": "feed",
"id": "home"
},
"who": {
"may": "owner"
},
"rule": "A post that asks for a feature or reports a bug in OpenVibe.",
"creates": {
"kind": "code",
"target": "openvibe",
"play": "issue-to-pr"
},
"budget": {
"usd": 5
},
"answer": "card",
"created_at": "2026-11-12T11:00:00Z",
"updated_at": "2026-11-12T11:00:00Z"
}Valid: vibe-in-a-room
{
"id": "src_01K9R5GHJKMN",
"kind": "chat",
"owner": {
"type": "user",
"id": "usr_01K9R2V6M8Q4T0B7C3D5E9F2GH"
},
"on": true,
"where": {
"service": "chat",
"kind": "room",
"id": "design-crit",
"url": "https://openvibe.chat/r/design-crit"
},
"who": {
"may": "list",
"list": [
"usr_01K9R6PQRSTVWXYZ0123456789"
]
},
"rule": "A message that names @Vibe.",
"creates": {
"kind": "chat"
},
"answer": "reply"
}Rejected: a-kind-of-place-not-known
{
"id": "src_01K9R5ABCDEF",
"kind": "carrier-pigeon",
"name": "Asks on my feed",
"owner": {
"type": "user",
"id": "usr_01K9R2V6M8Q4T0B7C3D5E9F2GH"
},
"on": true,
"where": {
"service": "community",
"kind": "feed",
"id": "home"
},
"who": {
"may": "owner"
},
"rule": "A post that asks for a feature or reports a bug in OpenVibe.",
"creates": {
"kind": "code",
"target": "openvibe",
"play": "issue-to-pr"
},
"budget": {
"usd": 5
},
"answer": "card",
"created_at": "2026-11-12T11:00:00Z",
"updated_at": "2026-11-12T11:00:00Z"
}Rejected: a-list-of-not-people
{
"id": "src_01K9R5ABCDEF",
"kind": "feed",
"name": "Asks on my feed",
"owner": {
"type": "user",
"id": "usr_01K9R2V6M8Q4T0B7C3D5E9F2GH"
},
"on": true,
"where": {
"service": "community",
"kind": "feed",
"id": "home"
},
"who": {
"may": "list",
"list": [
"[email protected]"
]
},
"rule": "A post that asks for a feature or reports a bug in OpenVibe.",
"creates": {
"kind": "code",
"target": "openvibe",
"play": "issue-to-pr"
},
"budget": {
"usd": 5
},
"answer": "card",
"created_at": "2026-11-12T11:00:00Z",
"updated_at": "2026-11-12T11:00:00Z"
}Rejected: nothing-to-create
{
"id": "src_01K9R5ABCDEF",
"kind": "feed",
"name": "Asks on my feed",
"owner": {
"type": "user",
"id": "usr_01K9R2V6M8Q4T0B7C3D5E9F2GH"
},
"on": true,
"where": {
"service": "community",
"kind": "feed",
"id": "home"
},
"who": {
"may": "owner"
},
"rule": "A post that asks for a feature or reports a bug in OpenVibe.",
"budget": {
"usd": 5
},
"answer": "card",
"created_at": "2026-11-12T11:00:00Z",
"updated_at": "2026-11-12T11:00:00Z"
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('agents.source@1', value); // { valid, errors: [{ path, message }] }