peon-ping README

The project's README from github.com/PeonPing/peon-ping. As one markdown file: README.md.

peon-ping

English | 한국어 | 中文 | 日本語

macOS WSL2 Linux Windows MSYS2 SSH License

Claude Code Amp Gemini CLI GitHub Copilot Codex Grok Build Cursor OpenCode Kilo CLI Kiro Kimi Code Windsurf Antigravity OpenClaw Rovo Dev CLI DeepAgents oh-my-pi Qwen Code iFlow CLI Trae Kiro IDE ECA

Game character voice lines + visual overlay notifications when your AI coding agent needs attention — or let the agent pick its own sound via MCP.

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 and bold on-screen banners from Warcraft, StarCraft, Portal, Zelda, and more — works with Claude Code, Amp, GitHub Copilot, Codex, Grok Build, Cursor, OpenCode, Kilo CLI, Kiro, Kimi Code, Windsurf, Google Antigravity, Rovo Dev CLI, DeepAgents, Qwen Code, iFlow CLI, Trae, Kiro IDE, ECA, and any MCP client.

See it in action → peonping.com



Install

brew install PeonPing/tap/peon-ping

Then run peon-ping-setup to register hooks and download sound packs. macOS and Linux.

Option 2: Installer script (macOS, Linux, WSL2)

curl -fsSL https://raw.githubusercontent.com/PeonPing/peon-ping/main/install.sh | bash

⚠️ WSL2 audio notes. peon-ping plays audio on the Windows side. On first run it probes your Windows host once (cached per Windows build) to pick the best playback path:

You can override the auto-detection with PEON_WSL_AUDIO_BACKEND=auto|mediaplayer|soundplayer:

Option 3: Installer for Windows

Invoke-WebRequest -Uri "https://raw.githubusercontent.com/PeonPing/peon-ping/main/install.ps1" -OutFile ".\install.ps1" -UseBasicParsing
powershell -ExecutionPolicy Bypass -File .\install.ps1

Installs a curated starter set of packs by default. Re-run to update while preserving config/state. Or pick your packs interactively at peonping.com and get a custom install command.

Windows installer parameters:

-Local does not install the global peon CLI shim or modify your user PATH. Hooks are registered in the project-level ./.claude/settings.json with absolute paths so they work from any working directory within the project.

Windows examples:

powershell -ExecutionPolicy Bypass -File .\install.ps1 -All
powershell -ExecutionPolicy Bypass -File .\install.ps1 -Packs peon,sc_kerrigan
powershell -ExecutionPolicy Bypass -File .\install.ps1 -Local
powershell -ExecutionPolicy Bypass -File .\install.ps1 -InitLocalConfig

If the initial download fails with a TLS error on older Windows PowerShell, run this once in the same session and retry:

