Skill Cookbook¶
In a nutshell
The rest of this manual documents individual building blocks (settings, scheduling, playback, a GUI) one at a time. This page instead shows them combined, the way a real skill uses them: a complete, working file for each common job a skill needs to do. If you already know what schedule_event or @ocp_search does and just want to see it used correctly next to everything else it needs, start here. Newer skill authors are welcome too: the table below roughly progresses from simpler to more involved — the plain OVOSSkill recipes are approachable straight after Your First Skill, while the conversational-game, OCP, and MQTT recipes assume more (check the base-class column rather than relying strictly on row order).
Each recipe is a complete skill module (or a clearly-marked excerpt of one), with notes on the moving parts and links to the reference page that documents each API in full. None of these recipes invent new methods: every class, method signature, and bus event name was checked against the installed ovos-workshop, ovos-bus-client, and ovos-utils packages.
Scaffolding not shown
To keep each recipe focused, requirements.txt, manifest.yml, setup.py/pyproject.toml, and the __init__.py boilerplate needed to actually publish a skill are omitted here. See Anatomy of a Skill for those. Intent files (.intent, .voc) referenced below live under locale/<lang>/.
Recipe index¶
| # | Recipe | Base class | Teaches |
|---|---|---|---|
| 1 | Reminder with restart persistence | OVOSSkill |
schedule_event, settings restart survival |
| 2 | Configurable + reactive settings | OVOSSkill |
settings_change_callback, settingsmeta.yaml |
| 3 | Safe external API call | OVOSSkill |
runtime_requirements, file_system cache |
| 4 | Multi-turn conversation | ConversationalSkill |
get_response, converse, activate |
| 5 | Local media playlist | OVOSCommonPlaybackSkill |
@ocp_search, MediaType/PlaybackType |
| 6 | GUI + voice together | OVOSSkill |
self.gui, show_page |
| 7 | Fallback to an LLM solver | FallbackSkill |
register_fallback, QuestionSolver |
| 8 | Ambient bus-event behavior | OVOSSkill |
add_event, recognizer_loop:* |
| 9 | Converse-driven game loop | ConversationalGameSkill |
on_play_game, on_game_command, converse |
| 10 | Validated slot collection | OVOSSkill |
get_response(validator=..., on_fail=..., num_retries=...) |
| 11 | Control an external device (MQTT) | OVOSSkill |
paho.mqtt.client.Client, connect, publish, disconnect |
| 12 | A skill with a settings UI | OVOSSkill |
settingsmeta.yaml, ovos-skill-config-tool, settings_change_callback |
Learn from the official skills¶
Every pattern in this cookbook also runs in a real, installable skill. Read the source when you need to see a full manifest, locale files, and edge cases this cookbook leaves out.
| Pattern | Official skill |
|---|---|
ConversationalSkill + scheduling + settings persistence |
ovos-skill-alerts |
Full OCP (@ocp_search, @ocp_featured_media, Playlist/MediaEntry) |
ovos-skill-somafm (archived; source only, see MediaProvider plugins for the current approach) |
FallbackSkill + @common_query |
ovos-skill-wolfie, ovos-skill-ddg, ovos-skill-wordnet |
@common_query on a plain OVOSSkill |
ovos-skill-wikipedia |
Minimal converse |
ovos-skill-parrot |
Converse-driven game (ConversationalGameSkill) |
skill-moon-game (a VoiceGamez title, not currently public) |
GUI sequencing (show_text then show_image) |
ovos-skill-camera |
GUI ownership handoff (gui.release()) |
ovos-skill-wallpapers |
Validated get_response slot collection |
ovos-skill-mark1-ctrl |
| Terminal fallback (priority 100) | ovos-skill-fallback-unknown |
| Locale-correct number/date speech | ovos-skill-count, ovos-skill-date-time |
| Simplest complete skill | ovos-skill-hello-world |
Read next: Skill Structure · Intent Design Related: Your First Skill · Skill Design Best Practices · OCP Skills · Common Query Framework