opencode-sfxOpenCode plugin that plays Warcraft-style sound effects for session events
1
33
13 in 7 days
22.5
Multi-signal model
5 months ago
2026-02-27
Install and configure
opencode.jsonWrites to this project's opencode.json — applies to this repository only.
opencode.json
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["opencode-sfx@0.3.0"]
}Writes to ~/.config/opencode/opencode.json — applies to every project.
~/.config/opencode/opencode.json
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["opencode-sfx@0.3.0"]
}If you want to modify the plugin locally, install it into the project and reference the local path.
shell
pnpm add -D opencode-sfxopencode loads npm dependencies through its embedded runtime on startup and caches them locally — no manual global install needed.
OpenCode plugin that plays your own sound effects for key agent moments.
Installation
Add it to your OpenCode config, OpenCode will download/manage it for you:
{
"plugin": ["opencode-sfx"]
}
Event Folders
Default sound root:
~/.config/opencode/opencode-sfx/sounds
On startup, the plugin checks whether this root and each event folder already exists before creating anything new. It never deletes existing files.
If soundRoot is missing on first bootstrap, the plugin copies the entire bundled assets/ tree into soundRoot so event folders are prefilled out of the box. It also seeds bundled assets when all configured event folders are empty.
Put one or more clips directly in each event folder (non-recursive):
| OpenCode event | Folder name |
|---|---|
| plugin load | sessionStart/ |
session.created |
sessionCreated/ |
tui.command.execute (prompt.submit) |
promptSubmit/ |
permission.updated (and permission.ask) |
permission/ |
session.error |
notification/ |
session.status (status.type === "idle") |
stop/ |
Supported file types:
.ogg.wav.mp3
When an event fires, one clip is chosen at random from that folder.
Configuration
Optional config file:
~/.config/opencode/opencode-sfx.json
Minimal example:
{
"enabled": true
}
Full example:
{
"enabled": true,
"soundRoot": "opencode-sfx/sounds",
"playerCommand": "ffplay",
"playerArgs": ["-loglevel", "quiet", "-nodisp", "-autoexit"],
"events": {
"sessionStart": true,
"sessionCreated": true,
"promptSubmit": true,
"notification": true,
"permission": true,
"stop": true
},
"eventFolders": {
"sessionStart": "sessionStart",
"sessionCreated": "sessionCreated",
"promptSubmit": "promptSubmit",
"notification": "notification",
"permission": "permission",
"stop": "stop"
}
}
Config notes:
- If
playerCommandis omitted, the plugin auto-detects a player:- macOS:
afplay, thenffplay - Linux:
paplay, thenaplay, thenffplay - Windows:
ffplay
- macOS:
playerCommandshould be an executable name/path, andplayerArgsshould list each argument separately.- Relative
soundRootpaths are resolved from~/.config/opencode/. - Relative
eventFolderspaths are resolved fromsoundRoot. - Event folder scanning is non-recursive.
Asset Source
Sample Warcraft clips in assets/ come from:
See assets/README.md for exact file list.
License
Plugin code is MIT (LICENSE).
Game audio remains property of its original rights holders.