ovos-core¶
Maturity: Mature ⬤⬤⬤⬤⬤
Long-lived and actively maintained. Depend on it freely. Rated by repository health, not version.
In a nutshell
ovos-core is the "brain" of your assistant. It does not listen through the microphone or talk through the speaker. Those are separate helpers. It is the part in the middle that loads your skills, takes the words you said, decides which skill should answer, and hands back the reply.
Think of it as the dispatcher in a control room, routing each request to the right place without doing the talking or listening itself. Everything it does travels over the messagebus. See also the Glossary.
📐 Formal specification
ovos-core is the reference orchestrator, the logical role that runs the pipeline, routes matches to handlers, and emits the handler-lifecycle events. That role is specified by OVOS-PIPELINE-1: Utterance Lifecycle & Pipeline. The transformer chains it hosts are specified by OVOS-TRANSFORM-1: Transformer Plugins, and the intent/entity registration it ingests by OVOS-INTENT-4: Intent & Entity Registration. See also the spec index. The specs are implementation-agnostic, so any conformant orchestrator can replace ovos-core and run the same skills.
ovos-core is the central intelligence of OpenVoiceOS. It acts as the orchestrator, managing the lifecycle of skills, coordinating the intent pipeline, and ensuring smooth communication between all parts of the system.
In plain terms: ovos-core is the "brain" service. It does not capture audio or speak. Those are separate services. Its job is to load your skills, take the transcribed text off the bus, decide which skill handles it, and hand off the reply. Everything it does flows over the messagebus.
Role in the System¶
Every user utterance, whether captured from a microphone or received via a remote client, flows through ovos-core. It handles:
-
Discovering and loading skill plugins.
-
Routing utterances through various NLP and intent-matching stages.
-
Managing sessions and their associated states.
-
Coordinating system-wide events via the messagebus.
Architecture¶
The diagram below shows the key components within ovos-core and how they interact with other services:
flowchart TD
BUS(["ovos-messagebus<br/>(WebSocket pub/sub)"])
BUS --- CORE["ovos-core (this service)"]
CORE --- SM["Skill Manager<br/>loads/unloads skill plugins"]
CORE --- IS["Intent Service<br/>routes utterances through the pipeline"]
IS --- UT[Utterance Transformers]
IS --- MT[Metadata Transformers]
IS --- IT[Intent Transformers]
IS --- PP["Pipeline plugins<br/>Adapt, Padatious, Converse, Fallback, …"]
CORE --- SI["Skill Installer<br/>runtime pip install/uninstall"]
CORE --- EVS["Event Scheduler<br/>timed bus events"]
BUS --- LISTENER["ovos-dinkum-listener<br/>STT / wake word → ovos.utterance.handle<br/>(legacy: recognizer_loop:utterance)"]
BUS --- AUDIO["ovos-audio<br/>TTS playback"]
BUS --- GUI["ovos-gui<br/>GUI layer"]
BUS --- PHAL["ovos-phal<br/>hardware/platform plugins"]
Diagram: the messagebus connects ovos-core, with its Skill Manager, Intent Service (transformers and pipeline plugins), Skill Installer, and Event Scheduler, to the sibling services ovos-dinkum-listener, ovos-audio, ovos-gui, and ovos-phal.
Key Components¶
For more detail on each subsystem:
- Skill Manager: finds, loads, and manages skill lifecycles, including connectivity gating (skills only load once requirements like internet access are met).
- Intent Service: the utterance handling flow, language disambiguation, and the query API.
- Intent Pipeline: the ordered sequence of pipeline plugins that decide what the user wants. Each exposes a single
match(utterances, lang, session) → Match | Nonecontract, and they run first-match-wins, with no cross-plugin confidence scoring (OVOS-PIPELINE-1 §4, §6.2). See Adapt, Padatious, and Common Query. - Transformer Plugins: modify utterances, metadata, or intent matches as they move through the pipeline.
- Skill Installer: installs and manages skills and Python packages dynamically at runtime.
Entry Points¶
If you are running OVOS manually, you can use these commands:
| Command | Module |
|---|---|
ovos-core |
ovos_core.__main__:main |
ovos-intent-service |
ovos_core.intent_services.service:launch_standalone |
ovos-skill-installer |
ovos_core.skill_installer:launch_standalone |
Subsystem Enable Flags¶
You can customize which parts of ovos-core start, but only from the CLI. These are
constructor arguments to main()/SkillManager, not mycroft.conf keys, so there is no
configuration-file equivalent:
| Flag | Subsystem |
|---|---|
enable_intent_service |
IntentService |
enable_installer |
SkillsStore |
enable_event_scheduler |
EventScheduler |
enable_skill_api |
SkillApi.connect_bus |
enable_file_watcher |
Skill settings file watcher |
CLI equivalents are the --disable-* forms: --disable-intent-service, --disable-installer, --disable-file-watcher, and so on.
Source code: OpenVoiceOS/ovos-core.
Read next: Skill Manager · Intent Service Related: MessageBus Service · Skill Installer · Formal Specifications