What a plugin can do
The plugin API is meant to keep Gabriel modular. A plugin can register Gemini function-calling tools, add custom TTS or STT providers, write to the VRChat chatbox, inject extra prompt text, hook startup and shutdown events, and keep its own state under data/plugins/<name>/.
That is why the repo is useful for both quick experiments and real feature additions. You can build one small extension at a time instead of pushing everything into the host AI.
Examples in this repo
diary
A background sub-agent writes first-person diary entries and exposes diary tools back to Gabriel.
mood
Adds persistent emotions and intensity so the AI can keep a stable mood across sessions.
duo_song
Lets two Gabriel instances sing a LAN duet with synced audio and simple handshakes.
midi_band
Turns multiple Gabriel instances into a live band with MIDI track assignment and synchronized playback.
How it hooks into Gabriel
The usual flow is simple. Copy the plugin folder into the host repo's plugins directory, make sure its plugin.yml says enabled: true, install any extra Python deps with the bundled uv tool, and restart Gabriel.
Notes worth knowing
Every plugin tool can be toggled from config/tools.yml if you want to hide one without disabling the whole module.
Some plugins need access to the host Gemini key, so trust mode is available with plugins.trusted: true for those cases.