Skip to main content
Every scaffolded folder ships with its own test harness. The loop is short:

bun verify.ts

The verifier speaks real MCP over stdio to your server, exactly the way VoiceOS does — no mocks. It re-reads your manifest every run and checks that:
  • the manifest and preview fixture are schemaVersion: 1;
  • the MCP handshake succeeds;
  • the tools your server registers match the manifest exactly, both directions — a drifted name is the classic silent failure;
  • every tool has a model-facing description worth routing on;
  • every tool, called with its preview-fixture args, returns text and 1–3 glance blocks.
It exits non-zero on any failure, which makes it the feedback loop for AI coding agents too — AGENTS.md in your folder tells them to run it after every change.

Preview fixtures

voiceos.integration.preview.json holds safe sample inputs per tool:
They’re what verify.ts calls your tools with, and what the Integration Studio uses to preview cards.
Keep fixtures safe to execute. A fixture for an acting tool should point at a harmless target — it will really run.
In the Studio, fixtures self-heal: every real test-drive run overwrites them with what the tool actually returned.

Validating pieces in isolation

From the command line:
In tests, the SDK exports the same validators VoiceOS runs:
Errors come back as flat path: message strings — e.g. tools.0.name: tool name must be snake_case starting with a letter.

Testing fast intents

Fast intents need both declaration checks and live Agent Mode checks. verify.ts calls tool handlers; it does not prove that the intent selector will choose them. From a repository checkout:
Validation checks tool references, slot types, required inputs, language tags, placeholders, and declaration limits. The dry-run prints intent IDs and arguments without executing any tools. It checks exact phrases and static enum templates only; it does not call the live model, extract free text/numeric slots, or fetch valuesFrom: "tool" choices. Use the real app to test those cases. After reloading, test voice and typed commands against safe data: A working tool call alone does not prove the fast path won. If you operate a VoiceOS development server, inspect its intent selection/race telemetry and shadow-mode evaluation. A supporting desktop and an enabled server rollout are required for fast dispatch; shadow mode evaluates without dispatching the selected intent. Do not use offline matches as a latency or accuracy benchmark.

Testing in the app

1

Install from folder

Settings → Agent Mode → Integrations → Install from folder, then talk to the agent.
2

Reload after edits

Hit the integration’s Reload — it re-reads the manifest and restarts your server. Tools update on the next turn.
3

Read the logs

Your server’s stderr is the diagnostic channel. VoiceOS captures it and the integration’s log view shows it. console.error freely — but never log secrets.
4

Test-drive in the Studio

For anything opened in the Studio: real scoped agent turns against your draft. Click any tool row to stage its card, and fill Required fields to test key-gated paths.

What to test before sharing