Configuration Reference¶
One file decides how your server behaves: ~/.config/hivemind-core/server.json. There
are no start-up flags to hunt for — every port, every cipher, every plugin choice lives
here. This page lays out that file in full, block by block, with every default spelled
out, plus the satellite identity file and the ports everything listens on.
In a nutshell
hivemind-corereads~/.config/hivemind-core/server.jsonat startup;hivemind-core listentakes no flags, so all settings live in this file.- Configurable blocks:
binarize,allowed_encodings/allowed_ciphers,min_protocol_version, the password-strength keys,agent_protocol,binary_protocol,presence,network_protocol,policy.chain,last_seen_update_interval, anddatabase. - The database backend and TLS certificates are auto-selected on first run.
- Satellites store credentials in
~/.config/hivemind/_identity.json, written byhivemind-client set-identity.
server.json¶
hivemind-core reads ~/.config/hivemind-core/server.json at startup. hivemind-core listen takes no command-line flags; edit this file to change any setting.
Rather than describe the blocks in the abstract, here's the entire default file first — what you'd get on a fresh install. Read it once top to bottom to see the shape, then the sections after it unpack each block key by key. Everything you can tune lives somewhere in here:
Full default configuration¶
{
"binarize": false,
"allowed_encodings": [
"JSON-B64", "JSON-URLSAFE-B64",
"JSON-B91",
"JSON-Z85B", "JSON-Z85P",
"JSON-B32", "JSON-HEX"
],
"allowed_ciphers": ["CHACHA20-POLY1305", "AES-GCM"],
"min_protocol_version": 2,
"min_password_bits": 40,
"runtime_password_strength_check": true,
"agent_protocol": {
"module": "hivemind-ovos-agent-plugin",
"hivemind-ovos-agent-plugin": {
"host": "127.0.0.1",
"port": 8181
}
},
"binary_protocol": {
"module": null
},
"presence": {
"enabled": true,
"name": "HiveMind-Node",
"zeroconf": true,
"upnp": false
},
"network_protocol": {
"hivemind-websocket-plugin": {
"host": "0.0.0.0",
"port": 5678,
"ssl": false,
"cert_dir": "~/.local/share/hivemind",
"cert_name": "hivemind"
},
"hivemind-http-plugin": {
"host": "0.0.0.0",
"port": 5679,
"ssl": false,
"cert_dir": "~/.local/share/hivemind",
"cert_name": "hivemind"
}
},
"policy": {
"chain": [
{"module": "hivemind-ovos-agent-policy"}
]
},
"last_seen_update_interval": 0,
"database": {
"module": "hivemind-sqlite-db-plugin",
"hivemind-sqlite-db-plugin": {
"name": "clients",
"subfolder": "hivemind-core"
}
}
}
The database block above is selected automatically on first run: a fresh install defaults to hivemind-sqlite-db-plugin, while an existing JSON deployment keeps hivemind-json-db-plugin (see database below). cert_dir defaults to <xdg_data_home>/hivemind (e.g. ~/.local/share/hivemind).
binarize¶
| Key | Default | Description |
|---|---|---|
binarize |
false |
Enables the HiveMind binary framing protocol once it has been negotiated with the client. Defaults to false to stay compatible with older hivemind-bus-client versions that mishandle binary frames. |
allowed_encodings / allowed_ciphers¶
| Key | Default | Description |
|---|---|---|
allowed_encodings |
the 7 values below | Permitted message encodings, ordered by preference. The first encoding both peers support is used. |
allowed_ciphers |
["CHACHA20-POLY1305", "AES-GCM"] |
Permitted symmetric ciphers for payload encryption, ordered by preference. |
The supported encodings are: JSON-B64, JSON-URLSAFE-B64, JSON-B91, JSON-Z85B, JSON-Z85P, JSON-B32, JSON-HEX. Trim either list to restrict what the server will negotiate.
min_protocol_version¶
| Key | Default | Description |
|---|---|---|
min_protocol_version |
2 |
Lowest ProtocolVersion a client may negotiate. At 2 the server refuses the oldest JSON-only and no-binary clients. Raise it to 3 to require the Noise handshake from every client. |
The server enforces this floor twice: once at connect time, and again when the handshake completes, against the version the client actually performed. Read Refusing old clients before you raise it, because clients that used to downgrade in silence are disconnected instead.
min_password_bits / runtime_password_strength_check¶
| Key | Default | Description |
|---|---|---|
min_password_bits |
40 |
Guess-resistance floor, in bits, for a client password. add-client rejects anything weaker. |
runtime_password_strength_check |
true |
Re-check the password at handshake time, as a backstop against a hand-edited client database. The env var HIVEMIND_DISABLE_PASSWORD_STRENGTH_CHECK=1 also turns it off. |
The password is the only secret in the hive, so these two keys carry most of its security. See Weak-password refusal.
agent_protocol¶
| Key | Default | Description |
|---|---|---|
module |
"hivemind-ovos-agent-plugin" |
Agent backend plugin |
hivemind-ovos-agent-plugin.host |
"127.0.0.1" |
OVOS messagebus host |
hivemind-ovos-agent-plugin.port |
8181 |
OVOS messagebus port |
Set module to "hivemind-persona-agent-plugin" and configure accordingly for LLM/persona mode.
binary_protocol¶
| Key | Default | Description |
|---|---|---|
module |
null |
Binary data handler plugin. Set to "hivemind-audio-binary-protocol-plugin" to enable server-side audio |
When set to the audio binary protocol plugin, configure STT, TTS, VAD, and wakeword sub-keys. See Audio Binary Protocol.
presence¶
Local-network discovery. hivemind-core listen starts the announcer itself whenever the optional hivemind-presence package is installed, so this block is the control surface, not a separate command.
| Key | Default | Description |
|---|---|---|
enabled |
true |
Announce this node on the local network. Set to false to stay silent. |
name |
"HiveMind-Node" |
Name shown to clients that scan the network. |
zeroconf |
true |
Advertise over mDNS. |
upnp |
false |
Advertise over UPnP/SSDP. |
The announced port and TLS flag come from the first entry in network_protocol, not from this block. See Auto Discovery.
network_protocol¶
Multiple network protocol plugins can be active simultaneously. Each key is the plugin name; its value is the plugin-specific config.
| Plugin | Default port | Protocol |
|---|---|---|
hivemind-websocket-plugin |
5678 | WebSocket |
hivemind-http-plugin |
5679 | HTTP polling |
An MQTT transport is available as an alpha: package hivemind-mqtt-protocol,
plugin name hivemind-mqtt-plugin, broker port 1883 (config keys broker_host,
broker_port, broker_username, broker_password, tls, topic_prefix, qos,
idle_timeout). It provides the server-side transport only. An experimental
Usenet wormhole transport (hivemind-usenet, plugin hivemind-usenet-wormhole)
also exists but is unpublished.
Each network protocol plugin accepts the following TLS keys for serving over wss:// / https://:
| Key | Default | Description |
|---|---|---|
ssl |
false |
Serve over TLS. When true, a certificate is loaded from cert_dir/cert_name (generated if absent). |
cert_dir |
<xdg_data_home>/hivemind |
Directory holding the TLS certificate and key. |
cert_name |
"hivemind" |
Base filename for the .crt/.key pair in cert_dir. |
See Security & Permissions for the full TLS setup.
policy.chain¶
List of policy plugin modules applied in order to each incoming message. The default chain contains a single entry: hivemind-ovos-agent-policy, which enforces per-client skill and intent blacklists from Client.metadata.
Removed / ignored key: policy.fail_open
The policy chain is unconditionally fail-closed — any error in a policy denies the message, and there is no knob to change this. If an old server.json still carries a policy.fail_open key, hivemind-core strips it on load and logs a warning; the key has no effect. Operators upgrading a server should delete it.
last_seen_update_interval¶
| Key | Default | Description |
|---|---|---|
last_seen_update_interval |
0 |
Seconds to debounce the last_seen write to the client database. 0 keeps the per-message write. Raise it only when the database cannot absorb one write per admitted message. |
database¶
| Key | Default | Description |
|---|---|---|
module |
"hivemind-sqlite-db-plugin" |
Database backend plugin |
Per-plugin settings are nested under the plugin name key. See Database Backends.
Auto-selection: when server.json does not already define a database block, the backend is chosen automatically on first run. If a legacy clients.json exists (in <xdg_data_home>/hivemind-core/) and no SQLite clients.db is present, the JSON backend (hivemind-json-db-plugin) is kept so an upgrade never strands an existing credential store. Otherwise SQLite (hivemind-sqlite-db-plugin) is the default. Move an existing JSON store to SQLite with hivemind-core migrate-db --to sqlite.
Identity file¶
~/.config/hivemind/_identity.json — written by hivemind-client set-identity.
| Field | Description |
|---|---|
access_key |
Access credential assigned by hivemind-core |
password |
Used for PBKDF2 key derivation |
default_master |
hivemind-core host address (ws:// or wss://) |
default_port |
hivemind-core port (default: 5678) |
site_id |
Location identifier injected into OVOS context |
public_key |
RSA public key string |
secret_key |
Path to the RSA private key (PEM) file |
Default ports¶
| Service | Port | Protocol |
|---|---|---|
| HiveMind WebSocket | 5678 | WebSocket (ws:// / wss://) |
| HiveMind HTTP | 5679 | HTTP |
| OVOS messagebus | 8181 | WebSocket (internal) |
Next: CLI Reference · Security & Permissions
Source¶
Validated against the HiveMind source:
hivemind_core/config.py— the_DEFAULTconfig, database auto-selection, and thepolicy.fail_openstrip-and-warnhivemind_core/policy.py— the fail-closed policy chain andMessageTypeACLPolicy