guide · v0.8
From brew install to your first supervised process in about sixty seconds.
Single Go binary. SQLite ships with it. The dashboard is embedded in the binary, so the only thing you need to add is an LLM key.
Two commands. After the second one you have a Vega runtime listening on localhost:8080 with the dashboard, REST API, and event stream live.
$ brew install everydev1618/tap/vega
$ export ANTHROPIC_API_KEY=sk-ant-...
$ vega serve
▸ orchestrator listening on :8080
▸ dashboard ready at http://localhost:8080
▸ sse stream at /api/v1/events
Open the dashboard. Talk to Iris, your chief of staff. Tell her what you need; Hera will build the agents on the fly, and Mira will curate everyone's memory into a shared wiki as you go.
The identity endpoint is a safe round trip. It returns the orchestrator and builder display names and confirms the runtime is alive.
const res = await fetch('http://localhost:8080/api/v1/identity')
const identity = await res.json()
// { orchestrator: ..., builder: ..., product_name: ... }
other endpoints worth poking at first
| GET | /api/v1/agents | All agents in this runtime |
| GET | /api/v1/processes | Running + recently terminated processes |
| GET | /api/v1/channels | Multi-agent channels |
| GET | /api/v1/inbox | Items waiting for review |
| POST | /api/v1/agents/{name}/chat | DM an agent · returns the response |
SSE keeps the wire open and pushes JSON frames. No websocket handshake, no auth dance for the local case, no polling.
EventSource opens a persistent stream. Agents push every state change to it as they happen.
const es = new EventSource('http://localhost:8080/api/v1/events')
es.addEventListener('process.completed', (e) => {
const ev = JSON.parse(e.data)
// dispatch to your store / queries
})
event types
process.started · process.completed · process.failed
workflow.completed · workflow.failed
agent.created · agent.deleted
chat.update · chat.event
channel.message · channel.thread_reply
supervisor.restart · supervisor.give_up
Per-agent live progress (token deltas, tool calls) lives on a separate stream:GET /api/v1/agents/{name}/chat/stream. Channels have an analogous pair.
Generated from the OpenAPI spec the runtime serves. Pair withopenapi-fetchfor fully type-inferred client calls.
import createClient from 'openapi-fetch'
import type { paths } from '@vega/api-types'
const client = createClient({
baseUrl: 'http://localhost:8080',
})
const { data, error } = await client.GET('/api/v1/identity')
// data is fully typed; error too
Until @vega/api-types is published to npm, vendor or path-import.
Local vega serve skips auth entirely. Multi-tenant deployments need it.
Layer JWT auth on top of vega serve. govega ships a cmd/control-plane that issues RS256 tokens with a JWKS endpoint. Your runtime validates them locally.
Clients send Authorization: Bearer <token>on fetch and ?access_token=<token>on SSE. Production-grade login plugs into WorkOS or your IdP of choice.