ActivePythonPluginAPIGeminiToolsVRChat

Project Gabriel Plugins

Drop-in plugin library for Gabriel Remastered

This repo is the plugin side of Gabriel. Each folder is a small module you can copy into the host install, and Gabriel picks it up on the next startup. It is built to extend the AI without touching the main core.

Plugins live under the host repo's plugins folder and run alongside Gabriel Remastered. The examples here include diary, mood, duo song, MIDI band, and a tiny reference plugin for learning the API.

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.

# Example install
Copy-Item -Recurse -Force ..\ProjectGabriel-Plugins\diary plugins\
# If the plugin lists requirements
.\bin\uv.exe pip install resemblyzer

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.