ovos-workshop Documentation

September 3, 2026 ยท View on GitHub

ovos-workshop provides all base classes, decorators, and helpers needed to write skills and applications for OpenVoiceOS.

Package: ovos-workshop Source: ovos_workshop/ Entry point group: opm.skill

For the full skill-authoring guide (class hierarchy, quick-start, bus basics, settings, resources, decorators, plugin discovery), see the OVOS Technical Manual: Workshop Overview. This page and the files below cover repo-local detail (exact source line citations, files without a manual counterpart) that the manual omits by design.


Quick-Start: Minimal Skill in 20 Lines

from ovos_workshop.skills.ovos import OVOSSkill
from ovos_workshop.decorators import intent_handler


class HelloWorldSkill(OVOSSkill):
    """A minimal OVOS skill."""

    @intent_handler("hello.intent")
    def handle_hello(self, message):
        """Respond to a greeting."""
        self.speak_dialog("hello.response")


def create_skill():
    return HelloWorldSkill()

pyproject.toml entry point:

[project.entry-points."opm.skill"]
hello-world-skill = "hello_world_skill:HelloWorldSkill"

DocumentKey ClassesDescription
skill-classes.mdOVOSSkill, FallbackSkill, OVOSCommonPlaybackSkill, ActiveSkill, OVOSGameSkill, ConversationalGameSkill, UniversalSkill, UniversalFallback, IdleDisplaySkillClass reference and when to use each
ovos-skill.mdOVOSSkillBase class: intent registration, settings, resources, GUI, lifecycle
decorators.mdintent_handler, killable_intent, ocp_search, layer_intent, skill_api_methodAll intent and utility decorators with source citations
app.mdOVOSAbstractApplicationSkill-like app that runs without the intent service
game-skill.mdOVOSGameSkill, ConversationalGameSkillOCP-integrated game loop with converse and auto-save
auto-translatable.mdUniversalSkill, UniversalFallbackAuto-translate input/output for any language
skill-interaction.mdOVOSSkill.ask_yesno, OVOSSkill.ask_selectionPluggable yes/no and option-selection engines
skill-api.mdSkillApi, skill_api_methodInter-skill RPC over the MessageBus
filesystem.mdFileSystemAccessSandboxed, XDG-compliant file storage for skills
resource-files.mdSkillResourcesLocale, dialog, vocab, regex, and other resource files
settings.mdSkillSettingsManagerSkill settings: persistence, change callbacks, file watching
scheduled-events.mdOVOSSkill.schedule_event, OVOSSkill.schedule_repeating_eventCalling a handler later, once or repeatedly
intent-layers.mdIntentLayersEnable/disable intent sets at runtime
skill-launcher.mdSkillLoader, PluginSkillLoaderLoading skills as plugins or in standalone mode
permissions.mdConverseMode, FallbackModeConverse and fallback permission modes

Plugin Discovery

Skills are discovered via Python entry points in pyproject.toml:

[project.entry-points."opm.skill"]
my-skill-id = "my_skill.skill:MySkill"

ovos-plugin-manager scans the opm.skill group at runtime and loads matching classes. It still accepts the older ovos.plugin.skill group name as a deprecated alias.

See the manual's Workshop Overview for the MessageBus, settings, resources, intents, and decorators concepts shared by every skill.