voiceos.integration.json, validated on install and on every reload.
Validation errors are flat path: message strings; anything not listed here
is rejected or ignored.
The smallest valid manifest
Everything else on this page is optional or a variation of these eight fields:Top level
publisher
runtime
One of three shapes:
auth
apiKeyfields default torequired: true; values are collected via setup fields, stored encrypted, and injected asprocess.env.<key>. Never persisted in plaintext, never shown to the agent.oauth2is in the contract today; the VoiceOS-brokered login flow ships with the managed broker.pkcedefaults totrue.
permissions
All opt-in, all shown to the user at install time:
preferences
tools[]
Cross-field validation
These fire even when every field parses:- A tool with
execution.mode: "background"requires thebackgroundpermission. - A
selectpreference must declare non-emptyoptions. - An
authfield and a preference cannot share a name — they share one config namespace and one env var. - Every
{{binding}}in a tool’s confirmation must name a property of that tool’sinputSchema. - A confirmation view may contain at most one
widgetblock, and a widget view may not also containbutton/actionsblocks. canvasblocks are rejected inschemaVersion: 1(reserved for a future sandboxed renderer), and would additionally require anetworkpermission.role: "custom"buttons/actions are rejected (reserved for a future server round-trip).
Validating
validateManifest(json) / validateView(view) from
@voiceos/integration-sdk — both return
{ ok: true, value } | { ok: false, errors: string[] }.
