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.
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://orhttps://: 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.*orrecognizer_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 JSONcontext) - Ring buffer with configurable capacity and
since_idpagination - 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
- ovos-messagebus: the bus server this tool monitors
- ovos-bus-client: the client library used in service mode
- ovos-core: the intent pipeline whose traffic you trace
- hivemind-core: protected remote access to a bus, where busmon also works
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
63ce173467bb11df4a01ebe2252560d8558b36425b80b92319fb127a58305f0f
|
|
| MD5 |
af6b55141b3785ac661e306f140446b4
|
|
| BLAKE2b-256 |
6ed11f98ab7281fc5982a1f9898c8af2e1f34ea31af22f8a1db36c29852621a6
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90b141188509f01682403136beb72963504acce7965319dc347276b2b17515d5
|
|
| MD5 |
994e11639f0a1e0be2588f037feb7d77
|
|
| BLAKE2b-256 |
6b87964ceaccfef27d53a803e2349efe84b5753b003db1edc5d5af240ba74770
|