[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12

Option 4: Clone and inspect first

git clone https://github.com/PeonPing/peon-ping.git
cd peon-ping
./install.sh

On Windows PowerShell:

git clone https://github.com/PeonPing/peon-ping.git
Set-Location peon-ping
.\install.ps1

Option 5: Nix (macOS, Linux)

Run directly from source without installing:

nix run github:PeonPing/peon-ping -- status
nix run github:PeonPing/peon-ping -- packs install peon

Or install to your profile:

nix profile install github:PeonPing/peon-ping

Development shell (bats, shellcheck, nodejs):

nix develop  # or use direnv

Home Manager module (declarative configuration)

For reproducible setups, use the Home Manager module:

# In your home.nix or flake.nix
{ inputs, pkgs, ... }:

let
  peonCursorAdapterPath = "${inputs.peon-ping.packages.${pkgs.system}.default}/share/peon-ping/adapters/cursor.sh";
in {
  imports = [ inputs.peon-ping.homeManagerModules.default ];

  programs.peon-ping = {
    enable = true;
    package = inputs.peon-ping.packages.${pkgs.system}.default;
    claudeCodeIntegration = true;

    settings = {
      default_pack = "glados";
      volume = 0.7;
      enabled = true;
      desktop_notifications = true;
      categories = {
        "session.start" = true;
        "task.complete" = true;
        "task.error" = true;
        "input.required" = true;
        "resource.limit" = true;
        "user.spam" = true;
      };
    };

    # Install packs from og-packs (simple string notation)
    # and custom sources (attrset with name + src)
    installPacks = [
      "peon"
      "glados"
      "sc_kerrigan"
      # Custom pack from GitHub (openpeon.com registry)
      {
        name = "mr_meeseeks";
        src = pkgs.fetchFromGitHub {
          owner = "kasperhendriks";
          repo = "openpeon-mrmeeseeks";
          rev = "main";  # or use a commit hash for reproducibility
          sha256 = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
        };
      }
    ];
    enableZshIntegration = true;
  };

  # Optional extra IDE hooks, like Cursor
  home.file.".cursor/hooks.json".text = builtins.toJSON {
    version = 1;
    hooks = {
      afterAgentResponse = [{ command = "bash ${peonCursorAdapterPath} afterAgentResponse"; }];
      stop               = [{ command = "bash ${peonCursorAdapterPath} stop"; }];
    };
  };
}

Sound pack installation: The installPacks option supports two formats:

For packs listed on openpeon.com, find the GitHub repository link and use pkgs.fetchFromGitHub:

{
  name = "pack_name";
  src = pkgs.fetchFromGitHub {
    owner = "github-owner";
    repo = "repo-name";
    rev = "main";  # or a commit hash/tag
    sha256 = "";   # Leave empty first, Nix will tell you the correct hash
  };
}

Claude Code hooks: set programs.peon-ping.claudeCodeIntegration = true; to install the Claude Code hook scripts under ~/.claude/hooks/peon-ping/ and merge the standard peon-ping hook entries into ~/.claude/settings.json.

Other IDE hooks: adapters for other IDEs are still opt-in so the module does not overwrite unrelated IDE settings. peon-ping provides adapter scripts such as cursor.sh in adapters/, and you can wire them like this:

${inputs.peon-ping.packages.${pkgs.system}.default}/share/peon-ping/adapters/$YOUR_IDE.sh EVENT_NAME

See the Cursor example above.

What you'll hear

Event CESP Category Examples
Session starts session.start "Ready to work!", "Something need doing?"
Task finishes task.complete "Work complete.", "Work, work."
Agent acknowledged task task.acknowledge "I can do that.", "Be happy to.", "Okie dokie." (disabled by default)
Permission needed input.required "Hmm?", "What you want?", "Yes?"
Tool or command error task.error "Me not that kind of orc!", "Ugh."
Rate or token limit hit resource.limit "Why not?"
Rapid prompts (3+ in 10s) user.spam "Whaaat?", "Me busy, leave me alone!", "No time for play."

Plus large overlay banners on every screen (macOS/WSL/MSYS2) and terminal tab titles (● project: done) — you'll know something happened even if you're in another app.

peon-ping implements the Coding Event Sound Pack Specification (CESP) — an open standard for coding event sounds that any agentic IDE can adopt.

Quick controls

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

Prefer it to happen automatically? Set focus_detect to have peon-ping honor macOS Focus / Do Not Disturb. Sounds and notifications go quiet whenever a Focus is on and resume when you turn it off. See also headphones_only and meeting_detect.

Other CLI commands:

Windows note: Windows currently supports the day-one controls (status, toggle, volume, core packs, notifications on/off, debug, logs, trainer). More advanced commands like setup, rotation, preview, and mobile are tracked as follow-up Windows parity work.

peon setup                # Interactive setup wizard (volume, categories, notifications)
peon pause                # Mute sounds
peon resume               # Unmute sounds
peon mute                 # Alias for 'pause'
peon unmute               # Alias for 'resume'
peon status               # Check if paused or active (concise)
peon status --verbose     # Show full details (notifications, headphones, IDEs, etc.)
peon volume               # Show current volume
peon volume 0.7           # Set volume (0.0–1.0)
peon rotation             # Show current rotation mode
peon rotation random      # Set rotation mode (random|round-robin|session_override)
peon packs list           # List installed sound packs
peon packs list --registry # Browse all available packs in the registry
peon packs community      # List all registry packs grouped by trust tier (Windows)
peon packs search <query> # Search registry packs by name (Windows)
peon packs install <p1,p2> # Install packs from the registry
peon packs install --all  # Install all packs from the registry
peon packs install-local <path> # Install a pack from a local directory
peon packs use <name>     # Switch to a specific pack (auto-installs from registry on Windows)
peon packs use --install <name>  # Switch to pack, installing from registry if needed
peon packs next           # Cycle to the next pack
peon packs remove <p1,p2> # Remove specific packs
peon packs bind <name>    # Bind a pack to the current directory
peon packs bind --pattern <path> # Bind a pack to a directory pattern, e.g. "*/services"
peon packs unbind         # Remove the current directory
peon packs bindings       # List all assigned bindings
peon packs ide-bind <ide> <name> # Bind a pack to an IDE id, e.g. codex
peon packs ide-unbind <ide> # Remove an IDE binding
peon packs ide-bindings   # List all IDE-based bindings
peon packs exclude add <path> # Silence sounds & notifications for a glob or directory
peon packs exclude remove <path> # Stop silencing the given path
peon packs exclude list   # List silenced paths
peon create               # Draft a new sound pack via your own Claude Code (interactive, or --name/--flavor/--vibe)
peon eval <name-or-path>  # Open the eval gate to audition/reroll/approve a draft (or re-draft an installed pack)
peon sounds list [pack]   # List sounds in a pack, marking disabled ones
peon sounds disable <category> <file> [--pack=<name>]  # Mute a single sound within a pack
peon sounds enable <category> <file> [--pack=<name>]   # Re-enable a previously disabled sound
peon notifications on     # Enable desktop notifications
peon notifications off    # Disable desktop notifications
peon notifications overlay   # Use large overlay banners (default)
peon notifications standard  # Use standard system notifications
peon notifications test      # Send a test notification
peon notifications position [pos]    # Get/set notification position (top-left, top-center, top-right, bottom-left, bottom-center, bottom-right)
peon notifications dismiss [N]       # Get/set auto-dismiss time in seconds (0 = persistent)
peon notifications label [text|reset] # Get/set project label override for notifications
peon notifications template [key] [fmt]  # Get/set/reset message templates (keys: stop, permission, error, idle, question)
peon preview              # Play all sounds from session.start
peon preview <category>   # Play all sounds from a specific category
peon preview --list       # List all categories in the active pack
peon mobile ntfy <topic>  # Set up phone notifications (free)
peon mobile off           # Disable phone notifications
peon mobile test          # Send a test notification
peon debug on             # Enable debug logging
peon debug off            # Disable debug logging
peon debug status         # Show debug state, log directory, file count, total size
peon logs                 # Show last 50 lines of today's log
peon logs --last N        # Show last N lines across all log files
peon logs --session ID    # Filter today's log by session ID
peon logs --session ID --all  # Search all log files for session ID
peon logs --clear         # Delete all log files (with confirmation)
peon relay --daemon       # Start audio relay (for SSH/devcontainer)
peon relay --stop         # Stop background relay

Available CESP categories for peon preview: session.start, task.acknowledge, task.complete, task.error, input.required, resource.limit, user.spam. (Extended categories session.end and task.progress are defined in the CESP spec and supported by pack manifests, but not currently triggered by built-in hook events.)

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.

Configuration

Quickstart — peon setup

The fastest way to configure peon-ping is the interactive wizard:

peon setup

It walks you through every common setting in one go — press Enter at any prompt to keep the current value:

  ╔══════════════════════════════════════╗
  ║       peon-ping  setup wizard        ║
  ╚══════════════════════════════════════╝

  ── Volume ──
  > Volume (0.0 - 1.0) (0.5):

  ── Sound categories ──
  >   Session start [on/off] (on):
  >   Task acknowledge [on/off] (off):
  >   Task complete [on/off] (on):
  >   Task error [on/off] (on):
  >   Input required (permissions, questions) [on/off] (on):
  >   Resource limit (context compaction) [on/off] (on):
  >   User spam (rapid prompts) [on/off] (on):

  ── Notifications ──
  > Desktop notifications [on/off] (on):

  Overlay theme:
    1) Neon (cyberpunk)
    2) Glass (translucent)
    3) Sakura (cherry blossom)
    4) Jarvis (iron man)
  > Theme [neon]:

  Notification position:
    1) Top center
    2) Top right
    ...
  > Position [top-center]:

  Auto-dismiss:
    1) Persistent (click to dismiss)
    2) 3 seconds
    3) 4 seconds
    ...
  > Dismiss time [4]:

  ✓ Configuration saved!

