{"id":"pg_01M4PM023A3GPQB0K690HKZ4Z4","space":"openvibe","slug":"openvibe-run","url":"https://openvibe.wiki/w/openvibe/openvibe-run","state":"published","visibility":"public","revision":2,"title":"OpenVibe.Run","summary":"The network's job service at openvibe.run: it accepts jobs, places each on a node advertising the runtime class it needs, sends it to OpenVibe.Bot and mirrors it to its end.","body_markdown":"**OpenVibe.Run** is the job service of the network, served at `openvibe.run` on port 4920. It accepts jobs, places each one on a node that advertises the runtime class it needs, and follows it to its end.\n\n## What it does\n\nA job belongs to a project, is billed per wall-clock second it runs, and is visible only to the token that project presents. Submit (`POST /api/v1/jobs`, capability `run.job.submit`) validates against a released contract, mints a `job_<ULID>` id, stores the row queued and writes `run.job.queued` in the same transaction. A poller places the job from the Fabric's offers using `openvibe-sdk/placement`, sends it to [[OpenVibe.Bot]], mirrors Bot's state and the node's stdout back, and settles it. `/api/v1/jobs/:id/stream` replays and follows a job's output as a server-sent event stream.\n\n## What it does not do yet\n\nRun serves its own site at `openvibe.run` since 2026-10-11. First-party callers such as [[OpenVibe.Codes]] submit jobs on loopback. A hosted runner for untrusted code waits for a separate, isolated worker host.\n## How it fits the network\n\nIt verifies tokens issued by [[OpenVibe.Network]] and publishes `run.job.*` events to [[OpenVibe.Events]]. It owns no node link or per-second metering, which belong to [[OpenVibe.Bot]], and it holds no Billing token.\n\n## Status\n\nSTATUS.json's stage is \"alpha\"; it is deployed on the host since 2026-10-07, with the job API reached by first-party callers on loopback.","published_at":"2026-10-11T23:15:33.626Z","revision_published_at":"2026-10-15T00:32:10.500Z","revision_created_at":"2026-10-15T00:32:10.491Z","authorship":{"mode":"imported","workflow":null,"reviewed":false},"infobox":[{"key":"repository","label":"Repository","type":"url","value":"https://github.com/OpenVibers/OpenVibe.Run"},{"key":"domain","label":"Domain","type":"text","value":"openvibe.run"},{"key":"port","label":"Port","type":"number","value":4920},{"key":"runtime","label":"Runtime","type":"text","value":"Node 22, Express 4, PostgreSQL 18, Valkey 9"},{"key":"status","label":"Status","type":"text","value":"alpha"}],"citations":[{"url":"https://github.com/OpenVibers/OpenVibe.Run/blob/6eb9d7799c5f74e64c0f0bee5ceff4594ded11db/README.md","title":"OpenVibe.Run README (commit 6eb9d77)","source_item_id":null,"retrieved_at":"2026-10-14T23:30:00.000Z","quote":"The job service of the network (openvibe.run).","license_note":null},{"url":"https://github.com/OpenVibers/OpenVibe.Run/blob/6eb9d7799c5f74e64c0f0bee5ceff4594ded11db/STATUS.json","title":"OpenVibe.Run STATUS.json (commit 6eb9d77)","source_item_id":null,"retrieved_at":"2026-10-14T23:30:00.000Z","quote":"unit openvibe-run.service on 127.0.0.1:4920 since 2026-10-07","license_note":null}],"attachments":[],"links":[{"space":"openvibe","slug":"openvibe-bot"},{"space":"openvibe","slug":"openvibe-codes"},{"space":"openvibe","slug":"openvibe-events"},{"space":"openvibe","slug":"openvibe-network"}],"indexability":{"indexable":false,"reasons":["ai_generated_unreviewed"]}}