Just as was foretold: an actual differentiator is creativity, not coding ability.
Now I'm still waiting for someone to succeed at a clean-room recreation of Majel Barrett's voice, so we can finally have computers sound like they always should have.
We could've been there a decade ago, but the high-quality audio samples, made officially and specifically with possibility of this use in mind, got trapped somewhere between the estate, producers, and a commercial interest that called dibs, and then procrastinated on the project instead.
---
Also, I'd love to use these sound effects, but I am an rts player and love aoe and wc franchise, these noises just trigger me to want to play too much.
---
Also, also, if you haven't seen AgentCraft, you are missing out -> https://x.com/idosal1/status/2021661861163544818 (worked in one npx command for me using my claude, a+ for creativity and smoothness)
Please kill me.
A plea to the various lab engineering teams: please create a json format or whatever that lets me configure this with voices locally. I am a happy user as of late of the Codex app by Open AI. It would be great if I could just give it some JSON somehow and it just works. I suppose skills can do this and I will try that later on. But I think this stuff matters, and it would be nice to have it built in and encouraged.
I feel like anyone preferring Warcraft III is in their 30s. Grew up with the Warcraft II Battle Chest and it was a vibe.
* download Warcraft II voices
* tell claude to wire it all up
The age of the WALL-E blobs is upon us!
Game character voice lines when your AI coding agent needs attention.
AI coding agents don't notify you when they finish or need permission. You tab away, lose focus, and waste 15 minutes getting back into flow. peon-ping fixes this with voice lines from Warcraft, StarCraft, Portal, Zelda, and more — works with Claude Code, Codex, Cursor, and OpenCode.
See it in action → peonping.com
brew install PeonPing/tap/peon-ping
Then run peon-ping-setup to register hooks and download sound packs. macOS and Linux.
Or install via curl (macOS, Linux, WSL2):
curl -fsSL https://raw.githubusercontent.com/PeonPing/peon-ping/main/install.sh | bash
One command. Takes 10 seconds. Re-run to update (sounds and config preserved). Installs 10 curated English packs by default.
Install all packs (every language and franchise):
curl -fsSL https://raw.githubusercontent.com/PeonPing/peon-ping/main/install.sh | bash -s -- --all
Project-local install — installs into .claude/ in the current project instead of ~/.claude/:
curl -fsSL https://raw.githubusercontent.com/PeonPing/peon-ping/main/install.sh | bash -s -- --local
Local installs don't add the peon CLI alias or shell completions — use /peon-ping-toggle inside Claude Code instead.
| Event | CESP Category | Examples |
|---|---|---|
| Session starts | session.start |
"Ready to work?", "Yes?", "What you want?" |
| Task finishes | task.complete |
"Work, work.", "I can do that.", "Okie dokie." |
| Permission needed | input.required |
"Something need doing?", "Hmm?", "What you want?" |
| Rapid prompts (3+ in 10s) | user.spam |
"Me busy, leave me alone!" |
Plus Terminal tab titles (● project: done) and desktop notifications when your terminal isn't focused.
peon-ping implements the Coding Event Sound Pack Specification (CESP) — an open standard for coding event sounds that any agentic IDE can adopt.
Need to mute sounds and notifications during a meeting or pairing session? Two options:
| Method | Command | When |
|---|---|---|
| Slash command | /peon-ping-toggle |
While working in Claude Code |
| CLI | peon toggle |
From any terminal tab |
Other CLI commands:
peon pause # Mute sounds
peon resume # Unmute sounds
peon status # Check if paused or active
peon packs list # List installed sound packs
peon packs use <name> # Switch to a specific pack
peon packs next # Cycle to the next pack
peon packs remove <p1,p2> # Remove specific packs
peon notifications on # Enable desktop notifications
peon notifications off # Disable desktop notifications
Tab completion is supported — type peon packs use <TAB> to see available pack names.
Pausing mutes sounds and desktop notifications instantly. Persists across sessions until you resume. Tab titles remain active when paused.
peon-ping installs a /peon-ping-toggle slash command in Claude Code. You can also just ask Claude to change settings for you — e.g. "enable round-robin pack rotation", "set volume to 0.3", or "add glados to my pack rotation". No need to edit config files manually.
The config lives at $CLAUDE_CONFIG_DIR/hooks/peon-ping/config.json (default: ~/.claude/hooks/peon-ping/config.json):
{
"volume": 0.5,
"categories": {
"session.start": true,
"task.acknowledge": true,
"task.complete": true,
"task.error": true,
"input.required": true,
"resource.limit": true,
"user.spam": true
}
}
true/false — toggle desktop notification popups independently from sounds (default: true)"session.start": false to disable greeting sounds)user.spam easter eggtask.complete sounds and notifications for tasks shorter than N seconds. (e.g. 10 to only hear sounds for tasks that take longer than 10 seconds)["peon", "sc_kerrigan", "peasant"]). Each session randomly gets one pack from the list and keeps it for the whole session. Leave empty [] to use active_pack instead.peon-ping works with any agentic IDE that supports hooks. Adapters translate IDE-specific events to the CESP standard.
| IDE | Status | Setup |
|---|---|---|
| Claude Code | Built-in | curl | bash install handles everything |
| OpenAI Codex | Adapter | Add command = "bash ~/.claude/hooks/peon-ping/adapters/codex.sh" to ~/.codex/config.toml under [notify] |
| Cursor | Adapter | Add hook entries to ~/.cursor/hooks.json pointing to adapters/cursor.sh |
| OpenCode | Adapter | curl -fsSL https://raw.githubusercontent.com/PeonPing/peon-ping/main/adapters/opencode.sh | bash |
40+ packs across Warcraft, StarCraft, Red Alert, Portal, Zelda, Dota 2, Helldivers 2, Elder Scrolls, and more. The default install includes 10 curated English packs:
| Pack | Character | Sounds |
|---|---|---|
peon (default) |
Orc Peon (Warcraft III) | "Ready to work?", "Work, work.", "Okie dokie." |
peasant |
Human Peasant (Warcraft III) | "Yes, milord?", "Job's done!", "Ready, sir." |
glados |
GLaDOS (Portal) | "Oh, it's you.", "You monster.", "Your entire team is dead." |
sc_kerrigan |
Sarah Kerrigan (StarCraft) | "I gotcha", "What now?", "Easily amused, huh?" |
sc_battlecruiser |
Battlecruiser (StarCraft) | "Battlecruiser operational", "Make it happen", "Engage" |
ra2_kirov |
Kirov Airship (Red Alert 2) | "Kirov reporting", "Bombardiers to your stations" |
dota2_axe |
Axe (Dota 2) | "Axe is ready!", "Axe-actly!", "Come and get it!" |
duke_nukem |
Duke Nukem | "Hail to the king!", "Groovy.", "Balls of steel." |
tf2_engineer |
Engineer (Team Fortress 2) | "Sentry going up.", "Nice work!", "Cowboy up!" |
hd2_helldiver |
Helldiver (Helldivers 2) | "For democracy!", "How 'bout a nice cup of Liber-tea?" |
Browse all packs with audio previews → openpeon.com/packs
Install all with --all, or switch packs anytime:
peon packs use glados # switch to a specific pack
peon packs next # cycle to the next pack
peon packs list # list all installed packs
Want to add your own pack? See the full guide at openpeon.com/create or CONTRIBUTING.md.
bash "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/hooks/peon-ping/uninstall.sh # global
bash .claude/hooks/peon-ping/uninstall.sh # project-local
afplay and AppleScript), WSL2 (uses PowerShell MediaPlayer and WinForms), or Linux (uses pw-play/paplay/ffplay/mpv/aplay and notify-send)peon.sh is a Claude Code hook registered for SessionStart, UserPromptSubmit, Stop, Notification, and PermissionRequest events. On each event it maps to a CESP sound category, picks a random voice line (avoiding repeats), plays it via afplay (macOS), PowerShell MediaPlayer (WSL2), or paplay/ffplay/mpv/aplay (Linux), and updates your Terminal tab title.
Sound packs are downloaded from the OpenPeon registry at install time. The official packs are hosted in PeonPing/og-packs. Sound files are property of their respective publishers (Blizzard, Valve, EA, etc.) and are distributed under fair use for personal notification purposes.
It also lets you manage Claude notifications more gracefully than what you get out of the box with CC. Been lazy about putting the finishing touches on it so this is a good kick in the ass to get that done!
>300 line bash script to hand hold a person who I would assume is capable of using the computer they are downloading a program in source form. 'git clone' followed by 'make install' or go home.
Usage: `~ my-bash-command; notify`
`.wav` snippet: https://gitlab.com/NeroVanbiervliet/linux-config/-/blob/mast...
It was trickier than I expected, to get it working well: FFMpeg pipe streaming for low-latency playback, a three-hook injection strategy because the agent forgets instructions mid-turn, mkdir-based locks to queue concurrent voice updates from multiple sessions, and /tmp sentinel files to manage async playback state and prevent infinite loops.
[1] Pocket-TTS: https://github.com/kyutai-labs/pocket-tts
[2] Claude-code voice plugin: https://pchalasani.github.io/claude-code-tools/plugins-detai...
on-notify=exec play /usr/share/sounds/freedesktop/stereo/complete.oga
or the equivalent to your config.For when user attention is needed, I play a few seconds of Rick Astley's "Never Gonna Give You Up". =D
I never tried playing the WCIII reboot after hearing some pretty bad reviews.
I built something in the same space but took a different approach — less fun, more engineering: Vox (https://github.com/rtk-ai/vox) — local TTS in pure Rust, no API key, no cloud dependency.
First game that I knew of which had such fun details like that.
Once the novelty wore off, I found it more useful to hear per-project, event-specific messages. On macOS, that looks like this:
{
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "osascript -e 'say \"ProjectX work complete\" volume 0.25' > /dev/null 2>&1 &"
}
]
}
],
"Notification": [
{
"matcher": "permission_prompt",
"hooks": [
{
"type": "command",
"command": "osascript -e 'say \"ProjectX needs help\" volume 0.5' > /dev/null 2>&1 &"
}
]
}
]
}This is as much of a copyright violation as the LLM training process.
Did anyone vote an exemption from copyright if it's for "AI" use?
I really leaned into coding with agents last year, and after some time, it became evident to me that the vision now being pushed -- the "software factory" -- is where things will eventually end up. Building off that understanding, I began thinking about what interfaces would be necessary and useful for managing code and technology at that scale.
I keep coming back to the idea of a video game-like interface for managing all these agents and fleets of agents. Many of the information affordances in video games are reusable in other scenarios. So even though on the surface this project is 'just' a silly and fun enhancement, I think it’s actually a pretty serious contribution as well.
I guess that I also don't want to pollute old good memories by associating them with work/Claude
On macOS, in iTerm2, Claude will trigger notifications. I was impressed!
(and also annoyed: I don't like notifications. Then again, I don't have Claude do long things where I can go get a coffee)
Then it's just a simple Claude code hook to play whatever sound: https://github.com/CGamesPlay/dotfiles/blob/0fd07aea4863b581...
Not necessarily. This could be considered a quotation of a trivial part of a larger work, making the use legal in the US under its fair use doctrine.
Additionally, I'm not aware of any obvious way that this use could harm the commercial market for Warcraft 3 (and the other games whose voice packs are included in this repository). The use here does not compete with the original, and if anything it might drive sales on the margin through nostalgic reminders.
One good thing about genai is that it will force us to rethink the mess that is copyright
If given the option to vote for this, yes I would absolutely vote for an exemption.
But also, this is clearly "Fair Use" even under our current draconian copyright laws.
Hmm, why not?
I don't quite get that argument. It's the same as the old download installer from random website, double click to run that people have been doing for decades. It only skips the download step. And it's arguably better since at least you can review the contents. When building a Go program it will also happily download stuff from github but I've seen way less complaints about that. And to be fair it's also been an infection vector, from people installing things from shady places (or reputable places but with ill-intent like installing unwanted browser toolbars, DRM rootkits ...), but it's nothing new. Same advice applies, know what you're doing, use reputable sources.
What's a better alternative ?
But it's kinda funny to me that you just said "I was going to run this code on my system, until I saw some other code in the same repo, and now I refuse to run it" :D It's all the same repo, you're willing to try part of the code, but not another part of it. Completely arbitrary.
It is not perfect, but quite sufficient for simple system messages.
"Job Done!"
"Work Complete!"
"Are you still touching me?"
The HD remaster is the only official means on Battle.net, but it sucks. I'd recommend just torrenting the original and running in a VM. Plenty of active private servers still out there.
One day you run it, it's fine. The next day you run the same command on your machine, it installs malware. No way to tell without inspecting the script every time.
If you download an installer and it's fine, then you can run it again and it's still fine.
> What's a better alternative ?
I do not think the program really needs and installer but if one must then why not just have it under source control that way you get the benefits of git handling all the download bits and the install script being completely offline and just using cp or install commands.
you could tell the user to do this with a pithy command like `git --depth=1 clone $GITSITE/$REPO && $REPO/installer.sh && rm -R $REPO`