What the wizard covers:

When you're done, the wizard prints a summary and saves everything to ~/.claude/hooks/peon-ping/config.json. You can rerun peon setup anytime to tweak settings — it always shows your current values as defaults.

Tip: All individual peon subcommands (peon volume, peon notifications position top-right, etc.) still work if you prefer scripting or tweaking one setting at a time — see the Quick controls section.

Slash commands and manual config

peon-ping also installs slash commands in Claude Code:

You can also just ask Claude to change settings for you — e.g. "ena

peon-ping (PeonPing/peon-ping)

Searching Database…

这是什么?peon-ping 会在你的 AI 编程助手(Claude Code、Codex、Cursor 等)完成任务或需要你输入时,播放魔兽争霸 III 中农民(Peon)的语音,并弹出醒目的屏幕横幅,让你不必一直盯着终端,也不会分心走神。
这是命令行工具还是 IDE 扩展?它是一个基于 shell 的命令行工具,会把 hook 脚本安装到你的编程助手配置中,并在特定事件发生时播放声音或显示浮层;它还运行一个 MCP 服务器,让助手本身(或任何 MCP 客户端)可以触发通知声音。
它支持哪些编程助手和 IDE?支持 Claude Code、Amp、GitHub Copilot、Codex、Grok Build、Cursor、OpenCode、Kilo CLI、Kiro、Kimi Code、Windsurf、Google Antigravity、Rovo Dev CLI、DeepAgents、Qwen Code、iFlow CLI、Trae、Kiro IDE、ECA,以及任何通用 MCP 客户端。
Windows 版本的功能是否与 macOS 和 Linux 版本完全一致?目前还不完全一致。Windows 目前只支持首发即有的功能(状态查看、开关、音量、核心音效包、通知开关、调试、日志、训练器),而安装配置、轮换、预览和移动端通知仍在后续规划中,作为 Windows 功能对齐工作跟进。在 WSL2 下,音频还需要对 Windows 主机进行一次性探测,并且在较新的 Windows 版本上播放 MP3 可能需要 ffmpeg。
它也能在 Windows 上运行,还是只支持 macOS/Linux?它支持 macOS、Linux 和 Windows(包括 WSL2)。在 WSL2 下运行时,peon-ping 会先探测一次 Windows 主机,以选择最佳的音频播放方式。
它反复提到的 CESP 标准是什么?CESP(Coding Event Sound Pack Specification,编程事件音效包规范)是 peon-ping 为编程事件音效实现的一个开放标准,因此任何智能体 IDE 都可以采用同样的音效包格式。
开会时能把声音静音吗?可以。在 Claude Code 中运行 /peon-ping-toggle 斜杠命令,或在任意终端中运行 peon toggle;也可以启用 focusdetect,这样只要 macOS 的专注模式或勿扰模式开启,它就会自动静音。
有哪些音效包可以选?音效包以游戏为主题,比如魔兽争霸的农民、星际争霸的凯瑞甘、Portal 和塞尔达。安装程序可以下载精选的入门套装、按名称指定的音效包,或按语言筛选的音效包;你也可以自己制作自定义音效包。
如何设置音量、主题和通知位置?运行交互式的 peon 设置向导,它会依次引导你设置音量、启用哪些 CESP 类别、桌面通知开关、浮层主题(neon、glass、sakura、jarvis)、位置和自动关闭,并将所有设置保存到 ~/.claude/hooks/peon-ping/config.json。
Creator
PeonPing
Size
105.8 MB
Stars
5.1K
Age
8mo
Commits · 90 Days