Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

ovos-busmon

Live monitor, capture, and injection tool for the OpenVoiceOS messagebus. Stream every bus message to a browser, filter by type (glob), inspect payloads, export captures as JSONL, and inject messages from the UI.

timeline view tracing one interaction

See the docs for a full walkthrough with screenshots. Start with the tutorials.

Debug your OVOS device from a URL

The monitor UI is a single static page. Host it on GitHub Pages, and anyone with a laptop that can reach an OVOS device connects to its messagebus at once. No install, no server: the page opens a WebSocket straight to ws://localhost:8181/core. Set the host and port in the connection panel or with the ?host=&port= query parameters.

Browser note: Chromium browsers allow a ws://localhost connection from an https:// page, because localhost is a trustworthy origin. Safari and some Firefox versions block it. If the connection is refused, click Download standalone HTML in the UI and open the saved file locally. It has the same functions and no restrictions.

Two transport modes, one UI

Mode 1: fully in-browser (zero server)

Open static/index.html directly, or deploy it to GitHub Pages. The page opens a WebSocket directly to the OVOS messagebus (ws://localhost:8181/core by default). Set the host, port, and path in the connection panel or with query parameters:

file:///path/to/static/index.html?host=192.168.1.10&port=8181&path=/core

This works whenever the browser can reach the bus, on the same machine as OVOS or on a LAN. No server is required.

Mode 2: service (ovos-busmon)

Install and run the FastAPI service. It connects server-side to the bus through ovos-bus-client and serves:

Endpoint Description
GET / The same static UI (auto-detected transport: SSE instead of WS)
GET /api/status Service health, buffer stats, bus coordinates
GET /api/messages Ring buffer contents (?since_id=N&limit=M)
GET /api/stream SSE live tail
POST /api/send Inject a message onto the bus
POST /api/chat Send a text utterance as a real client would (chat panel)
GET /api/export JSONL download of the full capture buffer

The UI auto-detects the transport:

  • served from http:// or https://: SSE and REST (Mode 2)
  • opened as file:// or from a static host: direct WebSocket (Mode 1)

Installation

pip install ovos-busmon

Or from source:

git clone https://github.com/OpenVoiceOS/ovos-busmon
cd ovos-busmon
pip install -e .[dev]

Running the service

ovos-busmon
# Listens on http://127.0.0.1:8005 by default

Configuration

Set every option through environment variables, or through a .env file:

Variable Default Description
OVOS_BUS_HOST localhost OVOS messagebus host
OVOS_BUS_PORT 8181 OVOS messagebus port
BUSMON_HOST 127.0.0.1 Address to bind the HTTP service
BUSMON_PORT 8005 Port to bind the HTTP service
BUSMON_TOKEN (empty) Shared-secret token. When set, the API needs it
BUSMON_USERNAME (empty) HTTP Basic auth username
BUSMON_PASSWORD (empty) HTTP Basic auth password
BUFFER_SIZE 2000 Ring buffer capacity (messages)

Authentication is off until you set BUSMON_TOKEN, or BUSMON_USERNAME and BUSMON_PASSWORD. There are no default credentials.

Docker

docker compose up --build

The compose file binds the service to 127.0.0.1:8005 only (localhost). To reach an OVOS bus on the host machine, it sets OVOS_BUS_HOST=host.docker.internal automatically.

Message injection

The Inject panel is a power tool. It sends arbitrary messages onto the bus, which helps with development and testing. The service binds only to 127.0.0.1 by default. Do not expose it to untrusted networks.

Features

  • Live message stream with expandable, highlighted JSON (vendored highlighter, fully offline, no CDN)
  • Timeline view: group the stream by session into expandable per-interaction traces with category badges
  • Chat panel: chat with the assistant in text over one stable session id (multi-turn and converse work) while you watch the bus handle each turn
  • Filter by message type (glob patterns, for example ovos.* or recognizer_loop:*)
  • Full-text search across type, data, context and session
  • Filter by session id, source, and destination
  • Sort newest-first or oldest-first
  • Pause and resume capture, plus auto-pause on filter match
  • Bounded client-side buffer (configurable, with a visible dropped-count)
  • Export as JSONL or JSON (client-side or through /api/export)
  • Message injection (type, JSON data, and optional JSON context)
  • Ring buffer with configurable capacity and since_id pagination
  • GitHub Pages deployable (Mode 1, no server needed)

Development

pip install -e .[dev]
pytest tests/ -v

Security

ovos-busmon is a local debugging tool. It can inject any message onto the bus, so an open bind beyond loopback is a remote-control hole.

Authentication is off by default and is meant for loopback use. There are no default credentials. To use the service beyond loopback, set BUSMON_TOKEN (recommended), or set BUSMON_USERNAME and BUSMON_PASSWORD. The service refuses to start on a non-loopback host when no authentication is set.

A token travels as ?token= on the URL or as an Authorization: Bearer header. The ?token= form lets the live UI carry the token on its SSE stream, which HTTP Basic cannot. HTTP Basic auth sends credentials in plaintext unless you add TLS. Keep the default 127.0.0.1 bind for local use, and do not expose the service to the public internet.

Related projects

License

MIT. See LICENSE.

Credits

Developed by TigreGotico for OpenVoiceOS.

Funded by NGI0 Commons Fund / NLnet under grant agreement No 101135429, through the European Commission's Next Generation Internet programme.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ovos_busmon-0.1.1a2.tar.gz (20.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ovos_busmon-0.1.1a2-py3-none-any.whl (12.7 kB view details)

Uploaded Python 3

File details

Details for the file ovos_busmon-0.1.1a2.tar.gz.

File metadata

  • Download URL: ovos_busmon-0.1.1a2.tar.gz
  • Upload date:
  • Size: 20.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for ovos_busmon-0.1.1a2.tar.gz
Algorithm Hash digest
SHA256 63ce173467bb11df4a01ebe2252560d8558b36425b80b92319fb127a58305f0f
MD5 af6b55141b3785ac661e306f140446b4
BLAKE2b-256 6ed11f98ab7281fc5982a1f9898c8af2e1f34ea31af22f8a1db36c29852621a6

See more details on using hashes here.

File details

Details for the file ovos_busmon-0.1.1a2-py3-none-any.whl.

File metadata

  • Download URL: ovos_busmon-0.1.1a2-py3-none-any.whl
  • Upload date:
  • Size: 12.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for ovos_busmon-0.1.1a2-py3-none-any.whl
Algorithm Hash digest
SHA256 90b141188509f01682403136beb72963504acce7965319dc347276b2b17515d5
MD5 994e11639f0a1e0be2588f037feb7d77
BLAKE2b-256 6b87964ceaccfef27d53a803e2349efe84b5753b003db1edc5d5af240ba74770

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page