peon-ping-config
Update peon-ping configuration settings.
Config location
The config file is at ${CLAUDE_CONFIG_DIR:-$HOME/.claude}/hooks/peon-ping/config.json.
Available settings
- volume (number, 0.0–1.0): Sound volume
- active_pack (string): Current sound pack name (e.g.
"peon","sc_kerrigan","glados") - enabled (boolean): Master on/off switch
- pack_rotation (array of strings): List of packs to rotate through per session. Empty
[]usesactive_packonly. - pack_rotation_mode (string):
"random"(default) picks a random pack each session."round-robin"cycles through in order."agentskill"uses explicit per-session assignments from/peon-ping-use; invalid or missing packs fall back toactive_packand the stale assignment is removed. - categories (object): Toggle individual CESP sound categories:
session.start,task.acknowledge,task.complete,task.error,input.required,resource.limit,user.spam— each a boolean
- annoyed_threshold (number): How many rapid prompts trigger user.spam sounds
- annoyed_window_seconds (number): Time window for the annoyed threshold
- silent_window_seconds (number): Suppress task.complete sounds for tasks shorter than this many seconds
- session_ttl_days (number, default: 7): Expire stale per-session pack assignments older than N days (when using agentskill mode)
- desktop_notifications (boolean): Toggle notification popups independently from sounds (default:
true) - use_sound_effects_device (boolean): Route audio through macOS Sound Effects device (
true) or default output via afplay (false). Only affects macOS. Default:true
How to update
- Read the config file using the Read tool
- Edit the relevant field(s) using the Edit tool
- Confirm the change to the user
Common Configuration Examples
Disable desktop notification popups but keep sounds
User request: "Disable desktop notifications"
Action:
Set desktop_notifications: false in config
Result:
- ✅ Sounds continue playing (voice reminders)
- ❌ Desktop notification popups suppressed
- ✅ Mobile notifications unaffected (separate toggle)
Alternative CLI command:
bash1peon notifications off 2# or 3peon popups off
Adjust volume
User request: "Set volume to 30%"
Action:
Set volume: 0.3 in config
Enable round-robin pack rotation
User request: "Enable round-robin pack rotation with peon and glados"
Action: Set:
json1{ 2 "pack_rotation": ["peon", "glados"], 3 "pack_rotation_mode": "round-robin" 4}
Directory pack bindings
Permanently associate a sound pack with a working directory so every session in that directory uses the right pack automatically. Uses the path_rules config key (array of { "pattern": "<glob>", "pack": "<name>" } objects).
CLI commands
bash1# Bind a pack to the current directory 2peon packs bind <pack> 3# e.g. peon packs bind glados 4# → bound glados to /Users/dan/Frontend 5 6# Bind with a custom glob pattern (matches any dir with that name) 7peon packs bind <pack> --pattern "*/Frontend/*" 8 9# Auto-download a missing pack and bind it 10peon packs bind <pack> --install 11 12# Remove binding for the current directory 13peon packs unbind 14 15# Remove a specific pattern binding 16peon packs unbind --pattern "*/Frontend/*" 17 18# List all bindings (* marks rules matching current directory) 19peon packs bindings
Manual config
The path_rules array in config.json can also be edited directly:
json1{ 2 "path_rules": [ 3 { "pattern": "/Users/dan/Frontend/*", "pack": "glados" }, 4 { "pattern": "*/backend/*", "pack": "sc_kerrigan" } 5 ] 6}
Patterns use Python fnmatch glob syntax. First matching rule wins. Path rules override default_pack and pack_rotation but are overridden by session_override (agentskill) assignments.
List available packs
To show available packs, run:
bash1bash "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/hooks/peon-ping/peon.sh packs list