Themed sound effects for Claude Code / Open Code — JARVIS, GLaDOS, Pikachu, and 9 more themes for your terminal
> /plugin marketplace add 6m1w/claude-sound-fx> /plugin install sound-fx@claude-sound-fx
What's inside
FAQ
sound-fx is a Claude Code plugin with hand-picked skills for productivity work, indexed on Flowy. Install it with the command on its page. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
Repo: 6m1w/claude-sound-fx
You kick off a task, switch to your browser, and forget about the terminal. Five minutes later you check back — it's been waiting for you the whole time.
Sound FX adds themed audio cues to Claude Code and Opencode so you never have to babysit the terminal again. Hear when a task finishes, when something breaks, or when the AI needs your input — even while you're in another window.
Pick a single theme or go Mix mode and let 12 themes collide randomly. JARVIS confirms your deploy. GLaDOS mocks your errors. Pikachu celebrates your tests passing. A WoW Peon reluctantly obeys your commands.
https://github.com/user-attachments/assets/c47537fc-1c18-4256-877d-0f22d4314bfd
Works on every major platform. No extra setup needed for local use.
| Platform | Extra setup? | How it works |
|---|---|---|
| macOS | No | Plays via afplay directly |
| Windows (WSL) | No | Auto-calls powershell.exe or ffplay.exe via WSL interop |
| Linux desktop | No | Auto-detects paplay / ffplay / aplay |
| Remote server (SSH) | Yes | Requires a relay script on your local machine — see below |
When running on a headless server with no audio hardware, sounds are forwarded to your local machine via a lightweight HTTP relay:
# ① Clone the repo on your LOCAL machine
git clone https://github.com/6m1w/claude-sound-fx.git
# ② Start the relay (runs in background, listens on port 19876)
python3 claude-sound-fx/scripts/relay.py &
# ③ SSH into the remote server with port forwarding
ssh -R 19876:127.0.0.1:19876 your-server
# ④ On the server, use Claude Code / Opencode as usual — sounds play locally
Relay commands:
python3 scripts/relay.py --status # Show config and loaded themes
python3 scripts/relay.py --kill # Stop the relay
/plugin marketplace add 6m1w/claude-sound-fx
/plugin install sound-fx@claude-sound-fx
Then configure your theme:
/sound-fx:setup
The setup wizard will walk you through theme selection and trigger mode.
npm install @6m1w/opencode-sound-fx
Add to opencode.json:
{
"plugin": ["@6m1w/opencode-sound-fx"]
}
Shares the same config file (~/.claude/sound-fx.local.json) and audio themes.
Run the same command anytime:
/sound-fx:setup
The wizard will ask you to Configure, Update, or Remove:
| Action | What it does |
|---|---|
| Configure | Set up or change your theme and trigger mode |
| Update | Re-apply current settings, refresh hooks, and play a test sound |
| Remove | Completely remove sound effects — deletes config file |
| Theme | Vibe | Origin |
|---|---|---|
| Jarvis | "At your service, sir." — Calm, competent, slightly British. | Iron Man |
| GLaDOS | "This was a triumph." — Passive-aggressive AI with dark humor. | Portal |
| Star Trek | Classic starship interface chirps, beeps, and red alerts. | Star Trek |
| Optimus Prime | "Autobots, roll out." — Heroic commander energy. | Transformers |
| Theme | Vibe | Origin |
|---|---|---|
| JoJo | DIO の「無駄無駄」と承太郎の「やれやれだぜ」— Dual voice chaos. | ジョジョの奇妙な冒険 |
| One Piece | ルフィの「よっしゃー!」— Pure rubber-band energy. | ワンピース |
| Pikachu | 「ピカチュウ!」— You know exactly how this sounds. | ポケットモンスター |
| Doraemon | 「ドラえもーん!」— The robotic cat from the future. | ドラえもん |
| Theme | Vibe | Origin |
|---|---|---|
| WoW Peon | "Ready to work!" — Reluctant, overworked, relatable. | World of Warcraft |
| StarCraft SCV | "SCV good to go, sir!" — Blue-collar space worker. | StarCraft |
| Steve Jobs | "One more thing..." — Inspirational keynote energy. | Apple |
| Mechanical Keyboard | clack clack clack — Pure ASMR satisfaction. | Your dreams |
Sound FX hooks into 7 lifecycle events:
SessionStart ──→ 🔊 "I am ready." (theme: start)
UserPromptSubmit ──→ 🔊 "Understood." (theme: submit)
Stop ──→ 🔊 "Task complete." (theme: complete)
PostToolUseFailure ──→ 🔊 "That was a mistake." (theme: error)
Notification ──→ 🔊 "Hmm?" (theme: notification)
PreCompact ──→ 🔊 "Memory failing..." (theme: precompact)
SessionEnd ──→ 🔊 "Until next time." (theme: session_end)
Note: Tool permission prompts (the approve/deny popup) are not a hookable lifecycle event in Claude Code, so this plugin cannot play sounds for them.
| Mode | What it does |
|---|---|
| Mix (default) | Randomly picks from all 12 themes per event. Maximum chaos. |
| Single Theme | Sticks to one theme. For the focused individual. |
| Level | Events |
|---|---|
| Full (default) | All 7 events fire sounds |
| Minimal | Only start, complete, error, notification |
Config is stored at ~/.claude/sound-fx.local.json. Re-run /sound-fx:setup anytime to change.
No code changes needed. Just add a directory under assets/:
assets/my-theme/
├── manifest.json
├── MyThemeStart1.mp3
├── MyThemeComplete1.mp3
└── ...
manifest.json format:
{
"name": "My Theme",
"description": "What it sounds like",
"start": ["MyThemeStart1.mp3"],
"submit": [],
"complete": ["MyThemeComplete1.mp3"],
"error": [],
"notification": [],
"precompact": [],
"session_end": []
}
Empty arrays [] are fine — that event just won't play a sound for your theme.
| Variable | Default | Description |
|---|---|---|
CLAUDE_SOUND_VOLUME | 60 | Volume level (0–100) |
CLAUDE_SOUND_PORT | 19876 | Relay server port |
MIT
.claude-plugin/
marketplace.json
plugin.json
.gitignore
assets/
doraemon/
DoraemonComplete1.mp3
DoraemonComplete2.mp3
DoraemonError1.mp3
DoraemonError2.mp3
DoraemonPrecompact1.mp3
DoraemonSessionEnd1.mp3
DoraemonSessionEnd2.mp3
DoraemonStart1.mp3
DoraemonStart2.mp3
DoraemonSubmit1.mp3
DoraemonSubmit2.mp3
DoraemonSubmit3.mp3
manifest.json
glados/
GladosMixedComplete1.mp3
GladosMixedComplete2.mp3
GladosMixedComplete3.mp3
GladosMixedError1.mp3
GladosMixedError2.mp3
GladosMixedPrecompact1.mp3
GladosMixedReady1.mp3
GladosMixedReady2.mp3
GladosMixedReady3.mp3
GladosMixedSessionEnd1.mp3
GladosMixedSessionEnd2.mp3
GladosMixedWhat1.mp3
GladosMixedWhat2.mp3
GladosMixedWhat3.mp3
GladosMixedYes1.mp3
GladosMixedYes2.mp3
GladosMixedYes3.mp3
GladosMixedYes4.mp3
manifest.json
jarvis/
JarvisMixedComplete1.mp3
JarvisMixedComplete2.mp3
JarvisMixedComplete3.mp3
JarvisMixedError1.mp3
JarvisMixedError2.mp3
JarvisMixedPrecompact1.mp3
JarvisMixedReady1.mp3
JarvisMixedReady2.mp3
JarvisMixedReady3.mp3
JarvisMixedSessionEnd1.mp3
JarvisMixedSessionEnd2.mp3
JarvisMixedWhat1.mp3
JarvisMixedWhat2.mp3
JarvisMixedWhat3.mp3
JarvisMixedYes1.mp3
JarvisMixedYes2.mp3
JarvisMixedYes3.mp3
JarvisMixedYes4.mp3
manifest.json
jobs/
JobsMixedComplete1.mp3
JobsMixedComplete2.mp3
JobsMixedComplete3.mp3
JobsMixedError1.mp3
JobsMixedError2.mp3
JobsMixedPrecompact1.mp3
JobsMixedReady1.mp3
JobsMixedReady2.mp3
JobsMixedReady3.mp3
JobsMixedSessionEnd1.mp3
JobsMixedSessionEnd2.mp3
JobsMixedWhat1.mp3
JobsMixedWhat2.mp3
JobsMixedWhat3.mp3
JobsMixedYes1.mp3
JobsMixedYes2.mp3
JobsMixedYes3.mp3
JobsMixedYes4.mp3
manifest.json
jojo/
JojoDioComplete1.mp3
JojoDioError1.mp3
JojoDioPrecompact1.mp3
JojoDioReady1.mp3
JojoDioSessionEnd1.mp3
JojoDioWhat1.mp3
JojoDioYes1.mp3
JojoDioYes2.mp3
JojoJotaroComplete1.mp3
JojoJotaroError1.mp3
JojoJotaroReady1.mp3
JojoJotaroSessionEnd1.mp3
JojoJotaroWhat1.mp3
JojoJotaroYes1.mp3
JojoJotaroYes2.mp3
manifest.json
keyboard/
KeyboardComplete1.mp3
KeyboardComplete2.mp3
KeyboardError1.mp3
KeyboardError2.mp3
KeyboardPrecompact1.mp3
KeyboardSessionEnd1.mp3
KeyboardStart1.mp3
KeyboardStart2.mp3
KeyboardSubmit1.mp3
KeyboardSubmit2.mp3
manifest.json
onepiece/
manifest.json
OnepieceLuffyComplete1.mp3
OnepieceLuffyComplete2.mp3
OnepieceLuffyError1.mp3
OnepieceLuffyError2.mp3
OnepieceLuffyPrecompact1.mp3
OnepieceLuffyReady1.mp3
OnepieceLuffyReady2.mp3
OnepieceLuffySessionEnd1.mp3
OnepieceLuffyWhat1.mp3
OnepieceLuffyWhat2.mp3
OnepieceLuffyYes1.mp3
OnepieceLuffyYes2.mp3
OnepieceLuffyYes3.mp3
optimus/
manifest.json
OptimusMixedComplete1.mp3
OptimusMixedComplete2.mp3
OptimusMixedComplete3.mp3
OptimusMixedError1.mp3
OptimusMixedError2.mp3
OptimusMixedPrecompact1.mp3
OptimusMixedReady1.mp3
OptimusMixedReady2.mp3
OptimusMixedReady3.mp3
OptimusMixedSessionEnd1.mp3
OptimusMixedSessionEnd2.mp3
OptimusMixedWhat1.mp3
OptimusMixedWhat2.mp3
OptimusMixedWhat3.mp3
OptimusMixedYes1.mp3
OptimusMixedYes2.mp3
OptimusMixedYes3.mp3
OptimusMixedYes4.mp3
peon/
manifest.json
PeonBuildingComplete1.mp3
PeonPissed1.mp3
PeonReady1.mp3
PeonWhat1.mp3
PeonWhat3.mp3
PeonYes1.mp3
PeonYes2.mp3
PeonYes3.mp3
pikachu/
manifest.json
PikachuComplete1.mp3
PikachuError1.mp3
PikachuPrecompact1.mp3
PikachuReady1.mp3
PikachuReady2.mp3
PikachuSessionEnd1.mp3
PikachuWhat1.mp3
PikachuWhat2.mp3
PikachuYes1.mp3
PikachuYes2.mp3
scv/
manifest.json
SCVComplete1.mp3
SCVErr1.mp3
SCVErr2.mp3
SCVError1.mp3
SCVError2.mp3
SCVPissed1.mp3
SCVPissed2.mp3
SCVPissed3.mp3
SCVReady1.mp3
SCVWhat1.mp3
SCVWhat2.mp3
SCVWhat3.mp3
SCVWhat4.mp3
SCVYes1.mp3
SCVYes2.mp3
SCVYes3.mp3
trek/
manifest.json
TrekAlertUser.mp3
TrekBeep1.mp3
TrekBeep5.mp3
TrekBeep55.mp3
TrekChirp.mp3
TrekDataTransmitted.mp3
TrekHail.mp3
TrekProgramComplete.mp3
TrekRedAlert.mp3
commands/
setup.md
docs/
header.svg
hooks/
hook.sh
hooks.json
opencode/
package.json
README.md
src/
index.ts
tsconfig.json
README.ja.md
README.md
README.zh-CN.md
scripts/
normalize_audio.sh
relay.py© 2026 Flowy · Free and open source
Built for Claude Code · Not affiliated with Anthropic